HMM學習筆記2

HMM學習筆記2

 

再請教了大神時候,發現前面並沒有走對路子,有很多問題沒有搞懂,記錄在這裏希望指正。

工作:

1、找到幾個版本的HMM:

(1、 HTK(Hidden Markov Model Toolkit):

  HTK是英國劍橋大學開發的一套基於C語言的隱馬爾科夫模型工具箱,主要應用於語音識別、語音合成的研究,也被用在其他領域,如字符識別和DNA排序等。HTK是重量級的HMM版本。

  HTK主頁:http://htk.eng.cam.ac.uk/

(2、 GHMM Library:
  GHMM主頁:http://www.ghmm.org/

(3、 UMDHMM(Hidden Markov Model Toolkit):

UMDHMM主頁:http://www.kanungo.com/software/software.html

看懂UMDHMM中前線算法、維特比算法、前向-後向算法的程序,測試並加註釋。

2、利用kaldi中單音素訓練的例子:

數據庫:timit;

特徵:39維MFCC並作CMVN;

聲學模型:HMM。

結果:

---------------------------------DevSet------------------------------------------

%WER 31.7 | 40015057 | 71.8 19.5 8.7 3.5 31.7 100.0 | -0.457 |

--------------------------------TestSet------------------------------------------

%WER 32.7 | 1927215 | 70.5 19.8 9.6 3.2 32.7 100.0 | -0.482 |

 

問題:

1、結果的閱讀;

2、在kaldi工具箱中,自帶的gmm和hmm模塊是分開編寫的,放在不同的文件夾中。但是在之前看的理論中,GMM-HMM系統的聲學模型部分通常是寫在一起的。網上查到有關kaldi的資料中顯示,將gmm類寫好之後,是用hmm程序來調用的(hmm-topology),但是在所跑的例子中,腳本直接調用的是make好的gmm模塊。並且,在工具箱中我也沒有找到make完成的hmm可執行文件。

3、分別閱讀了kaldi中gmm程序和hmm程序,大部分沒有明白。其中gmm部分本來了解不多,而hmm部分與理論中講到的算法並不相同。在kaldi中訓練模塊用Viterbifst來實現而並不是前面介紹的前向-後向算法,迭代到一定次數認爲結束。這種算法可以讓訓練速度更快,想要全面瞭解需要先了解一下kaldi中嵌入式訓練的內容。

4、kaldi在訓練hmm過程中引入了一個關鍵的概念:“對齊”。

我的理解是,對齊就是找到每一幀對應的狀態。程序在初始化狀態向量時用的是全局的均值和方差,每個狀態對應多個幀數的特徵(任意分配的),例如10幀,通常在計算時,會將這10幀的均值和方差放到一起計算,其中用到EM算法。然後利用Viterbi算法:第一幀來時,我們可以默認爲第一個狀態,那麼下一幀來時我們根據viterbi更新的公式,可以看下圖的算法來得到一條路徑,這個路徑我們會知道每幀分別對應的是哪個狀態。

總結來說,kaldi中hmm訓練分以下四步:

(1. 單高斯模型的初始化,這裏均值和方差我們使用全局的均值和方差;

(2. 生成每個句子的topo結構;

(3. 首先給每個狀態分配相同的幀數,然後開始做對齊;

(4. 迭代做對齊,然後計算每個音素對應的HMM。

以上是我自己歸納,需要驗證正確性。

5、kaldi在初始化向量時用到了聚類機制,需要進一步瞭解。

6、如何利用hmm-topology生成topo結構,並計算狀態轉移矩陣。

 

下一步工作:

在實際連續語音識別的訓練過程中,通常用三因素訓練(考慮了上下文的影響),現在可以查到的資料大部分針對三因素做處理。三因素模型的訓練過程與單音素類似,其實只是狀態變了而已。

第一步就是單音素到三音素的過程。假如我們有60個單因素,那麼總共有60的三次方個三音素。

第二步就是聚類,這裏主要使用決策樹來完成。kaldi裏也不需要我們去做,這個我們只要設定一些參數就可以。這個目的就是減少計算。

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