本文转载自:用IDCNN和CRF做端到端的中文实体识别

代码在: NER_IDCNN_CRF

上篇文章聊到了关系提取,今天来聊聊实体识别。

实体识别和关系抽取是例如构建知识图谱等上层自然语言处理应用的基础。实体识别可以简单理解为一个序列标注问题:给定一个句子,为句子序列中的每一个字做标注。因为同是序列标注问题,除去实体识别之外,相同的技术也可以去解决诸如分词、词性标注等不同的自然语言处理问题。

说到序列标注直觉是会想到RNN的结构。现在大部分表现最好的实体识别或者词性标注算法基本都是biLSTM的套路。就算是上篇提到的关系抽取这种本来应该很适合CNN来做的文本分类的问题,我们也用了biGRU加字级别与句子级别的双重Attention结构解决掉了。就像Ruder在他的博客 Deep Learning for NLP Best Practices 里面说的,There has been a running joke in the NLP community that an LSTM with attention will yield state-of-the-art performance on any task.

为了换换口味,我们基于2017年7月一篇paper Fast and Accurate Entity Recognition with Iterated Dilated Convolutions, 介绍一个使用 Iterated Dilated CNN加CRF的模型来做中文实体识别的方法。

代码主要是基于开源项目zjy-ucas/ChineseNER开发,在原来biLSTM模型的基础上增加了IDCNN模型的选项,而IDCNN的模型参考了koth/kcws的实现。感谢!两位大牛都基于tensorflow写代码,虽然风格迥异,代码却都非常漂亮!

IDCNN加CRF模型

对于序列标注来讲,普通CNN有一个劣势,就是卷积之后,末层神经元可能只是得到了原始输入数据中一小块的信息。而对NER来讲,整个句子的每个字都有可能都会对当前需要标注的字做出影响。为了覆盖到输入的全部信息就需要加入更多的卷积层, 导致层数越来越深,参数越来越多,而为了防止过拟合又要加入更多的Dropout之类的正则化,带来更多的超参数,整个模型变得庞大和难以训练。因为CNN这样的劣势,大部分序列标注问题人们还是使用biLSTM之类的网络结构,尽可能使用网络的记忆力记住全句的信息来对单个字做标注。

但这带来的问题是,biLSTM毕竟是一个序列模型,在对GPU并行计算的优化上面不如CNN那么强大。如何能够像CNN那样给GPU提供一个火力全开的战场,而又像LSTM这样用简单的结构记住尽可能多的输入信息呢?

Fisher Yu and Vladlen Koltun 2015 提出了一个dilated CNN的模型,意思是“膨胀的”CNN。想法其实很简单:正常CNN的filter,都是作用在输入矩阵一片连续的位置上,不断sliding做卷积。dilated CNN为这片filter增加了一个dilation width,作用在输入矩阵的时候,会skip掉所有dilation width中间的输入数据;而filter矩阵本身的大小仍然不变,这样filter获取到了更广阔的输入矩阵上的数据,看上去就像是“膨胀”了一般。

具体使用时,dilated width会随着层数的增加而指数增加。这样随着层数的增加,参数数量是线性增加的,而receptive field却是指数增加的,可以很快覆盖到全部的输入数据。

图片来自 Fisher Yu and Vladlen Koltun 2015

对应在文本上,输入是一个一维的向量,每个元素是一个character embedding:

图片来自Emma Strubell, Patrick Verga, David Belanger, Andrew McCallum 2017

我们的模型是4个大的相同结构的Dilated CNN block拼在一起,每个block里面是dilation width为1, 1, 2的三层Dilated卷积层,所以叫做 Iterated Dilated CNN。

IDCNN对输入句子的每一个字生成一个logits,这里就和biLSTM模型输出logits之后完全一样,放入CRF Layer,用Viterbi算法解码出标注结果。

在biLSTM或者IDCNN这样的深度网络模型后面接上CRF层是一个序列标注很常见的方法。biLSTM或者IDCNN计算出的是每个词分类的概率,而CRF层引入序列的转移概率,最终计算出loss反馈回网络。网上有不少相关帖子,如这里

