Viterbi分詞詳解 hanlp

2021-08-21 11:44:56 字數 968 閱讀 6556

1.根據詞庫,生成所有所有字可能組成的詞(詞網)。

例如:當下雨天地面積水分外嚴重

0:[ ]

1:[當, 當下]

2:[下, 下雨, 下雨天]

3:[雨, 雨天]

4:[天, 天地]

5:[地, 地面]

6:[面, 面積]

7:[積, 積水]

8:[水, 水分]

9:[分, 分外]

10:[外]

11:[嚴, 嚴重]

12:[重]

13:[ ]

前後空為起始和末尾標誌

2.通過遍歷上述詞網

0:1:當 a1, 當下 a2

通過「當」可以計算2[下, 下雨, 下雨天]

form 當 2.下 a1+b12,下雨 a1+ b22, 下雨天 a2 + b23

通過 」當下「可以計算3[雨, 雨天]

from 當下 2.雨 a2 + b32, 雨天 a2 + b33

出現得分不為空的,就和之前的比較取較大的乙個 並對 from的值進行修改

。。。這樣就可以獲得從1到13所有得分

再獲取13的得分,通過from就可以知道其上一詞**

依次向上就可以獲取整個句子的分詞結果

3.從乙個詞a到另乙個詞b的詞的花費

dsmoothingpara 平滑引數0.1

frequency a出現的頻率

max_frequency 總詞頻

dtemp 平滑因子 1 / max_frequency + 0.00001

ntwowordsfreq ab共現頻次

-math.log(dsmoothingpara * frequency / (max_frequency)

+ (1 - dsmoothingpara) * ((1 - dtemp) * ntwowordsfreq / frequency + dtemp));

簡單理解viterbi演算法

viterbi演算法其實就是多步驟每步多選擇模型的最優選擇問題,其在每一步的所有選擇都儲存了前續所有步驟到當前步驟當前選擇的最小總代價 或者最大價值 以及當前代價的情況下前繼步驟的選擇。依次計算完所有步驟後,通過回溯的方法找到最優選擇路徑。符合這個模型的都可以用viterbi演算法解決。隱含的身體狀...

viterbi演算法 python版

牛mm細心給我講了乙個小時,終於明白它的含義,然後花了一兩節分布式資料庫的課實現了。當時牛mm還說不可能這麼快實現,結果不可能事還是發生了。發現python果真非常好用。不明白此演算法可以看這篇blog 初始化方法 viterbi演算法函式 結果列印輸出函式 nodes format path is...

維特比演算法(Viterbi)

import numpy as np state transfer np.array 0.5,0.2,0.3 0.3,0.5,0.2 0.2,0.3,0.5 狀態轉移矩陣 observe prob np.array 0.5,0.5 0.4,0.6 0.7,0.3 觀測概率矩陣 initial np....