今天 英语流利说正式开源了 kaldi-ctc,kaldi-ctc 可用于构建 Connectionist Temporal Classification (CTC) 端到端语音识别系统,基于 kaldi、warp-ctc 和 cudnn 实现。Training 和 Decoding 的速度都是极快的,基于 cudnn 实现的 LSTM-RNN 训练速度约为kaldi/src/nnet/lstm的5~6倍(开源只支持 cudnn RNN),支持多GPU训练;frame_subsampling_factor设置为3时,Decoding可达到 0.02 Real-Time-Factor。
尖峰现象
Fig1. CrossEntropy-RNN Softmax概率值
Fig2. CTC-RNN Softmax 画出了概率
Fig3. CTC-RNN Softmax 没有画出概率以 CTC 准则训练的 RNN 模型输出概率有明显的尖峰现象(Fig2,3),与以 CrossEntropy 为准则训练的RNN模型(Fig1)有很大不同。从Fig2、Fig3可看出绝大部分帧的 Softmax 概率值处非常接近1.0,在 Decoding 阶段可以跳过这些帧不进行解码网络的搜索。
CTC-ASR的解码速度的极大提升来源于
librispeech示例脚本
训练阶段准确率,Unique Phone Sequence是去重的每一帧RNN Softmax概率最大位置的phone序列, Accuracy = 1 – PhoneErrorRate。
在此数据集上 CTC-ASR 系统相比 LFMMI-ASR(chain) 有较大差距,目前 CTC-ASR 的训练数据中存在太多OOV,众所周知训练数据的准确性对端到端系统性能影响很大,需要Fix。
在更大的数据集上(当然不方便开放),CTC-ASR 系统表现超过 LFMMI-ASR。