现代语音识别系统核心:声学模型、语言模型与解码器的深度解析
鄢志杰、薛少飞、张仕良、郑昊、雷鸣

声学模型、语言模型和解码器被视为现代语音识别系统最为核心的三个组成部分。近期,有部分研究者尝试去构建 End2end 的语音识别系统。然而,包含声学模型、语言模型和解码器的现代语音识别系统,依旧是当前最为主流且使用最为广泛的系统。声学模型主要用于构建输入语音与输出声学单元间的概率映射关系;语言模型用以描述不同字词间的概率搭配关系,能让识别出的句子更接近自然文本;解码器负责把声学单元概率数值与语言模型在不同搭配上的打分相结合进行筛选,从而最终获得最可能的识别结果。
近几年深度学习变得火热,语音识别领域也开始投入到深度学习的大潮里。把传统的 HMM-GMM 声学模型换成 HMM-DNN 声学模型后,能获得超过 20%的相对提升。在传统 N-Gram 语言模型之上叠加 NN-LM 语言模型,也可以得到进一步的提升。
在这一过程里,声学模型比较适合采用深度神经网络模型。正因如此,它受到了研究者更多的关注。本文主要介绍阿里云语音识别技术所采用的声学模型技术与语言模型技术。其中包含 LC-BLSTM 声学模型、LFR-DFSMN 声学模型以及 NN-LM 语言模型。LC-BLSTM 是对传统 BLSTM 模型的一种改进,它在保持高准确率的同时,还具备低延时的特性。DFSMN 是一种新颖的非递归结构的神经网络,它能够像 RNN 一样对信号的长时相关进行建模,并且可以获得更稳定的训练效果和更好的识别准确率。NN-LM 语言模型是近段时间在传统 N-Gram 语言模型基础上得到的进一步优化。
Latency-Controlled BLSTM模型
DNN(也就是 fully connected DNN)模型具有这样的优点:能够通过增加神经网络的层数以及节点数,将网络对复杂数据的抽象和建模能力进行扩展。然而,DNN 模型也存在一些不足之处。比如,在 DNN 中通常会采用拼帧的方式,以此来考虑上下文相关信息对当前语音帧所产生的影响。但这种方式并不是反映语音序列之间相关性的最为理想的方法。自回归神经网络(RNN)在一定程度上把这个问题给解决了。它利用网络节点的自连接这种方式,从而达到能够利用序列数据间相关性的目的。有研究人员进一步提出一种长短时记忆网络(LSTM-RNN),这种网络能够有效减轻简单 RNN 容易出现的梯度爆炸和梯度消散问题。接着,研究人员又对 LSTM 进行了扩展,运用双向长短时记忆网络(BLSTM-RNN)来进行声学模型建模,目的是充分考虑上下文信息的影响。
BLSTM 模型能够有效地提高语音识别的准确率。与 DNN 模型相比,其相对性能提升能达到 15%到 20%。然而,BLSTM 模型同时存在两个极为重要的问题。
语言模型的收敛速度一般比较慢。因为存在大量的逐帧计算,所以无法充分发挥 GPU 等并行计算工具的计算能力。这就导致训练会耗费很长时间。
需要用到整句递归来计算每一帧的后验概率,这样就无法有效保证解码延迟和实时率,所以很难应用于实际服务。
学术界首先提出 Context-Sensitive-Chunk BLSTM(CSC-BLSTM)的方法来解决这两个问题。之后,又提出了 Latency Controlled BLSTM(LC-BLSTM)这一改进版本,它能更好且更高效地减轻这两个问题。我们采用 LC-BLSTM-DNN 混合结构,同时配合多机多卡以及 16bit 量化等训练和优化方法来进行声学模型建模。通过这样的方式,相比于 DNN 模型,我们取得了约 17 - 24%的相对识别错误率下降。
典型的 LSTM 节点结构包含 3 个 gate,分别是 input gate、forget gate 和 output gate,并且还有一个 cell。输入节点、输出节点与 cell 之间存在连接,各个 gate 与 cell 之间也存在连接,cell 内部还存在自连接。通过控制不同门的状态,能够实现较好的长短时信息保存以及误差传播。
LSTM 能够像 DNN 那样逐层堆积从而形成 DeepLSTM。为了能更好地运用上下文信息,还可以运用 BLSTM 逐层堆积来构建 Deep BLSTM。其结构如下图所示。在网络中,沿时间轴存在正向和反向这两个信息传递过程。每一个时间帧的计算都有赖于前面所有时间帧以及后面所有时间帧的计算结果。对于语音信号这种时序序列来说,该模型充分考量了上下文对当前语音帧的影响,能够大幅提高音素状态的分类准确率。
然而标准的 BLSTM 是对整句语音数据进行建模的。在训练和解码过程中,存在收敛慢、延迟高、实时率低等问题。针对这些弊端,我们采用了 Latency Controlled BLSTM 来进行解决。与标准的 BLSTM 使用整句语音进行训练和解码不同,Latency Control BLSTM 使用类似 truncated BPTT 的更新方式。并且在 cell 中间状态处理和数据使用上有着自己的特点。如下图所示,训练时每次使用一小段数据进行更新,这一小段数据由中心 chunk 和右向附加 chunk 构成。其中,右向附加 chunk 只用于 cell 中间状态的计算,而误差只在中心 chunk 上进行传播。
网络在时间轴上正向移动时,下一个数据段的初始状态会用上一个数据段在中心 chunk 结束时的 cell 中间状态。网络在时间轴上反向移动时,每一个数据段开始时都会将 cell 中间状态设置为 0。此方法能在很大程度上加快网络的收敛速度,还有助于获得更好的性能。解码阶段的数据处理和训练时的数据处理基本一样。其不同点在于,中心 chunk 以及右向附加 chunk 的维度能够依据需求来进行调整,并且不是必须要和训练时采用相同的配置。
LFR-DFSMN模型
FSMN 是一种近期被提出的网络结构。它在前馈全连接神经网络(FNN)的隐层添加了一些可学习的记忆模块。这样就能有效地对信号的长时相关性进行建模。
FSMN 与 LCBLSTM 相比,它在控制时延方面更为方便,并且通常能获得更好的性能,所需的计算资源也更少。然而,标准的 FSMN 难以训练出非常深层的结构,因为存在梯度消失问题,所以训练效果不佳。而目前在很多领域,深层结构的模型已被证明具有更强的建模能力。我们针对此提出了一种改进的 FSMN 模型,并且将其称之为深层的 FSMN(Deep FSMN, DFSMN)。
我们进一步结合了低帧率(Low Frame Rate,LFR)技术,构建了一种高效的实时语音识别声学模型。去年我们上线了 LFR-LCBLSTM 声学模型,而这种新构建的模型与之相比,可以获得超过 20%的相对性能提升。同时,它还能获得 2 至 3 倍的训练以及解码加速,能够显著减少我们的系统在实际应用时所需要的计算资源。
FSMN 的模型结构最早被提出,如上图(a)所示。它本质上是一个前馈全连接神经网络。在网络的某些隐层旁添加了一些记忆模块(memory block),用于对当前时刻周边的上下文信息进行建模。这样使得模型能够对时序信号的长时相关性进行建模。记忆模块采用抽头延迟结构,如上图(b)所示。它将当前时刻以及之前 N 个时刻的隐层输出,通过一组系数进行编码,从而得到一个固定的表达。
FSMN 的提出受到了数字信号处理中滤波器设计理论的启发。在数字信号处理中,任何无限响应冲击滤波器(Infinite Impulse Response, IIR)都可以用高阶的有限冲击响应滤波器(FiniteImpulseResponse, FIR)来进行近似。
从滤波器的角度来看,如上图(c)所呈现的 RNN 模型的循环层,能够被视为如上图(d)那样的一阶 IIR 滤波器。同时,FSMN 所运用的如上图(b)所示的记忆模块,可被看作是一个高阶的 FIR 滤波器。FSMN 能够像 RNN 那样有效地对信号的长时相关性进行建模。同时,FIR 滤波器比 IIR 滤波器更加稳定。所以,FSMN 相比于 RNN 在训练上会更加简单和稳定。
根据记忆模块编码系数的选择,可以分为:
sFSMN 顾名思义,是以标量作为记忆模块的编码系数。vFSMN 顾名思义,是以矢量作为记忆模块的编码系数。
以上的 FSMN 仅考虑了历史信息对当前时刻所产生的影响,我们能够将其称作单向的 FSMN。倘若我们既考虑历史信息又考虑未来信息对当前时刻的影响,那么就可以把单向的 FSMN 进行拓展,从而得到双向的 FSMN。
FSMN 与 FNN 相比,需要把记忆模块的输出当作下一个隐层的额外输入,于是会引入额外的模型参数。隐层所包含的节点数量越多,引入的参数也就越多。研究将矩阵低秩分解的思路加以结合,进而提出了一种经过改进的 FSMN 结构,此结构被称作简洁的 FSMN(Compact FSMN,cFSMN)。一个第 l 个隐层包含记忆模块的 cFSMN 的结构框图如下。
对于 cFSMN 而言,在网络的隐层之后添加了一个低维度的线性投影层,同时把记忆模块添加在这些线性投影层上。进一步地,cFSMN 对记忆模块的编码公式做出了一些改动,把当前时刻的输出明确地添加到记忆模块的表达当中,这样一来,只需将记忆模块的表达作为下一层的输入即可。如此便可有效地减少模型的参数量,加快网络的训练速度。
上图展示了我们进一步提出的 Deep-FSMN(DFSMN)的网络结构框图。左边第一个方框代表输入层,右边最后一个方框代表输出层。我们在 cFSMN 的记忆模块(由红色框框表示)之间添加了跳转连接(skip connection),这样低层记忆模块的输出就能被直接累加到高层记忆模块中。在训练过程中,高层记忆模块的梯度会被直接赋予给低层记忆模块。这样一来,就能够克服因网络深度而导致的梯度消失问题,进而能够稳定地训练深层网络。
DFSMN 相比于之前的 cFSMN 具有优势,其优势在于能够通过跳转连接来训练很深的网络。原来的 cFSMN 中,每个隐层已通过矩阵的低秩分解被拆分成了两层结构。对于一个包含 4 层 cFSMN 层以及两个 DNN 层的网络,其总共包含的层数将达到 13 层。若采用更多的 cFSMN 层,就会使层数增多,进而导致训练出现梯度消失问题,造成训练的不稳定性。
我们提出的 DFSMN 利用跳转连接,从而避免了深层网络的梯度消失问题,让训练深层网络变得稳定。需明确的是,这种跳转连接既能够加到相邻层之间,又能够加到不相邻层之间。跳转连接本身既可以是线性变换,也可以是非线性变换。我们可以进行具体的实验,实现训练包含数十层的 DFSMN 网络。同时,与 cFSMN 相比,能够获得显著的性能提升。
最初的是 FSMN,而 cFSMN 不仅能够有效地减少模型的参数,还能够获得更好的性能。在 cFSMN 的基础上,我们提出的 DFSMN 可以更加显著地提升模型的性能。如下表所示,这是在一个 2000 小时的英文任务上,基于 BLSTM、cFSMN、DFSMN 的声学模型性能对比。
Model
BLSTM
cFSMN
DFSMN
WER%
10.9
10.8
9.4
从上表能看到,在 2000 小时的任务方面,DFSMN 模型能使错误率比 BLSTM 声学模型降低 14%,从而显著提升了声学模型的性能。
传统声学模型输入的是每帧语音信号所提取出的声学特征,每帧语音的时长一般为 10 毫秒。对于每个被输入的语音帧信号,会有一个与之相对应的输出目标。最近有研究提出了一种低帧率(Low Frame Rate,LFR)建模方案,即把相邻时刻的语音帧绑定在一起作为输入,然后去预测这些语音帧的目标输出,从而得到一个平均输出目标。具体实验中可以实现三帧(或更多帧)拼接而不损失模型的性能。
这样能把输入和输出减少到原本的三分之一甚至更多,能够大幅提高语音识别系统服务时声学得分的计算效率以及解码效率。我们将 LFR 与上述提出的 DFSMN 相结合,构建了以 LFR-DFSMN 为基础的语音识别声学模型。经过多组实验,我们最终确定采用一个由 10 层 cFSMN 层和 2 层 DNN 组成的 DFSMN 作为声学模型,输入输出采用 LFR,把帧率降低至原来的三分之一。识别结果与去年我们上线的最佳 LCBLSTM 基线的比较如下表所示。
我们结合 LFR 技术,能够实现三倍的识别加速。从上述表中能够看出,在实际的工业规模应用方面,LFR-DFSMN 模型相较于 LFR-LCBLSTM 模型,可使错误率下降 20%,这体现了它对大规模数据具备更好的建模特性。
NN-LM语言模型
语言模型,顾名思义,是对语言进行建模的模型。语言表达可被视为一串字符序列,不同的字符序列组合意味着不同的含义,字符的单位可以是字或者词。语言模型的任务,可看作是在给定字符序列的情况下,怎样去估计该序列的概率,或者说,怎样去估计该序列的合理性。
上海的工人师傅拥有力量的概率大于上海的工人食腐拥有力量的概率。
以这句话为例。例如究竟应该是“工人师傅有力量”,还是“工人食腐有力量”,哪句话更“恰当”呢?我们比较容易判断左边这句话的可能性大一些。所以我们期望通过语言模型的构建,能够给出符合人类预期的概率分配。就如同这样,“工人师傅”的概率比“工人食腐”的概率大。
传统的 N 元文法模型基于统计词频,利用马尔可夫假设简化了模型结构与计算。它通过计数来进行计算,通过查找来进行使用。该模型具有估计简单、性能稳定、计算快捷的优势,并且已经有超过三十年的使用历史。然而马尔科夫假设强制截断了建模长度,这导致模型无法对较长的历史进行建模;基于词频的估计方式使得模型不够平滑,并且对于低词频词汇的估计不足。随着神经网络(Neural Networks,NNs)的第三次崛起,人们开始尝试利用 NN 来进行语言模型的建模。
递归神经网络(recurrent neural networks,RNNs)是一种典型的建模结构。这种递归结构在理论上能够对无穷长的序列进行建模,从而弥补了 N 元文法在序列长度建模方面的不足。同时,其各层之间的全向连接也确保了建模的平滑性。研究者们为提升模型性能,还尝试通过长短时记忆(Long Short-Term Memory,LSTM)结构来弥补基本 RNN 本身建模能力的不足,以进一步提升模型性能。
NN 在用于大规模语言建模的系统时,需要应对一些问题。其中包括大词表所导致的存储和计算的增加。实际的线上系统,其词表通常是比较大的。并且,随着词表的不断增加,基本 RNN 结构的存储量和计算量都会以几何级数的方式呈爆炸式增长。
为此,研究者们进行了一些尝试。其中,压缩词典尺寸成为了一个最直接的解决方案。一个经典的方法是词表聚类。这种方法能够大幅压缩词表尺寸,然而,往往也会带来一定的性能衰减。一个更直接的想法是直接把低频词汇过滤掉。这样做虽然会导致一定的性能衰减。基于此,有一个改进策略。我们发现真正制约速度性能的主要是输出层节点。输入层节点如果大,借助 projection 层就可以很好地解决。于是输入层采用大辞典,而仅对输出层词表进行抑制。这样做不仅能尽可能地降低损失,还能过滤掉过低的词频,有利于模型节点的充分训练,性能往往还会略有提升。
词表压缩能够提升建模性能,同时能降低计算量和存储量。不过,这种提升和降低仅限于一定的量级,无法进行无限制压缩。目前,如何继续降低计算量仍是一个问题。一些方法已经被提出,比如 LightRNN,它采用类似聚类的方式,借助 embedding 的思想,将词表映射到一个实值矩阵上,实际输出只需矩阵的行与矩阵的列相加,这样计算量大概也能减少一半。造成计算量大的一个原因是 softmax 输出,因为它需要计算所有节点的和来得到分母。当这个分母能保持为常数时,在实际计算中只需计算所需的节点,这样在测试环节就会快很多。
于是有了与正则项相关的方法,即 Variance Regularization。若训练速度可接受,此方法在基本不损失模型正确性的前提下能大幅提升前向计算速度;若训练时也想提速,还可考虑基于采样的方法,像 NCE、Importance Sampling、Black Sampling 等。其本质是在训练时不计算全部节点,只计算正样本(标签为 1 的节点)以及部分通过某种分布采样得到的负样本,以避免高输出导致的计算缓慢。速度上提升还是很明显的。
从阿里云获得开发者模型定制能力
一个做智能电话客服或智能会议系统的开发者,需要给其系统接入语音识别(把语音转写成文字)的能力。此时,他面临着这样一种尴尬的状况:
一种选择是自行从无到有地学习进行语音识别。这或许会耗费大量的时间与金钱。要知道,对于人工智能这类事务,各大互联网巨头即便投入大量的人力、物力、财力,也需要花费较长时间才能够积累起相关技术。
第二个选择是利用上述巨头们在互联网上所提供的那种开箱即用的、适用于所有情况的语音识别接口。这样做节省了时间,然而在语音转文字的准确率方面,只能靠运气了。毕竟巨头们自身也很忙碌,没有多余的精力为你所关注的场景进行优化。
那么问题在于:是否存在一种手段,能够凭借最小的投入,获取业务上最为优良的语音识别效果呢?答案是肯定的。
阿里云凭借达摩院在业界领先的语音交互智能方面的优势。它打破了传统语音技术提供商的供给模式。在云计算时代,普通开发者能够借助阿里云所提供的语音识别云端自学习技术。从而获得一整套可以定制优化自己所关心的业务场景的手段。阿里云使广大开发者凭借巨头的优势,通过自身可掌控的自主学习,能在短期内达到对语音识别系统应用从初步了解到熟练掌握的程度,并且在开发者关注的场景中能够轻易获得业界顶尖的语音识别准确率。这便是云计算时代语音识别技术全新的供给模式。
语音识别技术和其它人工智能技术一样,其关键在于算法、算力和数据这三个方面。阿里云凭借达摩院语音交互智能,近些年一直在世界前沿持续推进“算法”的演进。近期,阿里云还把最新的研究成果 DFSMN 声学模型进行了开源,以便全世界的研究者能够复现目前最佳的结果并持续对其进行提升。
在“算力”方面无需多言,因为这本来就是云计算的天然优势。借助阿里云 ODPS-PAI 平台,我们搭建了一个专门为语音识别应用而优化的 CPU/GPU/FPGA/NPU 训练与服务混合部署平台,该平台每天都为阿里云上数量庞大的语音识别请求提供服务。我们在“数据”领域,提供经过海量数据训练的场景模型,这些模型可以开箱即用,涵盖的场景有电商、客服、政务以及手机输入等。
同时可以看到,在具体的落地场景中常常会有一些极为特殊且与领域相关的“说法”需要被识别出来。很多时候,像“碎屑岩岩性地层”“海相碳酸盐岩”这类特定说法,给通用场景模型的识别率带来了挑战。要想在开发者关心的具体场景下获得最佳的准确率,开箱即用的模型通常还需要进行一定的定制优化工作才能够达到。传统上,这样的定制是由语音技术服务提供商来完成的。在成本方面存在明显不足,在周期方面存在明显不足,在可控性方面也存在明显不足。
阿里云提供的语音定制“自学习”平台服务,能够提供诸多手段。在很短的时间内,以较低的成本,开发者就可以完全掌控模型定制优化以及上线的工作。阿里云的创新工具平台及服务技术,凭借强大的基础设施,让在云计算的大背景下开展大规模定制化语音服务变成了可能。开发者无需操心后台的技术与服务,只需运用阿里云提供的简便易用的“自学习”工具,凭借场景知识与数据,便能获得该特定场景下最为优良的效果,还可按需求持续进行迭代提升。
阿里云的智能语音自学习平台具备以下优势:
举例而言,开发者能够运用以下多种“自学习”的方式来定制其关注领域的模型: 开发者可以利用这些方式;开发者能够借助这些方式;开发者有办法使用这些方式。
a)业务热词定制
在很多特定的场所,需要提升对特定词的快速识别能力。(这里包含两种模式,其一为其他词容易被识别成特定词;其二为特定词容易被识别成其他词。)运用实时热词加载技术,在实时的场景当中,通过设定不同的档位,就可以实现热词识别能力的增强。
b)类热词定制
很多时候,相同的发音和相同的属性在不同的上下文中会需要不同的识别效果。联系人方面,人名就是典型案例,对于不同人的好友,“张阳”和“章扬”我们必须能准确识别出相应的名字。地名方面,相隔千里的安溪和安西如果识别错误,会给导航带来大麻烦。智能语音自学习平台秉持“每个人都值得被尊重”的理念,具备提供联系人类和地名类的定制能力,致力于“让天下没有难识的路”。
c)业务专属模型定制
用户输入对应领域的相关文本,像行业或公司的基本介绍等,还有客服聊天记录等,以及领域常用词汇和专有名词等。这样一来,用户就能够快速自行生成该行业下的定制模型,并且整个定制过程都不需要用户进行人工干预。
阿里云利用这些手段,让开发者无需操心语音技术的算法以及工程服务的细节,能够将精力集中在他们所擅长的垂直领域的知识以及数据收集上,从而达成全新的语音技术云端供给模式,给广大开发者及其业务成果带来了益处。
你可能还喜欢
点击下方图片即可阅读