每天给你送来NLP技术干货!


来自:圆圆的算法笔记

作者:Fareise

本文带你走进命名实体识别(NER)任务,首先介绍了解决NER任务的经典模型结构,然后通过3篇顶会论文介绍当缺少训练样本的时候,如何解决NER任务。

1

什么是NER任务

NER即命名实体识别任务,主要目的是识别出一个句子中的实体词,以及其对应的实体类型。比如下面的例子中,就是不同场景下的NER任务。在不同场景中,需要识别的实体类型也是不同的。

NER任务的基本解决方法当成一个序列分类任务,一般采用BIO、BIOES等标注预测方法,这里主要介绍BIO标注方法。BIO标注方法,就是给句子中的每一个单词都标注一个标签,这个标签由两部分组成:一部分是该单词所属实体的位置,其中B表示该单词是实体的第一个单词,I表示该单词是实体的中间单词,O表示不是实体;另一部分是该单词对应的实体类型,例如在上面的News类型NER任务中,就需要预测单词属于location还是person。因此,最终每个单词都被标注为BIO+实体类型的形式,这是一个文本序列分类任务。

2

NER任务的一般解法

解决NER问题最经典的深度学习模型结构是百度于2015年的论文Bidirectional LSTM-CRF models for sequence tagging(2015)提出的LSTM-CRF架构。单独的LSTM其实就可以完成序列标注任务,利用LSTM对输入句子进行编码,最后得到每个单词的各个分类结果的打分。但是,只用LSTM的问题是,没有办法学到输出标签之间的依赖关系。例如B-person后面经常跟着的是I-Person这种输出标签的规律,在LSTM中感知较弱。因此,一般会在LSTM后面加一个CRF层。CRF指的是我们有一个隐变量序列和一个观测序列,每个观测值只和该时刻的隐变量以及上一时刻的观测值有关。CRF的目标就是学习隐变量到观测值的发射概率,以及当前观测值和下一个观测值之间的转移概率。LSTM-CRF中,CRF建模了NER标签之间的转移关系,弥补了LSTM在这方面的不足。CRF的核心作用就是建模label之间的依赖关系。LSTM-CRF的整体结构如下图所示。

在LSTM-CRF模型结构的基础上可以使用其他方式进行改进,例如将文本的编码器LSTM替换为Bert,或者将CRF替换成Softmax。例如Portuguese Named Entity Recognition using BERT-CRF(2020)采用了Bert-CRF的模型结构解决NER任务。对于CRF部分,Hierarchically-Refined Label Attention Network for Sequence Labeling(2019)提出采用label embedding结合多层attention机制学习各个位置label之间的关系。相比CRF模型,这种方法可以建模更复杂的label之间关系。

3

小样本学习下的NER任务

当我们有一个领域的大量NER任务有标注样本,但是在目标领域内只有少量有标注样本时,一个提升NER效果的方法利用迁移学习技术,在源领域有大量样本的数据上预训练,再在目标域上Finetune。然而,在NER问题中,不同场景中需要预测的实体类型是不同的,这导致无法直接进行迁移。为了解决这种小样本学习下的NER任务,学术界也提出了一些相应方法。

Example-Based Named Entity Recognition(2020)提出一种基于样例的NER解决方法,主要思路是利用一些有标注样本样例,识别出新数据中相关的entity。例如在下面的例子中,右侧为需要识别的句子,左侧为一些有标注样本,利用左侧的标注信息识别右侧的实体(注意左侧和右侧的实体名称都是不同的)。

本文提出了一种两阶段的方法,首先利用样例找到句子中最有可能是实体的span的开始位置和结束位置,然后给这个span分配对应的实体。具体做法为,对于每一个query(即待预测实体的句子),会构造相应的support(有实体标注的句子),其中support中会对实体前后增加<e>和<\e>这种特殊字符。通过Bert对query和support分别编码,然后计算support中<e>和<\e>和query中每个token的匹配位置,找到query中可能为entity span的起止位置。对于一个query会有多个support句子来参考,会使用句子之间的attention加权各个support匹配的query中的起止位置,这部分的模型结构和公式如下(即每个support和query的attention权重加权每个support和query的起止位置相似度匹配分):

