当前位置: 首页 > news >正文

命名实体识别从数据集到算法实现

命名实体识别(Named Entity Recognition, NER)是 NLP 的基础任务,指从文本中识别出命名性指称项,为关系抽取等任务做铺垫。狭义上,是识别出人名、地名和组织机构名这三类命名实体(时间、货币名称等构成规律明显的实体类型可以用正则等方式识别)。当然,在特定领域中,会相应地定义领域内的各种实体类型。目前的主流工作,是将 NER当做深度学习任务来做,所以,我们需要大量的、高质量的数据。

公开数据集

首先让我们来看看常见公开数据集

CoNLL 2003(https://www.clips.uantwerpen.be/conll2003/ner/)

这个数据集包括1393篇英语新闻文章和909篇德语新闻文章。英语语料库是免费的,德国语料库需要收钱(75美元)。英语语料实际上是RCV1(Reuters Corpus, Volume 1, https://trec.nist.gov/data/reuters/reuters.html), 路透社早些年公开的一些数据集。你需要填个使用申请表(包含组织和个人两种类型), 然后就可以使用了。

CoNLL2003中, 实体被标注为四种类型:

LOC (location, 地名)

ORG (organisation, 组织机构名)

PER (person, 人名)

MISC (miscellaneous, 其他)

一条标注数据的组织形式如下:

[word][POS tag][chunk tag][NER tag]

比如:

U.N. NNP I-NP I-ORG 
  official NN I-NP O 
  Ekeus NNP I-NP I-PER 
  heads VBZ I-VP O 
  for IN I-PP O 
  Baghdad NNP I-NP I-LOC 
  . . O O

更加详细的关于标注数据的介绍, 见当时官方给出的一篇文章 http://www.aclweb.org/anthology/W03-0419

OntoNotes 5.0 / CoNNLL 2012 (https://catalog.ldc.upenn.edu/ldc2013t19)

OntoNotes 5.0由 1745k 英语、900k 中文和300k 阿拉伯语文本数据组成,OntoNotes 5.0的数据来源也多种多样, 有电话对话、新闻通讯社、广播新闻、广播对话和博客。实体被标注为【PERSON】、【ORGANIZATION】和【LOCATION】等18个类别, 详情见https://catalog.ldc.upenn.edu/docs/LDC2013T19/OntoNotes-Release-5.0.pdf。 你只需要在这个网站注册一下https://catalog.ldc.upenn.edu/signup

还有很多其他公开数据集,包括NLPBA2014, Enron Emails 等等, 这里就不做详细介绍了, 大家可以 google 一下。

标注方法

NER 标注方法有很多种, 这里主要介绍3种最常见。

IOB 标注法

IOB 标注法, 是 CoNLL 2003 采用的标注法, I 表示 inside, O 表示 Outside, B 表示 Begin。而标注的 label是 I-XXX 的, 表示这个字符, 在 XXX类命名实体的内部(inside)。B用于标记一个命名实体的开始。

比如:

Tom B-PER
hanks I-PER
is O
my O
name O

BIOES

这是在 IOB方法上,扩展出的一个更复杂,但更完备的标注方法。其中 B表示这个词处于一个实体的开始(Begin), I 表示内部(inside), O 表示外部(outside), E 表示这个词处于一个实体的结束为止, S 表示,这个词是自己就可以组成一个实体(Single)

BIOES 是目前最通用的命名实体标注方法。

Markup

Makeup 是 OntoNotes 使用的标注方法, 思路比较简单, XML, 比如:

<ENAMEX TYPE=”ORG”>Disney</ENAMEX> is a global brand .

它用标签把 命名实体框出来, 然后,在 TYPE 上, 设置相应的类型。

当然, 还有很多其他的标注方法, 比如 IO, BMEWO 等等,感兴趣的读者可以 google一下。

模型

目前业界比较常用的模型,是 LSTM + CRF。 这这类模型中, NCRF++算法, 是目前最好的 NER 算法, 发表在 COLLING 2018上,论文见 https://arxiv.org/abs/1806.04470 。NCRF++在它的文章中报告其在 CoNLL2003 上能达到91.35的 F1。

框架

NCRF++的整体框架如下:

image

它支持 BIO(注意,BIO和 IOB 有点区别), BIOES 两种标注模式。因为 CoNLL2003 太过久远,一般将其转换到新的标注格式上来,转换方法见:https://github.com/jiesutd/NCRFpp/blob/master/utils/tagSchemeConverter.py

表现

NCRF++是目前 state-of-the-art的命名实体识别方案:

ID    Model    Nochar    CharLSTM    CharCNN
1    WordLSTM    88.57    90.84    90.73
2    WordLSTM+CRF    89.45    91.20    91.35
3    WordCNN    88.56    90.46    90.30
4    WordCNN+CRF    88.90    90.70    90.43

速度

NCRF++的速度表现也非常优异, 在使用全批处理的情况下, 在单个1080 显卡上, 训练速度能到到1000句话每秒,解码速度能达到2000句话每秒。

image

目前 NCRF++ 已经开源(https://github.com/jiesutd/NCRFpp)。

原文发布时间为:2018-06-28
本文作者: Huaiwen
本文来自云栖社区合作伙伴“专知”,了解相关信息可以关注“专知”。

相关文章:

  • 过滤器的功能实现
  • ps:建立规则选区
  • 巴克莱银行聚焦于业务产出的做法
  • Scala学习笔记(1)
  • Ubuntu 下解压tar.xz方法
  • Java深究之String、StringBuffer、StringBuilder的区别
  • 主题 :学习与自我提升
  • php 向关联数组头部插入key value 保持数组关系不变
  • excel导出 ajax错误判断 数据为空判断
  • 分分钟用上C#中的委托和事件
  • python-day2-06-列表
  • 【短文】为什么我不在PHP的私有变量用下划线了?
  • angular-路由与导航部分梳理
  • C# Web Api一个小例子
  • 数塔-动态规划-ccf
  • create-react-app项目添加less配置
  • JS基础之数据类型、对象、原型、原型链、继承
  • MySQL几个简单SQL的优化
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Vue学习第二天
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 从零开始在ubuntu上搭建node开发环境
  • 分布式任务队列Celery
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 关于springcloud Gateway中的限流
  • 区块链技术特点之去中心化特性
  • 使用Gradle第一次构建Java程序
  • 数组的操作
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 06-01 点餐小程序前台界面搭建
  • 2017年360最后一道编程题
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (2022 CVPR) Unbiased Teacher v2
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (转)socket Aio demo
  • (转载)利用webkit抓取动态网页和链接
  • ./configure,make,make install的作用
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .form文件_一篇文章学会文件上传
  • .Mobi域名介绍
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .Net的C#语言取月份数值对应的MonthName值
  • .Net的DataSet直接与SQL2005交互
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .NET上SQLite的连接
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示