GMM-HMM语音识别模型 原理篇
本文簡明講述GMM-HMM在語音識(shí)別上的原理,建模和測試過程。這篇blog只回答三個(gè)問題:
1.?什么是Hidden Markov Model?
HMM要解決的三個(gè)問題:
1) Likelihood
2) Decoding
3) Training
2. GMM是神馬?怎樣用GMM求某一音素(phoneme)的概率?
3. GMM+HMM大法解決語音識(shí)別
3.1 識(shí)別
3.2 訓(xùn)練
3.2.1 Training the params of GMM
3.2.2 Training the params of HMM
首先聲明我是做視覺的不是做語音的,迫于**需要24小時(shí)速成語音。上網(wǎng)查GMM-HMM資料中文幾乎為零,英文也大多是paper??嗫嘧穼そK于貌似搞懂了GMM-HMM,感謝語音組老夏(http://weibo.com/ibillxia)提供資料給予指導(dǎo)。本文結(jié)合最簡明的概括還有自己一些理解應(yīng)運(yùn)而生,如有錯(cuò)誤望批評指正。
====================================================================
1. 什么是Hidden Markov Model?
ANS:一個(gè)有隱節(jié)點(diǎn)(unobservable)和可見節(jié)點(diǎn)(visible)的馬爾科夫過程(見詳解)。
隱節(jié)點(diǎn)表示狀態(tài),可見節(jié)點(diǎn)表示我們聽到的語音或者看到的時(shí)序信號(hào)。
最開始時(shí),我們指定這個(gè)HMM的結(jié)構(gòu),訓(xùn)練HMM模型時(shí):給定n個(gè)時(shí)序信號(hào)y1...yT(訓(xùn)練樣本), 用MLE(typically?implemented in?EM) 估計(jì)參數(shù):
1. N個(gè)狀態(tài)的初始概率
2. 狀態(tài)轉(zhuǎn)移概率a
3. 輸出概率b
--------------
- 在語音處理中,一個(gè)word由若干phoneme(音素)組成;
- 每個(gè)HMM對應(yīng)于一個(gè)word或者音素(phoneme)
- 一個(gè)word表示成若干states,每個(gè)state表示為一個(gè)音素
用HMM需要解決3個(gè)問題:
1).?Likelihood: 一個(gè)HMM生成一串observation序列x的概率<?the Forward algorithm>
其中,αt(sj)表示HMM在時(shí)刻t處于狀態(tài)j,且observation = {x1,...,xt}的概率,
aij是狀態(tài)i到狀態(tài)j的轉(zhuǎn)移概率,
bj(xt)表示在狀態(tài)j的時(shí)候生成xt的概率,
2).?Decoding: 給定一串observation序列x,找出最可能從屬的HMM狀態(tài)序列<?the Viterbi algorithm>
在實(shí)際計(jì)算中會(huì)做剪枝,不是計(jì)算每個(gè)可能state序列的probability,而是用Viterbi approximation:
從時(shí)刻1:t,只記錄轉(zhuǎn)移概率最大的state和概率。
記Vt(si)為從時(shí)刻t-1的所有狀態(tài)轉(zhuǎn)移到時(shí)刻t時(shí)狀態(tài)為j的最大概率:
記為:從時(shí)刻t-1的哪個(gè)狀態(tài)轉(zhuǎn)移到時(shí)刻t時(shí)狀態(tài)為j的概率最大;
進(jìn)行Viterbi approximation過程如下:
然后根據(jù)記錄的最可能轉(zhuǎn)移狀態(tài)序列進(jìn)行回溯:
3).?Training: 給定一個(gè)observation序列x,訓(xùn)練出HMM參數(shù)λ = {aij, bij}??the EM?(Forward-Backward) algorithm
這部分我們放到“3.?GMM+HMM大法解決語音識(shí)別”中和GMM的training一起講
---------------------------------------------------------------------
2. GMM是神馬?怎樣用GMM求某一音素(phoneme)的概率?
2.1 簡單理解混合高斯模型就是幾個(gè)高斯的疊加。。。e.g. k=3
fig2. GMM illustration and the probability of x
2.2 GMM for state sequence?
每個(gè)state有一個(gè)GMM,包含k個(gè)高斯模型參數(shù)。如”hi“(k=3):
PS:sil表示silence(靜音)
fig3. use GMM to estimate the probability of a state sequence given observation {o1, o2, o3}
其中,每個(gè)GMM有一些參數(shù),就是我們要train的輸出概率參數(shù)
fig4. parameters of a GMM
怎么求呢?和KMeans類似,如果已知每個(gè)點(diǎn)x^n屬于某每類 j 的概率p(j|x^n),則可以估計(jì)其參數(shù):
?, 其中?
只要已知了這些參數(shù),我們就可以在predict(識(shí)別)時(shí)在給定input sequence的情況下,計(jì)算出一串狀態(tài)轉(zhuǎn)移的概率。如上圖要計(jì)算的state sequence 1->2->2概率:
fig5. probability of S1->S2->S3 given o1->o2->o3
---------------------------------------------------------------------
3. GMM+HMM大法解決語音識(shí)別
<!--識(shí)別-->
我們獲得observation是語音waveform, 以下是一個(gè)詞識(shí)別全過程:
1). 將waveform切成等長frames,對每個(gè)frame提取特征(e.g. MFCC),?
2).對每個(gè)frame的特征跑GMM,得到每個(gè)frame(o_i)屬于每個(gè)狀態(tài)的概率b_state(o_i)
fig6. complete process from speech frames to a state sequence
3). 根據(jù)每個(gè)單詞的HMM狀態(tài)轉(zhuǎn)移概率a計(jì)算每個(gè)狀態(tài)sequence生成該frame的概率; 哪個(gè)詞的HMM 序列跑出來概率最大,就判斷這段語音屬于該詞
宏觀圖:
fig7. Speech recognition, a big framework
(from Encyclopedia of Information Systems, 2002)
<!--訓(xùn)練-->
好了,上面說了怎么做識(shí)別。那么我們怎樣訓(xùn)練這個(gè)模型以得到每個(gè)GMM的參數(shù)和HMM的轉(zhuǎn)移概率什么的呢?
①Training the params of GMM
GMM參數(shù):高斯分布參數(shù):
從上面fig4下面的公式我們已經(jīng)可以看出來想求參數(shù)必須要知道P(j|x),即,x屬于第j個(gè)高斯的概率。怎么求捏?
fig8. bayesian formula of P( j | x )
根據(jù)上圖 P(j | x), 我們需要求P(x|j)和P(j)去估計(jì)P(j|x).?
這里由于P(x|j)和P(j)都不知道,需要用EM算法迭代估計(jì)以最大化P(x) = P(x1)*p(x2)*...*P(xn):
A. 初始化(可以用kmeans)得到P(j)
B. 迭代
? ? E(estimate)-step: 根據(jù)當(dāng)前參數(shù)?(means,?variances, mixing parameters)估計(jì)P(j|x)
? ? M(maximization)-step: 根據(jù)當(dāng)前P(j|x) 計(jì)算GMM參數(shù)(根據(jù)fig4 下面的公式:)
?, 其中?
②Training the params of HMM
前面已經(jīng)有了GMM的training過程。在這一步,我們的目標(biāo)是:從observation序列中估計(jì)HMM參數(shù)λ;
假設(shè)狀態(tài)->observation服從單核高斯概率分布:,則λ由兩部分組成:
HMM訓(xùn)練過程:迭代
? ? E(estimate)-step: 給定observation序列,估計(jì)時(shí)刻t處于狀態(tài)sj的概率?
? ? M(maximization)-step: 根據(jù)重新估計(jì)HMM參數(shù)aij.?
其中,
E-step:?給定observation序列,估計(jì)時(shí)刻t處于狀態(tài)sj的概率?
為了估計(jì), 定義: t時(shí)刻處于狀態(tài)sj的話,t時(shí)刻未來observation的概率。即
這個(gè)可以遞歸計(jì)算:β_t(si)=從狀態(tài) si 轉(zhuǎn)移到其他狀態(tài) sj 的概率aij?*?狀態(tài) i 下觀測到x_{t+1}的概率bi(x_{t+1})?*?t時(shí)刻處于狀態(tài)sj的話{t+1}后observation概率β_{t+1}(sj)
即:
定義剛才的為state occupation probability,表示給定observation序列,時(shí)刻t處于狀態(tài)sj的概率P(S(t)=sj | X,λ)?。根據(jù)貝葉斯公式p(A|B,C) = P(A,B|C)/P(B|C),有:
由于分子p(A,B|C)為
其中,αt(sj)表示HMM在時(shí)刻t處于狀態(tài)j,且observation = {x1,...,xt}的概率;
: t時(shí)刻處于狀態(tài)sj的話,t時(shí)刻未來observation的概率;
且
finally, 帶入的定義式有:
好,終于搞定!對應(yīng)上面的E-step目標(biāo),只要給定了observation和當(dāng)前HMM參數(shù) λ,我們就可以估計(jì)了對吧 (*^__^*)?
M-step:根據(jù)重新估計(jì)HMM參數(shù)λ:
對于λ中高斯參數(shù)部分,和GMM的M-step是一樣一樣的(只不過這里寫成向量形式):
對于λ中的狀態(tài)轉(zhuǎn)移概率aij, 定義C(Si->Sj)為從狀態(tài)Si轉(zhuǎn)到Sj的次數(shù),有
實(shí)際計(jì)算時(shí),定義每一時(shí)刻的轉(zhuǎn)移概率為時(shí)刻t從si->sj的概率:
那么就有:
把HMM的EM迭代過程和要求的參數(shù)寫專業(yè)點(diǎn),就是這樣的:
PS:這個(gè)訓(xùn)練HMM的算法叫?Forward-Backward algorithm。
一個(gè)很好的reference:點(diǎn)擊打開鏈接
from:?http://blog.csdn.net/abcjennifer/article/details/27346787
總結(jié)
以上是生活随笔為你收集整理的GMM-HMM语音识别模型 原理篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习Deep learning Fr
- 下一篇: CUDA系列学习(一)An Introd