結巴分詞原理介紹


轉自一個很不錯的博客,結合自己的理解,記錄一下。作者:zhbzz2007 出處:http://www.cnblogs.com/zhbzz2007 歡迎轉載,也請保留這段聲明。謝謝!

https://www.cnblogs.com/zhbzz2007/p/6076246.html?utm_source=itdadao&utm_medium=referral 

結巴分詞的原理,結合一個面試題:有一個詞典,詞典里面有每個詞對應的權重,有一句話,用這個詞典進行分詞,要求分完之后的每個詞都必須在這個詞典中出現過,目標是讓這句話的權重最大。 

涉及算法:

  1. 基於前綴詞典實現詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖(DAG),采用動態規划查找最大概率路徑,找出基於詞頻的最大切分組合;
  2. 對於未登錄詞,采用了基於漢字成詞能力的 HMM模型,采用Viterbi算法進行計算;
  3. 基於Viterbi算法的詞性標注;
  4. 分別基於tfidf和textrank模型抽取關鍵詞;

 

基於前綴詞典及動態規划實現分詞

http://www.cnblogs.com/zhbzz2007/p/6084196.html

jieba分詞主要是基於統計詞典,構造一個前綴詞典;然后利用前綴詞典對輸入句子進行切分,得到所有的切分可能,根據切分位置,構造一個有向無環圖;通過動態規划算法,計算得到最大概率路徑,也就得到了最終的切分形式。

1.前綴詞典構建:如統計詞典中的詞“北京大學”的前綴分別是“北”、“北京”、“北京大”;詞“大學”的前綴是“大”。

2.有向無環圖構建:然后基於前綴詞典,對輸入文本進行切分,對於“去”,沒有前綴,那么就只有一種划分方式;對於“北”,則有“北”、“北京”、“北京大學”三種划分方式;對於“京”,也只有一種划分方式;對於“大”,則有“大”、“大學”兩種划分方式,依次類推,可以得到每個字開始的前綴詞的划分方式。

3.最大概率路徑計算:

在得到所有可能的切分方式構成的有向無環圖后,我們發現從起點到終點存在多條路徑,多條路徑也就意味着存在多種分詞結果。因此,我們需要計算最大概率路徑,也即按照這種方式切分后的分詞結果的概率最大。在采用動態規划計算最大概率路徑時,每到達一個節點,它前面的節點到終點的最大路徑概率已經計算出來。

有向無環圖DAG的每個節點,都是帶權的,對於在前綴詞典里面的詞語,其權重就是它的詞頻;我們想要求得route = (w1,w2,w3,...,wn),使得 ∑weight(wi) 最大。

如果需要使用動態規划求解,需要滿足兩個條件,

  • 重復子問題
  • 最優子結構

我們來分析一下最大概率路徑問題,是否滿足動態規划的兩個條件。

基於漢字成詞能力的HMM模型識別未登錄詞

利用HMM模型進行分詞,主要是將分詞問題視為一個序列標注(sequence labeling)問題,其中,句子為觀測序列,分詞結果為狀態序列。首先通過語料訓練出HMM相關的模型,然后利用Viterbi算法進行求解,最終得到最優的狀態序列,然后再根據狀態序列,輸出分詞結果。

HMM的兩個基本假設:

1.齊次馬爾科夫性假設,即假設隱藏的馬爾科夫鏈在任意時刻t的狀態只依賴於其前一時刻的狀態,與其它時刻的狀態及觀測無關,也與時刻t無關;

2.觀測獨立性假設,即假設任意時刻的觀測只依賴於該時刻的馬爾科夫鏈的狀態,與其它觀測和狀態無關。

HMM模型的三個基本問題:

 

 

Viterbi算法

Viterbi算法實際上是用動態規划求解HMM模型預測問題,即用動態規划求概率路徑最大(最優路徑)。這時候,一條路徑對應着一個狀態序列。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM