參考文章:
http://blog.csdn.net/quheDiegooo/article/details/60873999
http://blog.csdn.net/quhediegooo/article/details/61202901
在發音過程中,因為協同發音的影響,同一個音素在不同的位置,其發音變化很大,如下圖所示:
同樣的元音[eh]在不同的單詞中的發音在頻域上區分非常明顯。
因為單音素monophone 是上下文獨立的(context-independent)
為了能夠表示這種區別,因此提出了triphone的概念,triphone是根據左右音素來確定的,因此是上下文相關的(context-dependent)
上圖中:W對應的是詞組;Q對應的是monophone;L對應的就是triphone;P對應聚類或者狀態綁定之后的triphone
接下來本文就要討論triphone聚類/狀態綁定的過程。
聚類過程有2中,一種是居於數據驅動的聚類過程,第二種是基於決策樹的聚類過程
一、基於數據的過程
HMM狀態綁定過程如下:
步驟為:
1)用flat-start方式創建 monophone集合,每個狀態的輸出概率密度函數為單高斯概率密度,均值,方差為訓練數據的全局均值和方差(上圖1);(該單音素對應的所有訓練數據,求均值和方差);
2)用EM算法迭代3-4次,對高斯參數重新進行估計(上圖1);(該單音素對應的所有訓練數據,EM迭代訓練);
3)每個單高斯monophone q被克隆一次,用來初始化那些在訓練數據出現的,未被綁定的triphone: x-q+y(上圖步驟2);(單音素拷貝到3音素,完成初始化)
4)對這些triphone,用EM算法再次迭代(這里),來高斯參數重新進行,同時狀態j的占用數γ被計算出來(上圖步驟2);(三音素的個例單獨訓練,如圖,不是相同中心音素的訓練成一個模型)
5)來自同一個monophone的三音素集合,相應的狀態被聚類,在每個聚好的類中,選擇一個狀態作為典型,同類中的狀態綁定到這個狀態(上圖步驟3);
6)綁定完成之后,對步驟5中的所有triphone的高斯參數再次進行EM迭代同時增加高斯混合模型中的分量(components),直到分量個數達到設定的預期或者性能達到測試預期。(上圖步驟4)
上面過程簡單總結就是:
monophone訓練->monophone克隆->同樣的狀態進行綁定->增加混合高斯模型個數到設定值
基於data-driven的方法是根據狀態的均值和方差進行聚類,這種方法的缺點是訓練數據中未出現過的的triphone沒有辦法處理
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
二、triphone決策樹聚類
基於data-driven的聚類算法,如KNN,有個缺點,就是無法處理訓練數據中沒有出現過的triphone,基於決策樹的聚類可以解決這個問題。
基於決策樹的聚類過程中,把任意一個phone分裂成2類,其log 似然必然會增加,因為分裂后同樣的個數的數據,其參數增加一倍,因此,選擇不同的question對phone集合進行分裂,使得分裂后的log 似然增加最大。具體描述如下:
1)初始所有的狀態都在一個類別中,作為tree的root節點;
2)找到一個question,使得分裂后的2個類別的log 似然增加最大,把當前的question作為當前tree節點的問題;
3)從上到家重復這個過程,直到分裂后,增加的log 似然小於某個給定的閾值;
4)最后,對不同父親節點的兩個葉子節點的類別成一個類,計算其減少的log 似然是否小於給定的閾值,如果小於這個閾值,則合並,否則不合並。
其中log似然計算公式如下:s表示HMM中的狀態,F代表訓練數據中的幀,γ代表占用數(state occupation counts)
實際中通過monophone訓練triphone的過程綜合了狀態綁定和決策樹聚類的過程,核心步驟如下所示:
1)用flat-start方式創建 monophone集合,每個狀態的輸出概率密度函數為單高斯概率密度,均值,方差為訓練數據的全局均值和方差(該單音素對應的所有訓練數據,求均值和方差);
2)用EM算法迭代3-4次,對高斯參數重新進行估計(該單音素對應的所有訓練數據,EM迭代訓練);
3)對train data中出現的所有x-q+y音素,拷貝monophone q的狀態的參數給triphone x-q+y,這樣創建了上下文相關音素x-q+y,這步也是對triphone進行初始化的過程(單音素拷貝到3音素,完成初始化)
4) 對這些triphone,用EM算法再次迭代,來高斯參數重新進行,同時狀態j的占用數(state occupation counts)γ被計算出來 (三音素的單獨訓練,如圖,不是相同中心音素的訓練成一個模型)
5) 把這些trephine用上述介紹的決策樹聚類算法進行聚類。
6)最后對每個類增加高斯混合模型的component,並用EM重新估算高斯參數,直到節點個數到達給定的閾值。
以上就完成了monophone生成triphone的過程。