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

adnb34g發表於2019-02-13


 

本文旨在介紹如何利用 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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章