Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用opennlp自定义命名实体

使用opennlp自定义命名实体

作者头像
code4it
发布于 2018-09-17 08:07:57
发布于 2018-09-17 08:07:57
1.3K00
代码可运行
举报
文章被收录于专栏:码匠的流水账码匠的流水账
运行总次数:0
代码可运行

本文主要研究一下如何使用opennlp自定义命名实体,标注训练及模型运用。

maven

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        <dependency>
            <groupId>org.apache.opennlp</groupId>
            <artifactId>opennlp-tools</artifactId>
            <version>1.8.4</version>
        </dependency>

实践

训练模型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// train the name finder
        String typedEntities = "<START:organization> NATO <END>\n" +
                "<START:location> United States <END>\n" +
                "<START:organization> NATO Parliamentary Assembly <END>\n" +
                "<START:location> Edinburgh <END>\n" +
                "<START:location> Britain <END>\n" +
                "<START:person> Anders Fogh Rasmussen <END>\n" +
                "<START:location> U . S . <END>\n" +
                "<START:person> Barack Obama <END>\n" +
                "<START:location> Afghanistan <END>\n" +
                "<START:person> Rasmussen <END>\n" +
                "<START:location> Afghanistan <END>\n" +
                "<START:date> 2010 <END>";
        ObjectStream<NameSample> sampleStream = new NameSampleDataStream(
                new PlainTextByLineStream(new MockInputStreamFactory(typedEntities), "UTF-8"));

        TrainingParameters params = new TrainingParameters();
        params.put(TrainingParameters.ALGORITHM_PARAM, "MAXENT");
        params.put(TrainingParameters.ITERATIONS_PARAM, 70);
        params.put(TrainingParameters.CUTOFF_PARAM, 1);

        TokenNameFinderModel nameFinderModel = NameFinderME.train("eng", null, sampleStream,
                params, TokenNameFinderFactory.create(null, null, Collections.emptyMap(), new BioCodec()));

opennlp使用<START>及 <END>来进行自定义标注实体,命名实体的话则在START之后用冒号标明,比如<START:person>

参数说明

  • ALGORITHM_PARAMOn the engineering level, using maxent is an excellent way of creating programs which perform very difficult classification tasks very well.
  • ITERATIONS_PARAMnumber of training iterations, ignored if -params is used.
  • CUTOFF_PARAMminimal number of times a feature must be seen

使用模型

上面训练完模型之后,就可以使用该模型进行解析

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
      NameFinderME nameFinder = new NameFinderME(nameFinderModel);

        // now test if it can detect the sample sentences

        String[] sentence = "NATO United States Barack Obama".split("\\s+");

        Span[] names = nameFinder.find(sentence);

        Stream.of(names)
                .forEach(span -> {
                    String named = IntStream.range(span.getStart(),span.getEnd())
                            .mapToObj(i -> sentence[i])
                            .collect(Collectors.joining(" "));
                    System.out.println("find type: "+ span.getType()+",name: " + named);
                });

输出如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
find type: organization,name: NATO
find type: location,name: United States
find type: person,name: Barack Obama

小结

opennlp的自定义命名实体的标注,给以了一定定制空间,方便开发者定制各自领域特殊的命名实体,以提高特定命名实体分词的准确性。

doc

  • opennlp-1.8.4-docs
  • OpenNLP进行中文命名实体识别(上:预处理及训练模型)
  • OpenNLP进行中文命名实体识别(下:载入模型识别实体)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码匠的流水账 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
