這個算法倒是不難,你要是在學條件隨機場,恭喜你,來對地方了
維特比算法(英語:Viterbi algorithm)是一種動態規劃算法。它用於尋找最有可能產生觀測事件序列的維特比路徑——隱含狀態序列,特別是在馬爾可夫信息源上下文和隱馬爾可夫模型中。
維特比算法利用動態規劃,可以解決任何一個圖中的最短路徑問題。維特比算法是針對一個特殊的圖——籬笆網絡(Lattice)的有向圖最短路徑的問題而提出的。它之所以重要,是因爲凡是使用隱含馬爾可夫模型描述的問題都可以使用它來解碼,包括今天的數字通信、語音識別、機器翻譯、拼音轉漢字、分詞等。接下來我們用一個例子來說明(拼音轉漢字):
目前圖上的所有狀態已經固定,其實在計算的時候,對於同一個拼音,就有很多的漢字,所以狀態並不是固定的,比如拼音:wo,則對應的漢字可能爲:喔,窩,我,臥等漢字,拼音:shi,則對應的漢字又可能爲:師,實,史,是等漢字。
假設每個拼音都有四個候選詞,則對於第一個拼音爲第一個狀態,第一個狀態又有四種可能的漢字,用圖可以表示爲:
- 如果概率最大的路徑
P
(或者說最短路徑)經過某個點,比如途中的X22,那麼這條路徑上的起始點S
到X22的這段子路徑Q
,一定是S
到X22之間的最短路徑。否則,用S
到X22的最短路徑R
替代Q
,便構成一條比P
更短的路徑,這顯然是矛盾的。證明了滿足最優性原理。 - 從
S
到E
的路徑必定經過第i
個時刻的某個狀態,假定第i
個時刻有k
個狀態,那麼如果記錄了從S
到第i
個狀態的所有k
個節點的最短路徑,最終的最短路徑必經過其中一條,這樣,在任意時刻,只要考慮非常有限的最短路即可。 - 結合以上兩點,假定當我們從狀態i進入狀態
i+1
時,從S
到狀態i
上各個節的最短路徑已經找到,並且記錄在這些節點上,那麼在計算從起點S
到第i+1
狀態的某個節點Xi+1
的最短路徑時,只要考慮從S
到前一個狀態i
所有的k
個節點的最短路徑,以及從這個節點到Xi+1
,j
的距離即可。