Loading [MathJax]/jax/output/CommonHTML/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >简单有效,来看看这个NER SOTA!

简单有效,来看看这个NER SOTA!

作者头像
NewBeeNLP
发布于 2022-06-06 02:03:37
发布于 2022-06-06 02:03:37
1.4K0
举报
文章被收录于专栏:NewBeeNLPNewBeeNLP

作者 | Nine 整理 | NewBeeNLP

Few shot learning(小样本学习)就是要用很少量标注样本去完成学习任务,前几天有同学在交流群里问关于小样本NER的资源,今天一起来看一篇Amazon AI Lab在ACL2022上发表的论文。

  • 论文:Label Semantics for Few Shot Named Entity Recognition
  • 发表方:Amazon Web Services (AWS) AI Lab,ACL2022
  • 论文链接:https://arxiv.org/abs/2203.08985

1. 简介

这篇文章提出的方法其实很简单,一段话就能描述完:

用双塔模型来解决Few shot NER的问题,他们用了两个BERT Encoder,一个Encoder编码每个token的表征,另一个Encoder对_label的BIO tag的自然语言形式(或者用其他文本对Label进行描述)进行编码,获取Label 表征,然后求待预测文本中每个token与所有label表征的相似度,求相似度最大的label。

结束了,是不是很简单,但效果很不错,在多个few shot NER的数据集上拿到了SOTA。

Few shot learning(小样本学习)就是要用很少量标注样本(support set)的去完成学习任务,小样本学习中又有很多方法是 metric-based方法,这篇论文中提出的方法也是metric-based方法,这类方法主要是计算样本的表征,并与support set中的类别表征做相似度,从而将样本分类到与它表征最近的类别中去,这其实是一个最近邻的思想。但是之前的一些方法都没有充分利用label name 的语义信息。

这篇论文的 核心点在于使用了label name的语义信息为模型提供额外的信息 。它的 核心假设是:标签的名称承载了标签的含义信息,而这些信息同样是模型可以从数据中归纳出来的 ,但如果数据不够,那就用label name来凑嘛。

举个例子,当相同的先验被用于labels和words的时候,“张三”的表征一定是与PERSON这个label的表征相近的,而不是与DATE的表征。

那看样子,label name还挺有用的,在我之前介绍的\<关系抽取>ACL2022关系抽取SOTA之PL-Marker[1]中,也用到了类似的手法:

PL-Marker中用meaningful words的embedding来初始化

2. 模型

Source and Target datasets

这里提两个概念,Source dataset 和 Target datasets,两者区别如下:

首先他们在多个source datasets上面训练他们的模型models,然后他们在多个unseen few shot target datasets上面验证 经过finetuning 和 不经过 finetuning 的模型的效果。

模型结构

模型结构

类似于双塔模型,用了两个BERT Encoder,一个document encoder 和 一个label Encoder(label encoder他们也尝试了GloVe)。模型步骤如下:

  1. 对于每个token,他们用document encoder 进行编码,获取单词的embedding ;
  2. 用三步获取Label的embedding:
    1. 首先手动把label names改成自然语言的形式,比如"PER"改成"person";
    2. 将label的BIO tag改成自然语言形式,比如“B-PER”就变成了 "begin person", "I-PER"就变成了"inside person", "O"就变成了"other";
    3. 用label Encoder对上面的BIO tag的自然语言形式进行编码。用BERT的[CLS] token embedding作为label的表征(如果是GloVe,则用max pooling)。最后形成

    个表征(加上other一共L个label name, 则BIO一共有

    个),组成label的表征矩阵 ;

  3. 最后,为了找到每个token最合适的label,对每个单词的embedding e 乘以 b矩阵,然后softmax,找最大的那个label (BIO tag)。
训练和推断

相比之前做NER的网络结构,他们的这种方式不需要在遇到新的dataset和没见过的Label name的时候去初始化一个新的顶层分类器,而是直接用BERT_label Encoder生成label表征。

他们认为这样做是有好处的,因为他们假设这样做模型不会忘记先验知识,因为不会有参数被丢掉,也不会为不同的数据集随机初始化参数。

  • 训练:提出了一个两阶段的训练流程:
    • 首先,将所有的source datasets混合在一起,然后pre-finetune一下他们的模型;
    • 然后,在单个target dataset上面对模型进行finetune。

对于没有source dataset可用的场景,就把第一步跳过。

  • 推断:
    • 用label encoder生成label(BIO-tag)表征一次就行了,然后存下来。
    • 在后续推断中,只需要用 document encoder对文本进行编码,然后对每个token表征 与 离线生成的 BIO-tag表征相乘,然后过softmax并且求最大的那个tag。
label 表征的输入用什么

