总览

  • 李宏毅2020《深度学习于人类语言处理》(真的看视频比直接看文章好理解的多了)
  • LAS相比CTC而言没有假设单个字之间的独立性,所以可以学到字词之间的关系(eg. 在预测Hello的时候CTC不会觉得l后面常跟o,而LAS能捕捉到)
  • Listen就是一个encoder,attend是做注意力机制,spell是做decoder;就是把传统的东西做到了一个network里面。

6d7de2f28289e92cebc65781f91b078c.jpg

listen

  • 就是一个encoder,输入和输出有down-sampling的过程
  • 常用1d-CNN,LSTM或者self-attention,LAS用的是低用cnn,高用LSTM
  • 同时由于语音太长(1s的mel就会有差不多100帧),所以需要down-sampling
    • RNN的trick:pyrimid-RNN,比方说就是每一层就把两个hidden transform成一个hidden;pooling over time:就是每一小段时间就只取一个h送到下一层
    • CNN:time-delay CNN(其实就是dialated-1d-CNN)
    • self-attention:利用truncated;就是只看部分来做attention

attend

  • 拿到encoder的输出之后用一个z0做query,encoder的输入作为key,value,做一次标准的attention得到c0
    • 这里c0有两种用法:一种是在当前时间步直接使用,另一种是用在下一步中;LAS是将两种结合起来——就是增加一个向量放ct和zt的影响再得到distribution;另外一种就是见下面的描述。
  • 另外由于需要限制attention不要乱跳,所以加入location-aware的影响,就是把上一个时间步附近的alpha的输出拿来使用

spell

  • 得到c0之后把z0和c0一起丢到一层的RNN里面得到z1,z1做一次distribution之后输出token1。
  • 然后下一时间步的时候把token1的影响也加入这个RNN里面取得到z2以此类推

train&inference

  • train的“上一个token”其实拿到的是真实字符
  • inference的时候就是拿真的生成的来