維特比演算法基礎

2022-07-17 12:21:11 字數 1132 閱讀 7293

維特比演算法是乙個特殊,但應用最廣的動態規劃演算法。利用動態規劃,可以解決任何乙個圖中的最短路徑問題。而維特比演算法是針對乙個特殊的圖--籬笆網路(lattice)的有向圖最短路徑問題而提出的。它之所以重要是因為,凡是使用隱含馬爾科夫模型描述的問題都可以用它來解碼。

假如使用者輸入的拼音是y1,y2,...,yn,對應的漢字是x1,x2,...,xn,根據概率公式:

輸入的序列為y1,y2,...,yn,而產生他們的隱含序列是x1,x2,...,xn,可以用下圖描述這個過程:

圖1  適合維特比演算法的隱含馬爾科夫模型

現在這個馬爾可夫鏈的每個狀態的輸出是固定的,但是每個狀態的值可以變化。比如輸出讀音"zhong"的字可以是「中」,「種」等多個字。用符號xij表示狀態xi的第j個可能的值。如果把每個狀態按照不同的值展開,就得到下面這個籬笆網路:

圖2  籬笆網路

在上圖中,每個狀態有3個或4個值,當然實際中他們可以有任意個值。

總結演算法如下:

第一步,從點s出發,對於第乙個狀態x1的各個節點,不妨假定有n1個,計算出s到他們的距離d(s,x1i),其中x1i代表任意狀態1的節點。

第二步,對於第二個狀態x2的所有節點,要計算出從s到它們的最短距離。對於特定的節點x2i,從s到它的路徑可以經過狀態1的n1中任何乙個節點x1i,當然,對應的路徑長度就是d(s,x2i) = d(s,x1j) + d(x1j,x2i)。由於j有n1種可能性,我們要一一計算,然後找到最小值。即

d(s,x2i) = min d(s,x1j) + d(x1j,x2i)

這樣對於第二個狀態的每個節點,需要進行n1次計算。假定這個狀態有n2個節點,把s這些節點的距離都算一遍,就有o(n1·n2)次計算。

接下來,類似的按照上訴方法從第二個狀態走到第三個狀態,一直走到最後乙個狀態,就得到了整個網路從頭到尾的最短路徑。複雜度為o(n·d^2)。

參考書籍

維特比演算法

維特比演算法在機器學習中非常重要,在求解隱馬爾科夫和條件隨機場的 問題中均用到了維特比演算法。實際上,維特比演算法不僅是很多自然語言處理的解碼演算法,也是現代數字通訊中使用最頻繁的演算法。以乙個簡單的隱馬爾科夫模型為例,n 為觀測符號,y y1,y2,y n 為隱狀態序列,要求的 問題為 y 1,y...

維特比演算法

維特比演算法主要用來解決籬笆網路,老實講我第一次聽到這個名字是發懵的,網路我是知道的,說白了就是圖 迪傑特斯拉演算法 但是,籬笆網路是值下面這種一列一列的圖,只會前面連線到後面,而且不會跳層連線,可以說是一種非常特殊且友好的圖了 正常的圖能逼死強迫症 x max xx x x x xma x x 這...

維特比演算法 python 維特比演算法實現分詞

維特比演算法原理可以參考以下文章,講解的非常詳細,那麼接下來將講解維特比演算法如何應用到分詞演算法中,並如何用python 實現。如何通俗地講解 viterbi 演算法?www.zhihu.com 一 過程分析 句子 經常有意見分歧 詞典 經常 經 有 有意見 意見 分歧 見 意 見分歧 分 概率 ...