1. 程式人生 > >基於HMM的語音識別(一)

基於HMM的語音識別(一)

利用業餘時間寫一下自己看書的感受,就當作隨筆把,這樣也能幫助自己記憶,同時關於kaldi的章節我選擇先停一停,我感覺把這個問題理解透再去檢視kaldi可能會事半功倍。我選取的章節來源於"The Application of Hidden Markov Models in Speech Recognition",英文版的,有興趣的可以去看看。廢話不多說,我們直接進入主題。

下圖顯示了大型連續語音詞彙識別的主要部分:


說實話看這圖要不是我會語音增強的部分知識的話,我會認為很簡單,的確,圖看上去確實很簡單,不過任何一個細節拿出來都足以讓我們翻閱無數資料。如圖,輸入的波形(語音)被轉化固定長度的語音響亮序列:


這個過程稱之為特徵提取,也就是著名的Feature Extraction(不要看到公式就害怕,就是有序的向量的排列)。那麼解碼器(Decoder)就會嘗試去尋找最可能產生如上Y的字:w1:L=w1,....wL 的序列,假如decoder嘗試尋找


(PS:哇,看到這裡我突然想到了為什麼要訓練模型了)。然而,由於P(w|Y)直接建模是十分困難的,我們對上述式子使用貝葉斯準則就會得到如下的相等式子:


這裡其實有朋友會像我剛開始一樣迷惑:這TM是瞎說呀,當我們不會貝葉斯準則嗎,朋友,在打死我之前,我是這麼說服我自己的:


大爺你細想一下是不是這個道理。其中p(Y|w)的概率是由聲學模型(acoustic model )來決定的,而後者P(w)是由語言模型來決定的【仔細品這兩句話呀,越品越感覺有點意思】。聲音的基本單位是音素(Phone,別像我似的記成手機,唉)。比如單詞bat由三個音素組成:/b/,/ae/,/t/。大約40個這樣的音素能組成英文【其實我的老師一直講母音28個,子音20個,我不知道作者這裡是不是想說48,所以用了大約這個詞】。

對於任何給我們的w,其對應的聲學模型都是通過串聯音素模型來拼成我們預先定義好字典中的單詞(仔細品味,反問自己一句,聲學模型是用來幹什麼的?)。其中音素模型的引數都是通過由語音和其帶有標籤的資料訓練而得到的。語言模型通常是一個N-gram模型,每個詞的概率僅在他的N-1個詞上進行調整【我的理解就是換個角度:他的下個詞的概率僅僅與本詞相關,與馬爾可夫的狀態改變相互聯絡一下,是不是感覺有點意思,錯了當我沒說。。。】。通過在合適的語料庫中計數N元組來估計N元引數【這句話我理解不了,日後分析】。decoder通過搜尋所有可能的單詞來修建那些低概率的可能從而保證了搜尋易於處理【這句前半句很明白,後半句保證了搜尋易於處理什麼意思,我的想法是隨著剪掉的可能越來越多,搜尋也就越來越快,處理起來越容易】。當話語結束時,輸出最可能的序列。另外,現代解碼器可以生成包含最可能假設的緊湊形式。

由於時間關係,今天到此結束,明天晚上回來繼續。