来自于 Meta AI,原文链接:https://arxiv.org/abs/2309.11495
LLM 经常遇到的主要问题就是幻觉,减少幻觉的方法大致可分为三类:训练时校正、生成时校正和通过增强(使用工具)进行校正。
-
在训练时校正的方法中,一种常见的方法是试图通过训练或调整模型权重来降低幻觉生成的概率,从而增强 encoder-decoder 或者 decoder-only 语言模型的生成结果。例如利用强化学习,对比学习方法等。
-
在生成时校正的方法中,一个常见的方法是在基本 LLM 的概率最高的结果中做出推理决策,以使其结果更加可靠。本文也是属于这个类别。
-
在通过增强(使用工具)进行校正的方法中,比较经典的方法就是 RAG。简单来说就是检索外部资料作为输入,传入到最后的生成器(LLM)中得到最终结果。因为有相关辅助资料的帮助,LLM 会很大程度上减少幻觉的出现。
Chain-of-Verification(CoVe)
本文提出的方法中一个关键假设是,当使用合适的 prompt 时,大语言模型(LLM)可以做到生成并且执行如何验证自己结果的计划,以检查自己的工作,并最终将该分析纳入改进的响应中。(简单来说就是可以产生一个自我检查的方法判断自己的产出是否正确,最终会将所有结果输入 LLM 中得到最终输出)关键步骤如下:
这些步骤中的每一个都是对同一个 LLM 中执行不同的 prompt 获得所需的响应。
Baseline Response
对于一个给定的查询,作者使用正常的 LLM 生成,没有特殊的技巧。
Plan Verifications
以原始查询和基线响应为条件,通过 prompt 生成一系列验证问题,以检测原始基线中的内容是否属实。
例如,对于一个 longform 模型的返回结果包含“墨西哥-美国战争是1846年至1848年间,美国和墨西哥之间的武装冲突”,那么检查这些日期的一个可能的验证问题可能是“墨西哥-美洲战争何时开始和结束”。
Execute Verifications
PS. 在这个过程中可以使用 RAG 或者检索验证的方法来判断回答内容是否存在幻觉。作者在 CoVe 的所有步骤中不打算使用任何工具只使用 LLM 本身。
作者提出了 4 种检查的方法:
Joint
通过使用一个 LLM prompt 得到第二步和第三步(即 Plan Verifications 和 execute verification )的结果。LLM 的 prompt 包含 few-shot 样例,包括验证问题及其答案。在这个方法中不需要单独的 prompt。
其中一个潜在的问题是,由于验证问题必须以 LLM 上下文中的基线响应为条件,并且该方法是将两个内容联合在一起查询到。因此验证问题的答案也必须以初始响应为条件,可能会增加重复的可能性。这意味着验证问题可能会产生与原始基线响应类似的幻觉。
2-Step
为解决 Joint 方法中提到的问题,作者提出将第二步和第三步分开,分别用不同的 prompt 得到最后的结果。具体步骤如下:
-
通过第一步中的基线响应构建第二步的 prompt, 从而生成验证问题。
-
对验证问题进行回答的 prompt 中只包含问题,而不包含原始基线响应。这里会用同一个 prompt 回答所有的问题。
Factored
为解决 Joint 方法提到的问题,另一种更复杂的方法是所有问题都生成不同的 prompt 来回答。其特点在于:
-
消除基线反应中的任何潜在干扰
-
消除答案上下文之间的任何潜在影响
-
可以潜在地处理更多的验证问题,因为它们不必都符合同一个上下文
-
虽然这可能在计算上更昂贵,并且需要执行更多的LLM提示,但它们可以并行运行,因此可以进行批处理
Factor+Revise
在回答验证问题后,必须隐式或显式交叉检查这些答案是否与原始响应一致。
此方法中,作者新增了一个额外的 LLM prompt 执行交叉验证。与回答验证问题不同,交叉验证阶段需要以基线响应和验证问答为条件。
因此每个问题都有一个交叉检查 prompt,其中包含 few-shot 样例显示所需的输出。例如,如果最初的基线回复包含短语“1845年美国吞并德克萨斯州之后……”,会产生了一个验证问题,即德克萨斯州何时脱离墨西哥?如果答案是1836,则应通过该步骤检测到不一致。
Final Verified Response
最后的 prompt 会包含 few-shot 样例,其中上下文考虑了之前的所有推理步骤、基线响应和验证问答对,以便进行更正。
实验结果
作者使用 Llama 65B 作为基础模型,对比了 Zero-shot,Zero-shot with Chain-of-thought 以及 few-shot 的方法。
PS. 在 zero-shot with CoT 的实验中,作者发现指令微调模型在被查询时往往会生成无关的内容。因此作者在提示中增加了一行:“List only the answers separated by a comma” 来限制输出。
实验结果如下:
通过实验可以发现:
- CoVe 在三个任务的准确性上都有明显提高
- CoVe 的表现优于 ChatGPT 等模型
- 指令调整和 CoT 不能减少幻觉
- 进一步的明确推理有助于消除幻觉
- 与长格式查询相比,短格式验证问题的回答更准确
- 基于 LLM 的验证问题优于启发式方法(Table 4)
- 开放式验证问题优于基于是/否的问题 (Table 4)
限制
-
虽然 CoVe 方法试图减少幻觉,但并没有完全消除幻觉。这意味着 CoVe 仍然可以为给定的查询生成不正确或误导性的信息,即使它比基线有所改进。
-
实验中作者用直接陈述事实的形式来处理幻觉。然而,幻觉也可能以其他形式出现,例如在不正确的推理步骤中,作为观点的一部分等。
-
CoVe 都带有验证,如果人工查看,这些验证会为其决策增加更多的可解释性,但由于在输出中生成更多的 token,计算费用会增加,这与思维链等其他推理方法类似。