最近在看圖模型中著名的HMM算法,對應的一些理論公式也能看懂個大概,就是不太明白怎樣在一個具體的機器學習問題(好比分類,迴歸)中使用HMM,特別是一些有關狀態變量、觀察變量和實際問題中變量的對應關係,所以目前急需一個實際例子來加深對HMM算法的仰慕,你們若有好的例子來具體學HMM算法的話,歡迎分享!衆所周知,著名的HMM開源庫爲Hidden Markov Model Toolkit(如下簡稱HTK),而HTK在語音識別領域應用很成功,這2天花了些時間學習了HTK的使用,完成的是最簡單孤立詞的識別,即Yes、No的語音識別,網上這方面的教程縱多,見參考資料部分。html
固然了,進行實驗的前提是正確安裝HTK,安裝過程能夠結合HTK目錄下(HTK解壓後所在目錄)的readme文件和文章windows下安裝編譯HTK語音識別工具包。算法
我主要是參考文章語音識別工具箱之HTK安裝與使用中的步驟來完成Yes/No語音識別的,大概的步驟和博主的差很少(這裏再也不重現該過程,由於這方面資料實在太多),下面主要講下一些細微的須要注意的地方:windows
1. 錄音的原文件不能太少,否則在進行HMM初始化時很容易報錯。我這裏Yes和No都錄的是25次。框架
2. 在用HSLab.exe錄音時,因爲這個小軟件實在是不太好用,有些bug。每次錄完2個音,把它標註好,重命名(即手動命名,按照必定順序,不要重名,下次錄音前需把該軟件給後從新打開,不然即便你是從新new了一個文件後錄的音,在你標註音頻文件後保存文件時該軟件頗有可能會把之前標註過的音頻信息給重複過來,這樣在後面的HInit 步驟會老出錯。所以,在每次標註音頻文件.lab時,必定要保證其標註的信息只對應一個音頻文件.sig。注意標註時,htk時間後面的單位是10us,轉換成秒時須要除以10^7.機器學習
3. 在進行Hcompv步驟時,只需運行一次來獲得vFloors文件(不須要對yes,no,sil分別運行)。工具
4. 若是在HRest步驟出現與vFloors有關的錯誤,則能夠在HRest命令中省去與vFloors相關的內容,這樣通常不太會影響後面HMM的訓練和識別。學習
5. 在HParse步驟時,在創建gram.txt文件時,文件的最後要有一個空行,不然HParse步會一直失敗。.net
其它方面基本按照語音識別工具箱之HTK安裝與使用就能夠了。另外,還HTK (v.3.1): Basic Tutorial和htkbook也是很是好的參考資料。htm
由實驗可知,這裏每一個單詞都定義爲一個HMM模型,HMM模型中狀態的個數是人爲先驗設定的,這裏統一採用4個(狀態數能夠不相同),每一個狀態的實際含義大體是該單詞發音的聲母、韻母等(也不必定嚴格對應),多個狀態的序列構成了一個單詞。每一個狀態的輸出(即觀察變量)爲GMM的參數向量,這些參數向量的長度和訓練語音斷的MFCC特徵長度一致,這裏都是39維。blog
參考資料:
HTK (v.3.1): Basic Tutorial.pdf
htkbook.pdf