在中文分詞任務中,一個很棘手的問題是中文詞中字組合的複雜性。
例如句子:南京市長江大橋,這句話可以有多種分詞方法都說的通:
(1)南京市/長江大橋
(2)南京/市長/江大橋
在基於規則匹配的分詞法中, 如果多種分法的詞在詞典中都能找得到,則會有多種可能。
我們可以基於統計概率來得到每個詞的概率,以此得到分詞結果的概率。
我們可以對比所有分詞方法的概率,選出最高的那個。即求:
通過取log可以把乘法改成加法,簡化計算同時防止概率連乘產生過於小的數字:
然而這樣的方法需要暴力組合字典所能帶來的所有可能,會重複計算很多子問題。維特比算法即用動態規劃求最優路徑的算法
dp[i]代表前i個字組合的最大概率,顯然:
代表第j到第i個字組成的詞在字典裏的概率。
於是維特比分詞算法可以寫成:
for i = 1 ~ N:
dp[i] = min(dp[i],dp[j] + logp(w_{ij}))
return dp[N]