【語音識別】一文搞懂hmm


一 一些概念理解

  • 熵:代表信息的不確定性。描述一件事情的時候,考慮到所有的不確定性,能將風險降到最低
  • 最大熵:如上,描述一件未知狀態時候,要盡量考慮所有的可能結果,以此估計出的結果風險才最低。從此處出發,使用最大熵模型,可以用在估計詞性,要考慮到該詞語的上下文條件,發音。這些都考慮到后給出的結果風險最低,指的是最接近實際結果。 最大熵的模型函數如下

   假設w3是要估計的詞的詞性,則w1,w2可以是該詞前后的詞語,subject是當前文章的主題。所以訓練的過程,就是已經知道w3的詞性和w1,w2的內容,對於每個詞的情況,推導參數lamda和z的值。解碼的時候,對於要估計的w3的結果,是公式中代入lamda和z的值,解出來。解碼的時候,還應用到最大似然度,因為每個詞語相關的特征有很多種。不同的特征導入,估計出的結果p(w3/w1,w2,subject)的值很多,給出該值最大的時候的w3對應的結果,就是解碼的工作。(以上為個人理解,后續發現誤解及時做補充修改)

  • HMM隱馬爾科夫模型: 常用在可以看到一部分過程,以及一些輸出的參數。需要估計隱含的參數內容。該過程是馬爾科夫過程,前者會影響到后者,該參數是隱含參數。看到的的參數是輸出參數
  •  hmm模型參數:兩個狀態集合,三個概率矩陣。兩個狀態:隱含狀態S,可見狀態O,三個矩陣:起始概率矩陣,隱含狀態轉移概率(前一時刻是s1,后一時刻是s2的概率),輸出轉移概率(當前時刻狀態是s1,輸出為o1的概率)。HMM參數是(π,A,B),π是初始概率矩陣,A是隱含狀態轉移矩陣,B是某個時刻由隱藏狀態到可見狀態的發射概率矩陣。

      如上圖,有三種篩子,4面體,6面體,8面體。分別是D6,D4,D8.每種篩子都有1.2,3,4.。。。7,8. 並且三種篩子排好了順序,D6后面是D4,在后面是D8,順序可能是D6,D4,D8,D4,D4,D8,D6,D6. 因此該例子中:

     投擲一次篩子,看到的結果可能為1,2,3.。。。7.8.假設投擲多次篩子看到的結果為2,3,8,5,6,1,2,這個序列為可見參數,也叫做可見輸出狀態。而我們已經規定好三種篩子的排列順序,D6,D4,D8,D4,D4,D8,D6,D6。也就是d6后面只能是d4或者d8.這個序列為轉換狀態。從d6轉換到d4的結果。我們想知道的是到底第一個篩子是d6,d4,d8中哪一個。這就是隱含參數。hmm模型解決的就是使用一些可見輸出狀態和轉換概率,估計其中的隱含參數。

 

 

如果提前知道所有的轉換序列和所有的可見結果,要估計隱含結果還是比較完整容易的。可是實際中,往往只能知道一部分轉換結果和一部分輸出結果,想估計所有的隱含結果。hmm主要用在如下三種問題中

  1. 知道都有幾種篩子(隱含狀態數量),每種是什么(轉換概率),根據投篩子得到的結果(可見狀態序列),估計每次投的都是那種篩子(隱含狀態序列)  

         解法:結果可以理解為,是一串結果,推導出這一串結果(一串序列)產生的概率最大,則就是估計的結果。該解法稱作最大似然估計,求一串骰子序列,這串序列產生可見狀態序列的概率最大。

              

