【论文精读】Few-Shot Named Entity Recognition via Meta-Learning

前言

一篇关于元学习方法在小样本NER中的应用,来自TKDE2022,作为第一篇在小样本NER中引入元学习方法,还是非常值得借鉴的,但是在大模型的冲击下,这种方法在NER中没办法走得更远,还是得将大模型的知识引入到NER中才能真正解决问题。


Abstract

N-way K-shot小样本设置广泛应用于关系抽取和图像分类,作为序列标注问题的NER,由于一个句子中实体个数和类别未知,导致实体类纠缠在一起,N-way K-shot的NER问题无法解决。本文定义了一个合适的设置,并且提出一个新的元学习方法FEWNER,它将整个网络分为任务无关部分和任务特定部分。任务无关部分跨任务元学习,任务特定部分固定任务无关部分,通过sgd更新任务特定部分。计算高效且不易过拟合。

1. ITRODUCTION

NER在许多下游任务如信息检索、问答上发挥重要作用。但是很多工作需要大量带注释的语料库,一个有效降低数据成本的方法是迁移学习,可以分为两类:

  1. 同构标签集:源域和目标域有相同的标签;
  2. 异构标签集:源域和目标域标签不同。

异构标签集方法为了解决标签不一致问题又可以将NER模型分为共享和私有部分,目标任务需要对私有部分重新训练。本文所要解决的问题是在NER中能否跨越同质和异质的标签集合学习共享知识。
一个有效解决域适应问题的方法是基于N-way K-shot设置的小样本方法。NER作为序列标注任务和分类任务有所不同,分类任务中每个成员独立分类而不考虑顺序依赖性,而且NER中多个实体的数量和种类未知。
跨任务迁移知识在N-way K-shot设置中仍然成立,因为命名实体通常共享词法和上下文特征。元学习的目标是为了像人类一样仅通过少量的样本学习新的技能,但是它容易过拟合。
image.png
FEWNER将整个网络分为任务无关和任务特定两部分,在训练过程中, θ \theta θ在多个任务之间进行元学习, φ \varphi φ在低维空间学习特定任务。测试阶段,FEWNER保持 θ \theta θ不变,通过梯度下降更新 φ \varphi φ。而MAML更新整个网络。直观上FEWNER有如下优势:

  1. 不易过拟合;
  2. 计算高效,只更新 φ \varphi φ

此外,预训练语言模型如BERT和GPT3,虽然迁移能力很强但是依赖大规模语料库。FEWNER通过元学习优化了“快速适应学习”的能力。本文的主要贡献:

  1. 第一个以元学习的方式研究了N-way K-shot设置下的少样本NER问题;
  2. 提出FEWNER,可以通过更新少量参数快速求解任务,不易过拟合且计算高效;
  3. 在三个实验上对FEWNER进行广泛评估;
  4. 通过实验进一步分析参数设置和架构选择。

2. BACKGROUND

2.1 Named Entity Recognition

NER有三个普遍的范式:

  1. 基于知识的无监督系统:依赖词汇知识,特定领域地名、浅层语法等。
  2. 基于特征的有监督系统:将NER作为多分类或序列标注任务。特征包括人工设计特征、基于SVM、隐马尔可夫(HMM)、条件随机场(CRF)的特征。
  3. 基于神经网络的系统:以端到端的方式推断潜在特征、学习序列标签。

迁移学习旨在利用源域学习到的知识在目标域执行任务。现有的研究包括模型不同层展示的迁移能力、在非正式语料库上训练、生成参数网络、对抗迁移网络等。但是目前的工作都没有针对小样本NER的N-way K-shot场景。

2.2 Meta-Learning

