参考 https://zhuanlan.zhihu.com/p/33464788语音识别有时候输入长度远大于输出长度,这是因为语音信号的非平稳性决定的,我们只能做短时傅里叶变换,这就造成了一个句子会有很多帧,即很多时刻。而标签(输出词序列)中的一个词往往对应了好几帧。最后输出的长度会远小于输入的长度。CTC就是为了解决这个问题。CTC是怎么做的呢?如果不考虑标签的话,使用RNN,每帧语音都会有一个输出,比如输入是200帧,输出有20个词。这样就会得到200个输出序列,这200个输出序列如何与标签的20词计算loss的呢?首先,在多对少的映射中,我们很容易想到应该会有很多重复的词,把这些词去掉就行了,然后因为帧长很短,有些帧的输出没有任何意义,可能只包含静音。所以CTC增加了一个blank标签,也就是每帧softmax的时候增加一个类别(增加一个输出blank的类别)。最后CTC的映射规则就出来了,200->20,去blank+去重。



