中文分詞方法總結

中文分詞方法總結

1. 

計算所開發的ICTCLAS 中文分詞系統,這個系統採用一些語義分析的方法以提高分詞的準確度。算法相對複雜,要維護詞表、維護詞的關係,對於如下句子:“請把手擡高一點兒”,比較互聯網上我所找到的幾個算法,只有ICTCLAS可以正確分詞。

分詞速度:

ICTCLAS 的分詞速度爲31.5Kbytes/s 由於沒有實際去測,只能引用其代碼中寫的數據。這個速度比我的算法慢將近20倍。

河北理工大學經管學院呂震宇老師的SharpICTCLAS V1.0進行了對比,可能是呂震宇老師還沒有來得及對效率進行優化,這個版本的分詞效率較底,每秒鐘大概在4000-6000字節,比我的算法要慢100多倍。相信SharpICTCLAS 的後續版本效率會有提高。

準確度:

用SharpICTCLAS V1.0 版本對一些有歧異的句子進行分詞,發現有的句子我的算法可以較好的處理,但SharpICTCLAS不能得到正確的結果。如“長春市長春節致詞”我的算法分析爲:長春/市長/春節/致詞, SharpICTCLAS分析爲:長春市/長/春節/致詞/,這個錯誤可能並不是SharpICTCLAS的算法缺陷,可能只是V1.0版本提供的訓練集不充分造成的,是不是算法目前我還沒有仔細研究。

SharpICTCLAS 對於一些需要根據語義來分析的語句如上面提到的“請把手擡高一點兒”分析效果很好,可以把“把手”分解爲把/手 而我的算法則分解爲 把手。

未登錄詞識別能力:

感覺SharpICTCLAS對於未登錄詞的識別能力並不象代碼註釋中寫的那麼高,比如下面句子:

“新浪體育訊 英超賽季結束後,曼城隊一直處在各種動盪之中”,SharpICTCLAS分詞的結果是 “新/浪/體育/訊/英/超/賽季/結束/後/,/曼/城/隊/一直/處在/各種/動盪/之中/ ”

我的算法分詞結果是 “新浪/體育/訊/英超/賽季/結束/後/,/曼城隊/一直/處在/各種/動盪/之中/”

總結:

SharpICTCLAS V1.0 和我的算法比較,效率明顯偏低,每秒6000字節的效率是很難滿足搜索引擎等大數量應用要求的,但對於有些短文本的分詞,效率並不是一個重點需要考慮的問題。

分詞準確度方面:基於目前SharpICTCLAS提供的訓練集比較,我認爲各有千秋,在網上找了幾篇文章,整篇文章分詞進行比較,感覺我的算法總體上比SharpICTCLAS好像還要準確一些。 

和雨痕中英文分詞組件的比較