命名实体识别的两种方法
【磐创AI导读】:本文主要介绍自然语言处理中的经典问题——命名实体识别的两种方法。想要学习更多的机器学习知识,欢迎大家点击上方蓝字关注我们的公众号:磐创AI。
磐创AI
2018/08/03
1.2K0
命名实体识别的两种方法
Python中的NLP
自然语言处理(NLP)是数据科学中最有趣的子领域之一,数据科学家越来越期望能够制定涉及利用非结构化文本数据的解决方案。尽管如此,许多应用数据科学家(来自STEM和社会科学背景)都缺乏NLP经验。
February
2018/11/30
4K1
教你用Python进行自然语言处理(附代码)
自然语言处理是数据科学中的一大难题。在这篇文章中,我们会介绍一个工业级的python库。 自然语言处理(NLP)是数据科学中最有趣的子领域之一,越来越多的数据科学家希望能够开发出涉及非结构化文本数据的解决方案。尽管如此,许多应用数据科学家(均具有STEM和社会科学背景)依然缺乏NLP(自然语言处理)经验。 在这篇文章中,我将探讨一些基本的NLP概念,并展示如何使用日益流行的Python spaCy包来实现这些概念。这篇文章适合NLP初学者阅读,但前提是假设读者具备Python的知识。 你是在说spaCy
数据派THU
2018/06/12
2.4K0
基于深层神经网络的命名实体识别技术
摘要:命名实体识别是从文本中识别具有特定类别的实体,例如人名、地名、机构名等。命名实体识别是信息检索,查询分类,自动问答等问题的基础任务,其效果直接影响后续处理的效果,因此是自然语言处理研究的一个基础问题。 引言 命名实体识别(Named Entity Recognition,后文简称NER)是指从文本中识别具有特定类别的实体(通常是名词),例如人名、地名、机构名、专有名词等。命名实体识别是信息检索,查询分类,自动问答等问题的基础任务,其效果直接影响后续处理的效果,因此是自然语言处理研究的一个基础问题。 传
用户1737318
2018/06/05
7940
HanLP-命名实体识别总结
在HanLP中,基于角色标注识别了中国人名。首先系统利用隐马尔可夫模型标注每个词语的角色,之后利用最大模式匹配法对角色序列进行匹配,匹配上模式的即为人名。理论指导文章为:《基于角色标注的中国人名自动识别研究》,大家可以百度一下看看
IT小白龙
2019/07/31
1.9K0
HanLP-命名实体识别总结
用深度学习做命名实体识别(五)-模型使用
注意,在cpu上使用模型的时间大概在2到3秒,而如果项目部署在搭载了支持深度学习的GPU的电脑上,接口的返回会快很多很多,当然不要忘记将tensorflow改为安装tensorflow-gpu。
程序员一一涤生
2019/09/23
8990
用深度学习做命名实体识别(五)-模型使用
Python环境中HanLP安装与使用
依赖PyTorch、TensorFlow等深度学习技术,适合专业NLP工程师、研究者以及本地海量数据场景。要求Python 3.6至3.10,支持Windows,推荐*nix。可以在CPU上运行,推荐GPU/TPU。安装PyTorch版:
火之高兴
2024/07/25
2730
用深度学习做命名实体识别(五)-模型使用
注意,在cpu上使用模型的时间大概在2到3秒,而如果项目部署在搭载了支持深度学习的GPU的电脑上,接口的返回会快很多很多,当然不要忘记将tensorflow改为安装tensorflow-gpu。
程序员一一涤生
2019/09/29
1.3K0
用深度学习做命名实体识别(五)-模型使用
微调大型语言模型进行命名实体识别
大型语言模型的目标是理解和生成与人类语言类似的文本。它们经过大规模的训练,能够对输入的文本进行分析,并生成符合语法和语境的回复。这种模型可以用于各种任务,包括问答系统、对话机器人、文本生成、翻译等。
deephub
2024/03/20
3660
微调大型语言模型进行命名实体识别
用BERT做命名实体识别任务
本质上NER是一个token classification任务, 需要把文本中的每一个token做一个分类。
lyhue1991
2023/09/05
7480
用BERT做命名实体识别任务
『深度应用』NLP命名实体识别(NER)开源实战教程
近几年来,基于神经网络的深度学习方法在计算机视觉、语音识别等领域取得了巨大成功,另外在自然语言处理领域也取得了不少进展。在NLP的关键性基础任务—命名实体识别(Named Entity Recognition,NER)的研究中,深度学习也获得了不错的效果。
小宋是呢
2019/08/26
1.6K0
『深度应用』NLP命名实体识别(NER)开源实战教程
NLP命名实体识别开源实战教程 | 深度应用
近几年来,基于神经网络的深度学习方法在计算机视觉、语音识别等领域取得了巨大成功,另外在自然语言处理领域也取得了不少进展。在NLP的关键性基础任务—命名实体识别(Named Entity Recognition,NER)的研究中,深度学习也获得了不错的效果。
AI科技大本营
2019/08/20
1.8K0
NLP命名实体识别开源实战教程 | 深度应用
斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用
众所周知,斯坦福大学自然语言处理组出品了一系列NLP工具包,但是大多数都是用Java写得,对于Python用户不是很友好。几年前我曾基于斯坦福Java工具包和NLTK写过一个简单的中文分词接口:Python自然语言处理实践: 在NLTK中使用斯坦福中文分词器,不过用起来也不是很方便。深度学习自然语言处理时代,斯坦福大学自然语言处理组开发了一个纯Python版本的深度学习NLP工具包:Stanza - A Python NLP Library for Many Human Languages,前段时间,Stanza v1.0.0 版本正式发布,算是一个里程碑:
汤贤
2020/05/18
2.3K0
斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用
使用opennlp进行词性标注
词性(Part of Speech, POS),标注是对一个词汇或一段文字进行描述的过程。这个描述被称为一个标注。
code4it
2018/09/17
9220
AllenNLP系列文章之二:命名实体识别
The named entity recognition model identifies named entities (people, locations, organizations, and miscellaneous) in the input text. This model is the "baseline" model described in Peters, Ammar, Bhagavatula, and Power 2017 . It uses a Gated Recurrent Unit (GRU) character encoder as well as a GRU phrase encoder, and it starts with pretrained GloVe vectors for its token embeddings. It was trained on the CoNLL-2003 NER dataset. It is not state of the art on that task, but it's not terrible either. (This is also the model constructed in our Creating a Model tutorial.)
sparkexpert
2022/05/07
5700
AllenNLP系列文章之二:命名实体识别
Python自然语言处理工具小结
作者:伏草惟存 来源:http://www.cnblogs.com/baiboy/p/nltk2.html 1 Python 的几个自然语言处理工具 NLTK:NLTK 在用 Python 处理自然语言的工具中处于领先的地位。它提供了 WordNet 这种方便处理词汇资源的借口,还有分类、分词、除茎、标注、语法分析、语义推理等类库。 Pattern:Pattern 的自然语言处理工具有词性标注工具(Part-Of-Speech Tagger),N元搜索(n-gram search),情感分析(senti
小小科
2018/05/03
1.3K0
Python自然语言处理工具小结
「Python实战项目」针对医疗数据进行命名实体识别
命名实体识别(Named Entity Recognition,简称NER),又称作“专名识别”,是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。通常包括两部分:(1)实体边界识别;(2) 确定实体类别(人名、地名、机构名或其他)。
小小科
2020/08/13
1.8K0
使用Scikit-Learn进行命名实体识别和分类(NERC)
命名实体识别和分类(NERC)是识别名称等信息单元的过程(包括人员,组织和位置名称),以及包括非结构化文本中的时间,日期,钱和百分比表达式等数值表达式。目标是开发实用且与域无关的技术,以便自动高精度地检测命名实体。
AiTechYun
2018/09/26
6.1K0
使用Scikit-Learn进行命名实体识别和分类(NERC)
最通俗易懂的命名实体识别NER模型中的CRF层介绍
向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程   公众号:datayx 在命名实体识别领域,基于神经网络的实现方法是非常流行和常用的。举个例子,该文讲述的用词嵌入和字嵌入的BiLSTM-CRF模型就是其中一种。我将以该模型为例解释CRF层的工作原理。 如果你不知道BiLSTM 和 CRF的实现细节,只需要记住他们是命名实体识别模型中两个不同的层。 我们规定在数据集中有两类实体,人名和组织机构名称。所以,其实在我们的数据集中总共有5类标签: B-Person (人名的开始部分) I
机器学习AI算法工程
2022/03/24
2.4K0
实体链接:信息抽取中的NLP的基础任务
我相信大多数人都遇到过命名实体识别(NER)。NER是一种基本的自然语言处理(NLP)任务,具有广泛的用例。本文不是关于NER的,而是关于一个与NER密切相关的NLP任务。
zenRRan
2020/07/09
2.7K0
实体链接:信息抽取中的NLP的基础任务
相关推荐
命名实体识别的两种方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验