初学者 | 一文读懂命名实体识别
本文对自然语言基础技术之命名实体识别进行了相对全面的简绍,包括定义、发展历史、常见方法、以及相关数据集,最后推荐一大波python实战利器,并且包括工具的用法。
定义
先来看看维基百科上的定义:Named-entity recognition (NER) (also known as entity identification, entity chunking and entity extraction) is a subtask of information extraction that seeks to locate and classify named entity mentions in unstructured text into pre-defined categories such as the person names, organizations, locations, medical codes, time expressions, quantities, monetary values, percentages, etc.
命名实体识别(Named Entity Recognition,简称NER),又称作“专名识别”,是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。简单的讲,就是识别自然文本中的实体指称的边界和类别。
发展历史
命名实体识别这个术语首次出现在MUC-6(Message Understanding Conferences),这个会议关注的主要问题是信息抽取(Information Extraction),第六届MUC除了信息抽取评测任务还开设了新评测任务即命名实体识别任务。除此之外,其他相关的评测会议包括CoNLL(Conference on Computational Natural Language Learning)、ACE(Automatic Content Extraction)和IEER(Information Extraction-Entity Recognition Evaluation)等。
在MUC-6之前,大家主要是关注人名、地名和组织机构名这三类专业名词的识别。自MUC-6起,后面有很多研究对类别进行了更细致的划分,比如地名被进一步细化为城市、州和国家,也有人将人名进一步细分为政治家、艺人等小类。
此外,一些评测还扩大了专业名词的范围,比如CoNLL某年组织的评测中包含了产品名的识别。一些研究也涉及电影名、书名、项目名、研究领域名称、电子邮件地址、电话号码以及生物信息学领域的专有名词(如蛋白质、DNA、RNA等)。甚至有一些工作不限定“实体”的类型,而是将其当做开放域的命名实体识别和分类。
常见方法
早期的命名实体识别方法基本都是基于规则的。之后由于基于大规模的语料库的统计方法在自然语言处理各个方面取得不错的效果之后,一大批机器学习的方法也出现在命名实体类识别任务。宗成庆老师在统计自然语言处理一书粗略的将这些基于机器学习的命名实体识别方法划分为以下几类:
有监督的学习方法:这一类方法需要利用大规模的已标注语料对模型进行参数训练。目前常用的模型或方法包括隐马尔可夫模型、语言模型、最大熵模型、支持向量机、决策树和条件随机场等。值得一提的是,基于条件随机场的方法是命名实体识别中最成功的方法。
半监督的学习方法:这一类方法利用标注的小数据集(种子数据)自举学习。
无监督的学习方法:这一类方法利用词汇资源(如WordNet)等进行上下文聚类。
混合方法:几种模型相结合或利用统计方法和人工总结的知识库。
值得一提的是,由于深度学习在自然语言的广泛应用,基于深度学习的命名实体识别方法也展现出不错的效果,此类方法基本还是把命名实体识别当做序列标注任务来做,比较经典的方法是LSTM+CRF、BiLSTM+CRF。
相关数据集
CCKS2017开放的中文的电子病例测评相关的数据。
评测任务一:https://biendata.com/competition/CCKS2017_1/
评测任务二:https://biendata.com/competition/CCKS2017_2/
CCKS2018开放的音乐领域的实体识别任务。
评测任务:https://biendata.com/competition/CCKS2018_2/
(CoNLL 2002)Annotated Corpus for Named Entity Recognition。
地址:https://www.kaggle.com/abhinavwalia95/entity-annotated-corpus
NLPCC2018开放的任务型对话系统中的口语理解评测。
地址:http://tcci.ccf.org.cn/conference/2018/taskdata.php
一家公司提供的数据集,包含人名、地名、机构名、专有名词。
下载地址:https://bosonnlp.com/dev/resource
工具推荐
Stanford NER
斯坦福大学开发的基于条件随机场的命名实体识别系统,该系统参数是基于CoNLL、MUC-6、MUC-7和ACE命名实体语料训练出来的。
地址:https://nlp.stanford.edu/software/CRF-NER.shtml
python实现的Github地址:https://github.com/Lynten/stanford-corenlp
# 安装:pip install stanfordcorenlp # 国内源安装:pip install stanfordcorenlp -i https://pypi.tuna.tsinghua.edu.cn/simple # 使用stanfordcorenlp进行命名实体类识别 # 先下载模型,下载地址:https://nlp.stanford.edu/software/corenlp-backup-download.html # 对中文进行实体识别 from stanfordcorenlp import StanfordCoreNLP zh_model = StanfordCoreNLP(r'stanford-corenlp-full-2018-02-27', lang='zh') s_zh = '我爱自然语言处理技术!' ner_zh = zh_model.ner(s_zh) s_zh1 = '我爱北京天安门!' ner_zh1 = zh_model.ner(s_zh1) print(ner_zh) print(ner_zh1) [('我爱', 'O'), ('自然', 'O'), ('语言', 'O'), ('处理', 'O'), ('技术', 'O'), ('!', 'O')] [('我爱', 'O'), ('北京', 'STATE_OR_PROVINCE'), ('天安门', 'FACILITY'), ('!', 'O')] # 对英文进行实体识别 eng_model = StanfordCoreNLP(r'stanford-corenlp-full-2018-02-27') s_eng = 'I love natural language processing technology!' ner_eng = eng_model.ner(s_eng) s_eng1 = 'I love Beijing Tiananmen!' ner_eng1 = eng_model.ner(s_eng1) print(ner_eng) print(ner_eng1) [('I', 'O'), ('love', 'O'), ('natural', 'O'), ('language', 'O'), ('processing', 'O'), ('technology', 'O'), ('!', 'O')] [('I', 'O'), ('love', 'O'), ('Beijing', 'CITY'), ('Tiananmen', 'LOCATION'), ('!', 'O')]
MALLET
麻省大学开发的一个统计自然语言处理的开源包,其序列标注工具的应用中能够实现命名实体识别。
官方地址:http://mallet.cs.umass.edu/
Hanlp
HanLP是一系列模型与算法组成的NLP工具包,由大快搜索主导并完全开源,目标是普及自然语言处理在生产环境中的应用。支持命名实体识别。
Github地址:https://github.com/hankcs/pyhanlp
官网:http://hanlp.linrunsoft.com/
# 安装:pip install pyhanlp # 国内源安装:pip install pyhanlp -i https://pypi.tuna.tsinghua.edu.cn/simple # 通过crf算法识别实体 from pyhanlp import * # 音译人名示例 CRFnewSegment = HanLP.newSegment("crf") term_list = CRFnewSegment.seg("我爱北京天安门!") print(term_list) [我/r, 爱/v, 北京/ns, 天安门/ns, !/w]
NLTK
NLTK是一个高效的Python构建的平台,用来处理人类自然语言数据。
Github地址:https://github.com/nltk/nltk
官网:http://www.nltk.org/
# 安装:pip install nltk # 国内源安装:pip install nltk -i https://pypi.tuna.tsinghua.edu.cn/simple import nltk s = 'I love natural language processing technology!' s_token = nltk.word_tokenize(s) s_tagged = nltk.pos_tag(s_token) s_ner = nltk.chunk.ne_chunk(s_tagged) print(s_ner)
SpaCy
工业级的自然语言处理工具,遗憾的是不支持中文。
Gihub地址:
https://github.com/explosion/spaCy
官网:https://spacy.io/
# 安装:pip install spaCy # 国内源安装:pip install spaCy -i https://pypi.tuna.tsinghua.edu.cn/simple import spacy eng_model = spacy.load('en') s = 'I want to Beijing learning natural language processing technology!' # 命名实体识别 s_ent = eng_model(s) for ent in s_ent.ents:print(ent, ent.label_, ent.label) Beijing GPE 382
Crfsuite
可以载入自己的数据集去训练CRF实体识别模型。
文档地址:
https://sklearn-crfsuite.readthedocs.io/en/latest/?badge=latest
代码已上传:https://github.com/yuquanle/StudyForNLP/blob/master/NLPbasic/NER.ipynb
参考:
1.统计自然语言处理
2.中文信息处理报告-2016
初学者 | 一文读懂命名实体识别相关推荐
- 一文读懂命名实体识别
本文对自然语言基础技术之命名实体识别进行了相对全面的介绍,包括定义.发展历史.常见方法.以及相关数据集,最后推荐一大波 Python 实战利器,并且包括工具的用法. 01 定义 先来看看维基百科上的定 ...
- 论文解读丨图神经网络应用于半结构化文档的命名实体识别和关系提取
摘要: 随着用于传递和记录业务信息的管理文档的广泛使用,能够鲁棒且高效地从这些文档中自动提取和理解内容的方法成为一个迫切的需求.本次解读的文章提出利用图神经网络来解决半结构化文档中的实体识别(NER) ...
- 近五年中文电子病历命名实体识别研究进展
原文链接: 近五年中文电子病历命名实体识别研究进展 阅读综述性论文是一种能够快速了解某一领域的方法,接下来通过今年的一篇综述性论文来了解一下近五年来中文电子病历的命名实体识别研究进展. 基本的,我们应 ...
- 【NER综述】近五年中文电子病历命名实体识别研究进展
来自:python遇见NLP 阅读综述性论文是一种能够快速了解某一领域的方法,接下来通过今年的一篇综述性论文来了解一下近五年来中文电子病历的命名实体识别研究进展. 基本的,我们应该先来了解一下两个概念 ...
- 一文读懂3D人脸识别十年发展及未来趋势
来源丨机器之心 人脸识别是机器学习社区研究最多的课题之一,以 3D 人脸识别为代表的相关 ML 技术十年来都有哪些进展?这篇文章给出了答案. 近年来,人脸识别的研究已经转向使用 3D 人脸表面,因为 ...
- 一文读懂身份证ocr识别
2004年,我国推出二代身份证并大力普及,时至今日应该所有国民都已统一更换了.二代身份证中内嵌有一枚国密智能芯片,加密存储了公民的所有基本信息(姓名.性别.民族.出生日期.身份证号.证件照片.家庭住址 ...
- 一文读懂语音语义识别技术的现状与未来
[IT168 评论]我一直认为,人工智能应用的大前提是可以很自然的进行人机语言交互.近年来,在深度学习的驱动下,语音技术取得了重大进展,语音云用户规模达到了亿级规模,每日请求千万次,并且交互技术由单一 ...
- (转)OpenNLP进行中文命名实体识别(下:载入模型识别实体)
上一节介绍了使用OpenNLP训练命名实体识别模型的方法,并将模型写到磁盘上形成二进制bin文件,这一节就是将模型从磁盘上载入,然后进行命名实体识别.依然是先上代码: [java] view plai ...
- 【NLP】一文了解命名实体识别
导读:从1991年开始,命名实体识别逐渐开始走进人们的视野,在各评测会议的推动下,命名实体识别技术得到了极大地发展,从最初的基于规则和字典的方法,到现在热门的注意力机制.图神经网络等方法,命名实体识别 ...
最新文章
- 【青少年编程】【四级】从小到大排序
- C# 按钮控制windows音量
- rbpf粒子滤波slam matlab程序_学习笔记(优达学城)- 车辆定位之粒子滤波器(整合版)...
- SpringMVC @ModelAttribute详解
- SAP WebIDE Initialization process - 初始化逻辑分析
- C# 8.0 默认接口实现
- dedecms php5.4 无法退出后台,DedeCMS 织梦在 Windows 的 PHP5.4 环境下登录后台空白的解决办法...
- python 购物车程序_购物车程序python
- html5怎么给图片添加背景透明,javascript – 透明图像背景html5画布
- opencv 识别长方形_利用opencv识别并提取图片中的矩形
- Normal Equation----machine learning
- 关于JS访问文件服务器的HTTP文件地址实现文件下载
- 朋友圈集赞万能截图生成器微信小程序源码下载
- 用火箭送快递?淘宝宣布联合蓝箭航天起启动“宝箭”计划
- 击鼓传花c语言编程题,转身之间——此间的少年画蛇添足版
- mysql 查询临时表_MySQL临时表与内存表
- 安卓ps模拟器_用电脑玩安卓游戏!逍遥模拟器免安装版PC软件
- 陈经纶2021年高考成绩查询时间,北京2021高考成绩排名榜单,北京各高中高考成绩喜报...
- 华为云EI的诗与远方
- python 爬取歌曲程序_如何让程序像人一样的去批量下载歌曲?Python爬取付费歌曲...
热门文章
- 2020-08-20 CountVectorizer 包含示例 API
- java.lang.Instrument 动态修改替换类代码
- 从jar包中读取资源文件
- 从理论支撑到具体应用,万字长文详述 CV 中 Transformer 的广阔天地
- 一份火爆AI圈的高分深度学习入门讲义,李航、马少平领衔多位科学家力荐!...
- 成就更卓越、更有意义的人生
- DCGAN论文笔记+源码解析
- Hadoop生态组件-HIVE学习
- 如何造出逼真图像?南洋理工Zheng博士论文《基于深度生成学习的逼真图像合成》197页pdf阐述视觉合成工作...
- 科学家认为“人脑+AI”至少有三大尺度:最低级是脑启发,最高级是创造机器意识...