# CONTaiNER: Few-Shot Named Entity Recognition via Contrastive Learning

# 前言

这是一篇 Pennsylvania State University(宾夕法尼亚州立大学)发布在 Arxiv 的预印本。原文链接:https://arxiv.org/abs/2109.07589

# 日期

2021 年 9 月 15 日 V1 版本。

2022 年 5 月 28 日 V2 版本

# 作者

Sarkar Snigdha Sarathi Das, Arzoo Katiyar, Rebecca J. Passonneau, Rui Zhang

Pennsylvania State University

# 摘要

在小样本情境下的命名实体识别对于低资源领域的实体标注至关重要。现有方法仅从源领域学习到已定义好的类别的语义特征和中间表示。而这会影响到对未知目标领域的泛化能力,导致其性能不佳。为此,我们提出了 CONTaiNER,这是一种新颖的通过对比学习方法优化小样本命名实体识别中跨类别令牌之间的分布。CONTaiNER 通过优化一个通用的目标 —— 根据它们的高斯分布嵌入来区分不同令牌的类别来代替传统通过优化类别特定属性。这有效地减轻了源领域训练导致的过拟合问题。我们在几个传统测试领域(OntoNotes,CoNLL2003,WNUT2017,GUM)以及新的大规模小样本 NER 数据集(Few-NERD)上进行了实验,实验表明,平均而言,CONTaiNER 的性能比之前的方法提升了 3% 到 13% 的绝对 F1 值,甚至在某些具有挑战的情况下,之前的方法无法获得可观的性能时,CONTaiNER 仍然保持着相应的性能。

# 方法

CONTaiNER 主要利用了对比学习的方法来优化不同实体直接的分布差异。其中主要的几个点包括:

  1. 模型不再聚焦于类的特征,而是聚焦于区分不同类别的 Token;
  2. 使用高斯嵌入替代传统的点嵌入让模型在区分实体类分布更加有效;
  3. 使用少量样本来微调模型可以防止过拟合,这对领域适配至关重要。

