LAS是Listen(Encoder),Attend,和Spell(Decoder)的简称

第一个步骤Listen(Encoder)

listen的作用是输入一段语音信号,输出一段向量,去掉语音中的杂序,只保留和语音有关的部分。

上图中acoustic features表示的是每一帧的声音信号。

listen进行encoder

  • RNN

  • CNN

    将fliter沿着时间的方向扫过每一个acoustic features ,每一个fliter会吃一个范围的acoustic features进去得到一个数值,不同的fliter会产生不同的数值,最后生成的是一个向量。
  • self-attention layers

listen的时候进行down sampling(降采样)

一段声音信号表示成acoustic features的时候太长,1秒钟的声音信号有100个向量,且相邻的向量之间包含的信息量也相差不大,所以在做语音识别的过程中,为了保持训练过程更有效率,就产生了down sampling.

  • 减少RNN的运算量



    pyramid RNN

    Pooling over time

    上图中每一层都是RNN。左边是将相邻两个加起来送到下一层,右边是在相邻两个之间选择一个送到下一层。
  • 减少CNN和self-attention的运算量

    在做attention时,每一个时间点的feature都会去attend 整个输入序列中所有的feature,在做翻译时可能表现很好,但在语音识别中,一秒钟就有100个acoustic features,太长了,无法很好的做attention。因此truncated self-attention限制attention的长度,只看未来和过去一段时间的输入序列。

第二个步骤Attention

两种常用的attention方式

  • dot-product attention

  • additive attention

attntion 的过程

上图中$z_0$和encode的每一个$h$进行一个计算,$z_0$和$h1$计算得到$\alpha_01$ , 和$h2$计算得到$\alpha_02$ , ....。Encoder会输入一串acoustic features ,每一个acoustic features都对应一个输出,每一个输出都会得到一个$\alpha$,然后将得到的$\alpha$经过一个softmax层,得到$\hat{\alpha}$,最终$z_0$的attention的值$c0$为最后概率和输出的乘积形式。$c0$作为下一个decode的输入,在文献中$c^0$一般写成context vector。

第三个步骤Spell

  • 初始的$z_0$做attention后spell

    上图中输出distribute over all tokens就是对词典中每一个词汇生成一个概率,所有概率之和为1。具体输出什么词汇就看那个概率最大,概率最大的即为当前的输出。

  • 再拿hidden state 中的$z_1$继续去做attention



    算出新的$\alpha$的值,经过softmax后$\hat{\alpha}$值,最后用$\hat{\alpha}$乘以$h$得到$c^1$作为下一次decode的输入。



    上一次spell的输出(此处是c),上一个hidden state $z1$,和decode的输入$c1$共同决定了hidden state 的值$z2$,然后将$z2$做一个attention,以此类推,...其示意图如下:

训练

teacher forcing



在训练过程中可能会存在一个问题,就是之后的输出和之前的输出有关,所以如果前面的输入错了的话,后面无论怎么训练都无法达到好的训练效果,因此在训练时加一个teacher forcing ,直接将上一时刻正确的结果作为下一次的输入,避免前面一错全错。

attention的一些知识

  • attention的不同用法

    左边和右边的差异就是,attention得到的结果是在下一个time_step使用还是在这一个time_step使用。到底哪一个好也不好判断,但第一次用此方法做论文的是两种方法都使用了。attention得到的结果在当前步和下一步都使用一次。
  • location-aware attention

    在attention的过程中,按照我们的想法,应该是从左到右,注意力慢慢转移,但是在实际运算中,注意力可能是随便乱跳的,这就和我们的初衷相违背。

    现在在attention进行计算的时候,$z0$在和$h2$进行attention计算时,也要考虑与$h^2$相邻的区域的取值。

补充

1.Beam Search

原始的输出是寻找当前步骤的最大值(类似于贪心算法),很容易陷入局部最优,刚开始很好,但可能最后的一条路径并不是概率最大的。假设每次只有两种情况A,B供选择。beam search不是只保留当前的最大值,而是保留当前最优的k个值,k的具体取值自己调,k越大,找出最大路径的可能性越大,但是所需的算力也越大,k越小,所需的算力小,但是找出最大路径的可能性也越小,当k=1时,beam search 退化为贪心算法。

LAS的局限性

  • 1.LAS包含attention,所以需要encoder将所有的语音听完,这就导致无法听一部分就输出一部分,不能online。