语料获取

中文实体识别的公开语料也是非常之少。

现在有很多带有中文实体识别功能的软件包,可以参考awesome chinese nlp。理论上是可以爬下来大量未标注中文语料,然后用这些软件包生成实体识别的标注数据。但是我试了几个发现这些软件包在实际情况中应用的准确率也不是非常高,生成的标注数据质量并不是很好。

另一个想法依然是像distant supervision一样,从已知的不同实体的词库出发,爬取含有相关词库的语料作为标注数据。然而精力有限并没有时间做这件事情。。

(再一次呼吁BAT等掌握大量数据的大公司们,无私奉献一点中文语料资源吧!!)

在这里我们直接使用 zjy-ucas/ChineseNER 提供的语料进行训练。

模型训练

Clone和运行中文实体识别项目.

系统要求:

  • Python (>=3.5)

  • TensorFlow (>=r1.0)

  • jieba (>=0.37) 正在试图在不用jieba分词的情况下提高模型表现

训练:

1.所有数据在 data/ , 包括了训练数据(example.train)、验证数据(example.dev)和测试数据(example.test),以及在wikipedia中文语料上预训练好的中文的字向量(vec.txt)。

现有数据只包含以下三种实体类别:
机构组织ORG, 人名PER 和 位置LOC

2.进行训练,验证集上表现最好的模型会存储在 ckpt/ 下面。

要使用IDCNN训练,运行:

python3 main.py --train=True --clean=True --model_type=idcnn

要使用biLSTM训练,运行:

python3 main.py --train=True --clean=True --model_type=bilstm

预测:

方式是用户直接从命令行输入句子,然后进行实体识别。

如果你已经训练好了自己的模型在ckpt/ 下面,那么运行:

python3 main.py

我们也提供了分别预训练好的IDCNN和biLSTM的命名实体识别模型。

要测试IDCNN模型,运行:

python3 main.py --ckpt_path=ckpt_IDCNN

要测试biLSTM模型,运行:

python3 main.py --ckpt_path=ckpt_biLSTM

一些结果

我们自己输入了一些句子,也随便从网上新闻里面输入了一些句子。

实体识别的准确率还不是很高,比如“赚它一个亿网络科技有限公司”没有识别出来,而“普京和特朗普通了电话”把“特朗普通”分成了一个人名,对英文人名的支持不是很好。

做了一些测试,发现更改一些语句的结构,就可以比较大地影响实体识别的结果。所以我的猜测是模型的容量还是非常大的,只是训练语料太少,模型见过和学习到的无论是句法结构还是诸如英文人名这样的实体太少。

下一步,希望能实现一些实体识别与关系抽取的联合抽取模型。


