前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于结构化感知机的词性标注与命名实体识别框架

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

原创
作者头像
IT小白龙
修改2019-04-08 16:17:27
7770
修改2019-04-08 16:17:27
举报
文章被收录于专栏:hadoop学习笔记hadoop学习笔记

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档