命名实体识别(Name Entity Recognition) 是自然语言处理中一个比较基础的问题。要解决的问题是,从unstructure的文本当中找到实体并归类。当然我这么定义已经有了一定的bias,认为是先找实体在归类,但实现过程则并不一定如此。
 
定义一般来说都比较抽象,我们举一些例子来理解一下NER试图要解决的问题。比如说,一篇作文中,找出时间,人物,地点; 一个医学报告中,找出疾病名称及药品名称等; 一份合同中,找出甲方乙方,付款方式以及到期日期等。
 
这些问题看上去似乎并不难,近几年的BiLSTM, BERT以及各种变形模型也不断刷新分数棒,F1高达0.95.
 
然而,当把NER运用到实际中来时,效果并不像理论上那么好。很多人称,NER问题离被解决还有很长的路要走。
 
为什么呢?
 
首先,对于实体的定义,据说即使都是行业专家,认同度达到95%已是非常难。人类尚未清楚自己想要什么,怎能期待模型能给出完美答案呢。这句话其实不然,也许模型就是知道你想要什么。
扯远了,其实要说的是,定义的模糊是这个问题的难点之一。举一个药品的例子。上下文是,一个人得了感冒,医生建议吃点泡腾片,补充一下vc。那,这个泡腾片可以是药品吗?
 
难点之二,一词多义,在简短的上下文中无法正确归类。比如说, 甲壳虫走了。这句话中,甲壳虫可以是汽车,可以是昆虫。
 
难点之三,边界模糊,主要原因是复杂的实体在标注的时候,就很难有一致的认识,以及实体prevalence(出现率)比较低导致边界在哪里嘛,太难说了。对于前者,比如说合同类型,"某某公司的员工雇佣合同”和"员工雇佣合同”都可以归类为合同类型,但前缀取不取呢,在不同上下文中可能有不同的需求。
 
NER问题解决经历了三个阶段。
最早的技术是,规则匹配和词典查询匹配。为了提高precision和recall,规则会变得非常的复杂,词典会变得非常的庞大。要构造完整的词典代价非常的大,于是在词典匹配上又结合了集群以及相似度查询的方法。
第二阶段,手工特征工程机器学习。这个阶段的特征工程的工作相当繁重,除了n-gram的词之外,比如说POS tag, 大小写,数字替代,词语集群等等。机器学习部分一般是比较简单的逻辑回归加CRF解码。即使手动工作量相当繁重,但是比起规则匹配和完善词典的工作还是轻松不少,效果也好很多。
第三阶段,深度学习。这个阶段,重要特征在深度神经网络中基本上可以做到自动提取,并且,效果明显比手动的特征工程好很多。加上embedding的使用,使得模型的输入含有更加丰富的信息。排行榜不断被刷新的事实也可以说明这一点。
 
那为什么深度学习还是不能完美解决实际的问题呢。这和之前提出来的难点息息相关的。
一词多义需要很长的上下文才能明确意思,但一般的深度学习模型不能有太长的输入。比如说经典的用来解决NER的深度模型BERT或BiLSTM一般输入为512或728个token,如果太长,系统资源消耗太大。
另外,一般的评分系统都是基于token的,最终整个词组被准确识别出来的分数并未受到非常大的关注。词组分界问题在不同的领域难度也差别很大,但如何在token模型之后准确解码到词组,并没有被很好的research过。
实际的NER问题比公共数据库,比如说CoNLL的难度要大很多。每个行业可能有自己的twist,但是并没有系统的被讨论和共享起来。
难以得到完美的数据集,使得这个问题即使解决的再完美也只能停留在某个水平。
 
之前看spacy的创始人讲NER, 说大家要达到一个基础水平很容易,要上一个台阶就非常难了。NER这个问题尚未解决也是相当fair的一种说法。 
 
阅读作者更多原创,观众微信公众号:

