語音識別對單個聲學模型需要做 viterbi beam嗎?
viterbi 解碼是HMM基本問題2的最優解,應用在語音識別,比如對聲學模型的單個模型建模(比如幾千個triphone模型中的某一個triphone 模型),每個triphone模型狀態數一般最多5個。每一時刻(每一幀到來)做了viterbi後需保留從開始狀態S到此刻5個狀態的最優路徑,這是標準viterbi做法,viterbi beam 能做什麼呢?不可能(沒必要)把5個狀態的最優路徑剪枝成比如2個吧?
Beam search 是在每一個時間步,把「所有音素模型的所有狀態」放在一起進行剪枝,即保留其中一部分較優的狀態,捨棄其餘較差的狀態。它不是對每個音素模型進行剪枝。
剪枝的具體標準有很多。常見的做法有:
- 指定一個數量 k,保留最優的 k 個狀態;
- 指定一個 cost 差值 d,找到最優狀態,保留所有 cost 與最優狀態的 cost 之差不大於 d 的狀態;
- 指定一個 cost 比值 a,找到最優狀態,保留所有 cost 與最優狀態的 cost 之比不大於 a 的狀態。
解碼的時候還需要綜合語言模型。
本回答假定題主對Viterbi演算法已有了解,這裡僅討論每個節點應該保留多少條路徑。
如果是靜態圖,即把語言模型直接構在解碼圖裡,那麼題主說的沒錯,每個節點的確不需要保留多個路徑。比如Kaldi對每個狀態節點就只保留一個最優路徑。
但如果是一邊解碼一邊查語言模型,那麼就不是標準Viterbi了,當前最優路徑很可能由於其他路徑在後面的語言模型分數較高而被反超,因此就要保留多個路徑以備這種可能。
自說自話答一波。題主的問題要分幾個部分來回答。首先,triphone通常是用在「連續語音識別」的系統里的,這樣的系統中viterbi不會用在單個的triphone HMM上。「數字識別」這類離散識別的任務可能會出現viterbi用在單個HMM上的情況,其中每個數字用一個HMM表示,包含十幾到幾十個狀態。這種情況下不需要用到beam,因為狀態不多,viterbi算起來也很快。
然後是beam search。beam search是viterbi的一種近似解法。需要近似的原因是通常」連續語音識別「的解碼圖通常很大(由上千個HMM加上詞典和語言模型生成),狀態數都是以萬記。在這個圖上運行標準的viterbi太慢,所以用一個beam來進行剪枝,降低複雜性。而且發現beam pruning之後的結果並沒有很差,所以大型系統的viterbi都用beam。
推薦閱讀:
※語言學研究對機器的語音識別或者語音輸出有實質性的幫助嗎?
※在對時間序列進行分類時,隱馬爾科夫模型、人工神經網路和支持向量機這三種模型哪種更合適,為什麼?
※如何編寫易被複用的,高質量的機器學習演算法代碼?有哪些這樣的代碼示例?請舉例:代碼,原文,你發表的文獻。
※隱馬爾可夫模型是如何應用於語音識別?