本文簡明講述GMM-HMM在語音識別上的原理,建模和測試過程。
1. 什么是Hidden Markov Model?
HMM要解決的三個問題:
1) Likelihood
2) Decoding
3) Training
2. GMM是什么?怎樣用GMM求某一音素(phoneme)的概率?
3. GMM+HMM大法解決語音識別
3.1 識別
3.2 訓練
3.2.1 Training the params of GMM
3.2.2 Training the params of HMM
====================================================================
1. 什么是Hidden Markov Model?
ANS:一個有隱節點(unobservable)和可見節點(visible)的馬爾科夫過程(見詳解)。
隱節點表示狀態,可見節點表示我們聽到的語音或者看到的時序信號。
最開始時,我們指定這個HMM的結構,訓練HMM模型時:給定n個時序信號y1...yT(訓練樣本), 用MLE(typically implemented in EM) 估計參數:
1. N個狀態的初始概率
2. 狀態轉移概率a
3. 輸出概率b
--------------
在語音處理中,一個word由若干phoneme(音素)組成;
每個HMM對應于一個word或者音素(phoneme)
一個word表示成若干states,每個state表示為一個音素
用HMM需要解決3個問題:
1) Likelihood: 一個HMM生成一串observation序列x的概率< the Forward algorithm>
其中,αt(sj)表示HMM在時刻t處于狀態j,且observation = {x1,。。.,xt}的概率
,
aij是狀態i到狀態j的轉移概率,
bj(xt)表示在狀態j的時候生成xt的概率,
2)Decoding: 給定一串observation序列x,找出最可能從屬的HMM狀態序列< the Viterbi algorithm>
在實際計算中會做剪枝,不是計算每個可能state序列的probability,而是用Viterbi approximation:
從時刻1:t,只記錄轉移概率最大的state和概率。
記Vt(si)為從時刻t-1的所有狀態轉移到時刻t時狀態為j的最大概率:
記為:從時刻t-1的哪個狀態轉移到時刻t時狀態為j的概率最大;
進行Viterbi approximation過程如下:
然后根據記錄的最可能轉移狀態序列進行回溯:
3)Training: 給定一個observation序列x,訓練出HMM參數λ = {aij, bij} the EM (Forward-Backward) algorithm
這部分我們放到“3. GMM+HMM大法解決語音識別”中和GMM的training一起講
---------------------------------------------------------------------
2. GMM是什么?怎樣用GMM求某一音素(phoneme)的概率?
2.1 簡單理解混合高斯模型就是幾個高斯的疊加...e.g. k=3
fig2. GMM illustration and the probability of x
2.2 GMM for state sequence
每個state有一個GMM,包含k個高斯模型參數。如”hi“(k=3):
PS:sil表示silence(靜音)
fig3. use GMM to estimate the probability of a state sequence given observation {o1, o2, o3}
其中,每個GMM有一些參數,就是我們要train的輸出概率參數
fig4. parameters of a GMM
怎么求呢?和KMeans類似,如果已知每個點x^n屬于某每類 j 的概率p(j|x^n),則可以估計其參數:
?
其中
只要已知了這些參數,我們就可以在predict(識別)時在給定input sequence的情況下,計算出一串狀態轉移的概率。如上圖要計算的state sequence 1->2->2概率:
fig5. probability of S1->S2->S3 given o1->o2->o3
---------------------------------------------------------------------
3. GMM+HMM大法解決語音識別
我們獲得observation是語音waveform, 以下是一個詞識別全過程:
1)將waveform切成等長frames,對每個frame提取特征(e.g. MFCC),
2)對每個frame的特征跑GMM,得到每個frame(o_i)屬于每個狀態的概率b_state(o_i)
fig6. complete process from speech frames to a state sequence
3)根據每個單詞的HMM狀態轉移概率a計算每個狀態sequence生成該frame的概率; 哪個詞的HMM 序列跑出來概率最大,就判斷這段語音屬于該詞
宏觀圖:
fig7. Speech recognition, a big framework
好了,上面說了怎么做識別。那么我們怎樣訓練這個模型以得到每個GMM的參數和HMM的轉移概率什么的呢?
①Training the params of GMM
GMM參數:高斯分布參數:
從上面fig4下面的公式我們已經可以看出來想求參數必須要知道P(j|x),即,x屬于第j個高斯的概率。怎么求捏?
fig8. bayesian formula of P( j | x )
根據上圖 P(j | x), 我們需要求P(x|j)和P(j)去估計P(j|x)。
這里由于P(x|j)和P(j)都不知道,需要用EM算法迭代估計以最大化P(x) = P(x1)*p(x2)*.。.*P(xn):
A. 初始化(可以用kmeans)得到P(j)
B. 迭代
E(estimate)-step: 根據當前參數 (means, variances, mixing parameters)估計P(j|x)
M(maximization)-step: 根據當前P(j|x) 計算GMM參數(根據fig4 下面的公式:)
?其中
②Training the params of HMM
前面已經有了GMM的training過程。在這一步,我們的目標是:從observation序列中估計HMM參數λ;
假設狀態->observation服從單核高斯概率分布:
則λ由兩部分組成:
HMM訓練過程:迭代
E(estimate)-step: 給定observation序列,估計時刻t處于狀態sj的概率
M(maximization)-step: 根據重新估計HMM參數aij.
其中,
E-step: 給定observation序列,估計時刻t處于狀態sj的概率
為了估計, 定義: t時刻處于狀態sj的話,t時刻未來observation的概率。即
這個可以遞歸計算:β_t(si)=從狀態 si 轉移到其他狀態 sj 的概率aij * 狀態 i 下觀測到x_{t+1}的概率bi(x_{t+1}) * t時刻處于狀態sj的話{t+1}后observation概率β_{t+1}(sj)
即:
定義剛才的為state occupation probability,表示給定observation序列,時刻t處于狀態sj的概率P(S(t)=sj | X,λ) 。根據貝葉斯公式p(A|B,C) = P(A,B|C)/P(B|C),有:
由于分子p(A,B|C)為
其中,αt(sj)表示HMM在時刻t處于狀態j,且observation = {x1,。。.,xt}的概率;
: t時刻處于狀態sj的話,t時刻未來observation的概率;
且
finally, 帶入的定義式有:
好,終于搞定!對應上面的E-step目標,只要給定了observation和當前HMM參數 λ,我們就可以估計了對吧 (*^__^*)
M-step:根據重新估計HMM參數λ:
對于λ中高斯參數部分,和GMM的M-step是一樣一樣的(只不過這里寫成向量形式):
對于λ中的狀態轉移概率aij, 定義C(Si->Sj)為從狀態Si轉到Sj的次數,有
實際計算時,定義每一時刻的轉移概率為時刻t從si->sj的概率:
那么就有:
把HMM的EM迭代過程和要求的參數寫專業點,就是這樣的:
評論
查看更多