這是另一套基于CRF的詞法分析系統(tǒng),類似感知機(jī)詞法分析器,提供了完善的訓(xùn)練與分析接口。
CRF的效果比感知機(jī)稍好一些,然而訓(xùn)練速度較慢,也不支持在線學(xué)習(xí)。 默認(rèn)模型訓(xùn)練自OpenCorpus/pku98/199801.txt,隨hanlp 1.6.2以上版本發(fā)布。 語料格式等與感知機(jī)詞法分析器相同,請(qǐng)先閱讀《感知機(jī)詞法分析器》。 中文分詞 訓(xùn)練 CRFSegmenter segmenter = new CRFSegmenter(null); segmenter.train("data/test/pku98/199801.txt", CWS_MODEL_PATH); 輸出為HanLP私有的二進(jìn)制模型,有興趣的話還可以通過命令導(dǎo)出為兼容CRF++的純文本格式。 java -cp hanlp.jar com.hankcs.hanlp.model.crf.crfpp.crf_learn -T cws.bin cws.txt 與CRF++兼容 由于C++的運(yùn)行效率和內(nèi)存效率優(yōu)于Java,所以推薦直接利用CRF++執(zhí)行大規(guī)模訓(xùn)練。 首先將人民日?qǐng)?bào)語料轉(zhuǎn)換為CRF++格式:
CRFSegmenter segmenter = new CRFSegmenter(null); segmenter.convertCorpus("data/test/pku98/199801.txt", "data/test/crf/cws-corpus.tsv"); 然后準(zhǔn)備一份特征模板,或者直接用HanLP默認(rèn)的: segmenter.dumpTemplate("data/test/crf/cws-template.txt"); 接著用CRF++的crf_learn執(zhí)行訓(xùn)練: crf_learn cws-template.txt cws-corpus.tsv cws -t ·此處必須使用-t命令CRF++輸出文本格式的模型cws.txt ·HanLP只兼容CRF++的文本模型,不兼容二進(jìn)制
將cws.txt格式的模型傳入CRFSegmenter或CRFLexicalAnalyzer的構(gòu)造函數(shù)即可創(chuàng)建分詞器,同時(shí)HanLP會(huì)自動(dòng)創(chuàng)建二進(jìn)制緩存.txt.bin,下次加載耗時(shí)將控制在數(shù)百毫秒內(nèi)。 預(yù)測(cè) 可通過如下方式加載: CRFSegmenter segmenter = new CRFSegmenter(CWS_MODEL_PATH); List<String> wordList = segmenter.segment("商品和服務(wù)"); System.out.println(wordList); 不傳入模型路徑時(shí)將默認(rèn)加載配置文件指定的模型。 詞性標(biāo)注 CRF詞性標(biāo)注器的訓(xùn)練與加載與中文分詞類似,對(duì)應(yīng)CRFPOSTagger。 命名實(shí)體識(shí)別 CRF命名實(shí)體識(shí)別也是類似的用法,對(duì)應(yīng)CRFNERecognizer。 CRF詞法分析器 訓(xùn)練了1至3個(gè)模型后,可以構(gòu)造CRF詞法分析器: /** * 構(gòu)造CRF詞法分析器 * * @param cwsModelPath CRF分詞器模型路徑 * @param posModelPath CRF詞性標(biāo)注器模型路徑 * @param nerModelPath CRF命名實(shí)體識(shí)別器模型路徑 */ public CRFLexicalAnalyzer(String cwsModelPath, String posModelPath, String nerModelPath) throws IOException /** * 加載配置文件指定的模型 * * @throws IOException */ public CRFLexicalAnalyzer() throws IOException 構(gòu)造后可以調(diào)用analyze接口或與舊接口兼容的seg:
CRFLexicalAnalyzer analyzer = new CRFLexicalAnalyzer(); String[] tests = new String[]{ "商品和服務(wù)", "上海華安工業(yè)(集團(tuán))公司董事長譚旭光和秘書胡花蕊來到美國紐約現(xiàn)代藝術(shù)博物館參觀", "微軟公司於1975年由比爾·蓋茲和保羅·艾倫創(chuàng)立,18年啟動(dòng)以智慧雲(yún)端、前端為導(dǎo)向的大改組。" // 支持繁體中文 }; for (String sentence : tests) { System.out.println(analyzer.analyze(sentence)); System.out.println(analyzer.seg(sentence)); } 在1.6.2以上版本中,所有的詞法分析接口都同時(shí)支持簡繁。 |
|