基於結構化感知機的詞性標註與命名實體識別框架

adnb34g發表於2019-04-08


上週就關於《結構化感知機標註框架的內容》已經分享了一篇《分詞工具 Hanlp基於感知機的中文分詞框架》,本篇接上一篇內容,繼續分享詞性標註與命名實體識別框架的內容。

 

詞性標註

訓練

詞性標註是分詞後緊接著的一個任務,訓練語料同上,介面如下:

 

命令列

java -cp hanlp.jar com.hankcs.hanlp.model.perceptron.Main -task POS -train -reference data/test/pku98/199801.txt -model data/test/perceptron/pos.bin

 

API

public void testTrain() throws Exception

{

    PerceptronTrainer trainer = new POSTrainer();

    trainer.train("data/test/pku98/199801.txt", Config.POS_MODEL_FILE);

}

 

測試

詞性標註器接受的輸入不再是純文字,而是分詞後的單詞陣列或列表:

 

public void testLoad() throws Exception

{

    PerceptronPOSTagger tagger = new PerceptronPOSTagger(Config.POS_MODEL_FILE);

    System.out.println(Arrays.toString(tagger.tag("中國 交響樂團 譚利華 在 布達拉宮 廣場 演出".split(" "))));

}

正常情況下輸出每個單詞的詞性:

[ns, n, nr, p, ns, n, v]

關於如何組合分詞器和詞性標註器,使其同時進行分詞與詞性標註,請參考接下來的章節。

 

命名實體識別

目前本系統預設支援人名( nr),地名(ns),機構名(nt)三種命名實體的識別,使用者可以過載NERTrainer的createTagSet來支援任意NER型別。

訓練

命名實體識別是詞性標註的後續任務,訓練語料依然同上,介面如下:

 

命令列

java -cp hanlp.jar com.hankcs.hanlp.model.perceptron.Main -task NER -train -reference data/test/pku98/199801.txt -model data/test/perceptron/ner.bin

 

API

public void testTrain() throws Exception

{

    PerceptronTrainer trainer = new NERTrainer();

    trainer.train("data/test/pku98/199801.txt", Config.NER_MODEL_FILE);

}

 

自定義 NER型別

過載 NERTrainer的createTagSet來支援自己的NER型別。當然,使用者提供的語料必須滿足2014人民日報格式。

 

         PerceptronTrainer trainer = new NERTrainer()

        {

            @Override

            protected TagSet createTagSet()

            {

                NERTagSet tagSet = new NERTagSet();

                tagSet.nerLabels.add("YourNER1");

                tagSet.nerLabels.add("YourNER2");

                tagSet.nerLabels.add("YourNER3");

                return tagSet;

            }

        };

測試

命名實體識別器的輸入不再是純文字,而是分詞結果與詞性標註結果:

 

public void testTag() throws Exception

{

    PerceptionNERecognizer recognizer = new PerceptionNERecognizer(Config.NER_MODEL_FILE);

    System.out.println(Arrays.toString(recognizer.recognize("吳忠市 乳製品 公司 譚利華 來到 布達拉宮 廣場".split(" "), "ns n n nr p ns n".split(" "))));

}

 

正常情況下輸出:

[B-nt, M-nt, E-nt, S, O, S, O]

7個標籤代表上述7個詞語所屬的命名實體成分。

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31524777/viewspace-2640638/,如需轉載,請註明出處,否則將追究法律責任。

相關文章