【基礎算法】維特比算法●Viterbi Algorithm

這個算法倒是不難,你要是在學條件隨機場,恭喜你,來對地方了

維特比算法(英語:Viterbi algorithm)是一種動態規劃算法。它用於尋找最有可能產生觀測事件序列的維特比路徑——隱含狀態序列,特別是在馬爾可夫信息源上下文和隱馬爾可夫模型中。
維特比算法利用動態規劃,可以解決任何一個圖中的最短路徑問題。維特比算法是針對一個特殊的圖——籬笆網絡(Lattice)的有向圖最短路徑的問題而提出的。它之所以重要,是因爲凡是使用隱含馬爾可夫模型描述的問題都可以使用它來解碼,包括今天的數字通信、語音識別、機器翻譯、拼音轉漢字、分詞等。接下來我們用一個例子來說明(拼音轉漢字):

在這裏插入圖片描述
目前圖上的所有狀態已經固定,其實在計算的時候,對於同一個拼音,就有很多的漢字,所以狀態並不是固定的,比如拼音:wo,則對應的漢字可能爲:喔,窩,我,臥等漢字,拼音:shi,則對應的漢字又可能爲:師,實,史,是等漢字。
假設每個拼音都有四個候選詞,則對於第一個拼音爲第一個狀態,第一個狀態又有四種可能的漢字,用圖可以表示爲:
在這裏插入圖片描述

  • 如果概率最大的路徑P(或者說最短路徑)經過某個點,比如途中的X22,那麼這條路徑上的起始點SX22的這段子路徑Q,一定是SX22之間的最短路徑。否則,用SX22的最短路徑R替代Q,便構成一條比P更短的路徑,這顯然是矛盾的。證明了滿足最優性原理。
  • SE的路徑必定經過第i個時刻的某個狀態,假定第i個時刻有k個狀態,那麼如果記錄了從S到第i個狀態的所有k個節點的最短路徑,最終的最短路徑必經過其中一條,這樣,在任意時刻,只要考慮非常有限的最短路即可。
  • 結合以上兩點,假定當我們從狀態i進入狀態i+1時,從S到狀態i上各個節的最短路徑已經找到,並且記錄在這些節點上,那麼在計算從起點S到第i+1狀態的某個節點Xi+1的最短路徑時,只要考慮從S到前一個狀態i所有的k個節點的最短路徑,以及從這個節點到Xi+1j的距離即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章