模型的第二部分是在第一步识别出的entity span的基础上,进一步识别这个entity span具体对应哪个entity。这一步的具体做法和第一步类似,利用support样例计算query中每个token是各个entity类型的起始和终止位置的概率。

Template-Based Named Entity Recognition Using BART(ACL 2021)采用Prompt的思路解决小样本学习下的NER任务。原来解决NER任务的一般做法为将其视为序列标注任务,而这篇文章将其视为一个cloze prompt任务。首先,需要人工定义一个正样本模板和一个负样本模板。对于一个句子,如果某个词组是实体,那么其对应的模板就是<xi:j> is a <yk>;如果某个词组不是实体,那么其对应的模板为<xi:j> is not an entity。例如对于一个输入文本ACL will be held in Bangkok来说,需要构造出多组模板文本,对应每个词组是否为某个entity,如Bangkok is a location entity。在训练阶段会根据label构造出所有是entity的模板对应的样本和非entity的模板对应的样本。在训练过程中,会把原始的文本输入到预训练好的BART Encoder中,得到原文的编码表示。同时在Decoder中,预测根据模板生成的多组文本。例如ACL will be held in Bangkok,在Decoder阶段就需要以生成利用模板产出的文本如Bangkok is a location entity为目标。这样,Decoder相当于学到了一种能力,根据原文输入,对一个模板构造的文本打分。如果Bangkok is a location entity这句话打分很大,说明这句话就是对的,那么就可以抽取出Bangkok是一个地名对应的entity。模型的结构和template例子如下图:

这种方法借助了Prompt的思路,很巧妙的解决了少样本情况下的NER问题,同时也能够解决zero-shot情况下的NER问题,高效利用了预训练模型。

4

总结

本文首先简要介绍了NER任务的基本定义和经典LSTM-CRF解决方法,接下来重点介绍了小样本学习下的NER任务。小样本学习场景中,由于数据量较少,各个场景的NER任务label不同,因此直接进行训练效果往往不佳。上面介绍的基于样例匹配的方法和基于prompt的方法,都能很好的解决小样本场景下的NER问题。

招聘文章

国企招聘 |  NLP、语音和CV等算法岗位招聘实习生和应届全职生

招聘 | 好未来NLP算法工程师,包括实习生、应届生和社招,组内论文多,技术深厚

春招 | 风控独角兽 数美科技 NLP、ASR算法工程师 - 25k-35k/月

2022内推 | 字节跳动校招 + 社招,包括NLP、CV和ASR和研究员等

最近技术文章

EMNLP 2022 和 COLING 2022,投哪个会议比较好?

一种全新易用的基于Word-Word关系的NER统一模型,刷新了14种数据集并达到新SoTA

阿里+北大 | 在梯度上做简单mask竟有如此的神奇效果


下载一:中文版!学习TensorFlow、PyTorch、机器学习、深度学习和数据结构五件套!  后台回复【五件套】
下载二:南大模式识别PPT  后台回复【南大模式识别】

投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

记得备注呦

整理不易,还望给个在看!

