Hanlp分詞之CRF中文詞法分析詳解
這是另一套基於 CRF的詞法分析系統,類似感知機詞法分析器,提供了完善的訓練與分析介面。
CRF的效果比感知機稍好一些,然而訓練速度較慢,也不支援線上學習。
預設模型訓練自 OpenCorpus/pku98/199801.txt, 隨 hanlp 1.6.2以上版本釋出 。
語料格式等與感知機詞法分析器相同,請先閱讀《感知機詞法分析器》。
中文分詞
訓練
CRFSegmenter segmenter = new CRFSegmenter(null);
segmenter.train("data/test/pku98/199801.txt", CWS_MODEL_PATH);
輸出為 HanLP私有的二進位制模型,有興趣的話還可以通過命令匯出為相容CRF++的純文字格式。
java -cp hanlp.jar com.hankcs.hanlp.model.crf.crfpp.crf_learn -T cws.bin cws.txt
與 CRF++相容
由於 C++的執行效率和記憶體效率優於Java,所以推薦直接利用CRF++執行大規模訓練。
首先將人民日報語料轉換為 CRF++格式:
CRFSegmenter segmenter = new CRFSegmenter(null);
segmenter.convertCorpus("data/test/pku98/199801.txt", "data/test/crf/cws-corpus.tsv");
然後準備一份特徵模板,或者直接用 HanLP預設的:
segmenter.dumpTemplate("data/test/crf/cws-template.txt");
接著用 CRF++的crf_learn執行訓練:
crf_learn cws-template.txt cws-corpus.tsv cws -t
·此處必須使用-t命令CRF++輸出文字格式的模型cws.txt
·HanLP只相容CRF++的文字模型,不相容二進位制
將 cws.txt格式的模型傳入CRFSegmenter或CRFLexicalAnalyzer的建構函式即可建立分詞器,同時HanLP會自動建立二進位制快取.txt.bin,下次載入耗時將控制在數百毫秒內。
預測
可通過如下方式載入:
CRFSegmenter segmenter = new CRFSegmenter(CWS_MODEL_PATH);
List<String> wordList = segmenter.segment("商品和服務");
System.out.println(wordList);
不傳入模型路徑時將預設載入配置檔案指定的模型。
詞性標註
CRF詞性標註器的訓練與載入與中文分詞類似,對應CRFPOSTagger。
命名實體識別
CRF命名實體識別也是類似的用法,對應CRFNERecognizer。
CRF詞法分析器
訓練了 1至3個模型後,可以構造CRF詞法分析器:
/**
* 構造CRF詞法分析器
*
* @param cwsModelPath CRF分詞器模型路徑
* @param posModelPath CRF詞性標註器模型路徑
* @param nerModelPath CRF命名實體識別器模型路徑
*/
public CRFLexicalAnalyzer(String cwsModelPath, String posModelPath, String nerModelPath) throws IOException
/**
* 載入配置檔案指定的模型
*
* @throws IOException
*/
public CRFLexicalAnalyzer() throws IOException
構造後可以呼叫 analyze介面或與舊介面相容的seg:
CRFLexicalAnalyzer analyzer = new CRFLexicalAnalyzer();
String[] tests = new String[]{
"商品和服務",
"上海華安工業(集團)公司董事長譚旭光和祕書胡花蕊來到美國紐約現代藝術博物館參觀",
"微軟公司於1975年由比爾·蓋茲和保羅·艾倫創立,18年啟動以智慧雲端、前端為導向的大改組。" // 支援繁體中文
};
for (String sentence : tests)
{
System.out.println(analyzer.analyze(sentence));
System.out.println(analyzer.seg(sentence));
}
在 1.6.2以上版本中,所有的詞法分析介面都同時支援簡繁。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31524777/viewspace-2636268/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- HanLP-實詞分詞器詳解HanLP分詞
- Hanlp中使用純JAVA實現CRF分詞HanLPJavaCRF分詞
- hanlp原始碼解析之中文分詞演算法詳解HanLP原始碼中文分詞演算法
- HanLP中文分詞Lucene外掛HanLP中文分詞
- HanLP分詞命名實體提取詳解HanLP分詞
- 開源自然語言處理工具包hanlp中CRF分詞實現詳解自然語言處理HanLPCRF分詞
- 分詞工具Hanlp基於感知機的中文分詞框架HanLP中文分詞框架
- MapReduce實現與自定義詞典檔案基於hanLP的中文分詞詳解HanLP中文分詞
- 中文分詞工具之基於字標註法的分詞中文分詞
- HanLP 關鍵詞提取演算法分析詳解HanLP演算法
- HanLP分詞工具中的ViterbiSegment分詞流程HanLP分詞Viterbi
- 基於 HanLP 的 ES 中文分詞外掛HanLP中文分詞
- Hanlp自然語言處理工具之詞法分析器HanLP自然語言處理詞法分析
- Hanlp在java中文分詞中的使用介紹HanLPJava中文分詞
- 中文分詞演算法工具hanlp原始碼解析中文分詞演算法HanLP原始碼
- Elasticsearch整合HanLP分詞器ElasticsearchHanLP分詞
- vue之詞法分析Vue詞法分析
- java分詞工具hanlp介紹Java分詞HanLP
- 中文分詞的探索,CRF(條件隨機場)和HMM(隱馬爾可夫模型)用於分詞的對比,以及中文分詞的評估中文分詞CRF條件隨機場HMM隱馬爾可夫模型
- hanlp中文智慧分詞自動識別文字提取例項HanLP分詞
- Ansj與hanlp分詞工具對比HanLP分詞
- python呼叫hanlp分詞包手記PythonHanLP分詞
- 簡單有效的多標準中文分詞詳解中文分詞
- #Elasticsearch中文分詞器 #IK分詞器 @FDDLCElasticsearch中文分詞
- 中文分詞原理及常用Python中文分詞庫介紹中文分詞Python
- 古詩詞 中文 分詞 自動化分詞
- 基於hanlp的es分詞外掛HanLP分詞
- Hanlp等七種優秀的開源中文分詞庫推薦HanLP中文分詞
- NLP之中文分詞中文分詞
- 中文分詞技術中文分詞
- HanLP分類模組的分詞器介紹HanLP分詞
- Spring MVCD框架中呼叫HanLP分詞的方法SpringMVC框架HanLP分詞
- Spark中分散式使用HanLP(1.7.0)分詞示例Spark分散式HanLP分詞
- HanLP二元核心詞典詳細解析HanLP
- 空間分析:4-1.分詞模型hanLP簡介與安裝分詞模型HanLP
- python 中文分詞包 jiebaPython中文分詞Jieba
- pyhanlp 中文詞性標註與分詞簡介HanLP詞性標註分詞
- 詞法分析基礎詞法分析