语音识别2 -- Listen,Attend,and Spell (LAS)的更多相关文章

  1. Paper | LISTEN, ATTEND AND SPELL: A NEURAL NETWORK FOR LARGE VOCABULARY CONVERSATIONAL SPEECH RECOGNITION

    目录 1. 相关工作 2. 方法细节 2.1 收听器 2.2 注意力和拼写 本文提出了一个基于神经网络的语音识别系统List, Attend and Spell(LAS),能够将语音直接转录为文字. ...

  2. 深度学习与人类语言处理-语音识别(part1)

    语音识别 语音识别该何去何从? 1969年,J.R. PIERCE:"语音识别就像把水变成汽油.从大海中淘金.治疗癌症.人类登陆月球" 当然,这是50年前的想法,那么语音识别该如何 ...

  3. LAS(Listener、Attender、Speller)端到端构架

    基于注意力(Attention)机制的端到端系统,又被称为LAS端到端构架. [6] W. Chan, N. Jaitly, Q. Le, O. Vinyals. Listen, Attend and ...

  4. 什么是end-to-end神经网络?

    https://www.zhihu.com/question/51435499 来源:知乎著作权归作者所有. 国立台湾大学的李宏毅教授在其机器学习课程中有讲到深度神经网络的 End-to-end Le ...

  5. Attention and Augmented Recurrent Neural Networks

    Attention and Augmented Recurrent Neural Networks CHRIS OLAHGoogle Brain SHAN CARTERGoogle Brain Sep ...

  6. 深度学习与人类语言处理-语音识别(part2)

    上节回顾深度学习与人类语言处理-语音识别(part1),这节课我们将学习如何将seq2seq模型用在语音识别 LAS 那我们来看看LAS的Encoder,Attend,Decoder分别是什么 Lis ...

  7. 深度学习与人类语言处理-语音识别(part3)

    上节回顾深度学习与人类语言处理-语音识别(part2),这节课我们接着看seq2seq模型怎么做语音识别 上节课我们知道LAS做语音识别需要看完一个完整的序列才能输出,把我们希望语音识别模型可以在听到 ...

  8. (zhuan) Deep Reinforcement Learning Papers

    Deep Reinforcement Learning Papers A list of recent papers regarding deep reinforcement learning. Th ...

  9. 极客DIY:制作一个可以面部、自主规划路径及语音识别的无人机

    引言 现在大部分无人机厂商都会为第三方开发者提供无人机API接口,让他们更容易地开发无人机飞行控制应用程序,让无人机想怎么玩就怎么玩.有的API接口可以帮助开发者开发基于Web版的APP.手机APP甚 ...

随机推荐

  1. 给大家分享一下java数据库操作步骤

    获取驱动程序Jar文件,并放置到项目的类路径中: 注册驱动器类: 获取数据库连接: 获取Statement对象来执行相关SQL操作: 关闭各种资源;

  2. python基础三:函数

    def name(参数1,参数2,参数3,...) 可以自定义一些自己需要的函数来简化自己的工作. 如:自定义一个计算函数 def  mycount(a,b,c): y=a+b-c return y ...

  3. python中使用with操作文件,为什么不需要手动关闭?

    python中的with关键字,它是用来启动一个对象的上下文管理器的.它的原理是,当我们使用with去通过open打开文件的时候,它会触发文件对象的上下文管理器, 当with中的代码结束完成之后,去自 ...

  4. python爬虫自定义header头部

    一.Handler处理器 和 自定义Opener 关注公众号"轻松学编程"了解更多. opener是 urllib.OpenerDirector 的实例,我们之前一直都在使用的ur ...

  5. numpy的统计分析

    一.排序 间接排序(argsort,lexsort) 根据一个或多个数据集进行排序 1.Sort() --对数值直接进行排序 a.一维排序 b.二维排序 c.axis的认知 2.argsort() - ...

  6. Go之发送钉钉和邮箱

    smtp发送邮件 群发两个邮箱,一个163,一个QQ package main import ( "fmt" "net/smtp" "strings& ...

  7. 3.2 表 ADT -3.3 Java Collection API 中的表

    3.2 表 ADT 处理形如 A0, A1, A2, --, AN-1 的一般的表.我们称这个表大小为N.将大小为0的特殊表称为空表 对于除空表以外的任何表,称 Ai-1 前驱 Ai,Ai 后继 Ai ...

  8. 【Kata Daily 190904】Calculating with Functions(函数计算)

    原题: This time we want to write calculations using functions and get the results. Let's have a look a ...

  9. .NET操作Excel

    一.读取Excel数据,并显示 1.配置文件 <configuration> <system.web> <compilation debug="true&quo ...

  10. Table is marked as crashed and should be repaired 解决办法

    遇到这个问题几个敲命令轻松搞定 1.首先进入mysql命令台: mysql -u root -p 回车  输入密码 2.查询所有的库 mysql> show databases; 3.进入数据库 ...