元学习旨在训练样本很少的情况下,学习一个快速适应新任务的模型。现有的元学习方法聚焦于小样本场景,大致可分为基于度量的方法、基于记忆的方法、基于优化的方法。模型不可知元学习(MAML)是一种基于优化的方法。MAML首先生成一组训练任务 T = { T 1 , . . . , T i , . . . } \mathcal{T} =\{\mathcal{T} _1,...,\mathcal{T}_i,... \} T={T1,...,Ti,...},其中每个任务由一组支持集 D s p t \mathcal{D}_{spt} Dspt和一组查询集 D q r y \mathcal{D}_{qry} Dqry构成,二者互不相交,模型输入支持集数据通过梯度下降法更新参数:
θ i ′ ← θ − α ∇ L T i s p t ( f θ ) \theta_{i}^{\prime} \leftarrow \theta-\alpha \nabla \mathcal{L}_{\mathcal{T}_{i}}^{s p t}\left(f_{\theta}\right) θiθαLTispt(fθ)
其中 α \alpha α为通用学习率, L T i s p t \mathcal{L}_{\mathcal{T}_{i}}^{s p t} LTispt是任务相关训练损失。模型参数的训练目标是让模型在验证集上表现得更好。这就引出了MAML的原始目标:
min ⁡ θ ∑ T i L T i q r y ( f θ i ′ ) = min ⁡ θ ∑ T i L T i q r y ( f θ − α ∇ L T i s p t ( f θ ) ) \min _{\theta} \sum_{\mathcal{T}_{i}} \mathcal{L}_{\mathcal{T}_{i}}^{q r y}\left(f_{\theta_{i}^{\prime}}\right)=\min _{\theta} \sum_{\mathcal{T}_{i}} \mathcal{L}_{\mathcal{T}_{i}}^{q r y}\left(f_{\theta-\alpha \nabla \mathcal{L}_{T_{i}}^{s p t}\left(f_{\theta}\right)}\right) minθTiLTiqry(fθi)=minθTiLTiqry(fθαLTispt(fθ))
MAML的目标是优化模型的参数,在少样本下通过少数几个梯度步数快速适应新的任务,模型参数更新如下:
θ ← β ∇ θ ∑ T i L T i q r y ( f θ i ′ ) \theta \leftarrow \beta \nabla_{\theta} \sum_{\mathcal{T}_{i}} \mathcal{L}_{\mathcal{T}_{i}}^{q r y}\left(f_{\theta_{i}^{\prime}}\right) θβθTiLTiqry(fθi)
MAML的目标是在N-way K-shot的问题设置下进行的小样本分类,而序列标注问题中一个句子实体数量和类别是未知的,所以需要重新定义N-way K-shot的问题设置。一些方法虽然在自然语言处理场景下尝试了元学习策略,但是不是任务不同就是需要更多的样本,而且都需要更新整个网络,而FEWNER是在低维空间而不是整个网络进行自适应。

3. FEWNER: FEW-SHOT NAMED ENTITY RECOGNITION VIA META-LEARNING

3.1 Problem Statement: N-Way K-Shot in NER

小样本学习中,通过几个样本实现对句子标签的预测,一个任务 T i \mathcal{T_i} Ti是一批句子,由一组不相交的支持集 D s p t \mathcal{D}_{spt} Dspt和查询集 D q r y \mathcal{D}_{qry} Dqry构成。训练阶段,支持集和查询集的真实标签在源任务中都可以使用,测试阶段在仅包含少量样本 D T j s p t \mathcal{D}^{spt}_{\mathcal{T_j}} DTjspt的未知任务 T j \mathcal{T_j} Tj上进行,最终目标是对 D T j q r y \mathcal{D}^{qry}_{\mathcal{T_j}} DTjqry的标签进行预测。
序列标注任务比分类任务要困难的地方在于每个句子类别数目和种类未知,本文采用greedy-including方法为序列标注构建N-way K-shot任务:

  1. 随机挑选句子扩充 D T i s p t \mathcal{D}^{spt}_{\mathcal{T_i}} DTispt
  2. 一个句子如果能够为类别或者数目带来增益,则被包含在内,即只要有用的样本;
  3. 重复直到达到N-way K-shot。

3.2 The FEWNER Approach

3.2.1 Overview of FEWNER

