AI大語音(八)——GMM-HMM聲學模型


基於GMM的0-9孤立詞識別系統以詞為訓練單位,添加新詞匯需要重新進行訓練,若要涵蓋所以詞,差不多6萬個詞,訓練量極大,預測時也要計算6萬個模型的似然,哪個大預測出哪個,在實際應用中有局限性,只能應用於小詞匯量場合。
孤立詞識別系統識別了0-9的數字的英文單詞,但是假如有人用英文報電話號碼,是識別不了整個號碼的,甚至識別不了其中的one。
孤立詞識別這個模型無法從一連串英文號碼(里面包含了one two等多個數字)中准確識別出one,關鍵點在於連續語音中不知道哪些語音信號是one,哪些是two,或者說不知道哪些幀是one哪些幀是two。
所以若要識別連續的0123456789的語音就需要Viterbi在HMM中進行對齊,這就是GMM-HMM模型了。
1 識別流程
在GMM獨立詞識別中以單詞為單位建模,在GMM-HMM中以音素為單位進行建模。對連續語音提取MFCC特征,將特征對應到狀態這個最小單位,通過狀態獲得音素,音素再組合成單詞,單詞串起來變成句子。
其中,若干幀對應一個狀態,三個狀態組成一個音素,若干音素組成一個單詞,若干單詞連成一個句子。難點並在於若干幀到底是多少幀對應一個狀態了,這就使用到了viterbi對齊。 為了提高識別率,在三音子GMM-HMM模型基礎上,又用DNN模型取代GMM模型,達到了識別率明顯的提升。
將特征用混合高斯模型進行模擬,把均值和方差輸入到HMM的模型里。GMM描述了狀態的發射概率,擬合狀態的輸出分布。
單音素模型雖然可以完成基本的大詞匯量連續語音識別的任務,但是存在一定缺點。
  • 建模單元數目少,一般英文系統的音素數量在30~60個,中文系統音素數目在100個左右。這么少的建模單元難以做到精細化的建模,所以識別率不高。
  • 音素發音受其所在上下文的影響,同樣的音素,在不同的上下文環境中,數據特征也有明顯的區分性。
所以就考慮音素所在的上下文(context)進行建模,一般的,考慮當前音素的前一個(左邊)音素和后一個(右邊)音素,稱之為三音素,並表示為A-B+C的形式,其中B表示當前音素,A表示B的前一個音素,C表示B的后一個音素。
2 單音素模型
訓練問題
一段2秒的音頻信號,經過【分幀-預加重-加窗-fft-mel濾波器組-DCT】,得到MFCC特征作為輸入信號,此處若以幀長為25ms,幀移為25ms為例,可以得到80幀的輸入信號,這80幀特征序列就是觀察序列:
給定觀察序列O,估計GMM-HMM模型的參數,這就是訓練問題。
A是轉移概率,B是觀察概率,也就是發射概率。我們使用GMM模型對觀察概率建模,所以實際參數就是高斯分布中的均值和方差。模型參數就是轉移概率、高斯分布的均值、方差(單高斯的情況)。單音素GMM-HMM模型的訓練是無監督訓練。
靈魂的拷問:我們對語音進行了標注,也就是給了輸入語音的label,為什么這個訓練還是無監督的呢?
AI大語音:模型的訓練並不是直接輸入語音,給出這個語音是什么,然后和標注label求loss。模型的訓練是輸入特征到音素的狀態的訓練,即我們並不知道哪一幀輸入特征對應哪個音素的哪一個狀態。訓練的目的就是找到幀對應狀態的情況,並更新狀態的gmm參數。把每一幀都歸到某個狀態上,本質上是進行聚類,是無監督訓練。)
單音素GMM-HMM模型的訓練通過Viterbi訓練(嵌入式訓練),把“S IH K S”對應的GMM模型嵌入到整段音頻中去訓練。
訓練步驟:
步驟一:初始化對齊
為什么要初始化對齊?
為viterbi提供初始參數A、B。
一開始不知道一段語音的哪些幀對應哪些狀態,我們就進行平均分配。比如兩秒的“ six”語音一共80幀,分成四個因素“S IH K S”,每個音素分配到20幀,每個音素又有三個狀態組成,每個狀態分配6或者7幀。這樣就初始化了每個狀態對應的輸入數據。
什么意思?
就是假設前0-20幀數據都是“S”這個音素的發音,20-40幀數據都是“IH”這個音素的發音,40-60幀是“K”這個音素的發音,60-80是“S”這個音素的發音。但這只是一個假設,事實到底如此我們還不知道。我們可以在這個初始對齊下進一步優化。
步驟二:初始化模型
HMM模型λ=(A,B,Π)。我們對初始對齊的模型進行count。count什么呢?
在初始化對齊后就可以count狀態1->狀態1的次數,狀態1->狀態2的次數,這就是轉移次數,轉移次數/總轉移次數=轉移概率。轉移初始轉移概率A(aij)就得出了。
Π就是[1,0,0,0...],一開始在狀態一的概率是100%。在語音識別應用中由於HMM是從左到右的模型,第一個必然是狀態一,即P(q0=1)=1。所以沒有pi這個參數了。
還有B(bj(ot))參數怎么辦?
一個狀態對應一個gmm模型,一個狀態對應若干幀數據,也就是若干幀數據對應一個gmm模型。一開始我們不知道哪些幀對應哪個狀態,所以gmm模型的輸入數據就無從得知。現在初始化后,狀態1對應前6幀數據,我們就拿這六幀數據來計算狀態1的gmm模型(單高斯,只有一個分量的gmm),得到初始均值 和方差 。
(完美的假想:假設我們初始化分配幀恰恰就是真實的樣子,那么我們的gmm參數也是真實的樣子,這個模型就已經訓練好了。)
步驟三:重新對齊(viterbi硬對齊,Baum-welch軟對齊)
假想想想就好了,現在得到的GMM-HMM模型就是個胚芽,還有待成長,懂事,這就需要重新對齊,向真實情況逼近的重新對齊。如何逼近真實情況?viterbi算法根據初始化模型λ=(A,B,Π)來計算。它記錄每個時刻的每個可能狀態的之前最優路徑概率,同時記錄最優路徑的前一個狀態,不斷向后迭代,找出最后一個時間點的最大概率值對應的狀態,如何向前回溯,得到最優路徑。得到最優路徑就得到最優的狀態轉移情況,哪些幀對應哪些狀態就變了。轉移概率A就變了。
哪些幀對應哪些狀態變了導致狀態對應的gmm參數自然就變了,也可以跟着更新均值 和方差,即發射概率B變了。
步驟四:迭代
新的A和新的B又可以進行下一次的Viterbi算法,尋找新的最優路徑,得到新的對齊,新的對齊繼續改變着參數A、B。如此循環迭代直到收斂,則GMM-HMM模型訓練完成。
靈魂的拷問:迭代何時是個頭?
AI大語音:一般是設置固定輪數,也可以看一下對齊之后似然的變化,如果變化不大了,基本就是收斂了。)
3 三音子模型
決策樹
考慮音素所在的上下文(context)進行建模,一般的,考慮當前音素的前一個(左邊)音素和后一個(右邊)音素,稱之為三音素,並表示為A-B+C的形式,其中B表示當前音素,A表示B的前一個音素,C表示B的后一個音素。
使用三音素建模之后,引入了新的問題
  1. N個音素,則共有N^3 個三音素,若N=100,則建模單元又太多了,每個音素有三個狀態,每個狀態對應的GMM參數,參數就太多了。
  2. 數據稀疏問題,有的三音素數據量很少
  3. unseen data問題。有的三音素在訓練數據沒有出現,如K-K+K,但識別時卻有可能出現,這時如何描述未被訓練的三音素及其概率。