如果如上結果,求最可能的序列。那就是求出每個篩子出現該結果的最大概率然后乘起來。如上序列概率最大時候,第一個必須是d4,p=1/4,第二個必須是d6,p=1/6,第三個必須是d4.這樣情況得到概率最大p=1/4*1/6*1/4.所以最可能序列是646.所以解決此種問題方法可以是窮舉。

      以上問題對應的是解碼問題。解決方法是維特比算法。

  實際情況中會做剪枝,不是每種狀態都會考慮。

   維特比算法兩步驟:(1)每次從序列長度為1算起,算序列長度為1時候每個結果的最大概率,然后長度增加1,在前個基礎上繼續計算當前骰子出現結果的最大概率。以此類推,直到得到最后一個骰子的結果的最大概率。(2)由這串序列對應的最大概率,從后往前將序列反向推導出來。

 在計算的過程中,這個算法計算每一個時刻每一個狀態的部分概率,並且使用一個后向指針來記錄達到當前狀態的最大可能的上一個狀態。最后,最可能的終止狀態就是隱藏序列的最后一個狀態,然后通過后向指針來查找整個序列的全部

     2. 知道都有幾種篩子(隱含狀態數量),每種是什么(轉換概率),根據投篩子得到的結果(可見狀態序列),想知道投擲出這個結果的概率。

      對應的是模型的評估問題。

      也就是,已知模型參數和一串可見序列,想知道這串可見序列的概率。簡單理解就是窮舉從起始狀態到當前時刻出現該狀態,所有可能的路徑。然后每種路徑得到一個概率,概率的和就是出現此結果的概率。窮舉法太耗費時間,可以用前向算法估計。

   

    αt(sj)表示HMM在時刻t處於狀態j,且observation = {x1,...,xt}的概率。前向算法,是t+1時刻的概率可以基於t時刻的概率計算。然后右邊的概率是所有路徑的和。主要是遞歸的思路。

   3. 已知觀察序列和輸出序列,由此學習出hmm參數的三元組,用它來最好的描述我們看到的現象。這就是模型的訓練。對應的算法是Baum-Welch算法,也叫作前向后向算法。

     對於給定的可觀察序列O,沒有一個最優的hmm參數λ可以使得P(O\λ)最大,所以只能用一個局部最優解替代全局最優解。

 首先假設一組參數,使得觀察序列A的情況下得到輸出序列O的結果最大。然后根據實際的輸出序列評估這些參數做調整,直到和正確結果最接近。

  •  GMM的作用    

          GMM就是幾個高斯模型的疊加,一般是3-5個。一個高斯模型就是一個正態分布,表征了信號的概率密度。語音識別中,一個word由多個音素組成,一個音素就是一個狀態state,一個state對應一個高斯混合模型GMM。每個GMM中有K個模型參數。

  • 語音識別的過程:1)語音分成frame,每個frame提取特征mfcc 2) 每個frame的特征跑GMM,得到每個frame屬於每個音素的概率 

    3). 根據每個單詞的HMM狀態轉移概率a計算每個狀態sequence生成該frame的概率; 哪個詞的HMM 序列跑出來概率最大,就判斷這段語音屬於該詞

  • 經典hmm的語音識別步驟:
    1 【訓練以得到每個GMM參數和每個HMM參數】
    2 a,前向后向算法計算P(O\A)--(輸出序列\隱含序列)
    3 b,B-W算法求出最優解λ=max(P(O\A)
    4 c,對於輸入語音,用veterbi算法查出對應哪個hmm模型概率最大,由此得到最佳序列
    5 d,根據最佳序列對應組合出音素和單詞
    6 e,根據語言模型形成詞和句子

     

  • 對每個單詞建立一個HMM模型,需要用到該單詞的訓練樣本,這些訓練樣本是提前標注好的,即每個樣本對應一段音頻,該音頻只包含這個單詞的讀音。當有了該單詞的多個訓練樣本后,就用這些樣本結合Baum-Welch算法和EM算法來訓練出GMM-HMM的所有參數,這些參數包括初始狀態的概率向量,狀態之間的轉移矩陣,每個狀態對應的觀察矩陣(這里對應的是GMM,即每個狀態對應的K個高斯的權值,每個高斯的均值向量和方差矩陣)

  • 在識別階段,輸入一段音頻,如果該音頻含有多個單詞,則可以手動先將其分割開(考慮的是最簡單的方法),然后提取每個單詞的音頻MFCC特征序列,將該序列輸入到每個HMM模型(已提前訓練好的)中,采用前向算法求出每個HMM模型生成該序列的概率,最后取最大概率對應的那個模型,而那個模型所表示的單詞就是我們識別的結果。

 

 

 

 

參考:

 

http://blog.chinaunix.net/uid-26715658-id-3453274.html   隱馬爾克夫模型攻略

 

http://www.cnblogs.com/skyme/p/4651331.html   一文讀懂hmm

 

http://blog.csdn.net/abcjennifer/article/details/27346787 GMM-HMM語音識別

 

http://wenku.baidu.com/link?url=myzmzMqOZqc988bK5Pe3uDgE8bvRvwjAcNz4Oq6naD_584EnWGZjHPHiYVo06s7sx1VF-yayezJfXBjRjicCxo6DYXV-x8ehrCnF04Kai5e  hmm模型進行語音識別的基本思路

 

http://yanyiwu.com/work/2014/04/07/hmm-segment-xiangjie.html   hmm的中文分詞

http://blog.chinaunix.net/uid-26715658-id-3453274.html 維特比算法介紹

http://www.hankcs.com/nlp/hmm-and-segmentation-tagging-named-entity-recognition.html  HMM與分詞,詞性標注(內有維特比算法的python代碼)

http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/main.html  隱馬爾克夫模型的英文介紹

http://www.cnblogs.com/tornadomeet/archive/2013/08/23/3276753.html  總結了hmm的幾個點

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM