总览

9eafffea43ac6f95d6903f7a19edb140.jpg

前置知识

  • 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来的

76abd32fa4e03ead4f401d02853f2c0e.jpg