相比LAS算法,CTC能够克服LAS不能online的弊端。只要在Encoder阶段,不采用Bi-LSTM,那么CTC就可以online
CTC算法是如何处理的?
CTC是Connectionist Temporal Classification的缩写,它可以做到线上实时地语音识别。它用的是单向的RNN,且只作为编码器,用MLP作为解码预测文字分布。RNN对当前语音输入$x^i$编码成$h^i$。MLP再对它乘上一个权重,接上Softmax。但有时候当前的语音输入可能并不能对应实际的文本token,所以预测要额外多一个为空的类别,表示模型不知道要输出什么,因此最终会得到V+1大小的概率分布
CTC没有下采样,所以输入和输出的序列长度都是T。模型预测完后,它还要进行后处理,一是把重复的token合并,二是空类别去掉,最终才是预测序列。CTC的这种预测方式,会让它的数据标注变得很难,因为要确保刚好每个输入声音特征都对应一个正确的token。而标注语料的数量,会直接影响模型评测的表现。此外,一个序列正确的标注方式又可以存着很多种,造成标注多标准问题。这也加大标注数据选择的困难
CTC的效果如何?
单纯使用CTC的效果并不是很好;单纯使用CTC的WER处在30左右;采用CTC+LM的WER普遍能够达到10左右
事实上,LM的引入正是为了克服CTC independent解码所基于的不合理假设。也因此,通过LM进行后处理后,能够大幅提升CTC的效果。从这个角度来说,CTC并不是end-to-end的
CTC有什么问题?
最大的问题就在于每个时间步之间的独立性假设,每个MLP的解码器工作是独立的。它可能会遇到一个奇怪的问题。比如语音数据部分前三帧都在发音c,第一个隐层hi解码出是c后,后面两个隐层就无须再解码出c了。但由于它们是独立工作的,后面的解码部分不知道前面解码的是什么,所以第二个可能解码成空或c,第三个也可能解码成空或c。但如果编码器是足够深的RNN,它也可能在编码过程中考虑这种前后关系的依赖,让第一个输出隐层包含更多关于c的信息,而后面两个隐层包含更多关于空类别的信息