其他
语音识别中Chain Model的原理和实践
The following article is from 58技术 Author 李咏泽
导读
本文将介绍语音识别框架kaldi中提出的chain model语音识别系统,文章会先介绍HMM-DNN语音识别系统以及语音识别中的区分性训练作为铺垫知识,最后再重点介绍chain model的内容。
HMM-DNN语音识别系统
1.语音识别的公式化表达上式中的P(St|St-1)是由HMM的状态转移概率来给出的,P(Ot|St)在HMM-GMM模型下,是直接输入声学特征Ot到St状态的GMM来给出的。那么在HMM-DNN模型下,P(Ot|St)是由输入声学特征Ot到神经网络然后经折算之后得到的。DNN是如何做到替代GMM的呢?无论是在HMM-GMM[3]还是HMM-DNN系统中,每一个音素都由一个三状态的HMM来建模,如下图所示:
蓝圈表示此HMM的三个状态。在HMM-GMM中,每个状态的发射概率用GMM来描述,如下为上面HMM的三个状态分别对应的三个GMM:
语音识别区分性训练
1.区分性训练公式化表达区分性训练[6]是一种针对声学模型训练的策略,是相比于最大似然训练较高阶的内容。这两种训练公式化的表达如下:
Su指的是将文字序列拓展开得到的音素状态序列,к是一个常量。那么分子部分的计算依然是在标注序列上,分母部分的计算中有∑w部分,意味着我们要由解码图中所有可能的词序列计算得到。2.区分性训练的实际应用上面提到的MMI区分性训练的损失函数计算方式,其中分母是由解码图中所有可能的词序列计算得到,这里先简单介绍下解码图。解码图是语音识别中用来约束解码器的词序列搜索空间的WFST,解码器从解码图的初始状态出发,不断的尝试可以走的路径,同时计算声学特征在该路径的得分并和该路径的语言学得分做整合,直到用尽最后一帧特征。那么可以知道,解码图是一个非常大的搜索空间,因此我们在计算区分性训练的损失函数分母部分时,会面临的问题就是巨大的计算开销。所以一般来说,不会在解码图上去做搜索计算,而寻求一种近似方法,既能减少计算开销,又能尽可能的逼近真实值。这里我们引入lattice的概念,lattice就是上面说的解码走完之后,保留的所有有效路径形成的图,一般会保留多条优势路径,而不是就一条。这样分母的计算,就可以在每条音频的在大解码图中搜索得到的lattice小图上完成计算,大大节省了计算开销。3.区分性训练流程
上图便是对HMM-DNN声学模型做区分性训练的流程,同样也是需要蓝色部分即HMM-GMM模型的训练以及对训练数据的强制对齐,然后对HMM-DNN做最大似然训练,训练好之后,生成训练数据的lattice作为区分性训练的准备,最后一次才进行区分性训练。
chain model
1. chain model和区分性训练、HMM-DNN的关系前面两部分讲述了HMM-DNN和区分性训练的知识,这些都是了解chain model[7]的预备知识。那么chain model和这二者之间的关系是什么呢。首先chain model的声学模型结构就是HMM-DNN,标准的chain model用的神经网络是TDNN[8],chain model所用的HMM拓扑结构和标准的三状态HMM也有明显的不同。chain model的训练策略采用的就是前面所介绍的MMI区分性训练,但是chain model没有采用前面近似的损失函数计算方法,而是用自己独有的方法来计算。2.chain model的trickschain model 采用的HMM拓扑结构,如图所示,是一种特殊的单状态HMM。先看下左边的标准三状态HMM的拓扑结构,0/1/2表示此音素三个状态的序号,在这种拓扑结构下,因为每个状态都存在自跳弧,所以每个状态可以出现任意多次,这样的话可能出现的音素状态序列会是下面的形式:S0,S0,S1,S1,S1,S2,S2。在chain model的HMM拓扑结构中,用Sp状态来表示音素,如果之后连续出现此音素,则是用Sb这种空状态来表示,可以在图中看到Sp状态只能往前跳,不存在自跳弧,这样的话可能出现的音素序列是下面的形式:Sp,Sb,Sb,Sb,Sb。所以说chain model的建模颗粒度是音素级别的,而非音素状态级别的。chain model所采用的神经网络为TDNN(如下图),一般的HMM-DNN声学模型,对于每一帧的声学特征,都会给出这一帧在不同的音素状态上的概率,TDNN也不例外,即多少帧特征就会有多少帧的输出。chain model的特殊点在于,他没有把TDNN的每一帧输出都用来做解码,而是采用跳帧的方式,即每隔三帧取一帧的输出给到解码器做解码。HMM为了适应这种跳帧,放大了建模颗粒度,就是我们前面介绍的那样,即使这样跳帧,也不会丢掉音素。这样跳帧带来的好处就是,解码的耗时可以比一般的HMM-DNN减少三分之二。
我们上面讲到损失函数计算方式是,分子由音频的标注文本序列计算,分母是由lattice来做近似计算。chain model对损失函数的计算和之前完全不同,首先分子是在标注文本的解码空间生成的lattice上做计算,分母的计算则是由真正的解码图来算,并非和之前一样,用lattice的近似。那么这里又回到了之前的问题,在真正的解码图上做计算实际开销很大,所以chain model所用的解码图并非是词级别的,而是音素级别的解码图,所以用的语言模型也是音素级的语言模型,这样就减少了计算量。为了减少计算量的另一个措施便是,抛弃之前的上中下文音素建模的假设(即三音素triphone),采用了前后相关音素bi-phone。chain model的训练过程是在GPU上进行的,为了配合GPU的并行加速训练,会在准备阶段就把训练数据切分成固定大小的chunk,一般为(0.9s/1.2s/1.5s)。同时为了避免过拟合,引入了cross-ectropy作为第二个训练的损失函数。3.chain model训练流程
4.1 训练脚本概览训练脚本的主入口在run.sh中,主体代码如下:
这里我们是采用自己的训练样本,没有运行这步代码,而是自己准备好kaldi所需要的格式,即有spk2utt,utt2spk,wav.scp,text文件。接下来的代码会检查提供的发音词典情况,并且利用发音词典,生成解码图中的L.fst:
最后部分是根据语言模型和发音词典,组成解码图的LG.fst的过程:
4.3 HMM-GMM训练第一部分首先是计算训练测试音频的声学特征,这里是mfcc特征,同时会把训练集分成两个比较小的训练集,是因为模型的初始训练阶段会采用小参数量和小数据量的训练,之后慢慢增大参数量和数据量:
第三、四部分是三音素声学模型训练、测试,最终将所有训练数据进行强制对齐:
最后部分是进行LDA+MLLT适应性训练,这一步用处不大且耗时,我们在训练时去掉了这一步:
整个HMM-GMM过程的资源消耗情况如下,进程数为25:
第四部分是对TDNN模型结构的定义:
5. 不同声学模型的效果对比
为了展示文章中提到的几个声学模型的实际效果,我们用相同的训练集(混合了几个开源数据集),训练了不同的声学模型。训练的硬件配置为:2个CPU,32个逻辑核心,内存为251G,显卡是两张2080ti。CPU训练时开启的进程数为15个。最终测试结果如下:
首先第一列是HMM-GMM系统的性能,第二列是用TDNN替代GMM作为发射概率建模,是HMM-DNN的一种,这里用TDNN是为了对比chain model的实验结果,因为chain model也用了相同的TDNN。首先可以看到无论是HMM-TDNN还是chain model,和GMM建模相比较,他们对性能都有非常大的提升,所以说DNN对GMM的替代,是革命性的。对比第二列第三列,我们在HMM-TDNN的基础之上,用chain model的一系列tricks,则能够把性能进一步提升。
总结
语音识别技术发展至今,形成了基于HMM和端对端的两大流派。本文在对chain model做介绍的同时,也对HMM流派的知识点和思想进行了阐述。chain model是HMM流派中比较重要的模型,他的思想既脱胎于HMM流派的经典模型同时又在各个方面做了很多的精妙的改进,对chain model的理解是理解HMM流派重要的一环。参考文献:[1]. Aubert - An overview of decoding techniques for large vocabulary continuous speech recognition – 2002[2]. Dahl et al. - Context-Dependent Pre-Trained Deep Neural Networks for Large-Vocabulary Speech Recognition – 2012[3]. Rabiner - A tutorial on Hidden Markov Models and Selected Applications in speech recognition – 1989[4]. Young, Odell, Woodland - Tree-based state tying for high accuracy acoustic modelling - 1994[5]. Jeff.A - A Gentle Tutorial of the EM Algorithm and its Application to Parameter Estimation for Gaussian Mixture and Hidden Markov Models - 1998[6]. Veselý et al. - Sequence-discriminative training of deep neural networks - 2013[7]. Povey et al. - Purely sequence-trained neural networks for ASR based on lattice-free MMI – 2016[8]. Peddinti, Povey, Khudanpur - A time delay neural network architecture for efficient modeling of long temporal contexts - 2015
部门简介:
58同城TEG技术工程平台群AI Lab,旨在推动AI技术在58同城的落地,打造AI中台能力,以提高前台业务人效和用户体验。
AI Lab目前负责的产品包括:智能客服、语音机器人、"灵犀"智能语音分析平台、智能写稿、CRM销售商机智能分配系统、语音识别、AI算法平台等,未来将持续加速创新,拓展AI应用。
部门详细介绍可点击:ailab.58.com
作者简介李咏泽:58同城TEG技术工程平台群AI Lab高级算法工程师
AI Lab 招聘信息欢迎关注开源项目 qa_matchqa_match是58同城开源的一款基于深度学习的问答匹配工具,支持一层和两层结构知识库问答。qa_match通过意图匹配模型支持一层结构知识库问答,通过融合领域分类模型和意图匹配模型的结果支持两层结构知识库问答。qa_match同时支持无监督预训练功能,通过轻量级预训练语言模型(SPTM,Simple Pre-trained Model)可以提升基于知识库问答等下游任务的效果。github地址:https://github.com/wuba/qa_match
文章介绍:
欢迎关注部门微信公众号:58AILab
欢迎在欣秀(https://app.ic3i.com)平台上加入"58同城AILab技术沙龙"圈子,一起交流技术,可以扫描以下二维码加入该圈子。