image-20230907182507774

  1. 通过预训练模型获取每个 Token 的 Embedding,然后再通过一个简单的映射层来生成对应的 Embedding。本文不像 SimCLR 直接使用点嵌入,而是使用fμf_{\mu}fΣf_{\Sigma} 两个映射函数来构造高斯分布的两个参数(两个映射函数都是单线性层),而 ELU 是指数函数。

    μi=fμ(hi),Σi=ELU(fΣ(hi))+(1+ϵ)\boldsymbol{\mu}_{i}=f_{\mu}\left(\boldsymbol{h}_{i}\right), \quad \boldsymbol{\Sigma}_{i}=\operatorname{ELU}\left(f_{\Sigma}\left(\boldsymbol{h}_{i}\right)\right)+(1+\epsilon)

  2. 源领域训练:

    主要考虑同一个 batch 下所有有效的 Token 嵌入之间的 KL 散度。例如给定令牌 q 和 p,它们的嵌入N(μq,Σq)\mathcal{N}\left(\boldsymbol{\mu}_{q}, \boldsymbol{\Sigma}_{q}\right)N(μp,Σp)\mathcal{N}\left(\boldsymbol{\mu}_{p}, \boldsymbol{\Sigma}_{p}\right) 之间的 KL 散度公式如下:

    DKL[NqNp]=DKL[N(μq,Σq)N(μp,Σp)]=12(Tr(Σp1Σq)+(μpμq)TΣp1(μpμq)l+logΣpΣq)\begin{aligned} D_{\mathrm{KL}}\left[\mathcal{N}_{q} \| \mathcal{N}_{p}\right]=D_{\mathrm{KL}}\left[\mathcal{N}\left(\boldsymbol{\mu}_{q}, \boldsymbol{\Sigma}_{q}\right) \| \mathcal{N}\left(\boldsymbol{\mu}_{p}, \boldsymbol{\Sigma}_{p}\right)\right] \\ =\frac{1}{2}\left(\operatorname{Tr}\left(\boldsymbol{\Sigma}_{p}^{-1} \boldsymbol{\Sigma}_{q}\right)\right. \\ \quad+\left(\boldsymbol{\mu}_{p}-\boldsymbol{\mu}_{q}\right)^{T} \boldsymbol{\Sigma}_{p}^{-1}\left(\boldsymbol{\mu}_{p}-\boldsymbol{\mu}_{q}\right) \\ \left.\quad-l+\log \frac{\left|\boldsymbol{\Sigma}_{p}\right|}{\left|\boldsymbol{\Sigma}_{q}\right|}\right) \end{aligned}

    由于散度不是对称的,因此两个令牌的距离就是其之间的 KL 散度:

    d(p,q)=12(DKL[NqNp]+DKL[NpNq])d(p, q)=\frac{1}{2}\left(D_{\mathrm{KL}}\left[\mathcal{N}_{q} \| \mathcal{N}_{p}\right]+D_{\mathrm{KL}}\left[\mathcal{N}_{p} \| \mathcal{N}_{q}\right]\right)

    有了距离函数则下一步就是通过对比学习拉近同类型令牌的距离推远不同类型的令牌,论文中先定义了 Token 对的正样本对集合:

    Xp={(xq,yq)Xyp=yq,pq}\mathcal{X}_{p}=\left\{\left(x_{q}, y_{q}\right) \in \mathcal{X} \mid y_{p}=y_{q}, p \neq q\right\}

    Xp\mathcal{X}_{p} 即两两同类令牌的集合。则论文中对比学习的损失是:

    (p)=log(xq,yq)Xpexp(d(p,q))/Xp(xq,yq)X,pqexp(d(p,q))\ell(p)=-\log \frac{\sum_{\left(x_{q}, y_{q}\right) \in \mathcal{X}_{p}} \exp (-d(p, q)) /\left|\mathcal{X}_{p}\right|}{\sum_{\left(x_{q}, y_{q}\right) \in \mathcal{X}, p \neq q} \exp (-d(p, q))}

    不断优化会使得正样本对的 KL 散度越小,而负样本对的 KL 散度越大。以上公式并没有加入温度因子进行结果放缩,原论文说明加入温度因子在该实验中并没有对优化更有利。

  3. 目标域微调

    在目标领域中仅仅选择一小部分目标领域的样本作为支持集来进行微调。在这里,1-shot 和 5-shot 的还是不一样的,对于 1-shot 显然就没有正样本对可以拉近 KL 散度,因此 1-shot 采用了欧式距离作为距离公式,而 5-shot 则仍然使用 KL 散度作为距离度量函数。实验表明,在 1-shot 的时候采用欧式距离会带来更好的实验效果,而在 5-shot 时采用 KL 散度可以带来更好的实验效果。

  4. 推理过程

    在推理过程中,类似于 SimCLR,本文作者发现在映射前的嵌入会比映射后的嵌入包含更多的信息而拥有更好的实验效果,因此在推理阶段就没有用到 2 中两个高斯参数映射函数fμf_{\mu}fΣf_{\Sigma}。在此阶段,只要是通过从支持集中寻找最近邻来做类别推理。

    其公式化描述为对于支持集的各个 Token 的隐藏状态hsuph^{sup} 以及测试集中各个 Token 的隐藏状态htesth^{test},测试集中的xtestx^{test} 对应的标签就取

    yitest=(argminwhere(xksup,yksup)Xsupyksuphitesthksup22y_{i}^{\text {test }}=\underset{y_{k}^{\text {sup }}}{\underset{\text { where }}{(\arg \min }\left(x_{k}^{\text {sup }}, y_{k}^{\text {sup }}\right) \in \mathcal{X}_{\text {sup }}}\left\|\boldsymbol{h}_{i}^{\text {test }}-\boldsymbol{h}_{k}^{\text {sup }}\right\|_{2}^{2}

    除此之外本文还是用了维特比解码(其中转移矩阵仅分为 3 种标签 I、O、I-Other),而发射函数则是上面计算得出的。

    在某些领域差异不是很大的情况下,甚至不需要维特比解码,使用单独的最近邻搜索推理即可。

# 实验结果

  1. 数据集(多个领域):

    通用:Ontonotes

    医用:I2B2

    新闻:Conll2003

    社交:WNUT17

    体育:GUM

    大规模数据集:Few-NERD

  2. 基准值:

    • Prototypical Network based ProtoBERT
    • NNShot(KNN based)
    • Structshot(Viterbi)
  3. 实验设置

    • 基线实验

      在 Ontonotes 已有 18 类标签分为 A、B、C 三组(每组 6 类)。每次抽一组作为测试组,其他两组作为训练组。在测试的时候仅有少量的实体标注。训练的时候则是所有测试实体都被用 O 替代。这个实验存在一个问题就是,训练和测试都是在相同领域中进行,因此在训练阶段会间接地传递一些关于未见目标实体的信息。

      image-20230909174107947

      从上表可以看到比基线模型效果更佳

    • 迁移训练实验

      使用 Ontonotes 作为源领域,其他 I2B2、CoNLL、WNUT、GUM 作为评估数据集:

      image-20230909175431486

      迁移学习上性能最佳或者接近最佳。

    • 小样本设置

      其中 People、Art、Product、MISC 细粒度实体作为训练集,Event、Building 作为验证集、ORG、LOC 作为测试集。三者无交集。

      image-20230909175726981

# 实验分析

  1. 由于之前的基线模型的性能都比较差,所以该模型的提升非常明显。同时 Table2 和 Table4 这类训练集和测试集不相交的领域可以看到相似的性能。同样在 GUM 这个测试集的结果也可以看到本文模型的性能更佳。

  2. 模型在 5-shot 使用 KL 散度进行推理时比其他的模型效果提升更大。

  3. 距离函数

    • 余弦相似度(点嵌入)

    • 欧式距离(点嵌入)

    • KL 散度(高斯嵌入)

      本文附录 8 对比了这三种的区别,并验证了使用 KL 散度性能更佳。

  4. 模型的微调:

    image-20230909181041280

    从 Ontonotes 中构造了 6 个类,验证了没有支持集作微调其性能会下降。

  5. 维特比解码的作用。从 Table3 可以看到维特比解码的提升很明显,但是 table 2 和 table4、5 中的维特比解码却几乎没有作用。对比起来得出维特比解码在领域差异大的情况下提升比较大,而例如 Few-NERD 这样有包含的情况下没有作用。

# 总结

  1. 提出了基于高斯嵌入和对比学习的模型;
  2. 避免了之前模型遇到的一些领域迁移性能不佳的情况;
  3. 该模型达到了当时的 SOTA。
更新于 阅读次数