雨痕中英文分詞組件 (http://www.rainsts.net) 的專業版不是免費的,所以只使用了其免費的演示版本進行了比較。 

分詞速度:

雨痕的分詞速度大概在每秒4000字節左右,這個和SharpICTCLAS差不多,比我的算法慢100倍左右。 

準確度:

雨痕的分詞準確度還是比較高的,但和我的算法一樣存在算法的先天缺陷,對於必須通過語義才能判斷的句子,無法準確分詞。對於其他類型的有歧異的句子,分詞能力還是不錯的,我只發現類似下面的句子“於北京時間1月1日舉行運動會”我的算法比雨痕要準確,雨痕

分詞結果是“於北京/ 時間/ 1月1日/ 舉行/ 運動會”,我對算法分詞結果是“於/北京時間/1月/1日/舉行/運動會/”,如果北京時間這個詞在雨痕的分詞組件中有的話,我覺得雨痕的算法可能有需要改進的地方。 

未登錄詞識別能力:

還是對比如下面句子分詞:

“新浪體育訊 英超賽季結束後,曼城隊一直處在各種動盪之中”,雨痕分詞的結果是 “新浪/ 體育/ 訊/  / 英超/ 賽季/ 結束/ 後/ ,/ 曼/ 城/隊/ 一直/ 處在/ 各種/ 動盪/ 之中”,這個結果比SharpICTCLAS還是要準確一些,但“曼城隊”被分成了三個詞,這方面我的算法要稍微好一些。 

總結:

雨痕中英文分詞組件的效率較低,很難滿足搜索引擎等大數量應用要求的。準確度方面還是比較高的,和我的算法的準確度相比基本差不多。

 

和 ShootSearch 分詞組件的比較

ShootSearch (http://www.shootsoft.net)分詞組件是一個開源的分詞組件,其分詞效率很高,和我的算法速度不相上下,但ShootSearch只採用了簡單的最大匹配算法,分詞準確度很低,前面舉的幾個例子都不能很好的分詞,由於準確度太低,這裏就不重點分析了。

 

KTDictSeg 分詞算法介紹

 

我把組件名名爲KTDictSeg,它是由KaiToo搜索開發的一款基於字典的簡單中英文分詞組件。

分詞算法

談到分詞算法,目前有很多。比較常用的是正向最大匹配和反向最大匹配算法。但這兩種算法對於一些存在多元歧異的句子缺乏較好的支持。以“長春市長春節致詞”和“長春市長春藥店”這個兩個句子爲例:

“長春市長春節致詞”可以依次拆分爲 長春、長春市、市長、長春、春節、致詞 這幾個詞,按照正向最大匹配算法,分詞結果是長春市/長/春節/致詞,按照反向最大匹配算法,分詞結果是長春/市長/春節/致詞。

“長春市長春藥店”可以依次拆分爲長春、長春市、市長、長春、春藥、春藥店、藥店 這幾個詞,按照正向最大匹配算法,分詞結果是 長春市/長春/藥店,按照反向最大匹配算法,分詞結果是“長春/市長/春藥店”。

可見無論是正向還是反向最大匹配,都存在產生歧異的情況。

KTDictSeg 的算法在正向匹配算法的基礎上做了一些改進,用一句話描述就是找到句子中第一個未被匹配的字數最少的單詞組合,如果多個組合未被匹配的字數都是最少則找到其中匹配的單詞個數最少的組合。匹配順序是從左至右。還是以上面兩個句子爲例:

“長春市長春節致詞” 按正向最大匹配掃描順序可以出現如下匹配的單詞組合:

1) 長春/市長/春節/致詞 匹配單詞數4,未匹配字數0

2) 長春市/長春/致詞 匹配單詞數3,未匹配字數0

不難看出,第一中組合未匹配的字數最少,所以取組合1。

 

“長春市長春藥店”按正向最大匹配掃描順序可以出現如下匹配的單詞組合:

 

1)     長春市/長春/藥店 匹配單詞數3,未匹配字數0

2)     長春市/春藥店 匹配單詞數2,未匹配字數1

3)     長春市/春藥 匹配單詞數2,未匹配字數2

4)     長春市/藥店 匹配單詞數2,未匹配字數2

5)     長春/市長/春藥店 匹配單詞數3,未匹配字數0

6)     長春/市長/春藥 匹配單詞數3,未匹配字數1

7)     長春/市長/藥店 匹配單詞數3,未匹配字數1

8)     長春/市長/藥店 匹配單詞數3,未匹配字數1

9)     長春/長春/藥店 匹配單詞數3,未匹配字數1

 

可見組合1和組合5 未匹配數最小,匹配單詞數相等,但組合1匹配順序靠前,所以取組合1。

未登錄詞識別

KTDictSeg 對未登錄詞的識別採用一個簡單判定,即把未在字典中找到的連續的字組成一個詞,這種判斷是基於分詞算法比較準確且詞庫中的詞足夠多的假設下做出的,由於KTDictSeg的分詞算法相對比較準確且附帶的詞庫收錄了20多萬條詞,所以KTDictSeg對未登錄詞的識別也相對比較準確。

 

優點

KTDictSeg 的 優點是分詞速度非常快,且分詞準確度相對簡單的最大匹配算法有很大提高,所以可以應用於一些對分詞準確度要求不是非常苛刻,但對分詞效率要求較高的應用環境中,比如大多數的中小型中文搜索引擎都可以使用這個分詞組件。

KTDictSeg 還有一個優點就是簡單,用戶只需維護一個漢語詞庫就可以達到比較準確的分詞效果,減少了用戶維護的工作量和對系統的開銷。

 

缺點

KTDictSeg 的致命缺點是無法對語義進行判斷,對於一些語義相關的句子不能夠做到100%識別出來,而且無論怎樣調整詞庫,理論上都無法達到100%匹配。

開源代碼

KTDictSeg   下載地址:   http://sourceforge.net/projects/ktdictseg/


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章