python—結巴分詞的原理理解,Hmm中的轉移概率矩陣和混淆矩陣。
阿新 • • 發佈:2019-02-07
結巴分詞的準備工作
開發者首先根據大量的人民日報訓練了得到了字典庫、和Hmm中的轉移概率矩陣和混淆矩陣。
1. 載入字典, 生成trie樹
為什麼要載入字典樹呢,是因為如果沒有字典樹,那麼掃描將會是一個龐大的工程,有了字典樹就可以在該分支上掃描。例如掃描“中國人民銀行”(正向最大匹配)先掃描6個字的字典庫,找到了“中國人民銀行”,然後再去掉一個字變成了“中國人民銀”,假如沒有字典樹的話,就會把所有五個字的字典庫搜尋一遍。但是現在就不會了,只要把“中國人民”和“中國人民銀行”之間的節點搜尋一遍就行了,大大的節省了時間。有句話叫以空間換時間,最適合用來表達這個意思。
2. 給定待分詞的句子, 使用正則獲取連續的 中文字元和英文字元, 切分成 短語列表, 對每個短語使用DAG(查字典)和動態規劃, 得到最大概率路徑, 對DAG中那些沒有在字典中查到的字, 組合成一個新的片段短語, 使用HMM模型進行分詞, 也就是作者說的識別新詞, 即識別字典外的新詞.
本人理解:先進行掃描分詞,然後切成很多的句子,每個句子再利用動態規劃找出最大概率路徑(消除歧義)。
(1) 關於有向無環圖(見下圖):有方向沒有迴路。
(2) 用動態規劃查詢最大概率路徑問題理解
從上圖可以看出切詞之後,有多條路徑,也就是說有歧義。這裡採用動態規劃的最優化搜尋。
動態規劃問題:
1 將原問題分解為若干個相互重疊的子問題
2分析問題是否滿足最優性原理,找出動態規劃函式的遞推式;
3利用遞推式自低向上計算,實現動態規劃過程。