按照这个模型的结构和流程,实际上计算label 表征可以用任意形式的文本,他们考虑了两种形式:

  • label name:这个是本文中用的方式,如下表,这些Label name都是人工赋予的,当然也可以换成其他表达同样意思的词

论文中对CoNLL-2003和Ontonotes两个数据集中的Label给定的label name,其他数据集的详见论文附录A2

  • 上下文表征:他们还尝试了用label name + 上下文去生成label表征的方式,具体方式如下:
    • 这里面的BIO+tag自然语言形式的格式,他们也尝试了好多种,但不是重点,详细的可以去论文的附录E部分查看。
    • 随机挑选数据集中包含entity type的文本,然后将该entity type的文本替换为BIO+tag自然语言形式的结构,然后用label Encoder编码这段文本,用文本的average pooling作为label representation。
    • 在推断的时候,为了避免对某一句的文本的偏差,他们就为每个Label name从support set中随机挑10个句子,然后对10句分别编码,然后求平均,作为这个label的最终表征。如果support set中的某个label相关的entity出现的句子不够10句,那就把能用上的都用上。一旦某个句子被随机选中了,那接下来训练中还是用它。他们还尝试了训练和推断的时候用同一个句子,但是效果不太行。

上下文表征的方式,相对于只用Label name的方式,在不同的数据集上有涨有跌,并不适合所有的数据集,比如对于存在粗粒度的实体类型和细粒度的实体类型的数据集(FEW_NERD),由于同一个粗粒度的实体类型下的细粒度实体类型的上下文很相近,所以用上下文作为Label表征的输入,效果不是很好:

上下文表征 vs label name表征

3. 实验与模型效果

实验设置

source dataset:Ontonotes数据集

在实验中,他们尝试了两种场景:

  • High Resource:
    • support set: 给定一个target dataset,他们会把所有可用的数据都用起来
    • test set:在标准的hold-out test集上验证。
  • Low Resource:
    • support set:给定一个target dataset,他们会在句子级别进行下采样,从训练集中选取K-shot的support set。K-shot是指在support set中对于每个label,都恰好有K个样本。但是,NER任务中,一个句子中可能包含多个实体类型,无法保证每个entity type都正好有K个样本,所以他们采用了如下的方案:
      • target set中的每个label(除了“O”以外)对应的实体都至少在target set中出现K次;
      • target set中去除掉任意一个句子,都至少有一个label对应的实体在target set中出现的次数少于K次。
    • test set:使用全量的从target dataset中分出来的hold-out test集,为的是尽量模拟现实的数据分布,而不是也对test set进行下采样。
模型结果

模型结果

  • 可以看到在1-shot和5-shot的场景中,他们的模型效果比其他模型都要好不少,说明 在数据很少的情况下,利用label name可以提高精确率
  • 而当数据量变大的时候,虽然效果依然很高(部分数据集上比TANL是因为TANL用的是T5-base,而他们用的是BERT-base),但是与其他模型的差距变小,说明 数据越多,模型对label name的依赖越少
  • 此外,CoNLL-2003/WNUT-2017/I2B2-2014这三个数据集与source dataset的标签名很相近,所以相对于其他数据集,这仨数据集的小样本量效果距大样本量的效果较小。
模型分析
  • Label Encoder的影响

他们认为 在source datasets上面pre-finetuning的时候,不但label和token的表征进行对齐,而且在更新label encoder,让它能够针对source dataset生成更有用的label表征

他们采用zero shot的方式来验证他们的这个想法,在source dataset上面pre-finetuning,但是不在target set上进行finetune,并且对于target set中label name,如果出现在source dataset中,就给它改个同义名字。

1-shot vs 0-shot vs rename label 0-shot

结果证明,在zero-shot的效果与one-shot的效果差不多(除了MISC以外,因为这个label在source dataset中完全没出现过),而改名后的zero-shot的效果也还不错,从而验证了他们上面的想法。

  • Label Name的语义是否起作用的证明,他们对比了三种label name的方式
    • 原始名称
    • 无意义的label的名称,比如 label 1, label 2,如下可知, 数据越少的时候,有意义的label name越有用
    • 错误的名称:将不同label的label name调换,比如把用“person”来命名“ORG”,如下可知:
      • 错误的label name会对模型有较大的影响,尤其是target set与source set的label很相近的时候(CoNLL-2003)
      • 模型在target set数据少的时候会被错误名称带歪,想要修正错误名称带来的影响,需要加大数据量,且如果target set 与source set的label相近(CoNLL-2003),那么想要修正错误的影响,就需要更多的样本。

本文参考资料

[1]