INFO:tensorflow:Restoring parameters from ckpt_IDCNN/ner.ckpt{'string': '香港的房价已经到达历史巅峰,乌溪沙地铁站上盖由新鸿基地产公司开发的银湖天峰,现在的尺价已经超过一万五千港币。',
'entities': [{'word': '香港', 'end': 2, 'start': 0, 'type': 'LOC'}, {'word': '乌溪沙地铁站', 'end': 20, 'start': 14, 'type': 'LOC'}, {'word': '新鸿基地产公司', 'end': 30, 'start': 23, 'type': 'ORG'}, {'word': '银湖天峰', 'end': 37, 'start': 33, 'type': 'LOC'}]}{'string': '联想集团的总部位于北京,首席执行官是杨元庆先生',
'entities': [{'end': 4, 'start': 0, 'word': '联想集团', 'type': 'ORG'}, {'end': 11, 'start': 9, 'word': '北京', 'type': 'LOC'}, {'end': 21, 'start': 18, 'word': '杨元庆', 'type': 'PER'}]}{'string': '在万达集团的老总王健林的著名采访之后,深圳出现了一家公司叫做赚它一个亿网络科技有限公司',
'entities': [{'end': 5, 'start': 1, 'word': '万达集团', 'type': 'ORG'}, {'end': 11, 'start': 8, 'word': '王健林', 'type': 'PER'}, {'end': 21, 'start': 19, 'word': '深圳', 'type': 'LOC'}]}{'string': '我也不明白为什么有人注册公司名字这么奇葩',
'entities': []}{'string': '普京和特朗普通了电话,一起表示了对希拉里的鄙视',
'entities': [{'end': 2, 'start': 0, 'word': '普京', 'type': 'PER'}, {'end': 7, 'start': 3, 'word': '特朗普通', 'type': 'PER'}, {'end': 20, 'start': 17, 'word': '希拉里', 'type': 'PER'}]}{'string': '著名演员刘德华先生,日前在唧唧咕唧岛上拍摄北京遇上西雅图时,从马上摔下受了伤',
'entities': [{'end': 7, 'start': 4, 'word': '刘德华', 'type': 'PER'}, {'end': 18, 'start': 15, 'word': '咕唧岛', 'type': 'LOC'}, {'end': 23, 'start': 21, 'word': '北京', 'type': 'LOC'}, {'end': 28, 'start': 25, 'word': '西雅图', 'type': 'LOC'}]}{'string': '2015年6月早上发生的那件事,一致停留在李晓华的脑海里',
'entities': [{'end': 24, 'start': 21, 'word': '李晓华', 'type': 'PER'}]}{'string': '律师解读郭敬明性骚扰事件:若无证据 对李枫不利',
'entities': [{'end': 7, 'start': 4, 'word': '郭敬明', 'type': 'PER'}, {'end': 21, 'start': 19, 'word': '李枫', 'type': 'PER'}]}{'string': '南开大学党委书记魏大鹏、校长龚克,中科院院士白以龙、陈和生、陈十一、陈永川、邓小刚、杜江峰、方守贤、葛墨林、贺贤土、洪家兴、江松、李家明、李树深、罗俊、罗民兴、莫毅明、欧阳钟灿、潘建伟、孙昌璞、向涛、谢心澄、邢定钰、杨国桢、张维岩、张伟平、张肇西、赵政国、赵忠贤、周向宇、朱邦芬、邹广田,著名书画家、南开大学终身教授范曾,南开大学副校长严纯华出席。',
'entities': [{'end': 6, 'start': 0, 'word': '南开大学党委', 'type': 'ORG'}, {'end': 11, 'start': 8, 'word': '魏大鹏', 'type': 'PER'}, {'end': 17, 'start': 14, 'word': '龚克,', 'type': 'PER'}, {'end': 20, 'start': 17, 'word': '中科院', 'type': 'ORG'}, {'end': 25, 'start': 22, 'word': '白以龙', 'type': 'PER'}, {'end': 29, 'start': 26, 'word': '陈和生', 'type': 'PER'}, {'end': 33, 'start': 30, 'word': '陈十一', 'type': 'PER'}, {'end': 37, 'start': 34, 'word': '陈永川', 'type': 'PER'}, {'end': 41, 'start': 38, 'word': '邓小刚', 'type': 'PER'}, {'end': 45, 'start': 42, 'word': '杜江峰', 'type': 'PER'}, {'end': 49, 'start': 46, 'word': '方守贤', 'type': 'PER'}, {'end': 53, 'start': 50, 'word': '葛墨林', 'type': 'PER'}, {'end': 57, 'start': 54, 'word': '贺贤土', 'type': 'PER'}, {'end': 61, 'start': 58, 'word': '洪家兴', 'type': 'PER'}, {'end': 64, 'start': 62, 'word': '江松', 'type': 'PER'}, {'end': 68, 'start': 65, 'word': '李家明', 'type': 'PER'}, {'end': 72, 'start': 69, 'word': '李树深', 'type': 'PER'}, {'end': 75, 'start': 73, 'word': '罗俊', 'type': 'PER'}, {'end': 79, 'start': 76, 'word': '罗民兴', 'type': 'PER'}, {'end': 83, 'start': 80, 'word': '莫毅明', 'type': 'PER'}, {'end': 86, 'start': 84, 'word': '欧阳', 'type': 'LOC'}, {'end': 88, 'start': 86, 'word': '钟灿', 'type': 'PER'}, {'end': 92, 'start': 89, 'word': '潘建伟', 'type': 'PER'}, {'end': 96, 'start': 93, 'word': '孙昌璞', 'type': 'PER'}, {'end': 99, 'start': 97, 'word': '向涛', 'type': 'PER'}, {'end': 103, 'start': 100, 'word': '谢心澄', 'type': 'PER'}, {'end': 107, 'start': 104, 'word': '邢定钰', 'type': 'PER'}, {'end': 111, 'start': 108, 'word': '杨国桢', 'type': 'PER'}, {'end': 115, 'start': 112, 'word': '张维岩', 'type': 'PER'}, {'end': 119, 'start': 116, 'word': '张伟平', 'type': 'PER'}, {'end': 123, 'start': 120, 'word': '张肇西', 'type': 'PER'}, {'end': 127, 'start': 124, 'word': '赵政国', 'type': 'PER'}, {'end': 131, 'start': 128, 'word': '赵忠贤', 'type': 'PER'}, {'end': 135, 'start': 132, 'word': '周向宇', 'type': 'PER'}, {'end': 139, 'start': 136, 'word': '朱邦芬', 'type': 'PER'}, {'end': 143, 'start': 140, 'word': '邹广田', 'type': 'PER'}, {'end': 154, 'start': 150, 'word': '南开大学', 'type': 'ORG'}, {'end': 165, 'start': 158, 'word': '范曾,南开大学', 'type': 'ORG'}, {'end': 171, 'start': 168, 'word': '严纯华', 'type': 'PER'}]}{'string': '陈省身先生的好朋友、原英国皇家学会会长迈克尔•阿蒂亚曾为在爱丁堡广场捐建价值约200万英镑麦克斯韦铜像,花费了很大力气。',
'entities': [{'end': 3, 'start': 0, 'word': '陈省身', 'type': 'PER'}, {'end': 17, 'start': 11, 'word': '英国皇家学会', 'type': 'ORG'}, {'end': 22, 'start': 19, 'word': '迈克尔', 'type': 'PER'}, {'end': 26, 'start': 23, 'word': '阿蒂亚', 'type': 'PER'}, {'end': 34, 'start': 29, 'word': '爱丁堡广场', 'type': 'LOC'}, {'end': 49, 'start': 45, 'word': '麦克斯韦', 'type': 'LOC'}]}{'string': '当地时间25日(周五)下午2点30分,韩国法院将对三星电子副会长李在镕行贿案作出一审判决。今年49岁、三星集团的实际领导人李在镕,即将迎来他的“命运星期五”。',
'entities': [{'end': 21, 'start': 19, 'word': '韩国', 'type': 'LOC'}, {'end': 29, 'start': 25, 'word': '三星电子', 'type': 'ORG'}, {'end': 35, 'start': 32, 'word': '李在镕', 'type': 'PER'}, {'end': 55, 'start': 51, 'word': '三星集团', 'type': 'ORG'}, {'end': 64, 'start': 61, 'word': '李在镕', 'type': 'PER'}]}

