EMNLP 2023 | 预训练模型的知识反刍

2023-12-08 16:31 445 阅读 ID:1688
将门
将门

今天介绍我们在大模型时代以前的一篇名为“知识反刍”的工作。反刍是指某些动物为了更好地消化食物,在进食以后将半消化的食物从胃里返回嘴里再次咀嚼。知识反刍则是模仿这个过程,让预训练语言模型再次“咀嚼”他们已有的知识,从而更好地完成相应任务。我们通过简单地添加一个“As far as I know,”的prompt的方式,让预训练模型回忆并“咀嚼”他们已习得的知识,在多个NLP的任务上都达到了更好的效果。

论文题目:

Knowledge Rumination for Pre-trained Language Models

论文链接:

https://arxiv.org/pdf/2305.08732.pdf

代码链接:

https://github.com/zjunlp/knowledge-rumination

一、动机

在NLP任务中通过向语言模型中注入外部知识已经是被证明是一种很有效的提升效果的方式,而另外也有研究表明经过预训练的语言模型可以被看作是一个知识库。于是,例如Rainier[1], GKP[2]等工作将大语言模型(例如GPT-3)作为一种外部知识库进行知识的生成。GenRead[3]和RECITE[4]则是利用模型生成的知识来代替检索外部知识库得到的知识,在相关任务上取得了更好的效果。这些工作更多的都是将大模型当作一种能够提供显式知识的知识库,而实际上较小的预训练语言模型的内部也存在着没有充分利用的知识,而我们的工作是尝试去探索一种更加通用的利用模型内部隐性知识的方式。先前的一些研究表明模型在完成一些知识密集性的任务时其实通常都不能很好的利用模型内部的知识。例如在Figure1中,我们用了一个探针任务向预训练语言模型提问“当一只鸟儿是食肉动物的时候,它一般会是什么?”时,模型一开始的回答是错误的。这与认知反映测试(cognitive reflection test)的结论类似:在CRT测试中,参与测试人员通常会做出一些错误的“直觉性”回答,但是当被测试人员重新思考过后,就会回答出正确答案。

为了让模型更好的利用他们参数中存储过的知识,我们模仿这个过程,提出了一种名为知识反刍(Knowledge Rumination)的方法。知识反刍通过简单地添加一个“as far as i know“的prompt的方式,让模型反刍一下参数内的相关知识,从而充分地利用模型潜在的能力。例如图中的例子,模型重新思考了一下关于食肉动物相关的知识,发现食肉动物大多数时候是个捕食者,最后正确地做出了回答。这种简单的思路也能够扩展到很多的NLP任务上。

二、方法介绍

本章节详细地介绍如何在预训练语言模型中应用知识反刍的方法。在整个知识反刍的过程中,我们两次的用到PLM,一次是反刍知识,一次是融合应用知识。

  • Background Prompt: 引导模型反思一些与问题相关的背景知识。
  • Mention Prompt: 引导模型反思一些实体相关的知识,例如在图2中的例子中,我们让模型对于实体fox回忆相关知识。
  • Task Prompt: 引导模型对回忆一些当前任务相关的知识。

并最终得到常识推理任务的结果:

三、实验

3.1 数据集

我们在两类benchmark上进行了实验:

  • Reasoning benchmark: 包括了 commonsenseQA, PIQA等数据集
  • GLUE benchmark

3.2 基线方法

常识推理任务

我们将roberta-large和deberta-large作为我们的底座模型进行了实验同时作为基线进行对比,并且选择了几个知识增强方法作为基线:QA-GNN, GreaseLM, Dragon

GLUE benchmark

在GLUE benchmark上我们将LM-BFF作为我们的实验对比方法。

3.3 常识推理结果

对于常识推理任务,可以看到,我们的RumiRoBERTa和RumiDeBERTa相较于底座模型Roberta和Deberta在几个任务上都有明显的效果提升,并且相较于几个知识增强的基线,知识反刍后的模型几乎都能取得最佳的效果。

在GLUEbenchmark上同样的我们也可看到rumi后的方法相较于rumi前的方法都能有非常明显的提升。

3.4 OOD实验

对于不同的数据集我们在训练完rumination模型之后,在out-of-distribution的数据集上进行了实验验证,可以看到大多数情况下反刍模型带来的out-of-distribution能力要比微调要好。

四、分析

4.1 不同的知识融合方式

除了在FFN层中融入知识之外,我们还尝试了Concatenation的方式,将反刍的知识向量拼接到知识融合模型的输入后面,可以看到两种方式都能够得到更好的实验结果,不过相对来说在FFN中注入回忆的知识能够得到更好的效果。

4.2 模型究竟反刍了些什么?

在知识反刍得到了比较好的实验结果之后,我们也探究了模型究竟反刍了些什么的这个问题。我们从实验中挑选了模型原来回答错误,但在反刍之后回答正确的case进行了详细的分析。


我们将这个case中生成的反刍向量过了一层MLM head,得到了这些token映射的词,并且我们还将用这些向量与wikipidea以及conceptNet中的语料进行相似度计算。可以看到在这个例子中,预训练语言模型能够回忆起一些与答案相近的知识,例如people,good person等。

4.3 大模型知识反刍

现在人们更多地会应用黑盒的大语言模型,因此我们也将知识反刍的思路在大模型上(GPT-3)进行了实验。在先前的一些工作中(GKP)其实也已经有了类似的思路,通过prompt的方式让大模型返回一些相关的知识。这里我们在之前工作的基础上,通过添加一个According to the [Knowledge], the answer is 的prompt的方式,让模型融合之前他们反刍出来的知识。而CoT这种生成推理路径的方法实际上也是一种充分利用模型本身的知识的方法,因此我们也将其作为实验对比。

可以看到大模型在反刍相关知识后还是能够得到较好的效果的。而在模型推理的过程中如何更好地利用他们内部的知识也是一个未来可探索的方向。

4.4 错误分析

我们在大模型中进行反刍的时候,对反刍的实验进行了定量的错误分析。我们将错误定义为四种不同的类型。

  • Failure to Utilize:模型反刍出了有用的知识,但是在后续并没有完成正确的回答
  • Ineffective Rumination:在反刍的知识中,排序最靠前的知识与完成对应任务并不相关,但是在剩余的知识中有相关的知识。
  • Incorrect Memory:模型反刍出来的知识是错误的
  • Missing Information:模型并没有完成任务相关的知识

我们人工的对100个bad case进行了分析,可以看到大部分情况下错误的出现还是由于模型中并没有对应的知识。

五、总结

在这篇工作中我们模仿人类反思知识的模式,提出了知识反刍的方法,可以作为一种比较通用的利用模型内部知识的方式。同时我们进行了详细的实验分析了在反刍过程中模型实际上想起了一些什么知识。在未来,我们计划将知识反刍应用到更多的自然语言处理任务和更多类型的模型中。如果对文章中方法以及实验的细节感兴趣,欢迎大家阅读原文或在github上提出issue。

参考文献

[1] RAINIER: Reinforced Knowledge Introspector for Commonsense question Answering.

[2] Generated Knowledge Prompting for Commonsense Reasoning.

[3] Generate Rather Than Retrieve: Large Language Models are Strong Context Generators.

[4] Recitation-Augmented Language Models.

Illustration From IconScout By Pablo Stanley

免责声明:作者保留权利,不代表本站立场。如想了解更多和作者有关的信息可以查看页面右侧作者信息卡片。
反馈
to-top--btn