缺少训练样本怎么做实体识别?小样本下的NER解决方法汇总相关推荐

  1. pe下找不到ssd硬盘_快启动PE中没有识别到固态硬盘的解决方法

    快启动PE中没有识别到固态硬盘怎么办?有人遇到电脑系统坏了卡了的情况都会想重装系统,但是进入快启动PE中准备分区时,却没有识别到固态硬盘,让人很是郁闷,所以今天快启动小编为大家分享快启动PE中没有识别 ...

  2. Mybatisplus语句变成下划线_解决方法

    问题所在: 这个是输入数据库的查询语句 实体类与数据库都是使用驼峰命名,但是mybatisplus对数据库发起的语句却带了下划线_ 解决方法: 方法一: map-underscore-to-camel ...

  3. 计算机无法识别读卡器怎么办,在win7电脑中识别不了读卡器的解决方法介绍

    在win7系统电脑中经常使用到读卡器,比如:传输文件.但是有些用户将读卡器插到win7系统电脑中没反应,识别不了读卡器,该怎么解决此问题呢?win7系统电脑识别不了读卡器的原因有很多种,接下来,小编以 ...

  4. 计算机读卡器突然无法识别,win7识别不了读卡器怎么解决?win7电脑识别不了读卡器的解决方法...

    在win7系统电脑中经常使用到读卡器,比如:传输文件.但是有些用户将读卡器插到win7系统电脑中没反应,识别不了读卡器,该怎么解决此问题呢?win7系统电脑识别不了读卡器的原因有很多种,接下来,小编以 ...

  5. 车牌识别系统连接不到后台服务器,车牌识别系统常见故障及解决方法

    <车牌识别系统常见故障及解决方法>由会员分享,可在线阅读,更多相关<车牌识别系统常见故障及解决方法(5页珍藏版)>请在人人文库网上搜索. 1.车牌识别系统常见故障及解决方法一. ...

  6. 移动硬盘断电造成RAW格式/此卷不包含可识别的文件系统的简易解决方法

    强行插拔移动硬盘易产生的此卷不包含可识别的文件系统问题: 解决方法第一步: https://blog.csdn.net/fullbug/article/details/79591684 在win10下 ...

  7. U盘文件夹变exe的win10环境下纯手工解决方法(无需任何软件)

    U盘文件夹变exe的win10环境下纯手工解决方法(无需任何软件) 把U盘插入装有win10系统的电脑 打开U盘目录(这里假设U盘目录是G:) 选中变成exe的文件,删除(放心,这里的exe是一个几k ...

  8. 无法识别的属性“targetFramework”的解决方法

    无法识别的属性"targetFramework"的解决方法 参考文章: (1)无法识别的属性"targetFramework"的解决方法 (2)https:// ...

  9. element el-input 自动获取焦点和IE下光标位置解决方法

    element el-input 自动获取焦点和IE下光标位置解决方法 参考文章: (1)element el-input 自动获取焦点和IE下光标位置解决方法 (2)https://www.cnbl ...

  10. Linux下LCD自动关闭解决方法,一般就自动十分钟黑屏的原因

    Linux下LCD自动关闭解决方法 主机环境:Gentoo Linux 11.2 内核版本:Linux Kernel 3.2.1 原创作品,转载请表明http://blog.csdn.net/ymin ...

最新文章

  1. 路由器上实现DHCP和DHCP中继
  2. centos7安装单节点mysql(源码包安装)
  3. centos7安装svn1.9解决与svn服务器版本不一致的问题
  4. Linux服务器编程之:utime()函数
  5. Spring Boot 动态注入的两种方式 1
  6. springboot ElasticSearch 简单的全文检索高亮
  7. 单一索引和复合索引区别及联系
  8. Python学习之web框架 Flask
  9. 读后感:软件测试经验与教训
  10. influxdb入库mysql_InfluxDb(3)基本操作
  11. qpython3怎么安装库_如何在安装pip3以及第三方python库
  12. Matlab中的各种运算符的用法
  13. centos 并发请求数_彻底理解 jmeter 的线程数与并发数之间的关系
  14. oracle触发器 菜鸟教程,PostgreSQL 触发器
  15. 图形验证码实现(代码)
  16. Ext3.4.0中EditorGridPanel可以复制文本
  17. python自动化交易通达信_通达信实现自动交易系统
  18. 七万字详解paddle-openVINO【CPU】-从环境配置-模型部署全流程
  19. 为什么电脑不能安全关闭计算机,电脑无法正常关机的原因以及解决办法
  20. Python爬虫项目实战(欧美音乐网站)

热门文章

  1. tp cli模式产生日志导致web环境写入不了
  2. express url跳转(重定向)的实现:res.location() res.redirect()
  3. 克罗伊茨内(Keutznaer)的 7月28日
  4. 关于win10家庭版不能开启虚拟机的问题
  5. English trip M1 - AC9 Nosey people 爱管闲事的人 Teacher:Solo
  6. HTML-参考手册: HTML 符号实体
  7. Docker系列(一)安装
  8. ISO 审批通过 Ada 2012 语言标准
  9. 清理delphi项目文件 .bat
  10. Bootstrap 滚动监听(Scrollspy)插件