作者:tiandi,小米AI實驗室,智能問答、智能客服方向。
專欄地址:
http://www.52nlp.cn/author/tiandiweizun
中文分詞工具評估項目地址:
https://github.com/tiandiweizun/chinese-segmentation-evaluation
最近我們分享了一些關於分詞的事情,對於琳琅滿目的分詞工具,我們到底該選擇哪個呢?
這裡有一個Java開源項目cws_evaluation,對中文分詞做了評比,但有幾點不足:(1). 只有java版本,但是機器學習主要是基於python的 (2).效果指標為行完美率和字完美率,該指標不妥,特別是句子越長,越無意義,(3). 每種分詞工具評測的算法太多了,這裡僅評比了默認的分詞算法。
基於此,我做了一個java和python版本中文分詞工具評比項目chinese-segmentation-evaluation。
項目簡介測試了java和python常見中文分詞工具的效果和效率
javaRequirementjava8
git clone https://github.com/tiandiweizun/nlp-evaluation.git
cd nlp-evaluation/java
(windows) .\gradlew.bat build (linux) ./gradlew build
java -Dfile.encoding=utf-8 -jar build/libs/nlp-evaluation-java-1.0.0.jar
說明java -jar nlp-evaluation-java-1.0.0.jar 有3個參數,可以執行 java -jar nlp-evaluation-java-1.0.0.jar -h 查看
-i 分詞文件,默認為data/seg.data_big文件,每行一個句子,每個詞用空格分開,可以指定自己的測試集
-o 分詞結果存儲路徑,默認不存儲
-n 最大讀取分詞文件行數
-c 需要評估的分詞器名稱,用英文逗號隔開,默認HanLP,jieba,thulac,示例: -c=HanLP
由於斯坦福分詞效果一般,速度極慢,且模型巨大,在打包的時候已經排除(不影響在IDE裡面測試), 打包如果要包含斯坦福分詞,修改build.gradle,注釋掉exclude(dependency('edu.stanford.nlp:stanford-corenlp'))
由於Word、Ansj、Jcseg、MMSeg4j存在bug(把詞語拼接起來和原始句子不一樣),在代碼裡面已經注釋掉了,不進行測試。
依賴的庫均存在於maven中心倉庫,像庖丁、復旦分詞等找不到的,這裡沒有測試
測試效果總行數:2533709 總字符數:28374490
經過多次測試發現,thulac在linux上速度不是特別穩定,最快與jiba差不多
開發者pythonRequirementPython:3
其他參見 requirements.txt
1. git clone https://github.com/tiandiweizun/nlp-evaluation.git
2. cd nlp-evaluation
3. pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
4. cd python/indi.tiandi.nlp.evaluation
5. python3 SegEvaluation.py
python3 SegEvaluation.py 有3個參數,可以執行 python3 SegEvaluation.py -h 查看
-i 分詞文件,默認為data/seg.data_big文件,每行一個句子,每個詞用空格分開,可以指定自己的測試集
-o 分詞結果存儲路徑,默認不存儲
-n 最大讀取分詞文件行數,由於python速度太慢,建議設置
-c 需要評估的分詞器名稱,用英文逗號隔開,默認pkuseg,jieba_fast,thulac
pynlpir存在bug(把詞語拼接起來和原始句子不一樣),pyltp在windows上不易安裝,這裡都沒有進行測試,比較慢的也沒有測試
測試效果總行數:2533709 總字符數:28374490
開發者
建議使用pycharm打開python目錄,即可運行
如果需要使用pynlpir,需要修改pynlpir_path的安裝目錄
如果需要使用pyltp,需要修改ltp_data_dir的模型分詞目錄
評測自定義分詞器:只要實現segment方法和向evaluators追加即可。
總結性能:java 遠高於python,至少差了一個數量級。
效果:對於jieba和thulac,在python和java上表現的不同,需要更多的時間去尋找原因,且java的thulac4j非官方提供。
數據:默認數據集來源於cws_evaluation,該項目為評估中文分詞的性能與效果,對於效果該項目採用的是行完美率這個指標,但是對於長句,這個指標會變的不合適,如果不同算法的錯誤率不一樣,但是如果有一個錯的詞,會導致整個句子都是錯的,不能很好的區分算法的precision
相關文章:
Python中文分詞工具大合集:安裝、使用和測試
中文分詞工具在線PK新增:FoolNLTK、LTP、StanfordCoreNLP
五款中文分詞工具在線PK: Jieba, SnowNLP, PkuSeg, THULAC, HanLP
中文分詞文章索引和分詞數據資源分享