【转】用IDCNN和CRF做端到端的中文实体识别相关推荐

  1. 知识图谱 基于CRF的命名实体识别模型

    基于CRF的命名实体识别模型 条件随机场 CRF ​ 条件随机场 CRF 是在已知一组输入随机变量条件的情况下,输出另一组随机变量的条件概率分布模型:其前提是假设输出随机变量构成马尔可夫随机场:条件随 ...

  2. 源码阅读笔记 BiLSTM+CRF做NER任务 流程图

    源码阅读笔记 BiLSTM+CRF做NER任务(二) 源码地址:https://github.com/ZhixiuYe/NER-pytorch 本篇正式进入源码的阅读,按照流程顺序,一一解剖. 一.流 ...

  3. 用CRF做命名实体识别——NER系列(三)

    在上一篇文章<用隐马尔可夫模型(HMM)做命名实体识别--NER系列(二)>中,我们使用HMM模型来做命名实体识别,将问题转化为统计概率问题,进行求解.显然,它的效果是非常有限的. 在深度 ...

  4. 用Mina xscocket 通讯框架做(Flex)服务端

    前天分别用Mina xscocket 通讯框架做了个聊天室服务端(可以参考用C#,java,Delphi做的服务端) 参考API文档,开发起来非常简单,但是出现几个问题没有解决 1.flash在直接运 ...

  5. 华为端到端项目管理流程_【达睿原创】供应链端到端管理 – 看华为是怎么做的...

    原标题:[达睿原创]供应链端到端管理 – 看华为是怎么做的 通常意义下的端到端: 从供应商的供应商到客户的客户 供应链端到端管理的概念早在20多年前就由SCC国际供应链协会提出了.著名的SCOR模型就 ...

  6. fps测试网页_对话斗鱼云游戏负责人:做强网页端,近3成为新增用户

    核心要点: 产品形态:现阶段是网页端,避免跨端的体验问题. 用户规模:高峰时占用几百台服务器,并在持续考虑扩容 商业模式:测试期间免费,后端持续接入优质的内容和技术解决方案. 直播平台与云游戏结合的想 ...

  7. 港大南科大提出端到端PDVC,用DETR的方法做Dense Video Captioning!简化训练流程

    关注公众号,发现CV技术之美 ▊ 写在前面 密集视频字幕(Dense Video Captioning)的目的是从视频中生成多个与其时间位置相关的字幕.以前的方法遵循一个复杂的"先定位再描述 ...

  8. 推荐一些用CRF做图像语义分割的资源

    首先是code,以前找了很多,但发现比较好用的有: 1. Matlab版的UGM:http://www.di.ens.fr/~mschmidt/Software/UGM.html,作者法国的,写了很多 ...

  9. 【芯片前端】关于门控电路和逻辑做在D端还是EN端的思考

    最近在看<硬件架构的艺术--数字电路的设计方法与技术>,学习细化了很多之前模棱两可的知识点,偶尔来总结输出一下,今天就是这个主题--门控电路: 门控结构 相传在很多年前,时序逻辑里是没有门 ...

最新文章

  1. 蓝桥杯-用宏求球的体积(java)
  2. QT的QSvgGenerator类的使用
  3. 在没有任何数据时进行无效的读取尝试。_技术转载——JVM运行时内存是怎么分布的?...
  4. asp.net截取指定长度的字符串内容
  5. SpringBoot高级-缓存-搭建redis环境测试
  6. SQL Pass北京举办1周年活动(本次活动特别邀请到了来自微软的SQL Server大师何雷谈数据库职业规划)...
  7. winx修改计算机用户名,怎么修改我的电脑用户名win10
  8. VUE颜色选择器插件vColorPicker
  9. qt中的信号都需要emit触发吗_[Vue笔记] $emit 与 $event
  10. pycharm用阿里云镜像_新购买的阿里云服务器准备到期时能否用学生身份优惠续费?...
  11. Python 实现窗函数
  12. PLSQL developer中断执行的前提
  13. Linux命令 磁盘管理——了解磁盘、磁盘分区
  14. [主席树] 湖南集训 谈笑风生
  15. 4.外部协作单位的组织与管理
  16. 隐私计算-多方安全计算
  17. g80 architecture overview
  18. python如何读取数据集_如何读取Middlebury数据集提供的.pfm文件?
  19. c语言红酒编程题,葡萄酒基础知识试题解析一
  20. 排列计算公式,公式含义

热门文章

  1. mongoDB Ops Manager
  2. JSP之JSTL标签
  3. 使用滴滴的mpx框架开发小程序遇到的问题-自动编译不生效
  4. python编程工具-7款Python开发工具介绍,你最中意哪一款
  5. 沉镀非晶质氟化碳(a-C:F)膜-供应CulnS2/CBD硫化铟/钒氧化物/铜铬磷硫CuCrP2S6/铜铁锡硫(CFTS)/铜铟硫光电/铬-氧/铜铁锡硫(CFTS)/钒氧化物薄膜定制
  6. GPS接收机设计(5)——定位解算
  7. HTML5菜单栏特效
  8. 【数据结构】387. 字符串中的第一个唯一字符
  9. Python中的break语句
  10. ubuntu下重启tomcat