image.png
本文的思想是在多任务上学习一个模型,使得它只需要很少的训练样本即可解决未见过的任务。更重要的是FEWNER仅通过在测试阶段更新少量的学习参数(任务特定参数),它的优势如下:

  1. 在低纬任务特定参数下快速适应新任务而不易过拟合;
  2. 只需要对任务特定参数进行梯度计算;
  3. 允许从同一标签空间中多个不同任务学习元知识和标签依赖。

总结来说,情境参数(任务特定参数,每轮任务中初始化为0)从每个单独任务中学习,序列标签参数(任务无关参数)通过多个不同任务进行学习。

3.2.2 The Backbone of Sequence Labeling

在使用静态embedding时,CRF可以强大地捕获标签转换依赖性,CNN-BiGRU在计算成本上要比基于Transformers的编码器低很多,并且在重头开始训练的条件下,CNN-BiGRU的性能与基于小型语料库的Transformers相当甚至更好。因此基于语料库规模和计算复杂性,采用CNN-BiGRU-CRF作为标记任务的backbone。
image.png
模型整体结构如上图所示,使用CNN提取字符级表示,使用BiGRU对上下文编码,使用CRF生成标签序列。CRF在所有额能的标签序列上定义了一系列概率:
p ( y ∣ h ; W , b ) = ∏ i = 1 L ψ i ( y i − 1 , y i , h ) ∑ y ′ ∈ Y ( h ) ∏ i = 1 L ψ i ( y i − 1 ′ , y i ′ , h ) p(\boldsymbol{y} | \boldsymbol{h} ; \boldsymbol{W}, \boldsymbol{b})=\frac{\prod_{i=1}^{L} \psi_{i}\left(y_{i-1}, y_{i}, \boldsymbol{h}\right)}{\sum_{y^{\prime} \in \mathcal{Y}(\boldsymbol{h})} \prod_{i=1}^{L} \psi_{i}\left(y_{i-1}^{\prime}, y_{i}^{\prime}, \boldsymbol{h}\right)} p(yh;W,b)=yY(h)i=1Lψi(yi1,yi,h)i=1Lψi(yi1,yi,h)
其中 ψ i ( y ′ , y , h ) = exp ⁡ ( W y ′ , y T h ) + b y ′ , y \psi_{i}\left(y^{\prime}, y, \boldsymbol{h}\right)=\exp \left(\boldsymbol{W}_{y^{\prime}, y}^{T} \boldsymbol{h}\right)+\boldsymbol{b}_{y^{\prime}, y} ψi(y,y,h)=exp(Wy,yTh)+by,y W y ′ , y T \boldsymbol{W}_{y^{\prime}, y}^{T} Wy,yT b y ′ y \boldsymbol{b}_{y^{\prime}y} byy分别是标签对 ( y ′ y ) (y^{\prime}y) (yy)的权重和偏差。

3.2.3 Meta-Learning Strategy

元学习策略有两个核心部分:内部训练阶段和外部训练阶段。
**内部训练:**在内部训练的每轮任务中,首先将任务特定参数 φ \varphi φ初始化为0,然后在支持集上梯度下降k次更新:
φ k = φ k − 1 − α ∇ φ k − 1 L T i s p t ( θ , φ k − 1 ) \varphi_{k}=\varphi_{k-1}-\alpha \nabla_{\varphi_{k-1}} \mathcal{L}_{\mathcal{T}_{i}}^{s p t}\left(\theta, \varphi_{k-1}\right) φk=φk1αφk1LTispt(θ,φk1)
注意在内部训练中与任务无关的参数没有改变。
**外部训练:**经过内部训练已经得到了模型 ( θ , φ k ) (\theta,\varphi_k) (θ,φk),更新好的模型在查询集中进行测试,再通过在新样本上得到的测试误差来更新参数 θ \theta θ,这其实模拟了模型适应新数据的过程。过程如下所示:
θ ← θ − β ∇ θ 1 ∣ T ∣ ∑ T i ∈ T L T i q r y ( θ , φ k ) \theta \leftarrow \theta-\beta \nabla_{\theta} \frac{1}{|\boldsymbol{T}|} \sum_{\mathcal{T}_{i} \in \boldsymbol{T}} \mathcal{L}_{\mathcal{T}_{i}}^{q r y}\left(\theta, \varphi_{k}\right) θθβθT1TiTLTiqry(θ,φk)
与普通的梯度不同,上式的更新机制涉及到 φ k \varphi_k φk的梯度,因此需要对二阶偏导数进行优化。

