# PromptNER: Prompt Locating and Typing for Named Entity Recognition

# 前言

这是一篇发表于 Arxiv 2023 5 月 26 日的 ACL2023 的文章。其原文网址为:https://arxiv.org/abs/2305.17104。

# 日期

2023 年 5 月 26 日

# 作者

Yongliang Shen, Zeqi Tan, Shuhui Wu, Wenqi Zhang,Rongsheng Zhang, Yadong Xi, Weiming Lu†, Yueting Zhuang

浙江大学计算机与科学学院

伏羲研究所

网易

# 摘要

提示学习是一种利用预训练语言模型的新范式,并已经在许多任务中取得了巨大成功。为了在命名实体识别任务中采用提示学习,本文从对称的两种角度探讨了两种方法,一种是通过枚举跨度来预测它们的实体类型并填充模板,另一种是构建类型特定的提示来定位实体。然而,这些方法不仅需要高时间开销和计算成本的多轮提示方式,还需要精心设计的提示模板,难以在实际场景中应用。在本文中,其将实体定位和实体类型标注统一为提示学习,并设计了一个带有位置槽和类型槽的双槽多提示模板,用于分别实体定位和实体类型标注。模型可以同时接受多个提示,并通过对插槽进行并行预测来提取所有实体。为了在训练过程中为槽分配标签,本文利用提示和真实实体之间的扩展二分图匹配设计了一个动态模板填充机制。本文在各种设置下进行了实验,主要包括资源丰富的扁平和嵌套 NER 数据集以及资源有限的领域内和跨领域数据集。实验结果表明,所提出的模型取得了显著的性能提升,特别是在跨领域少样本情况下,模型的平均性能提高了 + 7.7%,优于现有模型。

# 方法

image-20230915211122316

