zoukankan      html  css  js  c++  java
  • 语音识别2 -- Listen,Attend,and Spell (LAS)

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

    第一个步骤Listen(Encoder)

    listen的作用是输入一段语音信号,输出一段向量,去掉语音中的杂序,只保留和语音有关的部分。Listen
    上图中acoustic features表示的是每一帧的声音信号。

    listen进行encoder

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

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

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

    • 减少RNN的运算量
      down-sampling
      pyramid RNN
      Pooling over time
      上图中每一层都是RNN。左边是将相邻两个加起来送到下一层,右边是在相邻两个之间选择一个送到下一层。
    • 减少CNN和self-attention的运算量
      down-sampling在做attention时,每一个时间点的feature都会去attend 整个输入序列中所有的feature,在做翻译时可能表现很好,但在语音识别中,一秒钟就有100个acoustic features,太长了,无法很好的做attention。因此truncated self-attention限制attention的长度,只看未来和过去一段时间的输入序列。

    第二个步骤Attention

    两种常用的attention方式

    • dot-product attention
      dot-product attention
    • additive attention
      additive attention

    attntion 的过程

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

    第三个步骤Spell

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

    • 再拿hidden state 中的(z_1)继续去做attention
      z1进行attention
      算出新的(alpha)的值,经过softmax后(hat{alpha})值,最后用(hat{alpha})乘以(h)得到(c^1)作为下一次decode的输入。
      attntion的结果作为decoder的输入
      上一次spell的输出(此处是c),上一个hidden state (z^1),和decode的输入(c^1)共同决定了hidden state 的值(z^2),然后将(z^2)做一个attention,以此类推,...其示意图如下:
      整个LAS过程

    训练

    teacher forcing

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

    attention的一些知识

    • attention的不同用法
      attention的两种方式左边和右边的差异就是,attention得到的结果是在下一个time_step使用还是在这一个time_step使用。到底哪一个好也不好判断,但第一次用此方法做论文的是两种方法都使用了。attention得到的结果在当前步和下一步都使用一次。实际处理的方式
    • location-aware attention
      在attention的过程中,按照我们的想法,应该是从左到右,注意力慢慢转移,但是在实际运算中,注意力可能是随便乱跳的,这就和我们的初衷相违背。attention可能出现的问题
      现在在attention进行计算的时候,(z^0)在和(h^2)进行attention计算时,也要考虑与(h^2)相邻的区域的取值。
      23.png

    补充

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

    LAS的局限性

    • 1.LAS包含attention,所以需要encoder将所有的语音听完,这就导致无法听一部分就输出一部分,不能online。
  • 相关阅读:
    《火星——UML大战需求分析》阅读笔记之三
    第七周进度条
    软甲冲刺第一次评价
    第一阶段
    5.12站立会议
    5.11站立会议
    5.10站立会议
    sprint站立会议
    软件需求说明书——图文转换
    软件项目评价
  • 原文地址:https://www.cnblogs.com/zhou-lin/p/14039122.html
Copyright © 2011-2022 走看看