所以通常我們會根據數據特征對triphone的狀態進行綁定,常見的狀態綁定方法有數據驅動聚類和決策樹聚類,現在基本上是使用決策樹聚類的方式。
三音素GMM-HMM模型是在單音素GMM-HMM模型的基礎上訓練的。
為什么要先進行單音素GMM-HMM訓練?
通過在單音素GMM-HMM模型上viterbi算法得到與輸入 對應的最佳狀態鏈,就是得到對齊的結果。
對每個音素的每個state建立一顆屬於他們自己的決策樹,從而達到狀態綁定的目的。
  • 從根節點經過一些列的問題,相近(相似度高)的(綁定)三音素到達同一個葉子節點。
  • 決策樹建立的基本單元是狀態,對每個三音子的每個state建立一顆屬於他們自己的決策樹。
  • 每個三音素對於該問題都會有一個Yes或No的的答案,那么對所有的三音素來講,該問題會把所有三音素分成Yes集合和No集合。
  • 根節點是說這是以zh為中心音素的三音素的第三個狀態的決策樹,第一個狀態和第二個狀態也都有各自獨立的決策樹
  • 即使zh-zh+zh從未在訓練語料中出現過,通過決策樹,我們最終將它綁定到一個與之相近的葉子節點上。
通過單音素系統,我們可以得到單音素各個狀態所有對應的特征集合,做一下上下文的擴展,我們可以得到三音素的各個狀態所有對應特征集合。通過這樣的方法,我們可以把訓練數據上所有的單音素的數據對齊轉為三音素的對齊。
決策樹的生成流程:
  1. 初始條件(單音素系統對齊,一個根節點)
  2. 選擇當前所有待分裂的節點、計算所有問題的似然增益,選擇使似然增益最大的節點和問題對該節點進行分裂。
  3. 直至算法滿足一定條件終止。
4 總結
從單音素GMM-HMM到三音子GMM-HMM的過程就是發現問題,解決當前問題又引入了新問題,再解決新問題的過程。 單音素建模單元少,難以做到精細化建模,識別率不高,單音素發音受上下文影響。 為了優化或者說解決這些問題,引進三音子模型,導致建模單元又太多,所謂過猶不及。同時還出現數據稀疏問題,unseen data問題。 為了解決這些問題,引入帶決策樹的GMM-HMM模型,解決了上面問題。 為了提高識別率,在三音子GMM-HMM模型基礎上,又用DNN模型取代GMM模型,達到了識別率明顯的提升。
——————
淺談則止,細致入微AI大道理
掃描下方“AI大道理”,選擇“關注”公眾號
a歡迎加入!
 
▼下期預告▼
AI大語音(九)——基於GMM-HMM的連續語音識別系統
 
▼往期精彩回顧▼
AI大語音(一)——語音識別基礎
AI大語音(二)——語音預處理
AI大語音(三)——傅里葉變換家族
AI大語音(四)——MFCC特征提取
AI大語音(五)——隱馬爾科夫模型(HMM)
AI大語音(六)——混合高斯模型(GMM)
AI大語音(七)——基於GMM的0-9語音識別系統
 
 
 



免責聲明!

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



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