走進語音識別中的WFST(四)

前一章說了WFST的determinzation這個算法,本章繼續說說WFST中的優化操作,包括權重推移(weight pushing)和最小化操作(minimization)。

權重推移我們可以這麼理解,我們有一雙碩大的雙手,然後對着WFST的尾巴一用力一推,然後權重就像波浪一樣沿着各個路徑被推向了前方,自行腦補~

效果圖如下所示:
這裏寫圖片描述
(注意tropical半環和log半環不太一樣)

在很多序列識別的問題中我們都是通過找到最小的cost來解決問題的,那麼在WFST中我們同樣就是通過找到最大或者最小的權重路徑來解決問題的。
而pushing後權重都集中在前面可以降低整體的搜索時間因爲我們會一步步的把我們不需要的路徑排除掉,這樣一開始就可以排除掉了很多種可能路徑。

一般的權重推移算法包括兩個步驟:
1 給每個狀態計算一個potential,計算方式如下:
這裏寫圖片描述
2 很據上面計算的potential和實際權重差值來修改轉移路徑上的權重值。

兩步的僞代碼如下所示(比較簡單就不詳細說了):
這裏寫圖片描述
這裏寫圖片描述

而minimization算法是在weight pushing之後再採用一個經典的最小化算法(比較著名的是Hopcroft算法,Revuz算法等,計算複雜度不同)就可以了僞代碼如下所示:
這裏寫圖片描述

minimization可以讓WFST中的狀態數最少,效果圖如下所示:
這裏寫圖片描述
左圖是對上一章講的確定化操作後進行了權重推移後的結果,可以看出權重推移後狀態3和狀態4到狀態5的轉移路徑完全相同,所以可以把它們融合爲一個狀態(權重推移前是不等價的,故可以看出權重推移的必要性),右圖是minimization後的結果。

ps:在youtube上發現了一個不錯的講解視頻:
https://www.youtube.com/playlist?list=PLxbPHSSMPBeicXAHVfyFvGfCywRCq39Mp

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章