端到端的语音识别任务
输入:音频信号(特征)序列
输出:单词(字符)序列
和神经机器翻译相比,两者都是序列到序列的任务,主要区别在于
1、神经机器翻译的输入序列基本单元是词或子词,有完整的语义分割,有利于输入和输出的对齐。而语音识别的输入序列的基本单元是帧(frame)特征,表示单词或字符的帧之间没有分割,而且还存在大量的静默帧。
2、机器翻译的输入和输出的长度比在一定范围,也可以说长度相差不大。但是语音识别的输入长度比输出长度要大的多,输入序列长度是输出序列长度的十倍、百倍甚至更多。
3、语音识别中表示一个单词的音频序列的长度可能会因为说话人和语速等原因变化较大。
4、语音识别的输入和输出之间对应关系有单调性,而机器翻译则存在需要调序的问题。
针对上述特点,语音识别有CTC、LAS(seq2seq)等多种解决方案。
基于CTC的方法
CTC原理:
1、对每个输入帧特征都输出一个字符,多个连续的帧表示的一个字符输出多个相同的字符,静默帧使用表示静默帧的空白符表示如 。
2、删除重复的字符以及空白符。
CTC对每个输入都对应一个输出,从而实现语音帧和字符的对齐,CTC还需解决以下问题:
1、删除重复字符操作存在歧义,如 hheello,只需要删除重复的h和e,不能删除l。
解决办法:在输出的时需要去重的序列之间输出空白符号,如输出hheello,去除之间的重复,再去除空白符为hello。
2、在训练中,无法确定每个帧对应那个字符,因此对一个输入,枚举输出和输入所有可能的对齐方式,并计算所有可能对齐的损失之和,例如 输出可能的对齐为abc,也可能为abc,当然还有很多其他的对齐方式。所有可能的对齐空间太大,会造成无法接受的计算代价。
解决办法:使用动态规划降低时间度复杂度(利用语音的单调对齐特点),如下图所示:
更详细的细节建议看图片对应原文 https://distill.pub/2017/ctc/,解码时,采用基于去重字符改进的beam search进行解码,同时解码时可以加入语言模型打分,单词完整度打分等分数进行解码。
基于LAS的方法
LAS原理:
LAS(Listen, Attend and Spell)采用和神经机器翻译类似的方式进行语音识别,通过倒金字塔的双向RNN排列(Listen),将低层次的帧序列转换为高层次的语义序列,降低输入帧的长度,从而通过和神经机器翻译一样的方式,通过语义序列和已知的输出序列,预测下一个输出的字符(Spell)。解码时采用自回归的解码方式。
此外,LAS论文原文还使用一个采样技巧:在训练时,预测下一个字符时,随机将前一个真实的字符按照上一步的输出的字符分布表随机采样一个字符替换真实的字符,替换概率为10%。这技巧可以降低LAS的解码器(spell)对语言模型过拟合。
CTC和LAS对比
CTC的输出的条件独立的,也就是当前帧的输出不依赖上一帧的输出,模型中没有学到语言模型。
LAS的输出则不是条件独立的,当前帧的输出依赖上一帧的输出,模型中包含语言模型的特性。
CTC不包括语言模型,是较为纯粹的声学模型,易于迁移到不同领域(通过不同领域的语言模型)的语音识别。
LAS通过注意力对齐音频信号和输出序列,符合习惯,而且我认为CTC计算损失时,将许多错误的对齐也考虑在内。