Active RAG_DoLa
Active Retrieval Augmented Generation
背景
大语言模型能力很不错,但是仍旧存在生成幻觉,输出错误信息的现象,通过在外部知识源中检索到的合适信息来增强语言模型是一个潜在的方案。
现有方法的缺陷
大多采用的是检索-生成的方式,仅仅只基于输入检索一次外部信息,对于长文本生成的应用场景,这是不够的,在这样的场景下,于生成过程中不断注入新的相关信息很有必要。仅有的一些多次查询的工作也是使用以前的全部上下文并以固定的间隔检索文档。
本工作提出的方法
提出了 Forward-Looking Active REtrieval augmented generation (FLARE) 方法,使得模型可以灵活的决定什么时间,使用哪些内容进行检索。具体来说,该方法迭代地使用对下一个句子的预测来预估未来的内容,然后在预估内容中包含低置信度 token 时将其用作查询来检索相关文档以重新生成句子。
作者一共设计了两种FLARE方案,下面分别进行介绍:
FLARE with Retrieval Instruction
作者设计了一个 retrieval instruction 模板,这个模板如下图所示:
Skill 1 中定义了一个指导模型生成搜索查询的指令,然后使用 few-shot 方法给出了几个例子,Skill 2 中定义了一个引导模型执行特定下游任务的指令,同样给出了几个例子,最后定义了一个引导模型组合两个 Skill 的指令以及输入的内容。具体的例子如下所示:
当 LLMs 遵循这两个技巧时,就会在需要外部知识的时候生成搜索查询语句,如下图中的斜灰字体内容所示,接着终止这一次的生成,使用搜索查询语句查找相关知识,再将查找到的知识拼接到最前方,直到下一次搜索查询语句生成。
但是直接这样去做可能会遇到两个问题:
- 语言模型认为需要检索的情况会比实际需要检索的情况少,也就是太自信了而导致漏查,我们前一篇文章中也提到了 LLMs 过于自信的概率很高。
- 当生成过多搜索查询时可能会打断原本的答案生成,甚至产生负面效果。
因此作者还对”[“这个token的生成上做了点策略,比如为了提高语言模型生成 “[Search(query)]” 的可能性,将生成 “[” 的概率值提高了2倍,其次,每当语言模型产生一个搜索查询语句时,利用它来检索相关知识后立即从生成内容中移除它,并在产生下一段内容时,降低这个token的概率从而避免再次生成“[”。
Direct FLARE
作者发现前面这种方法并不可靠,因此提出了一种更为直接的方式。首先先让模型生成一个临时的,不基于任何外部知识的回复结果,然后进行判断,如果 LLMs 对生成内容的置信度高于某个阈值,那么就将这个临时结果输出,否则使用这个临时回复进行相关内容的搜索,并进行二次生成。
值得注意的是,作者首先使用临时生成的回复进行相关外部知识的搜索,而没有使用原始输入进行搜索,经过实验证明,这样的方式相比使用前面的文本内容进行检索的效果好很多,但是如果临时文本之中有错误的信息,那么就有可能会导致检索不到相关内容,因此作者又设计了两个简单的策略来克服这个问题。
第一步是:遮蔽掉临时回复中所有低置信度的 token(相对于某个指定阈值)
第二步是:针对上一步中被遮蔽掉的信息生成问题,进行搜索,最后进行回答
于是,FLARE 方法的整体示意图如下图所示:
方法效果
本工作提出方法的效果如下图所示:
DOLA: DECODING BY CONTRASTING LAYERS IMPROVES FACTUALITY IN LARGE LANGUAGE MODELS
工作的目标
缓解大语言模型的幻觉问题。
相关背景
- 目前为止,大语言模型产生“幻觉”的确切原因还不完全明确。一个可能的来源是基于最大似然估计的语言建模目标函数。这个目标函数最小化了数据分布和模型分布之间的KL散度,潜在地导致模型追求尽可能覆盖更多的可能性事件,从而使语言模型也为与训练数据中嵌入的知识不一致的句子赋予一定的概率,而非置零。此外,在有限训练数据上用预测下一个 token 作为训练目标的语言模型倾向于利用语言知识去模仿训练样本中的浅层模式,而不是真正理解文本中的语义或者生成符合事实知识的文本。【Ziwei Ji, Nayeon Lee, Rita Frieske, Tiezheng Yu, Dan Su, Yan Xu, Etsuko Ishii, Ye Jin Bang, Andrea Madotto, and Pascale Fung. Survey of hallucination in natural language generation. ACM Computing Surveys, 55(12):1–38, 2023.】
- Transformer 模型在浅层中编码了“较低级别”的信息(例如词性标注),而在较深的层中编码了更多的“语义”信息。更近期的研究发现,“知识神经元”分布在预训练 BERT 模型的最顶层。还有研究表明,事实知识甚至可以通过操作自回归 Transformer 语言模型中的一组特定的前馈层来进行编辑。【Damai Dai, Li Dong, Yaru Hao, Zhifang Sui, Baobao Chang, and Furu Wei. Knowledge neurons in pretrained transformers. In Proceedings of the 60th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers), pp. 8493–8502, 2022.】【Kevin Meng, David Bau, Alex Andonian, and Yonatan Belinkov. Locating and editing factual associations in GPT. Advances in Neural Information Processing Systems, 36, 2022.】
提出的方法
提出了一个简单的解码策略来缓解幻觉,而不是借助对外部知识的检索或对特定领域的微调,主要动机是减弱浅层学习到的语言模式,放大深层蕴含的现实世界的事实知识。具体来说,作者是通过对比从深层投射到词汇空间获得的对数概率与从浅层投射获得的对数概率之间的差异来获得下一个词的分布,这个思想基于一个事实——大语言模型中的事实知识通常局限于特定的 Transformer 层中。这种方法的示意如下图所示:
作者将最后一层称为 mature layer,中间层称为 premature layer,直接将中间层的隐状态送入语言模型最后的映射层得到输出的方法叫做 early exit。下图展示了各层对应的 early exit 结果和经历过全部的32个 transformer 层处理再送入映射层得到的结果之间的 JS 散度:
不难发现对于根据输入进行解码的过程中,分为两种模式:
- 预测重要的命名实体或日期,例如图2中的Wole Soyinka和1986,这时需要事实知识的参与。容易观察到,在更高的层中,计算的 JSD 仍然非常高。这种模式表示,在最后几层中,模型仍在改变其预测,并可能向预测中注入更多事实知识。
- 预测功能词,如 was, the, to, in,以及从输入问题复制的词汇,如 first Nigerian, Nobel Prize。在预测这些“简单”词汇时,我们可以观察到,从中间层开始 JS 散度就变得很小了。这一发现表明模型已经在浅层决定了要生成什么词汇,所以在更高层它只是保持输出分布几乎不变。
因此,针对这个发现,作者分别针对两种模型设计了两种策略:
- 采用对比前后层差异的方法来放大较高层的知识。为了实现这一点,就要选择同最后一层输出差异最大的 premature layer,这里使用的衡量标准就是 JS 散度。
- 在选择好了 premature layer 之后,需要分情况讨论,对于那些有足够高概率的token 用 mature layer 的对数概率减去 premature layer 的概率作为最终概率送入softmax,对于没有足够高概率的token,直接将概率设为负无穷送入softmax,这样得到的这个词的概率就接近于0。