3.2.4 Conditioning on Backbone Parameters

image.png
每个任务中的情景参数 φ \varphi φ都是重头开始训练的,并且是独立于网络的,因此我们需要知道在何处调节骨干网络参数 θ \theta θ。对于某层参数 θ l \theta_l θl我们可以简单将 φ \varphi φ连接到该层的输入,以便网络更新其余部分用来解决新任务:
h j l + 1 = g ( ∑ θ i , j ⋅ h i l + ∑ θ m , j ⋅ φ m + b ) h^{l+1}_j = g(\sum \theta_{i,j}\cdot h^l_i+\sum \theta_{m,j}\cdot\varphi_m+b) hjl+1=g(θi,jhil+θm,jφm+b)
另一种调节方法基于特征线性调制器FiLM,它对特征图进行仿射变换:
F i L M ( h i ) = γ h i + η FiLM(h_i)=\gamma h_i + \eta FiLMhi=γhi+η
[ γ , η ] = ∑ θ F i L M ⋅ φ m + b [\gamma,\eta]=\sum\theta_{FiLM}\cdot\varphi_m +b [γ,η]=θFiLMφm+b
φ \varphi φ在内部训练更新,其余参数在外部训练更新。本文方法使用FiLM,这种适应的隐藏状态更有利于在后序CRF层捕获任务特定的标签依赖性。

3.2.5 Algorithm Flow

image.png
算法的伪代码如上,训练阶段,任务特定参数初始化为0通过每个任务的损失 L T i s p t \mathcal{L}_{\mathcal{T}_{i}}^{s p t} LTispt更新。任务无关参数通过不同任务的损失 L T i q r y \mathcal{L}_{\mathcal{T}_{i}}^{qry} LTiqry更新, φ \varphi φ在外部训练过程中不更新。在adapting(适应)过程,固定住任务无关参数,这是两个过程主要的区别。

4. EXPERIMENTS

实验部分展示了三种适应场景的实验结果:域内跨类型、跨域相同类型、跨域跨类型适应。

4.1 Experimental Settings

4.1.1 Datasets and Evaluation Metrics

image.png
NER没有现成的小样本数据集,因此作者收集了七个数据集如上图所示,NNE、FG-NER和GENIA用于域内跨类型适应,ACE2005用于跨域类型内适应,后三个数据集用于跨域跨类型适应。每轮测试阶段,g是标记实体综述,r时候被模型预测出的实体总数,c是模型正确预测到实体总数。F1-score计算如下:
F 1 = 2 c g + r F1=\frac{2c}{g+r} F1=g+r2c

4.1.2 Baseline Methods

FEWNER和如下方法进行对比评估:

  • FineTune:使用CNN-BiGRU-CRF作为序列标签模型。在支持集上训练,在测试任务上微调,最终在测试任务的查询集上评估。
  • ProtoNet:把标签预测当做分类任务。它学习一个度量空间,在该空间中计算距离分类。
  • MAML:一种模型无关的元学习方法,不会细分任务相关、任务无关参数,需要在内部循环和测试时更新整个网络。
  • SNAIL:一种结合时间卷积和因果注意力机制的元学习模型,前者从过去的经验中聚合信息,后者准确定位特定信息片段。
  • Pre-trained Language Models:作者在GPT2、Flair、ELMo、BERT和XLNet上构建一个CRF层,embedding层使用Flair生成,Flair框架不支持微调,所以微调只能在CRF上进行。

4.1.3 Implementation Details

