雷锋网 AI 科技评论按:语音识别技术历史悠久,早在上世纪 50 年代,贝尔研究所就研究出了可以识别十个英文数字的简单系统。从上世纪 70 年代起,传统的基于统计的 HMM 声学模型,N 元组语言模型的发明,已经使得语音识别技术可以在小规模词汇量上使用。在新世纪伊始,GMM-HMM 模型的序列鉴别性训练方法的提出又进一步提升了语音识别的准确率。最近 5-10 年间,随着深度学习的快速发展,算力的快速增长,数据量的急速扩张,深度学习开始大规模应用于语音识别领域并取得突破性进展,深度模型已经可以在干净标准的独白类音频上达到 5% 以下的错词率。此外,端到端的模型可以轻松的将各种语言揉合在一个模型中,不需要做额外的音素词典的准备,这将大大推动业界技术研究与应用落地的进度。
在现在主流的利用深度学习的语音识别模型中仍在存在多种派系,一种是利用深度学习模型取代原来的 GMM 部分,即 DNN-HMM 类的模型,另一种则是端到端的深度学习模型。
第一种模型需要先实现 HMM 结构与语音的对齐,然后才能进一步地训练深度神经网络。除此之外,在训练这一类的模型时,训练样本的标注不仅仅是原本的文本,还需要对文本进一步拆解成为音素投入训练,这对于标注部分的工作就会造成极大的挑战。在解码的时候,这种模型同样还需要依赖这个发音词典。
端到端的模型旨在一步直接实现语音的输入与解码识别,从而不需要繁杂的对齐工作与发音词典制作工作,具有了可以节省大量的前期准备时间的优势,真正的做到数据拿来就可用。
端到端的模型的另一个优点是,更换识别语言体系时可以利用相同的框架结构直接训练。例如同样的网络结构可以训练包含 26 个字符的英文模型,也可以训练包含 3000 个常用汉字的中文模型,甚至可以将中英文的词典直接合在一起,训练一个混合模型。
此外,最重要的一点是,端到端的模型在预测时的速度更快,对于一个 10 秒左右的音频文件,端到端的模型在一块 GPU 的服务器上仅需 0.2 秒左右的时间便可给出预测结果。
现在的语音识别问题有如下几个难点:
- 对自然语言的识别和理解;
- 语音信息量大。语音模式不仅对不同的说话人不同,对同一说话人也是不同的,一个说话人在随意说话和认真说话时的语音信息是不同的;
- 语音的模糊性。说话者在讲话时,不同的词可能听起来是相似的;
- 单个字母或词、字的语音特性受上下文的影响,以致改变了重音、音调、音量和发音速度等。
端到端的模型由于不引入传统的音素或词的概念,直接训练音频到文本的模型,可以有效地规避上述难点。
云从科技基于端到端的语音识别网络进行了两种方法的探索,一种是基于原有的 CNN-RNN-CTC 网络的改进,一种是基于 CTC loss 与 attention loss 结合机制的网络。下面是对这两种方法的详细解读。
第一种方法
地址:https://arxiv.org/abs/1810.12001
作者基于百度之前提出的 Deep Speech 2 的模型框架结构,提出了三个改进的点。
第一是把循环神经网络中的长短时记忆层(LSTM)变成了双向的残差长短时记忆层(resBiLSTM)。此举可以更好地保留之前卷积神经网络所提取出的音素信息和之后每一个双向的残差长短时记忆层更好的结合。因为循环神经网络中的每一层主要是负责提取句子中的语义信息,但语义信息的理解也和音素信息紧密相关。随着循环神经网络的深入,原本更底层的层很难接收到卷积神经网络所给出的信息,对于复杂的长句子中音素和语义信息的结合较差,新提出的残差网络可以较好地修正这一问题。
第二点是引入了级联的训练结构,即对于第一个网络中难分(分错)的样本进行二次训练。在实验中我们发现,在第一层网络结构中被分错的样本比全部的样本的平均句长多出了 11% 以上。随着句子的变长,强语法和语义相关的单词会距离更远,那么对于较浅的循环神经网络来说就会更难捕捉到这一个信息。在发现这一区别后,作者在在第二层的级联结构中使用了更深的循环神经网络 (7 层到 13 层),但同时缩减了每一层的隐含节点数(对应样本量的减少,防止出现复杂模型的过拟合问题)。下图是对这两点改进后具体的模型图。
最后一点,是作者提出了新的训练方式来提升训练速度。深度学习中的模型一般都会采用随机梯度下降的方式来训练,每一次只训练其实其中一批数据(mini batch)。原来的训练模式是固定批量的大小从一而终。但是对于语音识别这样的问题来说,输入的数据是不定长的,这就会导致训练时,每一批和每一批的数据中最长的那一条是不一样的。为了防止训练时内存溢出,固定批量的方式必然需要迁就数据集中最长的那一个音频。在我们的训练数据集中,最长的音频是最短的音频的 10 倍左右,这样就会带来在训练短音频时的内存浪费。作者提出一种对全部训练集从低到高排序的方式,每次取排序后的一批音频,之后根据批次内最长的音频片段来实时调整批量的大小,从而提升内存利用率并使得训练时间下降了约 25%。在 LibriSpeech 960 小时的训练数据集上,利用在 8 块 1080Ti 上训练一次的时间从 24500 秒降到 18400 秒左右,减少 25%。且此方法并未因排序失去数据选取的随机性而显得效果变差。
作者在前处理上仍旧采用传统简单的快速傅里叶变换(FFT)来提取频谱特征输入改进后的深度学习网络,并采取了基于统计的 N 元组语言模型来对模型输出的文本进行解码和修正。选取这两种方法的原因是处理简单且不需要经过复杂的训练。作者提出的语音模型配合简单的前后处理机制仍旧可以取得很好的效果,更进一步证明了语音模型的优势。最终,在语音识别数据集 Librispeech 上,取得了 3.41% 的错词率。
在语音识别领域,LibriSpeech 是朗读语音类的主流数据集,包含 960 小时的训练集数据。错词率(Word Error Rate)则是衡量语音识别技术的关键指标。预测文本通过替换、删除、增加单词这三种操作可以达到与标注文本完全一致所需要的操作步数即为该句子的错词数,错词率=错词数/总词数。
第二种方法
地址:https://arxiv.org/abs/1810.12020
目前比较流行的端到端的语音识别模型主要包括:单独依赖 CTC 解码的模型,单独依赖 attention 解码的模型,以及混合 CTC 与 attention 共同解码的模型。纯 CTC 解码通过预测每个帧的输出来识别语音,算法的实现基于假设每帧的解码保持彼此独立,因而缺乏解码过程中前后语音特征之间的联系,比较依赖语言模型的修正。纯 attention 解码过程则与输入语音的帧的顺序无关,每个解码单元是通过前一单元的解码结果与整体语音特征来生成当前的结果,解码过程忽略了语音的单调时序性。为了兼顾两种方法的优缺点,作者采用混合解码的框架模型。网络结构是卷积层加 BiLSTM 层的 Encoder 结构后分别连接基于 Attention 以及 CTC 的 Decoder 结构,由两种解码器共同输出识别结果。
混合模型的 Loss 计算是 CTC-Loss 与 Attention-Loss 做权重相加。作者在实验中发现,在混合模型中 CTC 权重越低效果会越好。当把 CTC-Loss 的权重降低时,整体网络在计算反向梯度时由 Attention 部分得到的梯度会占主要部分,这样的结果就是网络优先朝着优化 Attention 解码的方向进行参数调整,最后训练得到的 CTC 解码效果就相对较差。考虑这一点,作者在 CTC 解码器部分单独增加了一个 BiLSTM 层,该层不与 Attention 部分共享,单独依靠 CTC-Loss 的反向梯度进行优化,从而弥补了 CTC 权重低带来的不足,使 Attention 解码效果最优的情况下尽可能提升 CTC 部分的效果。
在本文中,作者使用了基于子词(subword)的编解码方式。子词是介于字母与单词之间的一种表征方式。由于英文单词中的常常出现不发音的字母,在不同单词中相同字母的发音也千差万别,这就给基于字母的编解码模型带来了不小的麻烦,这种模型也更需要依赖语言模型的修正。基于单词的模型则只能解码出参与训练的已有标签的单词,因而完全无法解决 OOV 的问题。将文本按照子词分割开来,就可以同时改善以上两种方法中存在的问题。另一方面,作者为了网络更好的适应对子词的解码,使用了 smoothing-attention 的方法:
通常的 attention 方法(包括本文使用的 Loc-Aware)在计算 attention energy 中会使用 softmax,这样使得 attention 得分的分布变得比较尖锐,最终从 attention 得到的特征会集中在某一帧的位置上。和字母级别的解码相比,子词需要相对更宽的上下文特征。作者将 attention 中的 softmax 改为 sigmoid,使 attention 得分的分布变得相对平滑,从而使解码器每个 LSTM 单元的输入特征包含更多的语音上下文特征信息。
最后,作者使用基于 14600 本书的 Librispeech 公开语言模型扩充数据集训练了两层 LSTM 作为语言模型(LM),在语音识别数据集 Librispeech 上,取得了目前已公开的端到端语音识别网络中的最好效果。目前 Espnet 在 github 的模型,使用该扩充语言模型数据集训练的 LM 后在 test-clean 的表现为 WER=4.0%。相比之下,作者的方法效果提升 16.5%。
(完)