GMM-HMM學習筆記

        最近幾天鑽研了語音處理中的GMM-HMM模型,閱讀了一些技術博客和學術論文,總算是對這個框架模型和其中的算法摸清了皮毛。在這裏梳理一下思路,總結一下這幾天學習的成果,也是爲以後回顧時提高效率。

        本文主要結合論文和博客資料來介紹我對GMM-HMM的理解,主要分爲以下幾個部分:第一個部分介紹語音識別總體框架,第二部分介紹典型的HMM結構和識別過程,第三部分介紹HMM的學習算法,最後補充介紹一些其他細枝末節的相關點。

1. 語音識別總體框架

        首先,如下圖所示是一個常見的語音識別框架圖,語音識別系統的模型通常由聲學模型和語言模型兩部分組成,分別對應於語音到音節概率的計算和音節到字概率的計算。這裏我們要探討的GMM-HMM模型屬於其中的聲學模型。 而語言模型是用來計算一個句子出現概率的概率模型。它主要用於決定哪個詞序列的可能性更大,或者在出現了幾個詞的情況下預測下一個即將出現的詞語的內容,即用來約束單詞搜索。


        接下來,如下所示是一個更具體一些的語音識別框架圖。很明顯,在這個圖中,我們已經將聲學模型明確爲GMM-HMM模型。從這個圖中已經可以看到GMM和HMM的雛形了。


        

        從這兩個圖中,可以歸納語音識別的主要步驟包括: (1)預處理模塊: 對輸入的原始語音信號進行處理,濾除掉其中的不重要的信息以及背景噪聲,並進行相關變換處理。(2)特徵提取:提取出反映語音信號特徵的關鍵特徵參數形成特徵矢量序列,常用的是由頻譜衍生出來的Mel頻率倒譜系數(MFCC)。典型地,用長度約爲10ms的幀去分割語音波形,然後從每幀中提取出MFCC特徵,共39個數字,用特徵向量來表示。(3)聲學模型訓練:根據訓練語音庫的特徵參數訓練出聲學模型參數,識別時將待識別的語音的特徵參數同聲學模型進行匹配,得到識別結果。目前的主流語音識別系統多采用隱馬爾可夫模型HMM進行聲學模型建模,這將在下一節進行介紹。(4)語言模型訓練:語言建模能夠有效的結合漢語語法和語義的知識,描述詞之間的內在關係,從而提高識別率,減少搜索範圍。對訓練文本數據庫進行語法、語義分析,經過基於統計模型訓練得到語言模型。(5)語音解碼:即指語音技術中的識別過程。針對輸入的語音信號,根據己經訓練好的HMM聲學模型、語言模型及字典建立一個識別網絡,根據搜索算法在該網絡中尋找最佳的一條路徑,這個路徑就是能夠以最大概率輸出該語音信號的詞串。

2. GMM-HMM結構和識別過程

        首先,如下圖是一個典型的HMM結構圖。隱藏節點是我們不能直接觀察到的節點,我們只能通過觀察節點的狀態去推測隱藏節點的狀態。隱藏節點的各個狀態之間可以相互轉換,每一種狀態下又以一定的概率函數生成觀察節點的狀態。下所述,一個HMM 由初始概率,狀態轉移矩陣和混淆矩陣組成。



援引zouxy09大神的話“ HMM是對語音信號的時間序列結構建立統計模型,將其看作一個數學上的雙重隨機過程:一個是用具有有限狀態數的Markov鏈來模擬語音信號統計特性變化的隱含(馬爾可夫模型的內部狀態外界不可見)的隨機過程,另一個是與Markov鏈的每一個狀態相關聯的外界可見的觀測序列(通常就是從各個幀計算而得的聲學特徵)的隨機過程。”在單詞詞典(lexicon)中,根據每個單詞的發音過程,以音素作爲隱藏節點,音素的變化過程構成了HMM狀態序列。每一個音素以一定的概率密度函數生成觀測向量(即MFCC特徵向量)。在GMM-HMM中,用高斯混合函數去擬合這樣的概率密度函數。如下圖所示是一個GMM-HMM的模型框架示意圖。



再來看一個語音識別中HMM的示意圖,如下英文單詞“six”所示,可以看到隱藏節點的每一個狀態對應於一個單獨音素,單詞“six”的HMM結構由這一系列的音素狀態連接而成。需要注意的是,在這裏的HMM結構中,由於語音的時間序列特性,HMM不允許靠後狀態到靠前狀態之間的狀態轉換。一般地,狀態轉換隻允許自環轉換和到後一節點的轉換。自環轉換的存在是因爲有的音素可能會持續較長時間。


        

       如果我們得到了各個單詞的HMM模型,那麼識別的過程如下圖所示。我們以單詞“one”,“two”,“three”爲例,分別計算觀測數據的後驗概率,並從中去概率最大的單詞作爲識別結果。


        

        那麼如何計算在某個HMM模型下,已知觀測數據的後驗概率呢?這對應的就是隱馬爾科夫的第一類問題,我們採用前向算法計算這一概率值。以單詞“five”爲例,爲了計算概率該模型下已知觀測數據出現的概率P(O|M),我們對所有可能的隱狀態序列的概率值進行加和。假設單詞“five”由三個音素[f],[ay]和[v]組成(或者說,隱藏節點包含這三種狀態),那麼一個由10幀構成的觀測序列可能對應如下一些隱狀態序列:



        對於每一種隱狀態序列,根據初始概率向量,狀態轉移矩陣和混合高斯模型計算隱狀態和觀測狀態同時出現的概率,然後對所有以上情形進行概率求和,便得到了P(O|M)。更具體地,《Speech and Language Processing: An introductiontonatural language processing, computational linguistics, and speechrecognition》的9.6節對前向算法和Viterbi算法的計算細節進行了展示說明。

以上部分是針對每個單詞分別建立HMM,但這種思路在連續大詞彙量語音識別中就不太實用,因爲單詞數量太多,而且連續語音中相同單詞的發音也可能會有所不同。這時,我們將識別單元縮小,爲每個音素建立一個HMM。連續語音識別的基本思想就是找出所有音素,併爲它們分別建立HMM模型。對於每一個音素HMM,它通常由5個狀態組成,其中第一個和最後一個狀態沒有實際意義,中間三個狀態分別代表着音素開始階段、音素穩定階段和音素結束階段,如下圖所示。這一部分可以參考Reference 10這篇博文,講解比較清晰易懂,另外它對embedded training的講解也比較清晰。


3. 學習算法

        以上展示了在訓練好GMM-HMM模型之後,如何對語音信號進行識別,那麼GMM-HMM模型的訓練過程又是怎麼樣的呢?直接摘錄abcjennifer的博客,首先,GMM的訓練採用的是EM算法:

E(estimate)-step: 根據當前參數 (means, variances, mixing parameters)估計P(j|x)

M(maximization)-step: 根據當前P(j|x) 計算GMM參數

而HMM也是採用的類似於EM算法的前向後向算法(Baum-Welch算法),過程爲:

E(estimate)-step: 給定observation序列,估計時刻t處於狀態sj的概率

M(maximization)-step: 根據該概率重新估計HMM參數aij.

具體計算公式和過程參見Reference 2和Reference 11。

        綜合來看,對於GMM-HMM模型,我們需要訓練的有對應於混淆矩陣B的高斯混合模型參數,以及狀態轉移矩陣A。其中,在狀態轉移矩陣A中,只有對應於自環和後繼的狀態轉移概率需要被訓練,其它項全都設置爲0,並且不再改變。最直觀的方式,我們人工地將訓練樣本切分爲不同的單詞,然後對不同的單詞分別訓練不同的矩陣B和矩陣A。 但是在實際的連續語音訓練當中,這種人工方式不太可行,一是因爲人力成本大,二是因爲對比音素更小的單元人工切分表現差。因此,一般語音識別系統並不單獨對句子中的音素或者單詞進行訓練,而是讓訓練算法自動地去對音素或者單詞進行分割和拼合。這種對整個聲學模型進行訓練的過程就稱爲嵌入式訓練。如下圖所示爲一個數字識別系統的訓練示意圖,我們構建的HMM模型時針對整個句子。


        然後開始在整個訓練集上對參數A和B進行迭代地更新,Baum-Welch算法是嵌入式訓練中的一個組成部分。整個嵌入式訓練過程如下:

給定:語音波形數據集(Wavefile),對應翻譯(Transcription),單詞發音詞典(Pronunciation Lexicon)

Step 1:構建整個句子的HMM結構

Step 2:將A矩陣中對應於自環和後繼的項初始化爲0.5,其他項初始化爲0

Step 3:用整個訓練集的全集均值和方差對B矩陣進行初始化

Step4:運行Baum-Welch算法的迭代過程。在每一次迭代中,計算前向概率和後向概率以得到t時刻處於狀態i的概率,

然後將它用於更新參數A和B。重複迭代過程,直至系統收斂。

4. 其他

        在學習過程中,發現好些博客上作者的認識或者表述容易造成誤解,我這幾天也走了不少彎路纔算是搞明白了皮毛。經過反復的研讀,最後發現Reference 4中的很多表述是比較準確的。

        至此將語音識別的皮毛(只敢說皮毛,不敢說基本框架)總結完了,對自己這幾天的學習有了個交待。最後,一些博客上經常出現諸如subphone,triphone等更高級的內容,卻沒有做清楚的表述。對於這些內容,可以去研讀相關學術論文。subphone在Reference 8的9.2節進行了介紹,triphone在Reference 8的10.3節進行了介紹。Reference 9介紹了tied-mixturetriphone,其中包含了高斯分裂,沒太看懂。


Reference:

1. 語音識別的基礎知識與CMUsphinx介紹(http://blog.csdn.net/zouxy09/article/details/7941585

2. GMM-HMM語音識別模型原理篇(http://blog.csdn.net/abcjennifer/article/details/27346787

3. 語音識別系統原理介紹---從gmm-hmm到dnn-hmm(http://blog.csdn.net/wbgxx333/article/details/18516053

4. GMM-HMM語音識別簡單理解(http://www.cnblogs.com/tornadomeet/archive/2013/08/23/3276753.html

5. HMM學習最佳範例(http://www.52nlp.cn/hmm-learn-best-practices-one-introduction

6. EM及高斯混合模型(http://www.cnblogs.com/zhangchaoyang/articles/2624882.html

7. A Tutorial on Hidden MarkovModels and Selected Applications in Speech Recognition

8. Speech and Language Processing:An introduction to natural language processing, computational linguistics, andspeech recognition(2006)

9. Tree-Based State Tying for HighAccuracy Modelling

10. HMM+GMM語音識別技術詳解級PMTK3中的實例(http://blog.csdn.net/fandaoerji/article/details/44853853)

11. Hidden Markov Models and Gaussian Mixture Models (http://www.inf.ed.ac.uk/teaching/courses/asr/2012-13/asr03-hmmgmm-4up.pdf


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章