本文的核心就是把 NER 任务转换为填空任务。给定一个长度为 N 的输入 X,使用固定数量的提示 M 和 X 到预定的提示模版,来构造提示输入T\mathcal{T},模型主要的任务就是填充所有提示中的位置插槽 [P] 和类型插槽 [T] 来提取出句子中包含的所有实体。

  • 提示的构造

    每个提示主要包含两个插槽 [P] 和 [T],其中 [P] 是位置插槽,而 [T] 是一个类型插槽。例如:

    输入:Jobs was born in San Francisc

    构造的提示为:\mathcal{T}=\begin{array}{c} \left\{\left[\mathrm{P}_{i}\right] \text { is a }\left[\mathrm{T}_{i}\right] \text { entity }\right\}_{i=1,2, \cdots, \mathcal{M}} \\ {[\mathrm{CLS}] \text { Jobs was born in San Francisco. }} \end

  • 提示定位和类型标注

    模型的任务就是解析出提示中的两种插槽。

    首先将构造的输入T\mathcal{T} 经过 BERT 进行编码:

    HT=BERT(T)H^{\mathcal{T}}=BERT(\mathcal{T})

    同时为了保持输入 X 的独立性,在 X 的注意力矩阵中使用 mask 机制屏蔽了左侧 prompt 的注意力(即注意力设置为 - inf)。

    经过上述的操作将会得到HXH^XHPH^PHTH^T 三个隐藏状态。

    为了强化不同的提示之间的交互,本文设计了额外的提示交互层:交互层包括一个自注意力(q,k,v 都由插槽自己产生)和一个交叉注意力(query 来自插槽而 key 和 value 来自 X 输入嵌入),同时在结合可学习的偏置项:

    H^δ=PromptInteraction(Hδ+Eid,HX)\hat{\mathbf{H}}^{\delta}=\text { PromptInteraction }\left(\mathbf{H}^{\delta}+\mathbf{E}_{i d}, \mathbf{H}^{X}\right)

    其中δ{T,P}\delta\in{\{T,P\}},而 E 就是可学习的偏置项;

  • 实体提取

    首先通过插槽 T 经过分类器来获取插槽 T 属于各个标签(不含边界)的概率:

    pit=Classifier(H^iT)\mathbf{p}_{i}^{t}=\text { Classifier }\left(\hat{\mathbf{H}}_{i}^{T}\right)

    分类器为一个线性层 + softmax;

    其次是利用插槽 P 来判断实体的开始和结尾,主要是通过第 i 个 P 插槽的隐藏状态和第 j 个 X 的 Token 隐藏状态计算,其公式如下:

    HF=W1H^iP+W2HXpijl=Sigmoid(W3HijF)\begin{aligned} \mathbf{H}^{F} & =\mathbf{W}_{1} \hat{\mathbf{H}}_{i}^{P}+\mathbf{W}_{2} \mathbf{H}^{X} \\ \mathbf{p}_{i j}^{l} & =\operatorname{Sigmoid}\left(\mathbf{W}_{3} \mathbf{H}_{i j}^{F}\right) \end{aligned}

    (Sigmoid 的值域是 [0,1])

    上述是左边界的判断公式,对于右边界同理。

    因此得到预测结果可以表示为:

    Y^={Y^i}i=1M\hat{\mathbf{Y}}=\left\{\hat{\mathbf{Y}}_{i}\right\}_{i=1}^{\mathcal{M}},其中Y^i=(pil,pir,pit)\hat{\mathbf{Y}}_{i}=\left(\mathbf{p}_{i}^{l}, \mathbf{p}_{i}^{r}, \mathbf{p}_{i}^{t}\right)

  • 推理阶段

    对于每个 prompt 的三元组,都是选择 argmax(即概率最大的那个的下标作为最终的结果)。对于相同位置实体类型位置冲突的 prompt 也是选择概率最大的作为最终的候选实体。

  • (训练的时候)动态模版填充

    由于每个 prompt 和真实实体的对应关系是未知的 —— 真实实体数量未知,且第几个 prompt 对应第几个实体也是未知的。

    本文提出了基于二分图匹配来匹配 prompt 和实体。

    令真实实体为Y={(li,ri,ti)}i=1K\mathbf{Y}=\left\{\left(l_{i}, r_{i}, t_{i}\right)\right\}_{i=1}^{K}(这里应该是假设了 Y 的数量小于 prompt 的数量即K<=MK<=\mathcal{M},因此使用∅来填充数量使得其和 prompt 的数量相等)

    可以得到最佳的匹配就为

    σ=argminσS(M)i=1MCostmatch(Yi,Y^σ(i))\sigma^{\star}=\underset{\sigma \in \mathfrak{S}(\mathcal{M})}{\arg \min } \sum_{i=1}^{\mathcal{M}} \mathcal{C o s t}_{\text {match }}\left(\mathbf{Y}_{i}, \hat{\mathbf{Y}}_{\sigma(i)}\right)

    损失函数 Cost 的定义为

    1{ti}[pσ(i)t(ti)+pσ(i)l(li)+pσ(i)r(ri)]-\mathbb{1}_{\left\{t_{i} \neq \varnothing\right\}}\left[\mathbf{p}_{\sigma(i)}^{t}\left(t_{i}\right)+\mathbf{p}_{\sigma(i)}^{l}\left(l_{i}\right)+\mathbf{p}_{\sigma(i)}^{r}\left(r_{i}\right)\right]

    (上述公式的意思就是如果第 i 个实体匹配第σ(i)\sigma(i) 提示的概率最大,1\mathbb{1} 是指示函数 —— 实体的标签为空集的时候为 0,否则为 1)

    传统的二分图匹配是一对一的,本文的二分图是一对多的(为了防止提示全部匹配到空集上)—— 一个实体可以对应多个提示。

    本文使用的是匈牙利算法(为了实现上述一对多操作,本文是直接重复多个真实实体,这样就把一对一转换一对多,重复的上限设置为0.9M0.9\mathcal{M}

    最终训练的损失就为两个部分相加:

    L1=i=1Mlogpσ(i)t(ti)L2=i=1M1ti[logpσ(i)l(li)+logpσ(i)r(ri)]\begin{array}{c} \mathcal{L}_{1}=-\sum_{i=1}^{\mathcal{M}} \log \mathbf{p}_{\sigma^{\star}(i)}^{t}\left(t_{i}\right) \\ \mathcal{L}_{2}=-\sum_{i=1}^{\mathcal{M}} \underset{t_{i} \neq \varnothing}{\mathbb{1}}\left[\log \mathbf{p}_{\sigma^{\star}(i)}^{l}\left(l_{i}\right)+\log \mathbf{p}_{\sigma^{\star}(i)}^{r}\left(r_{i}\right)\right] \end{array}

    其中损失 1 的权重为 1,损失 2 的权重为 2,两个加权和就为最终的损失。(σ\sigma^\star (i) 表示最佳的匹配)

# 实验设置

本文主要在扁平、嵌套 NER 以及低资源小样本做实验验证。实验骨架的 BERT 采用 bert-large(24 层,h 为 1024)以及 3 层的交叉提示层。由于实验中每个句子最大的实体数量不会超过 50,因此M\mathcal{M} 设置为 50。每个模型训练 50-100 轮。

# 数据集

  1. 扁平化的数据集

    • CONLL2003
  2. 嵌套的数据集

    • ACE04
    • ACE05
  3. 低资源数据集(领域内)

    • CONLL2003 中的 LOC 和 MISC 作为低资源,而 PER 和 ORG 作为富资源类型。通过下采样获得 100 个 LOC 和 100 个 MISC 以及 2496PER 和 3763ORG 实体作为训练数据集。
  4. 低资源数据集(跨领域)

    • 源领域为 CONLL2003
    • 目标领域选取为 MIT movie、MIT restaurant、ATIS 数据集(按照每类实体 10、20、50、100、200、500 抽取)作为目标领域的训练数据集

实验结果:

扁平化和嵌套实体:

image-20230916182848438

领域内:

image-20230916182915860

跨领域:

image-20230916182929845

这里模型 BERTTagger 就是原生 BERT(本文论文指向 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding);

TemplateNER 是浙江大学 2021 年的论文 Template-Based Named Entity Recognition Using BART;

# 消融实验

  1. 组件的消融(数据集 ACE04):

    image-20230916183711154

  2. M\mathcal{M} 和交互层层数I\mathcal{I} 的影响:

    image-20230916183234364

    最优的选择M\mathcal{M} 选择 50,I\mathcal{I} 选择 3(高于 3 效率低但是提升不是很大)

  3. 提示模版分析

    image-20230916183351136

    直接拼接(default)最佳,使用 hard 最差(论文是选择 soft,仅对比 hard 和 soft,没有说明为什么不选 default)

  4. 推理时间效率分析

    image-20230916191036677

    在时间是比普通基于跨度以及 MRC 以及生成式的来得快,大概是 TempNER 的 48 倍,是生成式的两倍快。

# 总结

  1. 一种新颖的基于提示的 Span 型模型;
  2. 在各种数据集上都取得不错的实验效果。
更新于 阅读次数