语音识别2 -- Listen,Attend,and Spell (LAS)
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)的更多相关文章
- 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),能够将语音直接转录为文字. ...
- 深度学习与人类语言处理-语音识别(part1)
语音识别 语音识别该何去何从? 1969年,J.R. PIERCE:"语音识别就像把水变成汽油.从大海中淘金.治疗癌症.人类登陆月球" 当然,这是50年前的想法,那么语音识别该如何 ...
- LAS(Listener、Attender、Speller)端到端构架
基于注意力(Attention)机制的端到端系统,又被称为LAS端到端构架. [6] W. Chan, N. Jaitly, Q. Le, O. Vinyals. Listen, Attend and ...
- 什么是end-to-end神经网络?
https://www.zhihu.com/question/51435499 来源:知乎著作权归作者所有. 国立台湾大学的李宏毅教授在其机器学习课程中有讲到深度神经网络的 End-to-end Le ...
- Attention and Augmented Recurrent Neural Networks
Attention and Augmented Recurrent Neural Networks CHRIS OLAHGoogle Brain SHAN CARTERGoogle Brain Sep ...
- 深度学习与人类语言处理-语音识别(part2)
上节回顾深度学习与人类语言处理-语音识别(part1),这节课我们将学习如何将seq2seq模型用在语音识别 LAS 那我们来看看LAS的Encoder,Attend,Decoder分别是什么 Lis ...
- 深度学习与人类语言处理-语音识别(part3)
上节回顾深度学习与人类语言处理-语音识别(part2),这节课我们接着看seq2seq模型怎么做语音识别 上节课我们知道LAS做语音识别需要看完一个完整的序列才能输出,把我们希望语音识别模型可以在听到 ...
- (zhuan) Deep Reinforcement Learning Papers
Deep Reinforcement Learning Papers A list of recent papers regarding deep reinforcement learning. Th ...
- 极客DIY:制作一个可以面部、自主规划路径及语音识别的无人机
引言 现在大部分无人机厂商都会为第三方开发者提供无人机API接口,让他们更容易地开发无人机飞行控制应用程序,让无人机想怎么玩就怎么玩.有的API接口可以帮助开发者开发基于Web版的APP.手机APP甚 ...
随机推荐
- LinkBlockedQueue的c++实现
c++链表实现的阻塞队列 最近从java源码里发现了阻塞队列的实现,觉得非常有趣. 首先,介绍下什么是阻塞队列.阻塞队列代表着一个队列可以线程安全的往该队列中写数据和从该队列中读数据.也就是说,我们可 ...
- 记一次py交易
讲一个故事 以下故事真实性不保证(你们懂的) 我没说这个是真的 所以不能当做以后别人挑我刺的证据 我只是讲个故事罢了 故事可以是fake 我不会承认这个故事是真的罢了 朋友是某c9高校工科专业 学校培 ...
- Docker composer搭建Spring Cloud Alibaba 运行环境(二)
" Spring Cloud Alibaba要用到的组件很多,注册中心nacos, 限流sentinel, 数据库,网关等等.由于用到的组件相对较多,部署会很繁琐,最关键的是没有资源服务器, ...
- python造一个计算器
正则表达式之简易计算器 关注公众号"轻松学编程"了解更多. 需求:使用正则表达式完成一个简易计算器. 功能:能够计算简单的表达式. 如:12((1+2)/(2+3)+1)*5.1- ...
- DFA简介
DFA(Detrend Fluctuation Analysis)与scale-free scale-free的本质特征是self-affine or self-similar.具体的,体现在几何上, ...
- (C#2,.net framework2.0,Visual Studio 2003)之前版本
(C#2,.net framework2.0,Visual Studio 2003)之前版本归为最初的版本(主要是针对.net framework),其主要定义了最基本的类型.特性. 1.基本的类型 ...
- Java_包装类
包装类 在实际应用中, 经常需要把基本数据类型转化为对象以便操作. 因此, Java在设计类时, 为每个基本数据类型设计了一个对应的类进行包装, 这样八个和基本数据类型对应的类统称为包装类(Wrapp ...
- Go读取论文并转换为simhahs
package main import ( "fmt" _"flag" _ "os" _ "io/ioutil" _&q ...
- Spring Security 实战干货:OAuth2授权请求是如何构建并执行的
在Spring Security 实战干货:客户端OAuth2授权请求的入口中我们找到了拦截OAuth2授权请求入口/oauth2/authorization的过滤器OAuth2Authorizati ...
- yum针对软件包操作的常用命令
yum针对软件包操作的常用命令: 1.使用YUM查找软件包 命令:yum search php 2.列出所有可安装的软件包 命令:yum list php 3.列出所有可更新的软件包 命令:yum l ...