转载:
http://www.inf.ed.ac.uk/teaching/courses/asr/2012-13/asr03-hmmgmm-4up.pdf
http://blog.chinaunix.net/uid-26715658-id-3453274.html
花了一天时间想要搞明白HMM&&GMM在语音识别中的原理,每次觉得明白了之后,仔细一想又不明白了,现在大体捋一捋顺序,好记性不如烂笔头嘛~
上面链接的第一个为英文PPT,从HMM到GMM识别和训练都有详细推导过程,下一篇为中文博客,主要讲的是HMM,大体意思都相似。
先说HMM要解决的三个问题:
1、给定观察序列,求出某个HMM模型产生此观察序列的概率,产生此序列的最大概率的HMM作为识别输出值。涉及前向算法
如在语音中,创建了K个word的模型,来了一个单词“yes",把”yes“得到的特征值分别作为K个word的输入,最后得到K个输出概率,概率最大的就是识别结果。
2、给定观察序列,找到一条状态转移路径,使当前观察序列得到最大的概率。涉及后向算法
3、训练一个HMM模型,给定一系列训练样本,得到HMM各个参数,代表一个模型。涉及前向-后向算法(EM算法的特例)
如要训练一个单词”yes"的HMM 模型,那么我选择标记的N个yes发音的样本,由此可以得到yes这个单词的HMM模型,下次来个单词yes就可以按照1得出识别结果概率。
HMM的两个定量:一个是隐藏状态(隐藏状态的个数由经验给定),一个是观察序列(隐藏状态不可观测,观察序列是由隐藏状态观察到的,所以一定程度上可以反映隐藏状态,但是二者数量不一定相同)。
相应的产生三个参数,各个状态初始概率pi,一个是A(i, j)表示由状态i转移到j的概率;一个是Bj(Ok),表示在状态j产生观察值k的概率(在这一部分,用到的是GMM模型)。
在语音中,一般为每个word创建一个HMM模型,每个状态表示一个音素(具体是什么不用费心,可以使1 2 3也可以使a b c表示)。观测值就是每个语音的特征值,对于一个单词,先对语音进行分帧,比如得到一帧的MFCC特征(大概39维,用Ok表示),这样分为n帧,就得到了n个时间状态的观察序列(O1,O2, .......On)。
那么语音识别过程如下:
给定了一个“yes”的HMM模型,模型参数Aij,Bj(Ok)都以给出,设状态数为4,。应用前向算法,具体是啥可见链接。可以求出此模型产生观测序列(O1,O2, .......On)的概率
P(O1,O2, .......On) = SUM(j){ALFAj(t+1) = SUM(i)(ALFAi(t)AijBj(Ot+1))} 1<= t <= n 1<= i, j <=4;其实就是在On时刻,各个状态j输出概率之和。
模型训练过程:
模型由两部分组成,一个是HMM,一个是GMM,每个HMM状态对应一个GMM模型。那么一共的参数为(pi,Aij, Bj(Ok))再进行细化,Bj(Ok)由GMM模型给出,GMM模型(假设由M个高斯组成),三个参数(c, u, 6)其中c代表每个高斯的权重,u代表每个高斯的均值,6表示协方差矩阵。则要训练的参数变为(pi,Aij,ck, uk, rk);
给出训练样本,即很多组观测值。
那么模型训练过程遵循EM过程:
E-step:先初始化各个参数pi,Aij,ck, uk, rk,输入一个观测值序列,得到中间变量e(i,j),r(j)。
M-step:根据中间变量更新各个pi,Aij,ck, uk, rk变量,具体公式见链接,那么得到了新的参数。
重复EM部,经过所有样本训练后,即可得到相应的训练模型,即可进行上面的识别过程了,^_^
公式啥的实在不容易打,如果想详细了解,还是见链接吧。这样看来HMM&&GMM模型确实挺复杂,想要完全懂,还要多摸索。