• 基于结构化感知机的词性标注与命名实体识别框架


     

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

  • 相关阅读:
    主线程等待子线程结束再做响应
    前端开发注意细节
    XSS攻击前端需注意
    移动端开发碰到一个坑
    连续改变Chrome浏览器窗口大小,可以导致内存泄漏
    js中使用使用原型(prototype)定义方法的好处
    父节点使用css的transform: translate(0, 0)时position:fixed在chrome浏览器中无效
    CSS 中的 em单位
    观察者模式和发布/订阅模式的区别
    搜索练习4
  • 原文地址:https://www.cnblogs.com/adnb34g/p/10670133.html
Copyright © 2020-2023  润新知