框架

基于GMM-HMM模型的语音识别的框架如下图所示:

  • 在数据准备阶段,需要获得的数据包括:音频、文本,以及词典、音素集、问题集等
  • 在特征提取阶段,根据前文所述的方法,对原始音频数据进行分帧等操作,提取MFCC特征
  • 在单音素GMM-HMM建模阶段,使用单音素作为基本的识别单元,进行模型训练
  • 在三音素GMM-HMM建模阶段,使用三音素作为基本的识别单元,进行模型训练
  • 在解码阶段,根据训练得到的模型参数,从wav推出txt

几种模型

根据识别单元的不同,可将GMM-HMM模型划分为几种类型

基于孤立词的GMM-HMM

目标

为词表中的每个词建立一个GMM-HMM模型,对于待识别音频,找出使该观测值概率最大的模型,识别结果就是该模型对应的单词。用公式表示如下:

 answer =argmaxw vocab Pw(Xtest )\text { answer }=\underset{w \in \text { vocab }}{\arg \max } P_{w}\left(\boldsymbol{X}_{\text {test }}\right)

其中,Xtest \boldsymbol{X}_{\text {test }}表示音频特征,PwP_{w}是词w的概率模型,vocab是词表

PwP_{w}可以是GMM-HMM模型、DNN等。当PwP_{w}是GMM-HMM模型时,其状态数通常为3状态,如下图所示:

训练

使用训练数据,训练对应词的PwP_{w}模型,即估计GMM-HMM模型参数。可使用前面介绍过的Viterbi学习算法或者Baum-Welch学习算法。

解码

方法1

解码时,系统输入的是各个词的HMM-GMM模型以及待识别的语音信号特征Xtest \boldsymbol{X}_{\text {test }},需要输出Xtest \boldsymbol{X}_{\text {test }}是哪个单词。

具体计算时,对所有的w,计算Pw(Xtest )P_{w}\left(\boldsymbol{X}_{\text {test }}\right),取概率最大的值所对应的w作为识别结果。

计算方法上,可以选用前面介绍的前向算法(求总体出现概率)或Viterbi算法(求最优路径概率)

方法2

除了对每个单词分别构建GMM-HMM模型以外,还可以对所有待识别的单词(词表中的词)统一构建一个GMM-HMM模型,如下图所示
识别one和two两个单词

在这种方法中,解码过程只能使用Viterbi算法,求出最优路径所对应的单词,作为解码结果。

在结束状态与起始状态之间连接一条边,即可将该模型用于连续的孤立词识别(如上图蓝色箭头所示,可识别连续数字one-two)

基于单音素的GMM-HMM

孤立词系统的缺点

  • 建模单元数、计算量和词典大小成正比
  • 词的状态数(a/accomplishment)对每个词应该不同,长词应该使用更多的状态
  • OOV(Out of Vocabulary)问题
  • 词并不是一个语言的基本发音单元,以词为建模单元无法共享这些发音的基本单元。

音素(Phone)

音素是发音的基本单元,如

英文音素(CMU phone,39)
AA AE AH AO AW AX AXR AY
B BD CH D DD DH DX EH ER EY
F G GD HH IH IX IY JH K
KD L M N NG OW OY P PD
R S SH T TD TH TS UH UW
V W X Y Z ZH 静音Silence(SIL)

中文音素(可以认为声韵母就是音素)
a o e i u v
b p m f d t n l g k h j q x
zh ch sh z c s y w
ai ei ui ao ou iu ie ue er
an en in un vn
ang eng ing ong 静音Silence(SIL)

词典

词典是词到音素序列的映射, 0~9 10个数字的英文词典如下:

音素
one W AA N
two T UW
three TH R IY
four F AO R
five F AY V
six S IH K S
seven S EH V AX N
eight EY T
nine N AY N
zero Z IY R OW

模型结构

在GMM-HMM模型中,每个音素使用经典的3状态结构,同一单词的不同音素依次相连,构成完整的HMM图,如下图所示:

解码

解码时,根据训练好的GMM-HMM模型,使用Viterbi算法确定最优路径,从而确定解码的单词。

基于三音素的GMM-HMM

单音素的缺点

  • 建模单元数少,一般英文系统的音素数量在30~60个,中文系统的音素数量在100个左右
  • 音素的发音受其所在上下文的影响(协同发音),如

1)连读: Not at all,He is

2)吞音:first time

三音素

考虑音素的上下文(Context),通常考虑音素的前一个和后一个音素,称为三音素,表示为A-B+C

例如:KEEP K IY P => #-K+YI, K-IY+P, YI-P+#

绑定

为了解决三音素数量过大、某些三音素没有或只有较少的训练数据的问题,可以将多个三音素单元“绑定”,使上下文发音相近的三音素共享参数,从而缓解上述问题。绑定方法主要有自底向上的聚类方法和自顶向下的决策树方法。

聚类

自底向上的方法,但是对于测试集中没有遇到过的三音素,无法解决。

决策树

自顶而下的方法,是三音素绑定的实际解决方案。决策树是一颗二叉树,每个非叶子节点上都有一个问题,每个叶子节点上是一个集合,每个集合中包含同一类(绑定)的三音素。

绑定的粒度是状态,即A-B+C和A-B+D的第1个状态绑定在一起,
并不代表其第2、3个状态也要在一起,B的每个状态都有一颗小的决策树

常见问题集

  • 元音(Vowel): AA AE AH AO AW AX AXR AY EH ER …
  • 爆破音(Stop): B D G P T K
  • 鼻音(Nasal): M N NG
  • 摩擦音(Fricative): CH DH F JH S SH TH V Z ZH
  • 流音(Liquid): L R W Y

决策树的生成过程

  1. 初始状态(一个结点)
  2. 选择一个结点
  • 从问题集中选择似然增益最大的问题作为该节点问题
  • 建立该节点左右子节点,并将该节点上的统计量分为两部分
  1. 重复2 ,直至
  • 达到一定数量的叶子结点
  • 似然增益小于某个阈值

算法流程

基于三音素的GMM-HMM语音识别系统,总体流程如下:

  • 数据准备:音素列表、词典、训练数据(音频/文本)
  • 特征提取:MFCC特征
  • 单音素GMM-HMM:Viterbi训练
  • 三音素GMM-HMM:决策树和三音素,Viterbi训练
  • 解码