【论文精读】GPT-NER: Named Entity Recognition via Large Language Models
一篇2023年4月26日才挂上arxiv的文章,是我看到的第一篇用LLM解决NER任务的文章,在我看来,LLM才是NER问题的最优解,尤其是小样本场景,具有丰富先验知识的LLM,其涌现能力总能让我叹为观止。LLM在NER上的表现低于基线,这是因为二者任务不同,前者是文本生成任务,后者是序列标记任务。GPT-NER通过将序列标记任务转换为LLM的生成任务来弥补二者的差距。例如输入是Columbus
GPT-NER: Named Entity Recognition via Large Language Models
前言
一篇2023年4月26日才挂上arxiv的文章,是我看到的第一篇用LLM解决NER任务的文章,在我看来,LLM才是NER问题的最优解,尤其是小样本场景,具有丰富先验知识的LLM,其涌现能力总能让我叹为观止。
Abstract
LLM在NER上的表现低于基线,这是因为二者任务不同,前者是文本生成任务,后者是序列标记任务。GPT-NER通过将序列标记任务转换为LLM的生成任务来弥补二者的差距。例如输入是Columbus is a city,输出@@Columbus## is a city,@@##是需要提取的实体的标记。为了解决LLM的幻觉问题,即LLM倾向自信地将NULL输出当做实体,本文为还提出一种自我验证策略,提示LLM询问自己提取的实体是否属于标记的实体标签。在五个广泛使用的数据集上GPT-NER都实现了与完全监督基线相当的性能,并且在小样本场景GPT-NER表现优于监督模型。
1. Introduction
LLM只需要简单的示例,就可以为新的测试输入生成结果。在情境学习的框架下,LLM已经在各种NLP任务如翻译、问答、关系抽取取得了可喜的成果。但是由于LLM和NER任务不同,LLM在NER上表现远远低于baseline。GPT-NER可以将NER任务转换为文本生成任务,这种策略可以显著降低生成编码输入序列的标签信息文本的难度,实验表明该策略显著提升了性能。
为了缓解LLM倾向自信地将NULL输出当做实体的问题,提出一种自我验证策略,放置在实体提取阶段之后,提示LLM询问自己提取到的实体是否属于标记的实体标签。这种方式可以有效解决幻觉问题,从而显著提高性能。
实验部分达到了与完全监督相等的性能,此外由于token长度限制(4096)性能无法稳定,如果使用超过20K长度token的GPT-4,肯定还能有所提升。
GPT-NER在低资源、小样本NER表现优于监督模型。
2. Related Work
2.1 Named Entity Recognition
命名实体识别 (NER) 是一项识别文本中的关键信息并将其分类到一组预定义类别中的任务。
2.2 Large Language Models and In-context Learning
将LLMs用于下游任务的策略可以分为两类,微调和情境学习。前者需要在下游的监督数据上继续训练更新参数,后者提示LLM在小样本演示下生成文本,更好的prompts和演示可以提升情境学习的性能。
3. Background
3.1 NER as Sequence Labeling
解决NER常见的方法是将其作为序列标注任务,可以分为两个步骤:表示提取和分类。
表示提取: 旨在获得输入序列token的高维表示,将输入句子送入编码器模型如BERT,然后将最后一层embedding作为token的高维表示
h
i
∈
R
m
×
1
h_i\in \mathbb{R}^{m \times 1}
hi∈Rm×1。
分类: 每个嵌入的高维向量被送到MLP,使用softmax生成分布。
4. GPT-NER
GPT-NER使用LLM解决NER任务,它遵循情境学习的一般范式,可以分解为三步骤:
- 构建Prompt,对每个输入句子都构建一个prompt;
- 将构建的prompt喂入LLM中得到生成的文本序列;
- 将文本序列转换为实体标签。
下面介绍如何让LLM适应NER任务的策略。
4.1 Prompt Construction
上图是GPT-NER的示例,由三部分组成。
4.1.1 Task Description
任务描述可以进一步分解为三部分:
- 第一句话是任务的描述,告诉LLM使用语言知识产生输出;
- 表示要提取实体的类别,对于每个输入的句子,构建N次提示,每一次对应一个实体类型,可以理解为N个二分类任务,这是受到token长度的限制;
- 描述小样本演示的位置。
4.1.2 Few-shot Demonstration
每个标记句子的格式需要满足:
- 包含每个单词标签的信息,可以很容易转换为实体类型序列;
- 可以由LLM顺利生成。
比如句子"Columbus is a city",生成"LOC O O O",条件1很容易满足,但是对于生成序列,LLM需要学会文本对齐,这增加了生成任务的难度,此外作者发现GPT-3很难生成和输入等长的句子。为了解决这个问题,作者设计了特殊符号包围实体,如下所示:
这种方式显著降低了文本生成的难度。
4.1.3 Input Sentence
这部分将当前输入语句输入到LLM中,并期望LLM根据4.1.2节中定义的格式生成输出序列。
4.2 Few-shot Demonstrations Retrieval
4.2.1 Random Retrieval
最直接的策略是从训练集中随机选取K个样本,但是这样无法保证检索到的示例在语义上接近输入。
4.2.2 kNN-based Retrieval
为解决随机检索相关性问题,可以从训练集中检索输入序列的K近邻,首先计算所有训练样本的表示,在此基础上获得输入序列的k个最近邻居。
**基于句子级表示的kNN:**使用文本相似度模型,获得训练示例和输入序列的句子级表示计算余弦相似度找到kNN。这样的缺点是显而易见的,NER是token级任务,更关注局部,可能找到的示例不包含NER。
实体级嵌入:首先使用微调的NER标记模型提取所有token的实体级表示,对于长度为 N 的给定输入序列,我们首先遍历序列中的所有token以找到每个token的 kNN,获得 K × N 检索到的标记。接下来,我们从 K×N 检索到的token中选择前 k 个token,并使用它们的关联句子作为演示。
4.3 Self-verification
LLM存在幻觉或者过度预测问题,如下所示:
其中Hendrix被识别为位置信息显然错误,为此作者提出了自我验证策略。给定 LLM 提取的实体,我们要求 LLM 进一步验证提取的实体是否正确,回答是或否。
同样,这需要少量的演示来提高自我验证器的准确性,如上图黄色框所示。
示例选择:我们需要选择演示来进行小样本的自我验证。由于自验证的核心是询问提取的实体是否是特定实体类型,因此我们需要选择有提取实体的训练示例。
因此选择实体级嵌入进行kNN演示搜索,而不是句子级别表示:
- 首先通过微调的NER模型为所有训练token提取实体级表示;
- 使用相同的模型提取查询词的表示;
- 最后,我们使用查询词的表示从数据存储中选择 k 个示例作为小样本演示。
5. Experiments
使用GPT-3进行实验。
5.1 Results on the Full Training Set
5.1.1 Results on Flat NER
对于平面 NER,实体不能相互重叠。在CoNLL2003和OntoNotes5.0上进行实验。前者包含四种类型名命名实体:位置、组织、人员和其他。后者包含18种类型的命名实体,11种类型(人、组织)和7种值(数据、百分比)。
Main Results. 上表分别显示了flat NER的部分和完整测试集的结果,观察如下:
- kNN检索对NER任务至关重要;
- token级嵌入对性能有明显改进;
- 添加自我验证进一步提升性能;
- 基于LLM的系统达到了与基线相同的性能。
5.1.2 Results on Nested NER
嵌套 NER,每个句子中的实体可能相互重叠。作者在三个广泛使用的嵌套NER数据集ACE2004 & ACE2005和GENIA上进行实验。前者包含七种类型实体,采用8:1:1分为训练集、验证集和测试集,后者是分子生物学领域的嵌套NER数据集,包含五种实体类型。
Main Results. 结果如上表所示,观察到:
- kNN检索对NER任务至关重要;
- token级嵌入对性能有明显改进;
- 添加自我验证进一步提升性能.
和SOTA之间的差距大于flat NER,因为:
- 嵌套NER包含更多相似的实体;
- 三个嵌套 NER 数据集的注释指南更加复杂且不那么直接。
5.2 Results on Low-resource Scenario
低资源场景NER实验在CoNLL2003上进行。为了模仿低资源场景,随机挑选训练集子集,8个训练句子,100个训练句子,10K训练句子。8个训练句子的设置确保每个实体类型包含一个正例和一个负例。
5.2.1 Results
结果如上图所示,有如下观察:
- 当训练集规模很小时,监督模型的性能远远低于GPT-3;
- 随着训练数据的增加,kNN检索比随机检索性能提升要快;
- 当数据量达到10%,随着训练数据量增加,监督模型性能显著提升,而GPT-3结果边际提升。
6. Ablation Study
6.1 Varying the Format of LLM Output
将下面两种输出格式进行对比:
BMES: 直接输出每个标记的开头、中间、结果和O;
Entity+Position: 要求 LLM 输出句子中的实体及其位置。
为了进行同类比较,做和对三种输出格式使用相同的设置,并在 100 个样本的 CoNLL 2003 数据集上进行32个小样本的实验。结果分别为92.68(##@@策略),29.75,38.73。分析可能是BMES需要学习token和标签之间的对齐,并且很难输出和输入相同长度的字符串。对于实体+位置策略,LLM会混淆位置索引,导致实体位置不正确。
6.2 The Number of Few-shot Demonstrations
观察上图可以发现,随着k的增加,三个结果都不断升高,意味着如果允许更多的演示,性能仍会提高。
一个有趣的现象时当演示数量很少时,KNN策略不如随机检索策略,可能是因为KNN倾向选择与输入句子非常相似的演示,如果输入句子不包含任何实体,则检索到的演示大多不包含任何实体。如下所示:
7. Conclusion
本文提出GPT-NER以使LLM适应NER任务。作者设计一种prompt来提示LLM生成实体标记,此外在演示部分设计了KNN和token嵌入来帮助LLM更好生成输出,并且作者提出一种自我验证策略来缓解LLM的幻觉问题。最后模型性能和基线相当,并且在低资源场景有显著的优势。
阅读总结
一篇2023年4月26日才挂上arxiv的文章,是我看到的第一篇用LLM解决NER任务的文章,文中的方法很有创意,通过设计prompt激发大模型生成预期序列的能力着实让我感叹LLM的无限潜力,并且这只是在GPT-3就能达到baseline的效果,如果换成现在的GPT-4,那结果不敢想,在我看来,LLM才是NER任务的最优解,如此复杂的序列标注问题,果然还是需要魔法打败魔法,之前所看到的对比学习方法、元学习方法等,在LLM面前可能真的不堪一击,当然我还会继续调研的。
更多推荐
所有评论(0)