分詞工具Hanlp基於感知機的中文分詞框架
結構化感知機標註框架是一套利用感知機做序列標註任務,並且應用到中文分詞、詞性標註與命名實體識別這三個問題的完整線上學習框架,該框架利用 1個演算法解決3個問題,時自治同意的系統,同時三個任務順序漸進,構成流水線式的系統。本文先介紹中文分詞框架部分內容。
中文分詞
訓練
只需指定輸入語料的路徑(單文件時為檔案路徑,多文件時為資料夾路徑,靈活處理),以及模型儲存位置即可:
命令列
java -cp hanlp.jar com.hankcs.hanlp.model.perceptron.Main -task CWS -train -reference data/test/pku98/199801.txt -model data/test/perceptron/cws.bin
API
public void testTrain() throws Exception
{
PerceptronTrainer trainer = new CWSTrainer();
PerceptronTrainer.Result result = trainer.train(
"data/test/pku98/199801.txt",
Config.CWS_MODEL_FILE
);
// System.out.printf("準確率F1:%.2f\n", result.prf[2]);
}
事實上,視語料與任務的不同,迭代數、壓縮比和執行緒數都可以自由調整,以保證最佳結果 :
/**
* 訓練
*
* @param trainingFile 訓練集
* @param developFile 開發集
* @param modelFile 模型儲存路徑
* @param compressRatio 壓縮比
* @param maxIteration 最大迭代次數
* @param threadNum 執行緒數
* @return 一個包含模型和精度的結構
* @throws IOException
*/
public Result train(String trainingFile, String developFile,
String modelFile, final double compressRatio,
final int maxIteration, final int threadNum) throws IOException
單執行緒時使用 AveragedPerceptron演算法,收斂較好;多執行緒時使用StructuredPerceptron,波動較大。關於兩種演算法的精度比較,請參考下一小節。目前預設多執行緒,執行緒數為系統CPU核心數。請根據自己的需求平衡精度和速度。
準確率
在 sighan2005的msr資料集上的效能評估結果如下:
l 語料未進行任何預處理
l 只使用了 7種狀態特徵,未使用詞典
l 壓縮比 0.0,迭代數50
l 總耗時包含語料載入與模型序列化
l 對任意 PerceptronTagger,使用者都可以呼叫準確率評估介面:
/**
* 效能測試
*
* @param corpora 資料集
* @return 預設返回accuracy,有些子類可能返回P,R,F1
* @throws IOException
*/
public double[] evaluate(String corpora) throws IOException
速度
目前感知機分詞是所有 “由字構詞”的分詞器實現中最快的,比自己寫的CRF解碼快1倍。新版CRF詞法分析器框架複用了感知機的維特比解碼演算法,所以速度持平。
l 測試時需關閉詞法分析器的自定義詞典、詞性標註和命名實體識別
l 測試環境 Java8 i7-6700K
測試
測試時只需提供分詞模型的路徑即可:
public void testCWS() throws Exception
{
PerceptronSegmenter segmenter = new PerceptronSegmenter(Config.CWS_MODEL_FILE);
System.out.println(segmenter.segment("商品和服務"));
}
正常情況下對商品和服務的分詞結果為 [商品, 和, 服務]。建議在任何語料上訓練時都試一試這個簡單的句子,當作HelloWorld來測試。若這個例子都錯了,則說明語料格式、規模或API呼叫上存在問題,須仔細排查,而不要急著部署上線。
另外,資料包中已經打包了在人民日報語料 1998年1月份上訓練的模型,不傳路徑時將預設載入配置檔案中指定的模型。
在本系統中,分詞器 PerceptronSegmenter的職能更加單一,僅僅負責分詞,不再負責詞性標註或命名實體識別。這是一次介面設計上的新嘗試,未來可能在v2.0中大規模採用這種思路去重構。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31524777/viewspace-2640200/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 基於 HanLP 的 ES 中文分詞外掛HanLP中文分詞
- HanLP分詞工具中的ViterbiSegment分詞流程HanLP分詞Viterbi
- 中文分詞工具之基於字標註法的分詞中文分詞
- 基於hanlp的es分詞外掛HanLP分詞
- HanLP中文分詞Lucene外掛HanLP中文分詞
- Hanlp分詞之CRF中文詞法分析詳解HanLP分詞CRF詞法分析
- java分詞工具hanlp介紹Java分詞HanLP
- 中文分詞演算法工具hanlp原始碼解析中文分詞演算法HanLP原始碼
- MapReduce實現與自定義詞典檔案基於hanLP的中文分詞詳解HanLP中文分詞
- Ansj與hanlp分詞工具對比HanLP分詞
- Hanlp在java中文分詞中的使用介紹HanLPJava中文分詞
- HanLP-實詞分詞器詳解HanLP分詞
- Elasticsearch整合HanLP分詞器ElasticsearchHanLP分詞
- 基於結構化平均感知機的分詞器Java實現分詞Java
- Spring MVCD框架中呼叫HanLP分詞的方法SpringMVC框架HanLP分詞
- HanLP分類模組的分詞器介紹HanLP分詞
- [Python] 基於 jieba 的中文分詞總結PythonJieba中文分詞
- #Elasticsearch中文分詞器 #IK分詞器 @FDDLCElasticsearch中文分詞
- 史上最全中文分詞工具整理中文分詞
- Python分詞模組推薦:jieba中文分詞PythonJieba中文分詞
- 中文分詞的探索,CRF(條件隨機場)和HMM(隱馬爾可夫模型)用於分詞的對比,以及中文分詞的評估中文分詞CRF條件隨機場HMM隱馬爾可夫模型
- hanlp中文智慧分詞自動識別文字提取例項HanLP分詞
- hanlp原始碼解析之中文分詞演算法詳解HanLP原始碼中文分詞演算法
- 中文分詞原理及常用Python中文分詞庫介紹中文分詞Python
- 中文分詞技術中文分詞
- IKAnalyzer 中文分詞的不同版本切詞方式中文分詞
- Hanlp等七種優秀的開源中文分詞庫推薦HanLP中文分詞
- HanLP分詞命名實體提取詳解HanLP分詞
- python呼叫hanlp分詞包手記PythonHanLP分詞
- iOS中文近似度的演算法及中文分詞(結巴分詞)的整合iOS演算法中文分詞
- Spark中分散式使用HanLP(1.7.0)分詞示例Spark分散式HanLP分詞
- Hanlp中使用純JAVA實現CRF分詞HanLPJavaCRF分詞
- 自然語言處理工具HanLP-N最短路徑分詞自然語言處理HanLP分詞
- 北大開源了中文分詞工具包:準確率遠超THULAC、結巴分詞!中文分詞
- 北大開源全新中文分詞工具包:準確率遠超THULAC、結巴分詞中文分詞
- 達觀資料基於Deep Learning的中文分詞嘗試中文分詞
- 中文分詞研究難點-詞語劃分和語言規範中文分詞
- pyhanlp 中文詞性標註與分詞簡介HanLP詞性標註分詞