zoukankan      html  css  js  c++  java
  • 基于结构化感知机的词性标注与命名实体识别框架

     

    上周就关于《结构化感知机标注框架的内容》已经分享了一篇《分词工具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个词语所属的命名实体成分。

  • 相关阅读:
    面向对象(接口 ,多态)
    面向对象(继承,重写,this,super,抽象类)
    IO(字符流 字符缓冲流)
    ArrayList集合
    字符串常用API
    面向对象(类,封装,this,构造方法)
    不同类型问题代码训练
    java中的方法
    04慕课网《进击Node.js基础(一)》HTTP讲解
    《JavaScript设计模式与开发实践》——第3章 闭包和高阶函数
  • 原文地址:https://www.cnblogs.com/adnb34g/p/10670133.html
Copyright © 2011-2022 走看看