語音識別筆記 (六) 多遍解碼、三音子模型
來自專欄語音識別入門筆記2 人贊了文章
歡迎大家關注我的博客 http://pelhans.com/ ,所有文章都會第一時間發布在那裡哦~
本講我們來簡要討論一些語音識別的高級話題,包含多遍解碼和三音子模型。
多通道解碼(Multi-pass Decoding)
在上一講中,我們介紹了基於Viterbi演算法的解碼方案。但在實際中的應用,它有兩個主要的限制。第一個是因為Viterbi演算法演算法返回的實際上不是最大概率的單詞序列,而是計算與這樣的單詞序列的近似。這就帶來了與實際最大值間的差別,在大多數情況下這種差別並不重要,但對於解碼問題來說,有時概率醉倒的音子序列並不對應於概率最大的單詞序列。如一個單詞具有多個發音時,由於概率歸一的影響,通過它的分支概率就會較小,這樣演算法就會傾向於選擇概率較大的分支較少的詞,從而帶來錯誤。
另一個限制是它不能用於所有的語言模型。這個限制來自於Viterbi演算法的既有事實,即破壞了動態規劃恆定的假定。簡單來說就是該假定要求一個最佳路徑一定包含一直到狀態 之前和 本身在內的最佳路徑。但三元語法顯然有可能會破壞這點。
因為這兩個限制的存在,人們給出兩種解決方案:
修改Viterbi演算法
修改Viterbi解碼演算法,讓它返回多個潛在的語段。然後再使用其他更複雜的語言模型或發音模型演算法,重新給多個輸出排序。一般來說,這種多遍解碼方法在計算上是有效的,但若先使用二元語法這種不太複雜的模型來進行第一遍粗解碼,然後在使用更複雜但速度較慢的解碼演算法繼續工作就可以減少搜索空間。
例如Wchwartz提出的一種類似於Viterbi的演算法,稱為N-best Viterbi演算法。對於給定的語音輸入,這種演算法返回N個最佳的句子,每個句子帶有它們的似然度打分。然後使用三元語法給每個句子指派一個新語言模型的先驗概率。這些先驗概率與每個句子的聲學模型似然度結合,生成每個句子的後驗概率。然後使用這種更複雜的概率重新給句子打分。下圖給出該方法的示例圖:
還有另一種方案也是用N-best的辦法來提升Viterbi演算法,但返回的不是一個句子表,而是一個單詞格。單詞格是單詞的有向圖,單詞之間用單詞格連接之後就可以對大量的句子進行緊緻的編碼。在格中的每個單詞使用它們的觀察似然度來擴充,這樣通過格的任何路徑肚皮可以與更複雜的語言模型中推到的先驗概率結合起來進行改進。
使用 演算法
Placeholder
三音子模型
之前我們討論的都是單音素模型,但我們知道發聲是會收到前後文影響的。因此提出三音子模型(Triphone Model).一個三音子模型表示在左右文本限定情況下的音素模型。舉例來說,一個三音子 表示 的前面是 ,後面跟著 。當湊不齊三個時,也可以使用其中的兩個來表示,如 表示 前面是 , 表示 後面是 。
雖然三音子的引入能夠幫助我們捕捉聲音中的變化,但也同時帶來了稀疏性問題。假設我們有50個單音素,那組合起來就是 個三音子,而且其中很大部分是不常見甚至不存在的。為了減少三音子的數量,Young提出了子音素綁定的方法。其主要思想為將那些相似的音素歸為一類(Cluster)。如 和 這兩個三音子,將它們歸為一類後就可以採用一個高斯模型來訓練它們。
那怎麼判斷哪些音素該被歸為一類呢?最常用的方法是決策樹。從根節點開始,如 ,在每個節點都問一些問題並對其分類,直到最終類別為止。下圖給出一個決策樹分類的例子。這個決策樹的訓練也和正常的決策樹訓練類似,對於每個節點,它會考慮新分支將會給訓練數據的聲學模型似然度帶來的影響並選擇似然度最大那個節點和問題。如此反覆進行迭代制止到達葉子節點。
下圖給出一個完整的給予上下文的GMM三音子模型的建立,其中採用的是 two cloning-and-retraining 流程,具體這裡就不展開介紹了。
Ref
[1] Speech and Language Processing 2nd; ch10
推薦閱讀:
※智能語音機器人哪家好?小靈靈智能語音機器人AI程度引關注
※百萬戰隊:logos的語音寫作感受
※雲諾智能語音機器人
※智能語音電銷神器!
※無線智能音響的新潮流