对于在文本中未出现的词对,我们需要使用平滑方法来进行近似,如 Good-Turing估计或 Kneser-Ney 平滑等。
5. 解码与字典
解码器是识别阶段的核心组件,通过训练好的模型对语音进行解码,获得最可能的词序列,或者根据识别中间结果生成识别网格 (lattice) 以供后续组件处理。解码器部分的核心算法是动态规划算法 Viterbi。由于解码空间非常巨大,通常我们在实际应用中会使用限定搜索宽度的令牌传递方法 (token passing)。
传统解码器会完全动态生成解码图 (decode graph),如著名语音识别工具HTK(HMM Tool Kit) 中的 HVite 和 HDecode 等。这样的实现内存占用较小,但考虑到各个组件的复杂性,整个系统的流程繁琐,不方便高效地将语言模型和声学模型结合起来,同时更加难以扩展。现在主流的解码器实现会一定程度上使用预生成的有限状态变换器 (Finite State Transducer, FST) 作为预加载的静态解码图。这里我们可以将语言模型 (G),词汇表(L),上下文相关信息 (C),隐马尔可夫模型(H)四个部分分别构建为标准的有限状态变换器,再通过标准的有限状态变换器操作将他们组合起来,构建一个从上下文相关音素子状态到词的变换器。这样的实现方法额外使用了一些内存空间,但让解码器的指令序列变得更加整齐,使得一个高效的解码器的构建更加容易。同时,我们可以对预先构建的有限状态变换器进行预优化,合并和剪掉不必要的部分,使得搜索空间变得更加合理。
小结:
在过去,最流行的语音识别系统通常使用梅尔倒谱系数MFCC或者相对频谱变换-感知线性预测 RASTA-PLP,作为特征向量,使用高斯混合模型-隐马尔科夫模型GMM-HMM作为声学模型,用最大似然准则,ML和期望最大化算法来训练这些模型。
三、语音识别的前沿领域
早在上个世纪八十年代,就有研究者在语言识别中使用神经网络作为分类器。但受限于当时机器的计算能力,语音数据的稀少,以及对语音基本单元建模的选择等等因素,神经网络分类器并没有在后来成为语音识别系统中成为主流,效果不如使用高斯混合模型。但随着新世纪人们对神经网络的重新认识,深度学习的风潮再次席卷了语音界,人们纷纷转向研究深度神经网络在语音识别中的应用。深度神经网络模型是区分性 (discriminative) 的模型,对于区分不同的基本单位这个任务来说,比需要描述完整分布的产生性 (generative) 模型高斯混合模型模型需要的参数相对更少,更容易获得好的效果。
随着深度学习的大热,诸如人工神经网络ANN,卷积神经网络CNN以及重要的反向传播BP等重要概念已经广为人知,在此就不再进行赘述。
1. 深度学习与声学特征提取
一种最简单的在传统 HMM-GMM 系统中应用神经网络的方法就是使用神经网路进行特征学习。这样的方法不用修改已有的语音识别框架,可以在不大改系统的基础上提高系统的性能。
利用传统的语音特征提取算法(如MFCC 或 PLP)提取的特征只对单帧信号作用,不能很好地涵盖有效语音信息,也易受噪声污染。对于语音的特征学习和语音识别而言,这个目标可以归纳为对原始频谱特征的使用或是对波形特征的使用。过去 30 年以来,虽然对语音频谱进行变换丢失了原始语音数据的部分信息,但是多种“手工制作”的特征促进了 GMM-HMM 系统识别率的巨大提升。其中最成功的是非自适应的余弦变换,它促进了 MFCC特征的产生。余弦变换近似地去除了特征成分之间的相关性,这对使用对角协方差阵的 GMM 来说很重要的。然而,当深度学习模型替代 GMM 模型后以后,使得去除特征之间的相关性变得无关紧要。
在利用DNN进行特征提取中,存在两种比较常见的思路:第一种是瓶颈 (bottlenec, BN) 特征。我们需要构造一个瓶颈形状的神经网络,即其中有一个隐藏层的维度比其他的隐藏层的维度相对小很多。接下来,我们既可以使用自动编码器 (auto encoder) 对网络进行无监督训练,也可以令网络的输出目标为状态后验概率,通过 BP 算法进行有监督训练。训练完成后,将瓶颈后面的网络结构删去,取此时网络的输出为特征。这样获得的 BN 特征可以被认为是一种非线性的特征变换和降维技术。在构建 HMM-GMM 声学模型时,我们通常将 BN 特征和传统短时特征如 MFCC等拼接在一起,共同作为 HMM-GMM 模型的输入进行学习。工作中使用经过预训练的深度神经网络替代传统 BN 特征中常常使用的浅层网络,结合区分性训练的方法使系统的性能得到了大幅度的提升。另一种特征学习方法为使用串联 (tandem) 特征。在工作中,串联特征首先使用神经网络分类器估算音素的后验概率,然后将网络输出的向量通过 PCA 做正交化作为 HMM-GMM 系统输入的特征。这样的串联方法比直接使用神经网络混合模型和标准 GMM 模型的效果都要好。而 Sivadas 等人 在串联特征中使用了层次化的结构,将原来单一的神经网络替换为多个神经网络,分别被训练为具有不同的功能而又层次化地组织在一起。这种方法比原有单一神经网络的参数规模少,训练时间更短,同时获得了更好的性能。
2. 深度学习与声学建模
随着深度神经网络在语音识别中的作用被一步步更深地挖掘,直接采用HMM-DNN 混合模型便成了更好的选择。在 HMM-DNN 混合模型中,我们将不同状态使用的多个 GMM 模型通过一个深度神经网络代替。我们需要训练一个深度神经网络,训练目标是估算输入的语音帧在每一个 HMM 状态下的后验概率,即P(qt = s|xt)。为了能够正确的估算在不同状态的后验概率,我们通常需要先通过已有的 HMM-GMM 模型和标注生成训练语料的强制对齐信息 (force alignment) 作为网络训练的目标。而强制对齐信息的好坏也很大程度上影响训练好的 HMM-DNN混合模型系统性能,[38] 的工作中人们通过迭代使用新训练好的 HMM-DNN 混合模型生成对齐信息重新训练 HMM-DNN 混合模型的方式进一步提高了系统的性能。另外,我们通常会使用相邻的多个帧的特征复合而成的特征作为神经网络的输入,增强网络对相邻信息的利用能力。
3. 未来的研究方向
目前采用深度学习结合隐马尔科夫模型的语音识别系统已经取得了较好的识别效果,如百度 Deep Speech 2 的短语识别的词错率降到了3.7%,微软英语语音识别词错率达到了 5.9%,并且已经推向了商业应用,但目前的智能语音识别还是存在着相当的提升空间。
在机器之心主办的第一届全球机器智能峰会(GMIS 2017)上,腾讯 AI Lab 副主任、西雅图人工智能研究室负责人俞栋发表了主题为《语音识别领域的前沿研究》的演讲,探讨分享了语音识别领域的 4 个前沿问题:
研究方向一:更有效的序列到序列直接转换的模型
语音识别实际上是把语音信号的序列转化为文字或词的序列,所以很多人认为要解决这个问题,找到一个行之有效、序列到序列的转换模型就可以了。
从前的绝大部分研究是通过对问题做假设,然后据此在语音信号序列到词序列之间构造若干个组件,把语音信号序列逐步转换成词的序列。这些假设中的许多部分,比如短时平稳假设和conditional independence假设,在某些特定场合是合理的,但是在很多真实的场景下是有问题的。而序列到序列直接转换的模型背后的思路是说,如果我们去掉基于有问题的假设而设计的这些组件,然后以从训练数据中学到的转换模型来替换,就有可能找到更好的方法,使序列转换更准确。这样做另外一个好处是整个的训练过程也可以变简单。
研究方向二:鸡尾酒会问题
在安静环境下的语音识别系统已经接近了人类的水平。目前也有很多实际的应用,但目前的语音识别系统在强噪声干扰情况下还很难达到实用化要求。对于人类的听觉系统则有一种“鸡尾酒会效应”,我们在具有背景噪声干扰的情况下,可以将注意力集中在某一个人的谈话之中,而这种人类听觉系统的功能目前语音识别系统还很难实现,该问题在远场麦克风时会体现的更为明显,一种可能的方法就是采用麦克风阵列,同时从多位置、多角度捕捉声音信号来提升识别的效果,但这未必是最优的解决方案,未来通过对大脑的进一步研究可能会为我们带来启发。
研究方向三:持续预测与适应的模型
在语音识别领域,能否建造一个持续做预测系统呢?这样可以不断根据已有的识别结果来为下一次识别进行改进,而目前在语音识别上,普遍上还是仅仅将语音与文本做简单的匹配从而进行识别,对于语言中具体信息间的联系利用还是非常不足的,因此如果可以建造一个更好的模型,它能够持续地做识别。它需要的特点是什么呢?一个是它能够非常快地做Adaptation,使得下一次再做识别的时候,我们有办法把类似信息用更好的方式压缩在模型里面,所以在下一次可以很快做识别。
研究方向四:前后端联合优化
传统来讲,前端的信号处理技术一般只用到当前状态下的语音的信号信息。而机器学习方法用到很多的训练器里学到的信息,但是很少用到当前帧的信息,它不进行数据建模,所以我们有没有办法把这两种方法比较好地融合在一起,这是目前很多研究组织发力的一个方向。
另外,我们有没有办法更好地把前端的信号处理跟后端的语音识别引擎做更好的优化。因为前端信号处理有可能丢失信息,且不可在后端恢复。所以我们有没有办法做一个自动的系统,能够比较好地分配这些信息的信号处理,使得前端可以比较少地丢失信息,从而在后端把这些信息更好地利用起来。