NER为什么那么难的更多相关文章

  1. 『深度应用』NLP命名实体识别(NER)开源实战教程

    近几年来,基于神经网络的深度学习方法在计算机视觉.语音识别等领域取得了巨大成功,另外在自然语言处理领域也取得了不少进展.在NLP的关键性基础任务—命名实体识别(Named Entity Recogni ...

  2. NER

    写在前面:在初学nlp时的第一个任务——NER,尝试了几种方法,cnn+crf.lstm+crf.bert+lstm+crf,毫无疑问,最后结果时Bert下效果最好. 1.关于NER: NER即命名实 ...

  3. 中文NER的那些事儿1. Bert-Bilstm-CRF基线模型详解&代码实现

    这个系列我们来聊聊序列标注中的中文实体识别问题,第一章让我们从当前比较通用的基准模型Bert+Bilstm+CRF说起,看看这个模型已经解决了哪些问题还有哪些问题待解决.以下模型实现和评估脚本,详见 ...

  4. 中文NER的那些事儿4. 数据增强在NER的尝试

    这一章我们不聊模型来聊聊数据,解决实际问题时90%的时间其实都是在和数据作斗争,于是无标注,弱标注,少标注,半标注对应的各类解决方案可谓是百花齐放.在第二章我们也尝试通过多目标对抗学习的方式引入额外的 ...

  5. 看完SQL Server 2014 Q/A答疑集锦:想不升级都难!

    看完SQL Server 2014 Q/A答疑集锦:想不升级都难! 转载自:http://mp.weixin.qq.com/s/5rZCgnMKmJqeC7hbe4CZ_g 本期嘉宾为微软技术中心技术 ...

  6. 听H3絮叨:何以让天下没有难用的流程

    最近朋友圈.网站新闻铺天盖地是"让天下没有难用的流程",有人就要问了,H3 BPM何德何能,为BPM站台,让天下没有难用的流程? 这是一个关于"办公室空想"的故 ...

  7. H3 BPM让天下没有难用的流程之产品概述

    一.产品简介 BPM(Business Process Management),是指根据业务环境的变化,推进人与人之间.人与系统之间以及系统与系统之间的整合及调整的经营方法与解决方案的IT工具. H3 ...

  8. 【转】真正从零开始,TensorFlow详细安装入门图文教程!(帮你完成那个最难的从0到1)

    AI这个概念好像突然就火起来了,年初大比分战胜李世石的AlphaGo成功的吸引了大量的关注,但其实看看你的手机上的语音助手,相机上的人脸识别,今日头条上帮你自动筛选出来的新闻,还有各大音乐软件的歌曲& ...

  9. 别老嫌Mac系统难用 这些快捷键你都用过吗

    苹果今年10月发布的全新带把儿(bar)的MacBook,轻薄炫酷的外观大受欢迎,其中当然不乏很多从Windows转到Mac阵营的用户.不少习惯了Windows操作习惯的用户在上手Mac时都会觉得非常 ...

随机推荐

  1. 多台服务器共享session问题(2)

    多台服务器共享session问题  转载自:https://www.cnblogs.com/lingshao/p/5580287.html 在现在的大型网站中,如何实现多台服务器中的session数据 ...

  2. BufferedReader 和BufferedWriter

    BufferedWriter: private void test(String content,String destPath) throws IOException { BufferedReade ...

  3. 常见面试题:java8有什么新特性?

    常见面试题:java8有什么新特性? 主要有以下这些新特性: lambda 表达式,经常配合函数式接口使用,可以有效减少代码量 Runnable 是一个函数式接口,下面展示了创建线程三种写法,显然最后 ...

  4. C# - 习题02_写出程序的输出结果a.Fun()

    时间:2017-08-23 整理:byzqy 题目:写出程序的输出结果: 文件:Program.cs 1 using System; 2 3 namespace Interview1 4 { 5 pu ...

  5. LeetCode入门指南 之 二分搜索

    上图表示常用的二分查找模板: 第一种是最基础的,查找区间左右都为闭区间,比较后若不等,剩余区间都不会再包含mid:一般在不需要确定目标值的边界时,用此法即可. 第二种查找区间为左闭右开,要确定targ ...

  6. k8s笔记0528-基于KUBERNETES构建企业容器云手动部署集群记录-4

    部署kubelet 1.二进制包准备 将软件包从linux-node1复制到linux-node2中去. [root@linux-node1 ~]# cd /usr/local/src/kuberne ...

  7. uniapp 设置背景图片

    uniapp 由于其特殊机制,导致了背景图片不能引用本地图片.只能通过 转成 base64 来进行设置 附上链接:https://oktools.net/image2base64 图片转成base64 ...

  8. Python之struct模块

    面对网络协议,在组包拆包时,python提供了struct模块,它可以帮助我们在python值和C语言的结构体之间相互转换,下面一起来了解struct的具体用法. 假设,我们的网络协议为消息id(un ...

  9. Linux的基础命令(一)

    目录: 一.Linux系统基础 1.shell      2. Linux命令的分类 二.Linux命令行 1.Linux命令行提示符      2.Linux通用命令行使用格式      3.Lin ...

  10. Spring Boot学习(一)——Spring Boot介绍

    Spring Boot介绍 Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式 ...