1. 程式人生 > >基於二元語法模型的中文分詞

基於二元語法模型的中文分詞

一、 基於二元語法模型分詞的思想

下面是該程式的主要過程與思路:

1、針對語料庫進行訓練。

本程式使用的是北大提供的人民日報1998 年1 月的語料庫,包含約110萬詞。由於採用二元語法模型,所以需要計算語料庫中單個詞的頻率,以及每一個詞後面出現另一個詞的頻率。

2、建立二元切分詞圖。

       建立一個有向無環圖,圖中的結點為任意一個可能的候選詞語,圖中的邊代表相鄰兩個詞語的續接關係。二元切分詞圖的每一條邊的權值表示二元詞語轉移概率P(Wi|Wi-1)。 任何一種切分的方式可以表示為二元切分詞圖上的一條起始結點到結束結點的路徑。路徑上所有邊的概率之積就是該切分結果對應的二元語法模型概率。而我們要做的就是找出一條概率之積最大的路徑。

3、對一個句子進行全切分。

在對句子進行切分時要按照詞圖的拓撲序,即從句首到句尾,每一個漢字表徵一個hierarchy. 將詞圖中的詞歸類到各個hierarchy。 比如句子為“對一個句子進行全切分”。則詞圖中以“對”字結尾的詞歸到hierarchy0,以“一”字結尾的詞歸到hierarchy1……以此類推。

4、Viterbi演算法求最優路徑。

       Viterbi演算法是一種動態規劃的演算法。一個問題能夠用動態規劃來求解,它必須能夠滿足以下兩個條件:最優子結構和重疊子問題。也就是說,一個問題的最優解是由子問題的最優解構成,而求解此問題最優解的方法過程,對於求解子問題也適用,也就是可遞迴性。

       程式中,用變數optimalCandidates表示每個hierarchy上的最優解。

       再用上面的句子舉例。“對一個句子進行全切分”。對於“子”字,屬於hierachy4,它的最優解可以由 optimalCandidates[0], optimalCandidates[1], optimalCandidates[2], optimalCandidates[3],中的解來生成。對屬於每個hierarchy的詞,按照它的長度,找到它的上一個hierarchy。例如上面例子中的“子”字所屬的hierarchy中有一個詞是“句子”。那麼這個詞就回溯到hierachy2,看看P(句子|optimalCandates[2])的概率值。假設 “子”字hierarchy還有一個詞是“個句子”這個詞可以回溯到hierachy1。

       求得概率最大的最優值之後,再從最後一個hierarchy回溯遍歷一遍,便能獲得最優解,即一種概率最大的切分方式。

二、 程式實現

       該程式在windows7環境下采用python3.2編寫。主要包括以下幾個模組:

(1)SegmentEvaluate.py為分詞的正確性評估模組,通過計算分詞的準確率,召回率以及F值來評估分詞的準確度。
(2)MyViterbi.py為viterbi類模組,主要是實現viterbi演算法求最優解。

(3)WordDict.py為讀取語料庫進行訓練的模組,統計語料庫中的頻數資訊生成詞典供viterbi類使用。

(4)WordSegment.py為分詞的主程式,其中包括的分詞的輸入、輸出檔案資訊。

三、分詞效能

       測試集也是採用的人民日報1998 年1 月的語料庫。 開放測試方法:首先將已切分語料刪除一部分,形成開放測試集,在沒有針對開放測試集進行訓練學習的情況下,對刪除的那部分進行分詞測試,得到一組實驗結果。 封閉測試方法:用完整的已切分語料進行訓練,之後用語料中出現過的部分語句進行測試, 得到訓練語料的測試結果。測試結果如下表所示。

表 1 分詞測試結果

詞數

實際切分詞數

準確率

召回率

F-值

開放測試

10645

11110

0.907021

0.946642

0.926408

封閉測試

380806

378885

0.991874

0.986870

0.989365

四、參考文獻

[1] 張華平,劉群. 基於N2最短路徑的中文詞語粗分模型[J]. 中文資訊學報, 2002, 16 (5) : 77 - 84.

[2] 吳應良,韋崗,李海洲. 一種基於N-gram模型和機器學習的漢語分詞演算法[J]. 電子與資訊學報, 2001, 23 (11) : 1148 - 1153.

[3] 孫曉,黃德根. 基於動態規劃的最小代價路徑漢語自動分詞[J]. 小型微型計算機系統, 2006, 27(3): 516 - 519.

[4] 劉丹,方衛國,周泓. 基於貝葉斯網路的二元網路中文分詞模型[J]. 計算機工程, 2010, 1(1): 12 - 14.