单音素 GMM 学习笔记
原理
学习资料:
1. 统计学习方法--李航
a) 学习第九章《EM 算法》,可跳过 9.4 节。弄明白 EM 算法在高斯混合模
型(GMM)学习中的应用,搞明白几个公式。
b) 学习第十章《隐马尔可夫模型》。弄明白 HMM 这一套。
2. 语音识别实践--俞栋,邓力
a) 学习第二章《混合高斯模型》。对上述 GMM 学习的补充。
b) 学习第十章《隐马尔可夫模型及其变体》。对上述 HMM 学习的补充。
3. Speech and Language Processing—Daniel Jurafsky, James H. Martin.
a) 学习第九章《Automatic Speech Recognition》。(注:因为我大四的时候看
过几遍本章,并看过一套 HMM-GMM 孤立词识别的 matlab 代码,对 HMM-
GMM 有一定基础,所以本次学习时我只看了 9.7 节的 Viterbi training 部
分)
4. Ediburg-Course. (http://www.inf.ed.ac.uk/teaching/courses/asr/)
a) asr03-hmmgmm-handout.pdf
个人理解:
论讲解的清晰度、条理性,李航的书更好一些。俞栋的书则更贴近语音,并
且该书的公式推导简直清晰,一点都不含糊,比如前向后向公式的推导。
EM 算法之前看过几遍,总是似懂非懂。本次看 EM 算法,则是在我学习过
《数理统计》这门课之后,因此在看 EM 算法的时候能加入参数估计、期望的一
些背景知识去理解 EM 算法。主要有两点要搞清楚,第一点,EM 算法其实就是
在分布已知(概率密度函数的形式已知)、参数未知的情况下去估计未知参数。
这样一来,估计 GMM 参数的 EM 算法的输入输出就较好理解了。第二点:EM 算
法是个迭代算法,最后是可以收敛到局部最优的。用上一轮计算出来的参数计算
当前轮的一些值(比如带入高斯分布公式算概率),然后去得到新的参数值。
在 Kaldi 中,单音素 GMM 的训练用的是 Viterbi training,而不是 Baum-Welch
training。因此就不是用 HMM Baum-Welch 那几个公式去更新参数,也就不用计
算前向概率、后向概率了。Kaldi 中用的是 EM 算法用于 GMM 时的那三个参数更
新公式,并且稍有改变。
Baum-Welch 算法更新参数时,因为要计算前向后向概率,很费时间,因此
使用 Viterbi Training 作为 Baum-Welch 算法的近似。在 Baum-Welch 算法中,计算
前向后向概率时,要用到所有的状态路径,在 Viterbi 训练中,用 Viterbi 路径代
替对所有状态路径的累积。
在 Viterbi 训练中,先根据上一轮的模型参数对语音特征数据进行对齐,得
到每一帧的特征所对应的 HMM 状态(在 kaldi 中是 transition-id),也就是 forced
alignment。Forced alignment 的结果是对应于特征序列的状态序列。