论文来自 Carnegie Mellon University,原文链接:https://arxiv.org/abs/2305.06983
RAG 是一种缓解 LLM 幻觉问题的方法,已有的一些方法可以通过 single-time 检索增强得到比纯参数LLM更好的返回。特别是对于短形式的知识密集型生成任务,如事实问答(QA),这类问题的信息需求在用户的输入中是明确的,仅根据输入检索一次相关知识就足够了。
与短格式生成相比,长格式生成提出了复杂的信息需求,这些需求并不总是可以非常容易从单次的输入中得到。与人类在创建论文、散文或书籍等内容时逐渐收集信息的方式类似,使用 LLM 进行长格式生成需要在整个生成过程中收集多个知识片段。
在这种情况下,作者提出 FLARE 模型,该模型迭代生成临时下一句,如果其中包含低概率标记,则将其用作检索相关文档的查询,并重新生成下一句直到语句结束。
在第 t(t≥1)步时,基于用户输入 x 和先一步生成的输出来生成检查查询语句,公式如下:
其中 qry() 指的的是查询公式函数。在开始时(t=1),用户输入用作初始查询语句。
对于给定检索文档,LM 会用下面的公式不断生成答案,直到触发下一次检索或到达末尾:
其中 yt 代表在当前步骤 t 生成的 tokens,LM 的输入是检索文档,用户输入和上一次生成结果。
假设条件(作者认为):
基于以上假设,作者提出了两种 forward-looking active RAG 方法:
对于下游任务,作者将与搜索相关的指令和示例作为 skill 1 放在开头,然后将下游任务的指令和样例作为 skill 2。对于一个给定的测试用例,要求 LM 在执行任务时结合 skill 1 和 2 来生成搜索查询。Prompt 框架样例如下图所示:
完整的流程的图如下所示:
对于 black-box LM 是无法进行微调的,作者发现一些检索指令并不是那么可靠。因此提出了一种更直接的 forward-looking active RAG 方法,即使用下一个句子来决定何时检索以及检索什么。
如下图所示:
由于 LM 本身经过大量数据的训练,因此输出结果概率较低,则表明缺乏对应的信息,在这种情况就应该触发检索。
本文会设定一个阈值,当某一个 token 的概率低于阈值时则触发主动检索:
核心思想:直接将临时生成的下一句作为查询语句。
作者发现使用下一个句子进行检索可以获得更好的结果,但是可能会使其中的错误信息一直存在。例如,如果 LM 产生的句子是“乔·拜登就读于宾夕法尼亚大学”,而不是他就读于特拉华大学,那么使用这个错误的句子作为查询可能会检索到错误的信息。
因此作者提出了两个方法来解决这个问题:
将置信度低于某个阈值的 token 打上掩码。
针对置信度低的 token,生成明确的问题。作者开发了一种通用的方法,可以在没有额外注释的情况下生成低置信区间的问题。具体地说,首先提取所有概率低于阈值的 spans(理解为一系列 tokens)。对于每个提取的 span,利用 LM 生成一个可以被当前 span 回答的问题,具体 prompt 如下:
使用每个生成的问题进行检索,并将返回的文档放入一个单独的排名列表中,以帮助后续的生成步骤。
本文构建多个数据比较不同方法的实验效果:
以下两种数据集并没有很好的表现:
另外在此方法中,LM 会被重复调用,增大开销