Ref
語(yǔ)音識(shí)別的原理 https://www.zhihu.com/question/20398418
HTK Book http://www.ee.columbia.edu/ln/LabROSA/doc/HTKBook21/HTKBook.html
如何用簡(jiǎn)單易懂的例子解釋隱馬爾可夫模型咆瘟? https://www.zhihu.com/question/20962240/answer/33438846
《統(tǒng)計(jì)學(xué)習(xí)方法》第10章 隱馬爾可夫模型
強(qiáng)烈建議先看完以上資料
語(yǔ)音識(shí)別的原理
語(yǔ)音識(shí)別的過(guò)程可以理解為找路:
一個(gè)朋友告訴你他從杭州站走到杭州東經(jīng)過(guò)了水嚼隘、橋、廣場(chǎng)袒餐,想讓你猜猜他走的是哪條路飞蛹,你該怎么辦呢?
那我們就找這些特征所對(duì)應(yīng)的建筑吧灸眼,分別是公園卧檐、高架橋、娛樂(lè)廣場(chǎng)焰宣,啊霉囚,在圖上最可能的就是藍(lán)色的這條線了! 于是我們就從朋友的特征描述得到了他的行走路徑匕积,這就相當(dāng)于從音頻得到了發(fā)出這些音頻的文字盈罐,即語(yǔ)音識(shí)別。
上述過(guò)程有幾個(gè)問(wèn)題闪唆,包括
- 這些特征對(duì)應(yīng)的建筑有很多盅粪,水可以是公園也可以是池塘、湖悄蕾、海等等票顾;朋友也不可能先跑到火星再坐飛船到杭州東,所以我們找的時(shí)候是在較為可能的范圍內(nèi)找的帆调,這對(duì)應(yīng)了語(yǔ)音識(shí)別中的語(yǔ)言模型奠骄,它限定了我們語(yǔ)音識(shí)別的范圍。
- 包含上述水番刊、橋戚揭、廣場(chǎng)特征的路徑有很多,我們需要將特征最可能對(duì)應(yīng)的建筑給找出來(lái)撵枢,這對(duì)應(yīng)了語(yǔ)音識(shí)別中的聲學(xué)模型民晒,它描述了我們發(fā)特定音對(duì)應(yīng)某個(gè)單詞的概率,例如我發(fā)音是
偷貓肉
锄禽,顯然潜必,對(duì)應(yīng)的單詞是tomorrow
的概率比tomato
更大。
Observe值
在語(yǔ)音識(shí)別中沃但,朋友告訴你的特征被稱(chēng)作Observe值磁滚,觀測(cè)值,其提取的流程如下圖所示
音頻波形 => (每一幀的)頻域特征序列 => (每一幀的)Observe值
上圖中這些圈圈是什么意思呢?
HMM:發(fā)音可能的路徑
舉一個(gè)具體的例子垂攘,比如我發(fā)了Hi這個(gè)單詞(在計(jì)算機(jī)里面使用音素phone來(lái)表明這個(gè)單詞是如何發(fā)音的维雇,Hi對(duì)應(yīng)于sil-h-ay-sil,sli指silence)晒他,下圖為計(jì)算發(fā)音為sil-h-ay-h-ay-sil-h-ay-sil
的概率
首先我們需要規(guī)定發(fā)音可能的路徑吱型,對(duì)Hi這個(gè)單詞而言,發(fā)音只可能是
(sil-h)-(ay-sil)
的組合陨仅,比如我把H拖得比較長(zhǎng)津滞,說(shuō)的是HHHHHHi那就是(sil-h)(sil-h)(sil-h)…-(ay-sil)
啦,前面一長(zhǎng)串的重復(fù)對(duì)應(yīng)于上圖中箭頭指向自己灼伤,Hiiiiiiiii~~~同理触徐。使用上圖這種鏈?zhǔn)降?strong>HMM就可以表示出這種發(fā)音的路徑。真正的識(shí)別當(dāng)然不止Hi這一條路徑狐赡,還有Hello,Hey,Apple等等撞鹉,是所有可能的狀態(tài)路徑的集合,語(yǔ)音識(shí)別就是從中找出一個(gè)對(duì)應(yīng)于Observe序列最可能的狀態(tài)路徑出來(lái)(這里的狀態(tài)相當(dāng)于找路中的建筑)颖侄。那么怎么知道哪個(gè)是最可能的呢鸟雏?這里先提出HMM相關(guān)的3個(gè)問(wèn)題。
關(guān)于HMM的3個(gè)問(wèn)題
問(wèn)題1:已知模型和狀態(tài)序列发皿,求產(chǎn)生特定觀測(cè)序列的概率
解釋一下上圖中符號(hào)的含義:
-
π
表示進(jìn)入到這條路徑的概率崔慧,朋友已經(jīng)告訴你是從杭州站出發(fā)了,所以π=1
-
o
表示觀測(cè)值穴墅,即朋友告訴你的特征惶室,“水”,“廣場(chǎng)”等等玄货;b(o)
則代表這個(gè)特征屬于某個(gè)建筑的概率皇钞,如在公園里出現(xiàn)水的概率比較大,則b公園(水)=0.8
松捉,b公園(廣場(chǎng))=0.2
等 -
a
則表示從一個(gè)狀態(tài)走到下一個(gè)狀態(tài)的概率夹界,如公園之后更容易走到廣場(chǎng)去,則a公園->廣場(chǎng)=0.7
回到這個(gè)問(wèn)題本身隘世。最簡(jiǎn)單的可柿,直接根據(jù)概率相乘計(jì)算;然后丙者,其實(shí)這個(gè)直接算的過(guò)程可以優(yōu)化复斥,于是有了Forward Algorithm,向前算法械媒,或者 Backward Algo目锭,向后算法评汰。后續(xù)的Baum-Welch Algo也會(huì)用到這個(gè)算法。
問(wèn)題2:已知模型和觀測(cè)序列痢虹,求這個(gè)觀測(cè)序列對(duì)應(yīng)的狀態(tài)序列
相當(dāng)于語(yǔ)音中的解碼問(wèn)題被去。最簡(jiǎn)單的,暴力破解奖唯,根據(jù)問(wèn)題1算出所有狀態(tài)序列產(chǎn)生這個(gè)觀測(cè)序列的概率惨缆,找一個(gè)最大的。采用動(dòng)態(tài)規(guī)劃優(yōu)化之后的算法為Viterbi Algo臭埋,維特比算法踪央。
問(wèn)題3:已知多個(gè)觀測(cè)序列臀玄,求模型(即求模型的a
b
π
參數(shù))
若已知對(duì)應(yīng)的狀態(tài)序列瓢阴,則為監(jiān)督算法,根據(jù)頻數(shù)進(jìn)行估計(jì)健无。
若并不知道對(duì)應(yīng)的狀態(tài)序列荣恐,則為無(wú)監(jiān)督算法,Baum-Welch Algo累贤。
GMM:特定Observe值對(duì)應(yīng)于某一狀態(tài)的概率b(o)
GMM對(duì)應(yīng)于上圖中的函數(shù)曲線b(o)叠穆,是多個(gè)正態(tài)分布的疊加(如虛線所示),應(yīng)用GMM進(jìn)行計(jì)算的過(guò)程如下圖所示(這里是問(wèn)題1:已知模型和狀態(tài)序列臼膏,求產(chǎn)生特定觀測(cè)序列的概率):
注意這里的0.7 0.4(就是a啦)對(duì)應(yīng)于HMM部分中狀態(tài)轉(zhuǎn)移的概率(箭頭上的概率)硼被,通過(guò)以上計(jì)算過(guò)程我們就能分別計(jì)算出Hi,Hello,Hey這些單詞的概率來(lái)了,概率最大的就是識(shí)別出來(lái)的文本啦渗磅。
這里僅僅展示了Hey這一個(gè)單詞的計(jì)算過(guò)程嚷硫,而不同的單詞概率密度函數(shù)(pdf)是不同的,如HTK Book里面的這張圖所示:
針對(duì)所有待識(shí)別的單詞需要都構(gòu)建這樣的一串函數(shù)(即圖中的模型)然后才能選出最大概率的作為最終識(shí)別結(jié)果始鱼。
再來(lái)一個(gè)總體的圖方便大家理解仔掸。
HMM-GMM如何被構(gòu)建出來(lái)?
以上過(guò)程有兩個(gè)問(wèn)題:
- 路徑是如何畫(huà)出來(lái)的医清?
- 函數(shù)是如何擬合出來(lái)的起暮?
這里便對(duì)應(yīng)問(wèn)題3:已知多個(gè)觀測(cè)序列,求模型会烙,需要我們通過(guò)語(yǔ)料庫(kù)里的語(yǔ)音進(jìn)行訓(xùn)練负懦,由Baum-Welch Algo得到整個(gè)模型的參數(shù)。它也是個(gè)EM算法柏腻,需要先設(shè)定一個(gè)初始值纸厉,HTK里面的做法是先將觀測(cè)值均分,和整個(gè)句子的所有狀態(tài)近似對(duì)應(yīng)葫盼,計(jì)算出初始值残腌,然后進(jìn)行迭代得到更好的值,使在該模型下產(chǎn)生這個(gè)觀測(cè)值的概率提高,最終狀態(tài)值和觀測(cè)值就能更好地對(duì)齊在一起(句子里面每個(gè)單詞的狀態(tài)對(duì)準(zhǔn)到了相應(yīng)的語(yǔ)音特征)抛猫。其中迭代優(yōu)化的值包括π
a
b
蟆盹,還有一個(gè)中間參數(shù)Lj(t)
,他表示t
時(shí)刻觀測(cè)值對(duì)應(yīng)于狀態(tài)j
的概率闺金,這就和對(duì)齊alignment聯(lián)系上啦逾滥。更詳細(xì)的介紹參考HTK Book。
維特比(Viterbi)解碼
當(dāng)訓(xùn)練過(guò)程完成之后败匹,要使用這個(gè)模型便對(duì)應(yīng)問(wèn)題2:已知模型和觀測(cè)序列寨昙,求這個(gè)觀測(cè)序列對(duì)應(yīng)的狀態(tài)序列,亦即已知wav文件對(duì)應(yīng)的特征序列掀亩,求其對(duì)應(yīng)的狀態(tài)舔哪,而狀態(tài)是單詞的更小級(jí)別的展開(kāi),最終可以轉(zhuǎn)換為單詞實(shí)現(xiàn)語(yǔ)音識(shí)別槽棍。
Viterbi解碼的算法如下圖所示捉蚤,
1代表開(kāi)始的狀態(tài),6代表結(jié)束的狀態(tài)炼七,我們的任務(wù)就是沿著一條最可能發(fā)生的路徑從1走到6缆巧,而路徑上每個(gè)黑點(diǎn)的概率都是知道的,Viterbi算法便可以通過(guò)動(dòng)態(tài)規(guī)劃的方式找出這條道路豌拙。不過(guò)Kaldi里面有另外一種解碼的方式陕悬,Lattice,這個(gè)后續(xù)再說(shuō)按傅。
總結(jié)
一張圖作為收尾和下一章的開(kāi)始:
b(o)
特定觀測(cè)值對(duì)應(yīng)某一狀態(tài)的概率不僅可以用GMM的方式計(jì)算捉超,還可以通過(guò)DNN的方式,這就是聲學(xué)模型逞敷。而Kaldi里用到的轉(zhuǎn)移模型便是WFST狂秦,這又究竟是個(gè)什么呢?