来自 AI小白入门

作者 yuquanle

本文对自然语言基础技术之命名实体识别进行了相对全面的简绍,包括定义、发展历史、常见方法、以及相关数据集,最后推荐一大波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

初学者|一文读懂命名实体识别相关推荐

  1. 初学者 | 一文读懂命名实体识别

    本文对自然语言基础技术之命名实体识别进行了相对全面的简绍,包括定义.发展历史.常见方法.以及相关数据集,最后推荐一大波python实战利器,并且包括工具的用法. 定义 先来看看维基百科上的定义:Nam ...

  2. 一文读懂命名实体识别

    本文对自然语言基础技术之命名实体识别进行了相对全面的介绍,包括定义.发展历史.常见方法.以及相关数据集,最后推荐一大波 Python 实战利器,并且包括工具的用法. 01 定义 先来看看维基百科上的定 ...

  3. 论文解读丨图神经网络应用于半结构化文档的命名实体识别和关系提取

    摘要: 随着用于传递和记录业务信息的管理文档的广泛使用,能够鲁棒且高效地从这些文档中自动提取和理解内容的方法成为一个迫切的需求.本次解读的文章提出利用图神经网络来解决半结构化文档中的实体识别(NER) ...

  4. 近五年中文电子病历命名实体识别研究进展

    原文链接: 近五年中文电子病历命名实体识别研究进展 阅读综述性论文是一种能够快速了解某一领域的方法,接下来通过今年的一篇综述性论文来了解一下近五年来中文电子病历的命名实体识别研究进展. 基本的,我们应 ...

  5. 【NER综述】近五年中文电子病历命名实体识别研究进展

    来自:python遇见NLP 阅读综述性论文是一种能够快速了解某一领域的方法,接下来通过今年的一篇综述性论文来了解一下近五年来中文电子病历的命名实体识别研究进展. 基本的,我们应该先来了解一下两个概念 ...

  6. 一文读懂3D人脸识别十年发展及未来趋势

    来源丨机器之心 人脸识别是机器学习社区研究最多的课题之一,以 3D 人脸识别为代表的相关 ML 技术十年来都有哪些进展?这篇文章给出了答案. 近年来,人脸识别的研究已经转向使用 3D 人脸表面,因为 ...

  7. 一文读懂身份证ocr识别

    2004年,我国推出二代身份证并大力普及,时至今日应该所有国民都已统一更换了.二代身份证中内嵌有一枚国密智能芯片,加密存储了公民的所有基本信息(姓名.性别.民族.出生日期.身份证号.证件照片.家庭住址 ...

  8. 一文读懂语音语义识别技术的现状与未来

    [IT168 评论]我一直认为,人工智能应用的大前提是可以很自然的进行人机语言交互.近年来,在深度学习的驱动下,语音技术取得了重大进展,语音云用户规模达到了亿级规模,每日请求千万次,并且交互技术由单一 ...

  9. (转)OpenNLP进行中文命名实体识别(下:载入模型识别实体)

    上一节介绍了使用OpenNLP训练命名实体识别模型的方法,并将模型写到磁盘上形成二进制bin文件,这一节就是将模型从磁盘上载入,然后进行命名实体识别.依然是先上代码: [java] view plai ...

  10. 【NLP】一文了解命名实体识别

    导读:从1991年开始,命名实体识别逐渐开始走进人们的视野,在各评测会议的推动下,命名实体识别技术得到了极大地发展,从最初的基于规则和字典的方法,到现在热门的注意力机制.图神经网络等方法,命名实体识别 ...

最新文章

  1. JIT Compiler编译器及指令集
  2. 牛顿斯科特MATLAB求积分,详解Matlab求积分的各种方法
  3. OAuth2.0网页授权 提示未关注该测试号
  4. cocos2d-x游戏开发(十)执行单元场景CCScene
  5. linux基础磁盘管理,Linux基础入门-文件系统操作与磁盘管理
  6. 超越SiamRPN++,SiamMan达到目标跟踪新SOTA
  7. 如何保证http传输安全性
  8. php 目录文件大小,利用php怎么对目录文件的大小进行统计
  9. 如何从0开发一个Atom组件
  10. 3d胆码计算机方法,3D百十个位定胆技巧准确率95
  11. matlab快速原型开发c语言,快速原型开发
  12. 计算机没有反应的时候怎么重启,电脑卡顿、没响应,如何安全重启计算机?
  13. USB composite 设计
  14. 【经验总结—1】:研究僧常用文献搜索网站和下载方法
  15. 正面管教之PHP_2017.04.08 三正记录(正面管教课堂之出生顺序及PHP)
  16. 简单聊聊Long Short Term Memory Network (LSTM)和 Gated Recurrent Unit (GRU)两种强大的RNN变体
  17. bon app android,Bon App!
  18. 企业高频实用API推荐
  19. C++实现大整数乘法
  20. 爱因斯坦场方程之Reissner-Nordstrom(电磁真空)解

热门文章

  1. 从博客专栏想到的数据分析
  2. 使用python命令行参数sys.argv 做bat脚本
  3. Linux下的压缩和解压缩命令——compress/uncompress
  4. JS总结 本地对象2 BOM DOM
  5. 简短总结一下C#里跨线程更新UI(转)
  6. Java Script基础(一)
  7. Android中文URL乱码问题 解决
  8. 利用wcf传递字节的简单例子
  9. Altium Designer(二):规则设置
  10. Access denied for user 'root'@'localhost' Could not obtain connection