Few-shot Named Entity Recognition with Self-describing Networks
前言
一篇关于生成模型在小样本NER中的应用,来自ACL2022,这种采用生成模型解决序列标注问题的方法很新颖,也很实用,只是需要在大规模语料库上进行预训练,还需要收集大量数据自己构建训练数据,相比之下,可能现在的大模型在小样本NER场景下更具有优势。
Abstract
小样本NER需要从有限的实例中有效地捕获信息,并从外部资源中转移有用的知识。本文提出一个小样本NER的自描述机制,它可以有效地利用说明性实例并准确地从外部资源中转移知识。SDNet,一个Seq2Seq的生成模型,可以使用概念普遍描述提及,自动将新的实体类型映射到概念,并自适应按序识别实体。作者使用大规模语料库对SDNet进行预训练,并对来自不同领域的 8 个基准进行实验,其中6个基准测试达到了新的SOTA,证明有效性和鲁棒性。
1. Introduction
小样本NER包含各种不可见类型和有限的样本,因此近年来受到极大关注。它的主要挑战是如何仅用几个说明性示例准确对不可见实体类型的语义进行建模。具体来说:
- 信息限制挑战,小样本中带来的信息有限;
- 知识不匹配挑战,外部知识和新任务不匹配(上图)。
如何充分利用有限的样本并准确迁移外部知识是小样本NER面临的关键挑战。
自描述机制背后的主要思想是所有实体类型都可以使用同一组概念来描述,并且类型和概念之间的映射可以被普遍建模和学习。这样知识不匹配的挑战可以通过统一的实体描述来解决,此外由于概念映射的普适性,少数例子仅用于构建新颖类型和概念之间的映射,可以有效解决有限信息问题。
SDNet是一种Seq2Seq生成网络,可以使用概念描述提及,自动将实体类型映射到概念,并按需自适应识别实体。为了识别实体,SDNet通过概念丰富的前缀prompt直接生成句子中的所有实体,其中包含目标实体类型和描述。SDNet在大规模语料上预训练,作者从维基百科收集了包含5600万个句子和超过31000个概念的预训练数据集。
总的来说,本文贡献如下:
- 为小样本NER提出了一个自描述机制,通过使用通用概念集描述实体类型和提及,可以有效解决有限信息挑战和知识不匹配挑战;
- SDNet可以自动将新的实体类型映射到概念,并自适应按需识别实体;
- 在大规模数据集上预训练,为小样本NER提供通用知识。
2. Related Work
为了 应对有限信息挑战,目前的小样本NER主要集中在利用外部知识。
- 预训练模型,并提出基于prompt的NER可以更好利用PLM;
- 现有注释数据集,用于预训练NER模型;
- 远程监督注释数据集,但会受到噪声、标记问题的影响。
为了应对知识不匹配问题,采用标签项目方法,在不同的模式中投射标签,或者人工标注标签描述丰富标签的语义。与这些方法相比,我们通过将所有实体类型映射到通用概念集来解决知识不匹配问题,并且使用自描述网络自动生成概念映射和目标实体。
3. Self-describing Networks for FS-NER
SDNet依次执行两个任务:
- mention描述,生成mention的概念描述;
- 实体生成,自适应生成新类型的实体提及。
NER可以通过实体生成过程直接执行,方法是将类型描述放入prompt中。
3.1 Self-describing Networks
SDNet是一个Seq2Seq网络,可以执行两个生成任务,提及描述和实体生成。提及描述是生成提及的概念描述,实体生成是自适应生成实体mention。
SDNet使用不同的prompt生成不同的输出,如上图所示。对于提及描述,prompt包含一个任务描述符[MD]和目标实体mention。对于实体识别,prompt包含任务描述符[EG],以及目标新类型的列表及对应的描述。上述过程可以看做对称的过程:一个是为了捕获给定实体的概念语义,另一个是识别包含特定概念的实体。
具体来说,SDNet将P和X连接成序列 I I I,然后将 I I I喂入编码器获得隐状态:
H = E n c o d e r ( I ) \mathcal{H}={\rm Encoder}(\mathcal{I}) H=Encoder(I)
接着将隐向量输入解码器生成序列,在时间步t,词汇表生成token的概率如下:
p t = Decoder ( H , Y < t ) \mathbf{p}_{t}=\operatorname{Decoder}\left(\mathcal{H}, \mathcal{Y}_{<t}\right) pt=Decoder(H,Y<t)
使用贪心解码策略。通过在单个模型中对不同的任务进行建模,生成可控,学习统一,模型可以持续训练。
对于实体识别,我们可以将目标实体类型描述放在prompt中,然后实体通过实体生成过程自适应生成。要识别一个新的实体,只需要给定它的实体类型描述。
3.2 Entity Recognition via Entity Generation
在SDNet中,实体识别通过给定的prompt和输入生成。具体来说,prompt以任务描述符开始,后面跟着目标类型列表和对应的描述。 P E G = { [ E G ] t 1 : { l 1 1 , . . . , l 1 m 1 } ; t 2 : { l 2 1 , . . . , l 2 m 2 } } {\rm P_{EG}}=\{ \left [ {\rm EG} \right ] t_1: \left \{ l^1_1,...,l^{m_1}_1 \right \}; t_2: \left \{ l^1_2,...,l^{m_2}_2 \right \} \} PEG={ [EG]t1:{ l11,...,l1m1};t2:{ l21,...,l2m2}},其中 l i j l_i^j lij是第i种类型的第j个概念。prompt和句子输入到SDNet中后,SDNet会生成格式为 " e 1 is t y 1 ; … ; e n is t y n . " " e_{1} \text { is } t_{y_{1}} ; \ldots ; e_{n} \text { is } t_{y_{n}} . " "e1 is ty1;…;en is tyn."的文本。实体的生成可以通过不同的prompt进行控制。
3.3 Type Description Construction via Mention Describing
通过引入不同的描述,SDNet被控制生成不同类型的实体。为了用几个说明性的例子建立新类型的概念描述,SDNet首先通过样例的mention描述获得每个mention的描述概念,然后通过汇总所有概念的描述,构建每种类别的类型描述。
mention描述: 提及描述是一个生成过程,输入是prompt和实例,输出是实体mention在当前语境下的映射的语义概念。
类型说明构造: SDNet接着总结生成的概念来描述新类型的精确语义。所有相同类型mention的概念都会融入到概念C中作为类型t的描述。
过滤策略: 由于下游新类别的多样性,SDNet可能没有充足的知识去描述这些的类别,强制描述可能会导致描述不正确。因此提出过滤策略让SDNet拒绝生成不可靠的描述,即将不确定的实例生成为other,如果other大于50%,则当前的类型不使用描述。
4. Learning
4.1 SDNet Pre-training
预训练阶段,需要去收集 < e , T , X > <e,T,X> <e,T,X>三元组,分别是实体mention,实体类型和句子。比如<J.K. Rowing; person, writer, …; J.K. Rowling writes …>。作者通过对齐维基百科中的事实和文档来收集三元组,并进行如下处理:
- 从维基数据中构建一个实体类型字典;
- 获取实体的mention,使用其条目页面中出现次数最多的前三名词短语。
类型描述构建: 为了预训练SDNet,需要概念描述 M P = { ( t i , C i ) } \mathcal{M}^P=\{ (t_i, C_i)\} MP={(ti,Ci)},作者给定实体的类型,收集和它同时出现的实体类型作为它的描述概念。比如Person可以描述为 { b u s i n e s s m a n , C E O , m u s i c i a n } \{ businessman, CEO , musician \} {
businessman,CEO,musician}。
预训练:给定一个句子和句子中mention的类型元组,然后构建类型描述,并将这些三元组转换为预训练的实例。特别地,对于mention描述,一些目标实体mention从实体集中采样放入Prompt中,接着prompt和句子输入到SDNet中生成对应的采样实体的类型。实体生成阶段,采样正例和负例构建目标类型,接着实体类型集和它们的采样概念描述会输入到prompt中,SDNet采用prompt和句子生成描述的序列。
对于每个实例,SDNet会生成两个句子,mention描述生成的 Y m p ~ \widetilde{\mathcal{Y}_{m}^{p}} Ymp
和实体生成得到的 Y e p ~ \widetilde{\mathcal{Y}_{e}^{p}} Yep
,作者采用交叉熵损失函数训练SDNet:
L p = C E ( Y m p ~ , Y m p ) + C E ( Y e p ~ , Y e p ) \mathcal{L}_{p}=\mathrm{CE}\left(\widetilde{\mathcal{Y}_{m}^{p}}, \mathcal{Y}_{m}^{p}\right)+\mathrm{CE}\left(\widetilde{\mathcal{Y}_{e}^{p}}, \mathcal{Y}_{e}^{p}\right) Lp=CE(Ymp
,Ymp)+CE(Yep
,Yep)
注意,实体生成结果的顺序取决于在文中出现的顺序。
4.2 Entity Recognition Fine-tuning
SDNet可以自动通过说明性实例构建类型描述,并通过微调进一步改进。具体来说,给定标注实体构建不同类型的描述,接着构建实体生成的prompt,最后得到生成的句子 Y n p ~ \widetilde{\mathcal{Y}_{n}^{p}} Ynp
,微调SDNet通过优化:
L f = C E ( Y n p ~ , Y n p ) \mathcal{L}_{f}=\mathrm{CE}\left(\widetilde{\mathcal{Y}_{n}^{p}}, \mathcal{Y}_{n}^{p}\right) Lf=CE(Ynp
,Ynp)
可以看到通过微调,实体生成过程可以更好地捕获mention和实体类型之间的关联。
5. Experiment
5.1 Settings
采用来自不同领域的八个基准数据集,详细见原文。
评估: 主要的实验设置在5-shot条件下进行,所有预训练模型训练300k步,超参数见附录,性能通过micro-F1评估。
Baselines: 和没有经过NER特定预训练的基线进行比较。这些方法大多数只关注特定于任务的实体类型,而本文的工作侧用于构建通用的小样本实体识别模型。
5.2 Main Results
上表是实验结果,可以看到:
- 通过在生成架构上对NER知识进行通用建模和预训练,自描述网络可以有效地处理小样本NER;
- 将外部知识引入到小样本NER可以有效缓解信息有限问题;
- 由于知识不匹配,将外部知识转移到下游任务有挑战性,比如T-5-DS提升不够,但SDNet可以有效解决。
上图展示了在不同shot设置下,各个模型的性能表现,可以看出:
- SDNet在所有shot设置下性能都是最好,特别是小样本场景;
- 基于生成的模型通常比基于分类的模型具有更好的性能,可能生成模型可以更好捕获语义信息;
- 自描述机制可靠,SDNet几乎在所有数据上表现比T5好。
此外,域迁移过大会导致模型性能下降,但是性能仍然最优,说明所提出的类型描述和过滤策略具有鲁棒性。
5.4 Ablation Study
为了分析类型描述、多任务建模和类型描述过滤的有效性,进行了以下消融实验:
- 直接使用实体类型作为prompt,不使用通用的概念描述;
- 将SDNet拆分成两个单独的生成网络,一个用于mention描述,一个用于实体生成;
- 使用没有过滤策略的概念描述。
实验结果如上所示,可以看出:
- 类型描述对于SDNet传输知识和捕获类型语义至关重要;
- 统一生成网络中的mention描述和实体生成过程可以有效捕获类型语义;
- 过滤策略可以有效缓解不匹配的知识迁移。
5.5 Zero-shot NER with Manual Description
本节测试SDNet在没有任何说明性示例的情况下保证零样本性能。为此,作者通过引入手动创建的概念作为基于注释指南的类型描述,在WNUT上进行实验。
从上表可以看出SDNet可以显著受益于手动描述,可以提高大多数类型零样本的性能。这表明类型描述是模型捕获新类型语义的有效方式。
5.6 Effect of Entity Generation Prompt
上表表明输入提示不同,生成类型不同,验证SDNet可以被控制生成不同类型的实体。
6. Conclusions
本文提出基于Seq2Seq架构的自描述网络,可以使用概念描述mention,自动将新实体类型映射到概念,并按需自适应识别实体。大型SDNet模型经过预训练可以为下游NER任务提供通用知识,在8个数据集上表明模型有效且稳健。
阅读总结
一篇基于生成模型的工作,本质上是通过大规模数据的预训练,利用了生成模型的一些特性,达到实体、mention和通用概念描述之间的映射,从而有效缓解知识对齐、信息限制等挑战,预训练的两个任务:实体生成和mention描述,创新性的将通用概念和特定语义信息融合在一起,再加上Prompt的加入,让生成任务更有指向性。这样的工作成本会比基于元学习的方法更高,但是效果我认为是更好的,当然如果能够基于更大的模型如ChatGPT,使用类似的prompt方法,效果肯定会更好,因为大模型的涌现、知识对齐能力是不容小觑的,比这种小规模的生成模型只会更好,并且不需要预训练和微调。