6.2 CD-DNN-HMM的关键模块及分析
在许多大词汇连续语音识别任务中,CD-DNN-HMM比GMM-HMM表现更好,因此,了解哪些模块或者过程对此做了贡献是很重要的。本节将会讨论哪些决策会影响识别准确度。特别地,我们会在实验上比较以下几种决策的表现差别:单音素对齐和三音素对齐、单音素状态集和三音素状态集、使用浅层和深层神经网络、调整HMM的转移概率或是不调。一系列研究的实验结果[12, 13, 211, 220, 226]表明,带来性能提升的3大关键因素是:①使用足够深的深层神经网络,②使用一长段的帧作为输入,③直接对三音素进行建模。在所有的实验中,来自CD-DNN-HMM的多层感知器模型(即DNN)的后验概率替代了混合高斯模型,其他都保持不变。
6.2.1 进行比较和分析的数据集和实验
必应(Bing)移动语音搜索数据集
必应(Bing)移动语音搜索(Voice Search,VS)应用让用户在自己的移动手机上做全美国的商业和网页搜索。用在实验中的这个商业搜索数据集采集于2008年的真实使用场景,当时这个应用被限制在位置和业务查询[2]领域。所有的音频文件的采样频率都为8kHz,并用GSM编码器编码。这个数据集具有挑战性,因为它包括多种变化:噪声、音乐、旁人说话、口音、错误的发音、犹豫、重复、打断和不同的音频信道。
数据集被分成了训练集、开发集和测试集。数据集根据查询的时间戳进行分割,这是为了模拟真实数据采集和训练的过程,并避免三个集合之间的重叠。训练集的所有查询都比开发集的查询早,开发集的查询比测试集的查询早。我们使用了卡内基-梅隆大学的公开词典。在测试中使用了一个包含了6.5万个一元词组、320万个二元词组和150万个三元词组的归一化的全国范围的语言模型,是用数据和查询日志训练的,混淆度为117。
表6.1总结了音频样本的个数和训练集、开发集、测试集的总时长。所有24小时的训练集数据都是人工转录的。
表6.1 必应移动搜索数据集
我们用句子错误率(SER),而不是词错误率(WER)来衡量系统在这个任务上的表现。平均句长为2.1个词,因此句子一般来说比较短。另外,用户最关心的是他们能否用最少的尝试次数来找到事物或者地点。他们一般会重复识别错误的词。另外,词在拼写中有巨大的不一致,因此用句子错误率更加方便:如“Mc-Donalds”有时被拼写成“McDonalds”,“Walmart”有时被拼写成“Wal-mart”,“7-eleven”有时被拼写成“7 eleven”或者“seven-eleven”。在使用这个6.5万个一元词组大词表的语言模型中,开发集和测试集在句子层面的未登录词(Out-of-vocabulary Words)比率都为6%。也就是说,在这个配置下最好的可能的句子错误率就是6%。
GMM-HMM采用了状态聚类后的跨词三音素模型,训练采用的准则是最大似然(Maximum Likelihood,ML)、最大互信息(Maximum Mutual Information,MMI)[227-229]和最小音素错误(Minimum Phone Error,MPE)[11, 229]准则。实验中采用39维的音频特征,其中有13维是静态梅尔倒谱系数(Mel-frequency Cepstral Coefficient,MFCC)(C0被能量替代),以及其一阶和二阶导数。这些特征采用倒谱均值归一化(Cepstral Mean Normalization,CMN)算法进行了预处理。
基线系统在开发集上调试了如下参数:状态聚类的结构、三音素的数量,以及高斯分裂的策略。最后所有的系统有5.3万个逻辑三音素和2千个物理三音素,761个共享的状态(三音素),每个状态是24个高斯的GMM模型。GMM-HMM基线的结果在表6.2中展示。
表6.2 CD-GMM-HMM系统在移动搜索数据集上的句子错误率(SER)
注:总结自Dahl等人[12]
对VS数据集上的所有CD-DNN-HMM实验,DNN的输入特征是11帧(5-1-5)的MFCC特征。在DNN预训练时,所有的层对每个采样都采用了1.5e−4的学习率。在训练中,在前六次迭代中,学习率为3e−3每帧,在最后6次迭代中学习率为8e−5每帧。在所有的实验中,minibatch的大小都设为256,惯性系数设为0.9。这些参数都是手动设定的,它们基于单隐层神经网络的前期实验,如果尝试更多超参数的设置,可能得到的效果会更好。
Switchboard数据集
Switchboard(SWB)数据集[230, 231]是一个交谈式电话语音数据集。它有三个配置,训练集分别为30小时(Switchboard-I训练集的一个随机子集)、309小时(Switchboard-I训练集的全部)和2000小时(加上Fisher训练集)。在所有的配置下,NIST 2000 Hub5测试集1831段的SWB部分和NIST 2003春季丰富语音标注集(RT03S,6.3小时)的FSH部分被用作了测试集。系统使用13维PLP特征(包括三阶差分),做了滑动窗的均值-方差归一化,然后使用异方差线性鉴别分析(Heteroscedastic Linear Discriminant Analysis,HLDA[232])降到了39维。在30小时、309小时和2000小时三个配置下,说话人无关的跨词三音素模型分别使用了1504(40高斯)、9304(40高斯)和18804(72高斯)的共享状态(GMM-HMM系统)。三元词组语言模型使用2000小时的Fisher标注数据训练,然后与一个基于书面语文本数据的三元词组语言模型进行了插值。当使用58K词典时,测试集的混淆度为84。
DNN系统使用随机梯度下降及小批量(mini-batch)训练。除了第一次迭代的mini-batch是256帧,其余mini-batch的大小都被设置为1024帧。在深度置信网络预训练的时候,mini-batch的大小为256帧。
对于预训练,将每个样本的学习率都设为1.5e−4。对于前24个小时的训练数据,将每帧的学习率都设为3e−3,三次迭代之后将其改为8e−5,惯性系数设为0.9。这些参数设置跟语音搜索(VS)数据集相同。
6.2.2 对单音素或者三音素的状态进行建模
就像我们在开头说的那样,在CD-DNN-HMM系统中有3个关键因素。对上下文相关的音素(如三音素)的直接建模就是其中之一。对三音素的直接建模让我们可以从细致的标注中获得益处,并且能缓和过拟合。虽然增加DNN的输出层节点数会降低帧的分类正确率,但是它减少了HMM中令人困惑的状态转移,因此降低了解码中的二义性。在表6.3中展示了对三音素而不是单音素进行建模的优势,在VS开发集上有15%的句子错误率相对降低(使用了一个3隐层的DNN,每层2K个神经元)。表6.4展示了在309小时SWB任务中得到的50%的相对词错误率降低,这里使用了一个7隐层的DNN,每层2K个神经元(7×2K配置)。这些相对提升是由于在SWB中有更多的三音素被使用了。在我们的分析中,使用三音素是我们得到性能提升的最大单一来源。
表6.3 VS开发集上的句子错误率(SER)
注:使用上下文无关的单音素和上下文相关的三音素(总结自Dahl等人[12])
表6.4 SWB任务中的相对词错误率
注:使用最大似然对齐,训练集为309小时,在Hub5'00-SWB上的词错误率(WER)使用上下文无关的单音素和上下文相关的三音素(总结自Seide等人[13])
6.2.3 越深越好
在CD-DNN-HMM中,另一个关键部分就是使用DNN,而不是浅的MLP。表6.5展现了当CD-DNN-HMM的层数变多时,句子错误率的下降。如果只使用一层隐层,句子错误率是31.9%。当使用了3层隐层时,错误率降到30.4%。4层的错误率降到29.8%,5层的错误率降到29.7%。总的来说,相比单隐层模型,5层网络模型带来了2.2%的句子错误率降低,使用的是同一个对齐。
为了展示深层神经网络带来的效益,单隐层16K神经元的结果也显示在了表6.5中。因为输出层有761个神经元,这个浅层模型比5隐层2K神经元的网络需要多一点的空间。这个很宽的浅模型的开发集句子错误率为31.4%,比单隐层2K神经元的31.9%稍好,但比双隐层的30.5%要差(更不用说5隐层模型得到的29.7%)。
表6.5 在VS数据集上不同隐层数DNN的句子错误率
注:所有的实验都使用了最大似然对齐和深度置信网络预训练(总结自Dahl等人[12])
表6.6总结了使用309小时训练数据时在SWB Hub5'00-SWB测试集上的词错误率结果,三音素对齐出自ML训练的GMM系统。从表6.6中能总结出一些规律。深层网络比浅层网络的表现更好。也就是说,深层模型比浅层模型有更强的区分能力。在我们加大深度时,词错误率持续降低。更加有趣的是,如果比较5×2K和1×3772的配置,或者比较7×2K和1×4634的配置(它们有相同数量的参数),会发现深层模型比浅层模型表现更好。即使我们把单隐层MLP的神经元数量加大到16K,也只能得到22.1%的词错误率,比相同条件下7×2K的DNN得到的17.1%要差得多。如果我们继续加大层数,那么性能提升会变少,到9层时饱和。在实际情况下,我们需要在词错误率提升和训练解码代价提升之间做出权衡。
表6.6 不同隐层数量的DNN在Hub5'00-SWB上的结果
注:使用的是309小时SWB训练集、最大似然对齐和深度置信网络预训练(总结自Seide等人[13])
6.2.4 利用相邻的语音帧
表6.7对比了309小时SWB任务中使用和不使用相邻语音帧的结果。可以很明显地看出,无论使用的是浅层网络还是深层网络,使用相邻帧的信息都显著地提高了准确度。不过,深层神经网络提高了更多的准确率,它有24%的相对词错误率提升,而浅层模型只有14%的相对词错误率提升,它们都有同样数量的参数。另外,我们发现如果只使用单帧,DNN系统则比BMMI[161]训练的GMM系统好了一点点(23.2%比23.6%)。但是注意,DNN系统的表现还可以通过类似BMMI的序列鉴别性训练[226]来进一步提升。为了在GMM系统中使用相邻的帧,需要使用复杂的技术,如fMPE[154]、HLDA[232]、基于区域的转换[157]或者tandem结构[233, 234]。这是因为要在GMM中使用对角的协方差矩阵,特征各个维度之间需是要统计不相关的。DNN则是一个鉴别性模型,无论是相关还是不相关的特征都可以接受。
表6.7 使用相邻帧的比较
注:训练集为309小时,最大似然对齐,Hub5'00-SWB上的词错误率。BMMI训练的GMM-HMM基线是23.6%(总结自Seide等人[13])
6.2.5 预训练
2011年之前,人们相信预训练对训练深层神经网络来说是必要的。之后,研究者发现预训练虽然有时能带来更多的提升,但不是关键的。这可以从表6.8中看出。表6.8说明不依靠标注的深度置信网络(DBN)预训练,当隐层数小于5时,确实比没有任何预训练的模型提升都显著。但是,当隐层数量增加时,提升变小了,并且最终消失。这跟使用预训练的初衷是违背的。研究者曾经猜测,当隐层数量增加时,我们应该看到更多的提升,而不是更少。这个表现可以部分说明,随机梯度下降有能力跳出局部极小值。另外,当大量数据被使用时,预训练所规避的过拟合问题也不再是一个严重问题。
当层数变多时,生成性预训练的有效性也会降低。这是因为深度置信网络预训练使用了两个近似。第一,在训练下一层的时候,使用了平均场逼近的方法。第二,采用对比发散算法(Contrastive Divergence)来训练模型参数。这两个近似对每个新增的层都会引入误差。随着层数变多,误差也累积变大,那么深度置信网络预训练的有效性就降低了。鉴别性预训练(Discriminative Pretraining,DPT)是另一种预训练技术。根据表6.8,它至少表现得与深度置信网络预训练一样好,尤其是当DNN有5个以上隐层时。不过,即使使用DPT,对纯BP的性能提升依然不大,这个提升跟使用三音素或者使用深层网络所取得的提升相比是很小的。虽然词错误率降低比人们期望的要小,但预训练仍然能确保训练的稳定性。使用这些技术后,我们能避免不好的初始化并进行隐式的正规化,这样即使训练集很小,也能取得好的性能。
表6.8 不同预训练的性能对比
注:测试为在Hub5'00-SWB上的词错误率,使用了309小时的训练集和最大似然对齐。NOPT:没有预训练;DBN-PT:深度置信网络预训练;DPT:鉴别性预训练(总结自Seide等人[13])
6.2.6 训练数据的标注质量的影响
在嵌入式维特比训练过程中,强制对齐被用来生成训练的标注。从直觉上说,如果用一个更加准确的模型来产生标注,那么训练的DNN应当会更好。表6.9从实验上证实了这点。我们看到,使用MPE训练的CD-GMM-HMM生成的标注时,在开发集和测试集上的句子错误率是29.3%和31.2%。它们比使用ML训练的CD-GMM-HMM的标注好了0.4%。因为CD-DNN-HMM比CD-GMM-HMM表现得更好,我们可以使用CD-DNN-HMM产生的标注来加强性能。表6.9中展示了CD-DNNHMM标注的结果,在开发集和测试集上的句子错误率分别降低到28.3%和30.4%。
表6.9 在VS数据集上标注质量和转移概率调整的对比
注:使用的是5×2K的模型。这是在开发集和测试集上的句子错误率(总结自Dahl等人[12])
在SWB上也能得到类似的观察。当7×2K的DNN使用CD-GMMHMM系统产生的标注训练时,在Hub5'00测试集上得到的词错误率是17.1%。如果使用CD-DNN-HMM产生的标注,词错误率能降低到16.4%。
6.2.7 调整转移概率
表6.9同时表明,在CD-DNN-HMM中调整转移概率起到的效果并不明显。但调整转移概率有一个优点,当直接从CD-GMM-HMM中取出转移概率时,通常是在声学模型权重取2的时候得到最好的解码结果。在调整转移概率之后,在语音检索任务中,不必再调整声学模型的权重。