相比 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 的信息,而后面两个隐层包含更多关于空类别的信息