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

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的时候就是拿真的生成的来