中文天然語言處理工具hanlp隱馬角色標註詳解

本文旨在介紹如何利用HanLP訓練分詞模型,包括語料格式、語料預處理、訓練接口、輸出格式等。 目前HanLP內置的訓練接口是針對一階HMM-NGram設計的,另外附帶了通用的語料加載工具,能夠經過少許代碼導出供其餘訓練工具使用的特定格式(如CRF++)。算法

語料格式ide

輸入語料格式爲人民日報分詞語料庫格式。該格式並無明確的規範,但整體知足如下幾點:函數

一、單詞與詞性之間使用「/」分割,如華爾街/nsf,且任何單詞都必須有詞性,包括標點等。工具

二、單詞與單詞之間使用空格分割,如美國/nsf 華爾街/nsf 股市/n。spa

三、支持用[]將多個單詞合併爲一個複合詞,如[紐約/nsf 時報/n]/nz,複合詞也必須遵照1和2兩點規範。.net

你能夠參考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個文件:

一、CoreNatureDictionary.txt:單詞詞性詞典

二、CoreNatureDictionary.ngram.txt:二元接續詞典

三、CoreNatureDictionary.tr.txt:詞性轉移矩陣

接下來用戶能夠經過替換配置文件中的CoreDictionaryPath來使用新訓練的詞典。

相關文章
相關標籤/搜索