本篇將直接分享我在學習傳統聲學模型:HMM-GMM 的過程中,遇到一些的困惑,和自己的理解。也希望在學習這個模型過程中,遇到同樣困惑的同學能夠作爲參考。
開整。
困惑:語音標註文件以詞級爲單位,沒有標註到每一幀,是怎麼訓練的?
問題描述:
我們觀察語音識別的標註文件,就會發現往往是詞級別的標註或者句子級別的標註。而我們的HMM-GMM模型三個狀態構成一個音素,他們這種粗粒度標註怎麼樣才能拿來進行訓練呢?
我最開始的想法是每一幀的狀態都要標註才能進行訓練,而這種粒度的標註無疑相差千萬裏。
標註示例:今天我吃了很多飯
我主觀認爲標註需要下圖這種每一幀的信號(觀察量)都標註一個具體的狀態。
然而事實並非如此,觀察大多數的標註文件後才發現,真實的標註過程甚至不會標註到音素級,甚至不會標註到單詞級。
雖然我們能夠從細緻的標註中獲得收益,但是音素級的標註人力成本達到了1:400的時間成本。
---吳恩達
認清這個現實後,我百思不得其解,終於,在苦思冥想中終於有了曙光,分享思路如下:
首先,要知道訓練過程中,我們用到的標註到底是什麼樣的。就是下圖這樣的,以音素爲單位進行標註:
可是我們沒有音素級的標註數據,怎麼才能訓練呢?
可以通過flat-start來進行音素級標註。原理就是粗暴的將音頻按照音素個數平均分開,每段數據作爲每個音素HMM的訓練數據。
例子:
幀數:1 2 3 4 5 6 7 8 9 10 11 12
標註:皮卡。
拆爲音素:p i k a (共計4個音素)
分配幀數:p(1 2 3); i(4 5 6); k(7 8 9); a(10 11 12);
這樣,訓練的問題就變成了使用(1 2 3)幀的數據來訓練p音素的HMM模型:
這就是HMM的訓練問題。
然而
疑惑又來了,沒有每個狀態對應幀,我如何訓練?
這種問題,我們可以通過EM算法進行訓練。理解EM算法,理解前向後向算法的作用是關鍵:
前向算法:可以去讀讀詳細公式,可以理解爲:下圖左邊t=3爲S2的網絡生成觀察向量X1, X2, X3的概率。公式爲:
後向算法:同前向算法,反過來。如果也是過t=3時,狀態爲S2點的話,可得下圖右邊網絡生成觀察量X4, X5, X6的概率。
如果將前向後向概率相乘,我們就可以得到t=3,狀態爲S2時,所有可能的網絡觀察到觀察向量X1 2 3 4 5 6..的概率。
我們發現如果把,t=3, S1 S2 S3三個點所有的網絡加起來,就是整個拓撲結構的發射概率。
而他們的比,一定程度上可以表示狀態i的後驗概率。
同理,如果把後向算法的點改爲t+1,狀態固定爲j。前向算法幀爲t,狀態爲i。中間乘以轉移概率和發射到t+1觀察量的發射概率,我們可以得到如下網絡結構觀察到觀察向量X1 2 3 4 5 6..的發射概率。
該圖可以表示爲t狀態爲i,t+1狀態爲j,觀察到X1 2 3 4 5 6的概率。
而這個網絡和第一個網絡概率的比值,也可以直觀的理解爲由狀態i發射到狀態j的後驗轉移概率。
到這裏如果能夠弄清楚的話,你也能夠直觀的理解前向後向在概率重估的過程中是如何發揮作用的啦,後面的推理相信你也一定能夠理解啦。
回顧:
1、將句子標註flat-start強制對齊至音素標註
2、對照標註,按照HMM-GMM的訓練方法來對每一個音素的模型進行訓練。
這是本人對HMM-GMM在語音識別過程中訓練的理解,如果有不對的地方,還望各位指點。
第一次寫博客,已經預期到很可能邏輯有問題,但本着整理自己思路,增強寫作能力的角度,還是打算寫一手,總結一下最近的學習。本系列將根據我個人的學習情況進行更新,記錄我從一個菜鳥變成大神的過程,寫作過程會參考大量前輩的文章,再此也謝謝前輩們的無私分享,讓自學之路變得輕鬆很多。