Chapter1-4_Speech_Recognition(HMM)
文章目錄
- 1 HMM用在哪里
- 2 HMM的state
- 3 改造成DNN
- 3.1 Tandem
- 3.2 DNN-HMM Hybrid
本文為李弘毅老師【Speech Recognition - HMM (optional)】的課程筆記,課程視頻youtube地址,點這里👈(需翻墻)。其中也涉及到了部分李琳山老師關于HMM的詳解(講得非常清楚,請務必先搞懂HMM,再看這篇)。
下文中用到的圖片均來自于李宏毅老師和李琳山老師的PPT,若有侵權,必定刪除。
文章索引:
上篇 - 1-3 CTC, RNN-T and more
下篇 - 1-5 Alignment of HMM, CTC and RNN-T
總目錄
1 HMM用在哪里
沒有深度學習的語音識別系統可以用下面這幅圖來表示,不過很多用到深度學習的也基本是把其中的一些模塊替換調成了DNN而已。要輸出一段聲音信號,得到對應的文字,需要四個東西:
- 聲音特征(Feature Vectors)。這個我們之前也有提到過,忘了的可以看下這里,一般會用一個叫做MFCC的方法,把聲音信號轉化成長度為TTT,特征維度為39維的向量。
- 聲學模型(Acoustic Models)。這里是用到HMM(Hidden Markov Model)的地方,就是輸入Feature Vectors,得到每個Feature Vector對應的state是什么,而這里的state一般是指比Phoneme(發音的基本單元,比如th-ih-s-ih-z-s-p-ih-ch)更小的基本單元。
- 詞典(Lexicon)。用來把聲學模型得到的一串state轉換成對應的單詞,比如(th-ih-s) → this。
- 語言模型(Language Model)。這個就是把得到的單詞變成一個完整通順的句子的模型。
我們這篇主要講的就是這個聲學模型(Acoustic Models),其他的部分暫時不去關心。
上面這個是李琳山老師的說法,李弘毅老師講的更抽象一些,但本質是一樣的。如下圖所示,比如我們有一個模型可以計算給定聲音信號XXX,得到輸出序列YYY的概率P(Y∣X)P(Y|X)P(Y∣X),那么我們只需要遍歷所有的YYY,然后找到使得P(Y∣X)P(Y|X)P(Y∣X)的概率最大的那個YYY就可以了。但是,YYY的可能性太多了,這樣的計算消耗太大了,這個方案,這里不討論。
學過貝葉斯定理的都知道,這個條件概率是可以變一變的,經過如下圖所示的變化后,我們只需要找到一個YYY,使得P(X∣Y)P(Y)P(X|Y)P(Y)P(X∣Y)P(Y)最大就可以了,而這里的P(X∣Y)P(X|Y)P(X∣Y)就是我們的聲學模型(Acoustic Models),這里的P(Y)P(Y)P(Y)就是我們的語言模型(Language Model),P(X)P(X)P(X)和我們要找的YYY沒有關系,可以直接扔掉。有時P(Y)P(Y)P(Y)也可以不用考慮。而這里的P(X∣Y)P(X|Y)P(X∣Y)可以用很機智的演算法去求解。
其實李弘毅老師講的P(X∣Y)P(X|Y)P(X∣Y)就是李琳山老師講的聲學模型(Acoustic Models)和詞典(Lexicon)的結合。
2 HMM的state
HMM里需要一個叫做state的東西,如上文所述,它在我們的聲學模型里,就是一個比Phoneme更小的東西,那它究竟有多小呢?答案就是,它可以任意小,只要我們的計算資源足夠就可以。首先,Phoneme會根據上下文被拆分成Tri-phone,Tri-phone就是說,我們今天的"uw"的這個音在不同的上下文中是不一樣的,可以是"d-uw+y"的"uw",也可以是"y-uw+th"的"uw",把句子中前一個Phoneme和后一個Phoneme都加進來,就變成了Tri-phone。而我們的state比Tri-phone還要小,一個Tri-phone可以拆成多個state,這個state人已經無法分辨了,具體要拆成幾個state,就看我們的計算資源有多少了。
為什么要拆的這么小呢?因為在計算HMM的時候,我們希望人在發出每個state所對應的音的時候,是可以用高斯混合模型(GMM)去模擬它的分布的,而不同的人說同一個詞時,發出的音時不一樣的,所以希望這個state可以代表非常細的音。
所有的YYY都可以轉換成state,所以,我們我們今天要求的P(X∣Y)P(X|Y)P(X∣Y),就可以轉變為求P(X∣S)P(X|S)P(X∣S)。
可以想象,按這種做法的話,我們的state會非常多,比如Phoneme有30個,最后把每個Tri-phone再切成3個單元的話,我們將會有303×330^3\times3303×3個state。這意味著什么?Emmm~這意味著我們要很多的高斯混合模型(GMM)。我們先來講下HMM的計算中需用到的幾個概率函數。
計算HMM的時候,我們需要知道三個概率,一個叫做轉移概率(Transition Probability),一個叫做發射概率(Emission Probability),還有一個叫做初始概率(initial state probabilities)。李弘毅老師在講的時候沒有提到初始概率,那我們就默認是所有的state初始概率都是相等的吧。
- 轉移概率:從一個state變到任意另一個state的概率。
- 發射概率:每個state產生該time step對應的特征向量的概率,如P(X1∣"t?d?uw1")P(X^1|"t-d-uw1")P(X1∣"t?d?uw1")。
- 初始概率:最開始從某個state開始的概率。
其中的發射概率就是說我們的每個state都要有一個高斯混合模型(GMM),也就是我們要303×330^3\times3303×3個GMM!更難處理的是,有些state在數據中出現的是很少的,我們稱為rare state,很難學好。這個時候,一種方法是把這些rare state映射到其他相近的state的GMM上,另一種就是2010年提出的Subspace GMM。Subspace GMM這里簡單說一下,就是說我們現在所有的state都有一個公用的池子(Pool),每個state要計算發射概率的時候,從Pool里撈幾個GMM出來就可以了。
好,現在假設我們已經有了轉移概率和發射概率,但我們仍舊無法把P(X∣S)P(X|S)P(X∣S)計算出來,因為我們并不知道每個XiX^iXi是由哪個state產生的。李弘毅老師說,states的個數往往小于聲音特征向量XXX的長度。因此,如果按順序用完所有的state的話,可以有很多條路徑,HMM做的就是把所有路徑的概率加起來。
這個從路徑對應到特征向量的操作,就叫做對齊(alignment)。這個在下節課會詳細介紹。
3 改造成DNN
3.1 Tandem
Tandem沒有改變原來的整套方案,只是在對于輸入的特征進行了一個分類,使得每個time step的acoustic feature都有預測出來的對應于每一個state的概率。然后把這個DNN的輸出當作新的acoustic feature,再放進原來的模型里去跑就可以了。
3.2 DNN-HMM Hybrid
HMM里面是有一個GMM的模型的,也就是上文所說的發射概率的計算模型。DNN-HMM Hybrid就是把這個GMM模型換成了DNN去做。DNN可以是CNN或者LSTM這些。
之前GMM模型是計算出P(x∣a)P(x|a)P(x∣a),也就是給定state aaa發射出特征xxx的概率。現在的DNN能計算P(a∣x)P(a|x)P(a∣x),也就是給定特征xxx,則xxx是state aaa的概率。然而,這兩個東西不一樣呀。于是就需要用條件概率轉換一下,得到
P(x∣a)=P(a∣x)P(x)P(a)P(x|a)=\frac{P(a|x)P(x)}{P(a)} P(x∣a)=P(a)P(a∣x)P(x)?
然后這里,P(a∣x)P(a|x)P(a∣x)就是DNN的輸出,P(a)P(a)P(a)可以從數據中統計出來,P(x)P(x)P(x)不用去管它。。。
為什么要用DNN來替換GMM呢?有人認為P(x∣a)P(x|a)P(x∣a)是generative learning,而P(a∣x)P(a|x)P(a∣x)是discriminative learning,然后大家認為后者比較厲害,這樣。也有人認為DNN的參數比較多,比較厲害,這樣。而實際證明,這種方法,很強。
我仔細想了下,感覺這個和Tandem的區別其實并不大。它們其實都是要有一個DNN的state classifier。
不過,這個state classifier怎么train呢?我們都知道,trainDNN的模型是需要標簽的,然而我們并不知道現在的XiX^iXi分別屬于哪一個state。這該咋辦?實際操作的時候,用了類似于半監督的方法,就是利用HMM+GMM來train一個模型,然后拿這個train好的模型的結果來當作標簽去train這個DNN的模型。然后再把train的DNN的結果當作標簽,訓練一個新的DNN,一直反復這樣下去。這樣的方法很強,train出來的模型結果和人類接近!
總結
以上是生活随笔為你收集整理的Chapter1-4_Speech_Recognition(HMM)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 6033. 转换数字的
- 下一篇: LeetCode 1739. 放置盒子(