除了预训练模型,其余方法的表征使用GloVe预训练词嵌入。超参数选择基于网格搜索策略。其余参数设置见原文。

4.2 Intra-Domain Cross-Type Adaptation

4.2.1 Setups

域内跨类型适应,其目的是通过特定领域的少量训练样本来识别新的实体类型。因此对于构建的数据集分为不重叠的训练集和测试集。测试集有1000个任务,为了公平比较,固定了随机种子,让不同的方法在1000个任务中随机抽样进行评估。

4.2.2 Experimental Results

image.png
上表是实验结果总结如下:

  1. FEWNER以显著的优势实现了最先进的性能;
  2. 5-shot的设置比1-shot的表现要好,但是提升甚微;
  3. 特定领域小样本NER比一般领域要困难;
  4. 具有自适应策略的方法通常优于带有CRF的语言模型。

4.3 Cross-Domain Intra-Type Adaptation

4.3.1 Setups

跨域相同类型旨在识别不同域的相同实体。ACE2005中有六个域,在每个域中标注了 7 个粗粒度实体类型和 54 个细粒度子类型。实验使用细粒度注释,去除了实体嵌套部分(保留最里面实体),虽然用于测试的实体类型在训练阶段已经出现,但是二者域不同。

4.3.2 Experimental Results

image.png
根据上表有如下结论:

  1. FEWNER以显著的优势实现了最先进的性能;
  2. N-way K-shot设置下跨域同类型适应仍然是个挑战;
  3. UN(全球新闻网络)到BC(广播对话)的差异大于BN(广播新闻)到CTS(电话对谈)的差异。

4.4 Cross-Domain Cross-Type Adaptation

4.4.1 Setups

跨域跨类型适应,这意味着模型在源域A上训练,然后适应未见的目标域B,B和A有不同的实体类型空间。作者设计了三种适应方式,GENIA(医学领域36种实体)-》BioNLP13CG(医学领域16种实体),OntoNotes(不同领域18种实体)-》BioNLP13CG(医学领域16种实体),OntoNotes(不同领域18种实体)-》FG-NER(新闻领域200种实体)。

4.4.2 Experimental Results

image.png
根据上表有如下结论:

  1. FEWNER以显著的优势实现了最先进的性能;
  2. 较差的性能表明NER的跨域跨类型适应存在困难;
  3. 领域越相近,模型效果越好。

4.5 Further Analysis

4.5.1 Ablation Study

image.png
消融实验在域内不同类型适应上进行,结果如上表所示,可以看到:

  1. 条件方法B性能略好于A;
  2. 去除字符CNN层会对性能大幅降低,因为NER中容易出现OOTV(训练外词汇)的token;
  3. 加大内部训练step数可以略微提升性能;
  4. 上下文参数维度和类别数也是重要考虑的因素。

4.5.2 Time Consuming Analysis

在5-way 1-shot设置下,训练阶段中,内部训练step是2,每个loop需要0.04秒,外部训练是8,每个loop是2.19秒。在5-way 5-shot设置下(原文写错了),内部训练每个loop需要0.04秒,外部训练是3.44秒。
在adapting阶段,5-way 1-shot和5-way 5-shot都是0.04秒,评估时间分别是0.36秒和0.51秒,时间的消耗和训练适应阶段的数据大小成正比。总之,FEWNER具有非常高的计算效率,因为它在适应新任务时仅更新低维空间中的一小部分参数。

4.5.3 Qualitative Analysis

image.png
上表是一些FEWNER的表现结果,总的来说,FEWNER遗漏了一些实体并错误地检测实体的边界,并且发现不同领域的不同标注标准和书写格式是影响few-shot可迁移性的关键因素。此外作者分析认为从粗到细粒度的适应可以使得需要下游的系统受益。

5. DSCUSSION AND CONCLUSION

5.1 Difficulty and Challenge

小样本在NER中的性能无法与关系抽取和图像分类相提并论,甚至强大的预训练语言模型(GPT2、BERT)都无法很好解决该问题。主要原因在于序列标记不同于传统的分类任务,具有序列依赖性。未来考虑通过增量学习、图神经网络等方法突破该任务的界限。

