中文自然語言處理工具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來使用新訓練的詞典。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章