<关系抽取>ACL2022关系抽取SOTA之PL-Marker: https://zhuanlan.zhihu.com/p/496000441

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 NewBeeNLP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
缺少训练样本怎么做实体识别?小样本下的NER解决方法汇总
本文带你走进命名实体识别(NER)任务,首先介绍了解决NER任务的经典模型结构,然后通过3篇顶会论文介绍当缺少训练样本的时候,如何解决NER任务。
圆圆的算法笔记
2022/09/22
1.2K0
缺少训练样本怎么做实体识别?小样本下的NER解决方法汇总
中文小样本NER模型方法总结和实战
作者:Erinlp(知乎同名) 方向:信息抽取 一、简介 在UIE出来以前,小样本NER主要针对的是英文数据集,目前主流的小样本NER方法大多是基于prompt,在英文上效果好的方法,在中文上不一定适用,其主要原因可能是: 中文长实体相对英文较多,英文是按word进行切割,很多实体就是一个词;边界相对来说更清晰; 生成方法对于长实体来说更加困难。但是随着UIE的出现,中文小样本NER 的效果得到了突破。 二、主流小样本NER方法 2.1、EntLM EntLM该方法核心思想:抛弃模板,把NER作为语言模型任
zenRRan
2022/08/26
1.9K0
中文小样本NER模型方法总结和实战
NLP 中的通用数据增强方法及针对 NER 的变种
本文结合 A Visual Survey of Data Augmentation in NLP 和最新的综述论文 A Survey of Data Augmentation Approaches for NLP,大致总结了目前 NLP 领域的通用数据增强方法和几种针对如 NER 的序列标注模型进行适配的变种方法,关于后者,重点介绍了基于 mixup 改进的 SeqMix 方法。
Alan Lee
2021/12/07
1.6K0
NLP 中的通用数据增强方法及针对 NER 的变种
【万字详文介绍】:迭代扩张卷积神经网络(IDCNN)
文章链接:https://cloud.tencent.com/developer/article/2465301
小馒头学Python
2024/11/13
2370
【万字详文介绍】:迭代扩张卷积神经网络(IDCNN)
ACL2022 | 序列标注的小样本NER:融合标签语义的双塔BERT模型
每天给你送来NLP技术干货! ---- 作者 | SinGaln 来自 | PaperWeekly 这是一篇来自于 ACL 2022 的文章,总体思想就是在 meta-learning 的基础上,采用双塔 BERT 模型分别来对文本字符和对应的label进行编码,并且将二者进行 Dot Product(点乘)得到的输出做一个分类的事情。文章总体也不复杂,涉及到的公式也很少,比较容易理解作者的思路。对于采用序列标注的方式做 NER 是个不错的思路。 论文标题: Label Semantics for Few
zenRRan
2022/07/12
8410
ACL2022 | 序列标注的小样本NER:融合标签语义的双塔BERT模型
基于深度学习的NER(命名实体识别)教程 —— 识别文本中的编号
命名实体识别(Named Entity Recognition, NER)是自然语言处理(NLP)任务之一,用于识别文本中的特定类别的实体,如人名、地名、组织名、日期、编号等。
IT蜗壳-Tango
2025/03/18
1390
独家 | 轻松上手,通过微调Transformers完成命名实体识别任务
作者:Lars Kjeldgaard 翻译:王闯(Chuck)校对:和中华 本文约2500字,建议阅读7分钟本文基于丹麦团队研发的Python开源包NERDA演示了如何通过简单微调BERT Transformer来处理NER任务。
数据派THU
2021/04/07
1.2K0
NAACL2022 | 具有元重加权的鲁棒自增强命名实体识别技术
每天给你送来NLP技术干货! ---- ©作者 | 回亭风 单位 | 北京邮电大学 研究方向 | 自然语言理解 编辑 | PaperWeekly 自增强(self-augmentation)最近在提升低资源场景下的 NER 问题中得到了越来越多的关注,token 替换和表征混合是对于 NER 这类 token 级别的任务很有效的两种自增强方法。值得注意的是,自增强的方法得到的增强数据有潜在的噪声,先前的研究是对于特定的自增强方法设计特定的基于规则的约束来降低噪声。 本文提出了一个联合的 meta-rewe
zenRRan
2022/08/26
4910
NAACL2022 | 具有元重加权的鲁棒自增强命名实体识别技术
NAACL'22 | 华为提出中文NER领域最新SOTA
每天给你送来NLP技术干货! ---- 来自:克鲁斯卡 Delving Deep into Regularity: A Simple but Effective Method for Chinese Named Entity Recognition Accepted at NAACL 2022 Findings 4月7日,NAACL 2022公布论文入选名单,由华为云语音语义创新Lab多名研究者撰写的论文被NAACL 2022 Findings接收,趁热和大家一起学习一下 文章大纲 Abstract
zenRRan
2022/09/14
2.2K0
NAACL'22 | 华为提出中文NER领域最新SOTA
命名实体识别的深度学习综述
A Survey on Deep Learning for Named Entity Recognition
马上科普尚尚
2020/09/24
1.9K0
命名实体识别的深度学习综述
独家 | ​采用BERT的无监督NER(附代码)
图1. 展示了未微调的BERT(bert-large-cased)无监督NER标记的句子样本
数据派THU
2020/04/17
2.3K0
ACL2022 | 分解的元学习小样本命名实体识别
每天给你送来NLP技术干货! ---- ©作者 | 回亭风 单位 | 北京邮电大学 研究方向 | 自然语言理解 来自 | PaperWeekly 论文标题: Decomposed Meta-Learning for Few-Shot Named Entity Recognition 论文链接: https://arxiv.org/abs/2204.05751 代码链接: https://github.com/microsoft/vert-papers/tree/master/papers/Decompos
zenRRan
2022/07/06
1.5K0
ACL2022 | 分解的元学习小样本命名实体识别
绝了!关系抽取新SOTA
今天分享的论文是一篇pipeline方法,来自清华和微信ACL2022的工作,《Packed Levitated Marker for Entity and Relation Extraction》,是PURE的升级版,这里我们先简单介绍一下PURE。
NewBeeNLP
2022/06/06
2K0
绝了!关系抽取新SOTA
流水的NLP铁打的NER:命名实体识别实践与探索
作者:王岳王院长 知乎:https://www.zhihu.com/people/wang-yue-40-21 github: https://github.com/wavewangyue 编辑:yuquanle
yuquanle
2020/08/18
7K0
流水的NLP铁打的NER:命名实体识别实践与探索
实体识别(1) -实体识别任务简介
命名实体识别(Named Entity Recognition,简称NER) , 是指识别文本中具有特定意义的词(实体),主要包括人名、地名、机构名、专有名词等等,并把我们需要识别的词在文本序列中标注出来。
致Great
2023/08/25
5560
实体识别(1) -实体识别任务简介
中文NER的那些事儿1. Bert-Bilstm-CRF基线模型详解&代码实现
这个系列我们来聊聊序列标注中的中文实体识别问题,第一章让我们从当前比较通用的基准模型Bert+Bilstm+CRF说起,看看这个模型已经解决了哪些问题还有哪些问题待解决。以下模型实现和评估脚本,详见 Github-DSXiangLi/ChineseNER
风雨中的小七
2021/04/30
9.3K3
中文NER的那些事儿1. Bert-Bilstm-CRF基线模型详解&代码实现
大模型的基础——Bert和ALBERT是什么?
推荐文章:https://cloud.tencent.com/developer/article/2470928?shareByChannel=link
算法一只狗
2024/12/05
3450
大模型的基础——Bert和ALBERT是什么?
中文NER的那些事儿6. NER新范式!你问我答之MRC详解&代码实现
就像Transformer带火了"XX is all you need"的论文起名大法,最近也看到了好多"Unified XX Framework for XX"的paper,毕竟谁不喜欢写好一套框架然后哪里需要哪里搬凸^-^凸。这一章让我们来看下如何把NER的序列标注任务转换成阅读理解任务。论文本身把重点放在新的框架可以更好解决嵌套实体问题,但是实际应用中我碰到Nested NER的情况很少,不过在此之外MRC对小样本场景,以及细粒,层次化实体的识别任务也有一些启发意义,代码详见ChineseNER/mrc
风雨中的小七
2022/02/08
1.8K1
中文NER的那些事儿6. NER新范式!你问我答之MRC详解&代码实现
这篇文章告诉你,如何用阅读理解来做NER!
之前做过实体关系抽取/联合抽取等任务,是用LSTM+CRF模型+BIO标注的方法,最近看到有一篇ACL用MRC(Machine Reading Comprehension)的方法去做NER(Named Entity Recognition)任务,以下是对这篇论文的分享。
zenRRan
2021/07/19
2.3K0
这篇文章告诉你,如何用阅读理解来做NER!
ACL2022 | 类增量学习的少样本命名实体识别
每天给你送来NLP技术干货! ---- ©作者 | 回亭风 单位 | 北京邮电大学 研究方向 | 自然语言理解 来自 | PaperWeekly 论文标题: Few-Shot Class-Incremental Learning for Named Entity Recognition 收录会议: ACL 2022 论文链接: https://aclanthology.org/2022.acl-long.43 Abstract 之前的面向 NER 的类增量学习的工作都是基于新类有丰富的监督数据的情况,本文
zenRRan
2022/09/02
9780
ACL2022 | 类增量学习的少样本命名实体识别
推荐阅读
相关推荐
缺少训练样本怎么做实体识别?小样本下的NER解决方法汇总
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档