
前置知识#
- RNA:就是把CTC里面提到的linear classifier换成RNN(LSTM)
- 但是有的时候某一个音可能需要输出两个或者多个token(比如说th)
model#
- 总的思想延续RNA的想法但是encoder出来的h用多次直到model觉得自己满意了位置(输出$\phi$为止)
- 单独train一个RNN net来学习每个token的关系,同时输出的向量要丢回下一个timestep的decoder里面去
- 就是encoder部分,decoder部分,然后joint起来得到分布。
train#
- 主要问题就是和CTC一样有很多的alignment,采用类似的思想有forward和backward变量(这次看完李宏毅的推导对为什么一定要有两个理解更深刻了)
- forward&backword variable
- 就是一动态规划,所有路径经过标签(t,u)并emit出s的概率 = 前半部分 α × 后半部分 β × 当前帧概率
- 定义$\alpha (t,u) = P(到达(t,u))$,$\beta(t,u) = P(从(t,u)到终点)$
- 递推的时候就两种情况(就是横着走和竖着走)初始值是(1,0) = 1
- $α(t-1,u)*P_{t-1,u}(\phi)$
- $\alpha(t,u-1)*P_{t,u-1}(token_u)$
- backward和forward是差不多的,只是方向相反(边界条件是beta(T,U)=1)
- 算loss的时候利用链式法则,LM部分的就是一般的那样子,另外一部分就是按照DP这样子算
inference#
- 事实上找出argmax P(Y|X)也是有很多alignment的,所以直接近似的用最大的h来替代;但是也常用beam search来的
