中文自然語言處理工具hanlp隱馬角色標註詳解
本文旨在介紹如何利用 HanLP訓練分詞模型,包括語料格式、語料預處理、訓練介面、輸出格式等。 目前HanLP內建的訓練介面是針對一階HMM-NGram設計的,另外附帶了通用的語料載入工具,可以透過少量程式碼匯出供其他訓練工具使用的特定格式(如CRF++)。
語料格式
輸入語料格式為人民日報分詞語料庫格式。該格式並沒有明確的規範,但總體滿足以下幾點:
1、 單詞與詞性之間使用 “/”分割,如華爾街/nsf,且任何單詞都必須有詞性,包括標點等。
2、 單詞與單詞之間使用空格分割,如美國 /nsf 華爾街/nsf 股市/n。
3、 支援用 []將多個單詞合併為一個複合詞,如[紐約/nsf 時報/n]/nz,複合詞也必須遵守1和2兩點規範。
你可以參考 OpenCorpus/pku98/199801.txt(作者並無版權,請勿詢問)。
語料預處理
語料預處理指的是將語料載入到記憶體中,根據需要增刪改其中部分詞語的一個過程。 在 HanLP中,這是透過CorpusLoader.walk實現的:
CorpusLoader.walk("path/to/your/corpus", new CorpusLoader.Handler()
{
@Override
public void handle(Document document)
{
System.out.println(document);
}
});
其中, document物件就是載入到記憶體的文件,對應某一個文字檔案。使用者可以透過document.getSimpleSentenceList等介面獲取文件中的句子列表,每個句子都是單詞的連結串列,具體引數請參考source.jar,不再贅述。而Handler是一個處理邏輯(lambda函式),在此可以編寫自己的預處理程式碼。
· CRF分詞采用BMES標註集,從人民日報轉換到CRF訓練語料的完整預處理程式碼請參考com.hankcs.test.model.TestCRF#testPrepareCRFTrainingCorpus。
· 若不使用上述預處理程式碼則請注意:由於在 HanLP實現的CRF分詞解碼演算法中,數詞被轉換為M,英文被轉換為W;所以在訓練CRF分詞之前,需要用相同的邏輯預處理語料。轉換程式碼請參考:com.hankcs.test.model.TestCRF#compile
訓練 HMM-NGram分詞模型
HMM-NGram在HanLP中特意被處理為文字形式,方便使用者理解、修改HMM-NGram模型(習慣上稱為詞典,但這並不代表它不是模型)。此處的訓練就是為了得到分詞所需的全部模型,而訓練,只需一兩行程式碼:
final NatureDictionaryMaker dictionaryMaker = new NatureDictionaryMaker();
CorpusLoader . walk( "path/to/your/corpus" , new CorpusLoader.Handler()
{
@Override
public void handle(Document document)
{
dictionaryMaker . compute(CorpusUtil . convert2CompatibleList(document . getSimpleSentenceList( true )));
}
});
dictionaryMaker . saveTxtTo( "data/test/CoreNatureDictionary" );
其中, document.getComplexSentenceList()代表獲取複合詞句子列表(即複合詞原樣輸出),使用者可以將其替換為CorpusUtil.convert2CompatibleList(document.getSimpleSentenceList(true))來將複合詞拆分為單個詞語。
輸出格式
訓練後一共得出 3個檔案:
1、 CoreNatureDictionary.txt:單詞詞性詞典
2、 CoreNatureDictionary.ngram.txt:二元接續詞典
3、 CoreNatureDictionary.tr.txt:詞性轉移矩陣
接下來使用者可以透過替換配置檔案中的 CoreDictionaryPath來使用新訓練的詞典。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31524777/viewspace-2629906/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- HanLP 自然語言處理 for nodejsHanLP自然語言處理NodeJS
- 配置Hanlp自然語言處理進階HanLP自然語言處理
- 自然語言處理入門基礎之hanlp詳解自然語言處理HanLP
- 自然語言處理標註工具——Brat(安裝、測試、使用)自然語言處理
- 自然語言處理工具python呼叫hanlp中文實體識別自然語言處理PythonHanLP
- 自然語言處理之序列標註問題自然語言處理
- Spring Boot中對自然語言處理工具包hanlp的呼叫詳解Spring Boot自然語言處理HanLP
- hanlp自然語言處理包的基本使用--pythonHanLP自然語言處理Python
- python呼叫自然語言處理工具hanlp記錄Python自然語言處理HanLP
- Hanlp自然語言處理工具的使用演練HanLP自然語言處理
- 自然語言處理工具hanlp自定義詞彙新增圖解自然語言處理HanLP圖解
- 如何編譯執行HanLP自然語言處理包編譯HanLP自然語言處理
- 自然語言處理工具包HanLP的Python介面自然語言處理HanLPPython
- 開源自然語言處理工具包hanlp中CRF分詞實現詳解自然語言處理HanLPCRF分詞
- NLP自然語言處理中的hanlp分詞例項自然語言處理HanLP分詞
- Hanlp自然語言處理中的詞典格式說明HanLP自然語言處理
- Hanlp自然語言處理工具之詞法分析器HanLP自然語言處理詞法分析
- 自然語言處理工具python呼叫hanlp的方法步驟自然語言處理PythonHanLP
- 自然語言處理工具pyhanlp分詞與詞性標註自然語言處理HanLP分詞詞性標註
- hanlp自然語言處理包的人名識別程式碼解析HanLP自然語言處理
- 自然語言處理工具hanlp關鍵詞提取圖解TextRank演算法自然語言處理HanLP圖解演算法
- 自然語言處理工具hanlp定製使用者詞條自然語言處理HanLP
- 自然語言處理工具HanLP-N最短路徑分詞自然語言處理HanLP分詞
- 自然語言處理之:搭建基於HanLP的開發環境自然語言處理HanLP開發環境
- 精通Python自然語言處理 4 :詞性標註--單詞識別Python自然語言處理詞性標註
- 自然語言處理技術詳細概覽自然語言處理
- 12 種自然語言處理的開源工具自然語言處理開源工具
- 自然語言處理工具包 HanLP在 Spring Boot中的應用自然語言處理HanLPSpring Boot
- 自然語言處理工具HanLP-基於層疊HMM地名識別自然語言處理HanLPHMM地名識別
- 自然語言處理工具hanlp 1.7.3版本更新內容一覽自然語言處理HanLP
- 自然語言處理(NLP)系列(一)——自然語言理解(NLU)自然語言處理
- 自然語言處理NLP(四)自然語言處理
- 自然語言處理(NLP)概述自然語言處理
- Python自然語言處理工具Python自然語言處理
- 中文和英文NLP自然語言處理異同點分析自然語言處理
- 中文自然語言處理工具集:分詞,相似度匹配自然語言處理分詞
- Python自然語言處理實戰(4):詞性標註與命名實體識別Python自然語言處理詞性標註
- [譯] 自然語言處理真是有趣!自然語言處理