(李宏毅深度学习HLP课程笔记)
对于CTC和RNN-T,计算的目标概率函数都是
P
θ
(
Y
∣
X
)
=
∑
h
∈
a
l
i
g
n
(
Y
)
P
(
h
∣
X
)
P_\theta(Y|X)=\sum_{h\in align(Y)}P(h|X)
Pθ(Y∣X)=h∈align(Y)∑P(h∣X) 其中,X代表输入的语音,h是为了解决alignment问题在token中增加
∅
\varnothing
∅后输出的token,align(Y)代表添加
∅
\varnothing
∅后所有可能的token。
如上图中的例子所示,所有的align(Y)有许多种,CTC和RNN-T的穷举方式如下:
1、CTC
进行训练时,需要对所有添加∅的正确可能输出都进行遍历,比如对于一个输入长度为t=6,内容为“cat”的语音来说,"c∅aatt"和“∅ca∅t∅”都是正确的alignment结果。对于一个时间片长度为T的N分类(N为token类别总数)任务,所有可能的路径数为 N T N^T NT,时间复杂度太高,因此在CTC中采用了动态规划的思想来对查找路径进行剪枝,具体使用的方法是HMM中的前向-后向算法,详细过程:(参考链接1)([参考链接2])。
CTC穷举的方式如下,
∅
\varnothing
∅的下一步有两种选择,非
∅
\varnothing
∅的下一步有三种选择:
需要注意当有连续的两个token相同时,非
∅
\varnothing
∅的下一步也只有两种选择:
2、RNN-T
RNN-T是在每一个输入完全结束的时候输出
∅
\varnothing
∅,因此不会像CTC一样可以重复某一个token(输出时再合并重复的token),但是可以重复
∅
\varnothing
∅:
3、总结
HMM CTC RNN-T所有可能输出的状态转移图如下所示,