維特比算法的簡單理解——以分詞算法爲例

在中文分詞任務中,一個很棘手的問題是中文詞中字組合的複雜性。

例如句子:南京市長江大橋,這句話可以有多種分詞方法都說的通:
(1)南京市/長江大橋
(2)南京/市長/江大橋

在基於規則匹配的分詞法中, 如果多種分法的詞在詞典中都能找得到,則會有多種可能。

我們可以基於統計概率來得到每個詞的概率,以此得到分詞結果的概率。
p(/)=p()p()p(//)=p()p()p() p(南京市/長江大橋) = p(南京市)p(長江大橋)\\ p(南京/市長/江大橋) = p(南京)p(市長)p(江大橋)
我們可以對比所有分詞方法的概率,選出最高的那個。即求:
p(s)=argmaxi=1np(wi) p(s) = argmax\prod_{i=1}^n p(w_i)
通過取log可以把乘法改成加法,簡化計算同時防止概率連乘產生過於小的數字:
p(s)=argmaxi=1nlogp(wi) p(s) = argmax\sum_{i=1}^nlogp(w_i)
然而這樣的方法需要暴力組合字典所能帶來的所有可能,會重複計算很多子問題。維特比算法即用動態規劃求最優路徑的算法
在這裏插入圖片描述
dp[i]代表前i個字組合的最大概率,顯然:
dp[i]=min(dp[j]+logp(wij)) dp[i] = min(dp[j] + logp(w_{ij}))
wijw_{ij}代表第j到第i個字組成的詞在字典裏的概率。

於是維特比分詞算法可以寫成:

for i = 1 ~ N:
	dp[i] = min(dp[i],dp[j] + logp(w_{ij}))
return dp[N]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章