研究背景
近年来,大型语言模型(LLMs)在各种自然语言推理任务上取得了显著进展,尤其是在结合大规模模型和复杂提示策略(如链式思维提示(CoT))时。然而,LLMs 在推理的事实准确性方面存在越来越多的担忧,特别是在零样本 CoT 提示和需要多步骤和上下文感知推理的长视野生成任务中。这些任务包括代码生成、任务规划、数学推理等,需要事实正确的中间思维过程来成功完成任务。
研究目标
本文探讨了如何通过信息检索迭代修改思维链显著提高大型语言模型在长视野生成任务中的推理和生成能力,同时大幅减轻幻觉现象。具体而言,提出的方法——检索增强思维(RAT),逐步修改每一步思维链,并结合检索到的相关信息,旨在改进初始零样本 CoT 生成的思维链。
相关工作
RAG: 旨在解决大型语言模型生成虚构事实的问题,通过提供从可信来源提取的相关文本,一般被用于问答(QA)任务。简单地说就是首先根据相关性找到和问题相关的内容,然后把相关的内容和用户问题拼接成 Prompt 交给大模型。然而,复杂的推理任务(例如,那些需要多步骤推理的任务)很难转化为有效的搜索查询,这导致在寻找相关文档时遇到挑战。传统上,RAG 一次性检索所有相关信息。然而,它忽略了一个事实,即很难预测在后续的推理和生成步骤中需要哪些“事实”或信息。任务提示本身几乎不足以为此提供足够的线索。
CoT:旨在提高 LLM 在需要复杂推理步骤的任务中的性能,例如多步骤的数学应用题。具体来说,CoT 提示不是直接让 LLM 生成正确答案,而是激励 LLM 首先输出中间推理步骤,这些步骤被称为“思维”。LLM 的这种行为可以通过 prompt 进行触发,比如著名的“Let’s think step by step”),或者通过在类似任务中执行少量样本示例来触发。然而,由于没有对中间思维进行直接监督,LLM 可能会因为缺乏相关的领域知识而犯错误,或者受到虚构信息的偏差。
方法论
数据处理
生成初始答案(prompt1):虽然 CoT 说自己是"step-by-step"的,但实际上是单轮的。因此需要从单轮回答中解析出有哪些步骤/思考。这里用了一个 trick,在 prompt 中让 LLM 通过换行来输出不同的 step。
生成搜索查询(prompt2):这个的流程是总结出当前文本写了什么,然后根据总结的内容去检索相关知识。prompt2 相当于生成 RAG 的 input。
根据检索到的上下文修订答案(prompt3):在 prompt3 之前,会进行 RAG 得到相关内容,然后再根据相关的内容去修订当前回答。
解决方案
核心思想:
利用 CoT 生成多个步骤,然后在每个步骤中加入 RAG 以减少模型幻觉并提高效果。即:RAG+CoT=RAT。
详细:
RAT 是一种着重于迭代修正模型生成思路的新方法。首先,LLM产生的初始零样本CoT以及原始任务提示将被用作查询,以检索可能有助于修改可能有缺陷的CoT的信息。其次,设计一种渐进的方法,而不是用完整的CoT进行检索和修改并立即产生最终响应,其中LLM在CoT(一系列子任务)之后逐步生成响应,并且只有当前思维步骤将根据任务提示检索到的信息、当前和过去的CoT进行修改。这种策略可以类比于人类的推理过程:在复杂的长期问题解决过程中,利用外部知识来调整我们的逐步思维。
案例说明:
如何在Minecraft中获得钻石剑
-
用户Query
用户在Minecraft游戏中提出一个问题:“如何获得钻石剑?” -
初始形态
在接收到用户的任务提示(Query)后,模型首先进行零样本链式思维(CoT)推理。初始的思维链可能会如下生成:
T1: 获得4块木板(有误)
T2: 用木板制作工作台
T3: 挖掘钻石矿
T4: 用钻石和木棍制作钻石剑
此初始生成的思维链可能存在错误,例如第一步中的“获得4块木板”实际上应该是“获得4块木材”。
- 中间形态
接下来,模型利用RAT方法,逐步修正初始的思维链。在每一步修正过程中,模型将当前的思维链步骤及其之前的步骤作为查询,检索外部知识库中的相关信息。例如:
初始生成的T1是“获得4块木板”,模型会将其作为查询的一部分,检索Minecraft的相关知识库。检索结果表明,正确的步骤是“获得4块木材”。
修正后的T1*: 获得4块木材
接着,模型继续修正下一步:
T2: 用木板制作工作台,这一步是正确的,不需要修改。
修正后的T2*: 用木板制作工作台
然后是T3和T4,同样通过检索外部信息来验证和修正步骤:
T3: 挖掘钻石矿(正确,无需修改)
修正后的T3*: 挖掘钻石矿
T4: 用钻石和木棍制作钻石剑(正确,无需修改)
修正后的T4*: 用钻石和木棍制作钻石剑
- 最终形态
经过一系列逐步修正后,最终的思维链如下:
T1*: 获得4块木材
T2*: 用木板制作工作台
T3*: 挖掘钻石矿
T4*: 用钻石和木棍制作钻石剑
5. 模型输出
最终,模型根据修正后的思维链,输出完整且准确的步骤来指导用户如何在Minecraft中获得钻石剑:
获得4块木材
用木材制作木板
用木板制作工作台
挖掘钻石矿
用钻石和木棍制作钻石剑
实验
实验设计
数据集:代码生成、数学推理、创意写作和具体任务规划等多个长视野生成任务。
使用模型:不同规模的LLMs,包括GPT-3.5、GPT-4和CodeLLaMA-7b。
评价指标:代码生成的通过率(pass@k)、数学推理的准确率、创意写作和具体任务规划的可行性和合理性评分。
实验结论
代码生成:在HumanEval和HumanEval+基准测试中的pass@1和pass@5率显著提高,分别提升了20.94%和25.68%。
数学推理:在GSM8K和GSMHard数据集上表现优异,准确率分别提高了8.36%和31.37%。
创意写作和具体任务规划:在创意写作任务中的得分提高了19.19%,在Minecraft任务规划中的可执行性和合理性评分分别提升了2.96倍和51.94%。
参考资料
- 论文
- 代码