5.2 Implication

本文的方法可以很容易扩展到其他序列标记任务如词性标记和填槽(slot filling),这样可以减少低资源场景人工标注成本,帮助系统像人一样快速学习新的知识。

5.3 Conclusion

本文率先研究了N-way K-shot在小样本NER中的设置,提出了FEWNER可以通过更新小部分低纬参数有效适应新任务。该方法比近年来的元学习更简单有效。

阅读总结

本文是一篇基于小样本场景使用元学习方法解决NER问题的文章,全篇看下来逻辑还是非常清晰的,方法中对参数分为任务特定和任务无关两部分,在提升性能的同时又降低了计算和时间开销,这样的想法很值得借鉴和学习。但是这样的方法在23年肯定是落后很多了,随着ChatGPT等大模型的出现,文中实验所对比的BERT和GPT2早已成为了过去,现在的大模型在小样本场景下已经具有极强的表现能力,甚至是zero-shot都可以轻松应对,而且现在的大模型并不需要自己训练(也训练不起),只需要调用接口就可以达到目的。此外,现有的大模型不需要微调,无需更新参数,使用prompt的方法就可以激发大模型的能力(知识涌现),因此我认为解决低资源场景下的NER问题的最优解,还是要往大模型方向上去思考,小模型即使具有计算和时间开销上的优势,但是性能的短板是再多优势都弥补不了的。

### Few-Shot Classification Introduction Few-shot classification refers to a type of machine learning problem where the model is required to learn from very few examples per class, typically one or five samples only. This setting contrasts with traditional supervised learning methods that rely on large datasets for training models effectively[^2]. In this paradigm, algorithms must generalize well even when exposed to limited data points. The approach involves designing networks capable of adapting quickly based on minimal information about new classes not seen during initial training phases. Such systems often employ meta-learning strategies which allow them to improve performance over time as they encounter more tasks within similar domains but different specific instances. #### Applications of Few-Shot Learning One notable application area lies in image recognition problems such as object detection and categorization under constrained conditions like low-resource environments or rare event identification scenarios. For instance, medical imaging analysis may benefit significantly since acquiring extensive labeled patient records can be challenging due to privacy concerns and cost factors involved[^3]. Another domain benefiting greatly includes natural language processing (NLP), particularly intent parsing and entity extraction from text inputs containing novel entities previously unseen by pre-trained models. By leveraging few-shot techniques, developers ensure their solutions remain robust against emerging trends without necessitating constant retraining efforts whenever fresh categories emerge. In addition, robotics also finds utility through rapid adaptation capabilities provided via these methodologies enabling machines equipped with computer vision sensors to recognize unfamiliar objects swiftly after observing just several exemplars. ```python def few_shot_classifier(train_set, test_instance): """ A simple implementation demonstrating how a classifier might work using support sets. Args: train_set (list): List of tuples representing each known category's sample(s). Each tuple contains features vector followed by label string. test_instance (tuple): Features vectors corresponding to an unknown item awaiting prediction. Returns: str: Predicted class name associated most closely with given input feature set. """ distances = [] labels = [] # Calculate distance between test case & all training cases; store results alongside respective tags for example in train_set: dist = euclidean_distance(test_instance[0], example[0]) distances.append(dist) labels.append(example[-1]) k_nearest_indices = np.argsort(distances)[:k] vote_counts = Counter([labels[i] for i in k_nearest_indices]).most_common(1) return vote_counts[0][0] ``` --related questions-- 1. What are some common challenges faced while implementing few-shot learning? 2. How does transfer learning differ from few-shot learning approaches? 3. Can you provide real-world examples beyond those mentioned here where few-shot learning has been successfully applied? 4. Are there any limitations inherent to current implementations of few-shot classifiers? If so, what research directions could address these issues? 5. Explain the role played by metric-based methods in achieving effective few-shot generalizations.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HERODING77

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值