摘要
我们探讨了生成思维链——一系列中间推理步骤——如何显著提升大型语言模型执行复杂推理的能力。特别地,我们展示了在足够大的语言模型中,这种推理能力如何通过一种简单的方法——思维链提示(chain-of-thought prompting)自然地显现出来。该方法在提示中提供少量思维链示例作为范例。
在三种大型语言模型上的实验表明,思维链提示能够提升模型在算术、常识和符号推理任务上的表现。实验结果非常显著。例如,仅使用八个思维链示例提示PaLM 540B,就在数学文字题基准GSM8K上达到了最先进的准确率,甚至超越了经过微调并带有验证器的GPT-3。
1.引言
自然语言处理领域最近因语言模型的发展而发生了革命性变化(Peters 等,2018;Devlin 等,2019;Brown 等,2020 等)。扩大语言模型的规模已被证明带来多方面的好处,例如提升性能和样本效率(Kaplan 等,2020;Brown 等,2020 等)。然而,仅仅增加模型规模并不足以在算术、常识和符号推理等具有挑战性的任务上取得高性能(Rae 等,2021)。
本研究探讨了一种简单方法,如何激发大型语言模型的推理能力,该方法基于两个核心思想。首先,算术推理技术可以通过生成引导至最终答案的自然语言推理过程获益。此前的工作使模型具备了生成自然语言中间步骤的能力,这包括从零开始训练(Ling 等,2017)或对预训练模型进行微调(Cobbe 等,2021),此外还有使用形式语言而非自然语言的神经符号方法(Roy 和 Roth,2015;Chiang 和 Chen,2019;Amini 等,2019;Chen 等,2019)。其次,大型语言模型带来了通过提示实现上下文内少量样本学习的令人兴奋的可能性。也就是说,不需要针对每个新任务微调单独的语言模型检查点,而是可以简单地通过“提示”模型几个输入-输出示例来演示任务。令人惊讶的是,这种方法已在多种简单问答任务中取得了成功(Brown 等,2020)。
上述两种方法均存在关键限制。对于增强推理过程的训练和微调方法,制作大量高质量的推理步骤成本较高,这比普通机器学习中使用的简单输入-输出对复杂得多。而传统的少样本提示方法(如Brown等,2020年所用)在需要推理能力的任务上表现不佳,且随着语言模型规模的增大,性能提升往往不明显(Rae等,2021年)。本文结合了这两种思想的优势,同时避免了它们的缺陷。具体而言,我们探索了语言模型在推理任务中利用少样本提示的能力,提示中包含三元组:〈输入,推理链,输出〉。推理链是一系列中间的自然语言推理步骤,最终导向答案,我们将这种方法称为“推理链提示法(chain-of-thought prompting)”。图1展示了一个示例提示。
我们在算术、常识和符号推理基准测试中进行了实证评估,结果显示推理链提示法优于标准提示,有时差距显著。图2展示了其中一个结果——在数学文字题基准GSM8K(Cobbe等,2021)上,使用PaLM 540B的推理链提示法远超标准提示,取得了新的最先进性能。仅通过提示的方式尤为重要,因为它不需要大量训练数据,并且单一模型检查点可以在多种任务上通用而不损失表现。此工作强调了大型语言模型如何通过少量示例和自然语言的任务信息学习(相比于通过大量训练数据自动学习输入输出之间的模式)。
2 推理链提示法
想象一下自己在解决复杂推理任务(例如多步骤的数学文字题)时的思考过程。通常,我们会将问题分解为若干中间步骤,逐步求解,最后给出答案:“简给妈妈2朵花后,她还有10朵……然后她给爸爸3朵后,就剩7朵……所以答案是7。”本文的目标是赋予语言模型生成类似推理链的能力——即生成一系列连贯的中间推理步骤,最终得到问题的答案。我们将展示,只要在少样本提示中提供了推理链的示范,足够大的语言模型就能生成这样的推理链。
图1展示了一个模型为了解决一题数学文字题而生成的推理链,这道题如果不使用推理链,模型本来会答错。此处的推理链类似于解题过程,也可以看作是一个解决方案,但我们仍称之为推理链,以更好地体现它模拟了逐步思考的过程(而且通常解答和解释是在最终答案之后给出的,见Narang等,2020;Wiegreffe等,2022;Lampinen等,2022等研究)。
推理链提示法作为促进语言模型推理能力的手段,具有以下几个显著优势:
- 首先,推理链原则上允许模型将多步骤问题拆解成中间步骤,意味着可以为需要更多推理步骤的问题分配额外计算资源。
- 其次,推理链为模型的行为提供了可解释的窗口,帮助理解模型如何得出某一答案,并为调试推理路径中的错误提供机会(尽管完整刻画支持答案的计算过程仍是一个开放问题)。
- 第三,推理链推理可以应用于数学文字题、常识推理和符号运算等任务,且原则上适用于任何人类能通过语言解决的任务。
- 最后,只需在少样本提示示例中加入推理链示范,就能轻松在足够大的现成语言模型中激发推理链推理能力。
在实证实验中,我们将观察推理链提示法在算术推理(第3节)、常识推理(第4节)和符号推理(第5节)上的效用。
3 算术推理
我们首先考虑如图1所示形式的数学文字题,这类题用于测量语言模型的算术推理能力。尽管对人类来说很简单,但算术推理是语言模型经常感到困难的任务(见Hendrycks等,2021;Patel等,2021等)。令人惊讶的是,使用推理链提示法并配合5400亿参数的语言模型,在多个任务中表现可与针对特定任务微调的模型相媲美,甚至在具有挑战性的GSM8K基准测试(Cobbe等,2021)上取得了新的最先进成绩。
3.1 实验设置
我们在多种语言模型和多个基准测试上探索推理链提示法的效果。
基准测试。我们考虑以下五个数学文字题基准数据集:
(1) GSM8K数学文字题基准(Cobbe等,2021);
(2) 结构多样的SVAMP数学文字题数据集(Patel等,2021);
(3) 多样化数学文字题的ASDiv数据集(Miao等,2020);
(4) 代数文字题的AQuA数据集;
(5) MAWPS基准(Koncel-Kedziorski等,2016)。
示例题目见附录表12。
标准提示法。作为基线,我们采用Brown等(2020)推广的标准少样本提示法,即给语言模型提供输入-输出对的上下文示例,之后模型对测试样本给出预测。示例格式为问题和答案,模型直接给出答案,如图1左侧所示。
推理链提示法。我们提出的方法是在少样本提示的每个示例中,增加与答案对应的推理链,如图1右侧所示。由于大多数数据集仅有评估集,我们手工编写了一组包含八个推理链的少样本示例用于提示——图1右侧展示了其中一个推理链示例,完整示例集见附录表20。(这些示例未经过提示工程处理;第3.4节和附录A.2讨论了方法的鲁棒性。)
为了验证这种形式的推理链提示法是否能够在多种数学文字题上成功激发推理能力,我们对除AQuA外的所有基准均使用了同一组八个推理链示例。由于AQuA是多选题而非自由回答,我们使用了训练集中四个示例及其解答,见附录表21。
语言模型。我们评估了五个大型语言模型。
第一个是GPT-3(Brown等,2020),我们使用了text-ada-001、text-babbage-001、text-curie-001和text-davinci-002,这些模型大致对应参数规模为3.5亿、13亿、67亿和1750亿的InstructGPT模型(Ouyang等,2022)。
第二个是LaMDA(Thoppilan等,2022),包含参数规模为4.22亿、20亿、80亿、680亿和1370亿的多个模型。
第三个是PaLM,拥有参数规模为80亿、620亿和5400亿的模型。
第四个是UL2 20B(Tay等,2022),第五个是Codex(Chen等,2021,OpenAI API中的code-davinci-002)。
我们通过贪心解码从模型中采样(尽管后续工作表明,链式思维提示法可通过对多次生成结果进行多数投票以提升性能(Wang等,2022a))。
对于LaMDA,我们报告了五个随机种子下的平均结果,每个种子对应一组不同随机打乱的示例顺序。由于LaMDA实验中不同种子的结果方差不大,为节省计算资源,其它模型仅报告单一示例顺序的结果。
3.2 结果
链式思维提示法的最强结果总结在图4中,所有模型集合、模型规模和基准测试的实验输出详见附录表2。有三个关键要点:首先,图4显示链式思维提示是一种随模型规模自然出现的能力(Wei等,2022b)。也就是说,对于小规模模型,链式思维提示并不会带来性能提升,只有当模型规模达到约1000亿参数时,才开始产生性能提升。我们通过定性分析发现,小规模模型虽然能够生成流畅的链式思维文本,但逻辑不够严密,反而导致表现低于标准提示法。
第二,链式思维提示在更复杂的问题上带来更大的性能提升。例如,在GSM8K数据集(基线表现最低的数据集)上,最大的GPT和PaLM模型的性能提升超过一倍。相反,对于MAWPS中最简单的SingleOp子集(只需要一步即可解决的问题),性能提升则要么是负面,要么非常小(详见附录表3)。
第三,使用GPT-3 175B和PaLM 540B的链式思维提示,在性能上优于以往通常通过在标注训练集上微调任务专用模型所达到的最新水平。图4显示,PaLM 540B通过链式思维提示,在GSM8K、SVAMP和MAWPS上达到了新的最先进成绩(尽管标准提示在SVAMP上已超过了之前的最好成绩)。在另外两个数据集AQuA和ASDiv上,PaLM使用链式思维提示的表现也接近最先进水平,差距不到2%(详见附录表2)。
为了更好地理解链式思维提示为何有效,我们对LaMDA 137B在GSM8K上的模型生成的思维链进行了人工检查。在50个模型给出正确最终答案的随机样本中,除了两例偶然得到正确答案的情况,所有生成的思维链在逻辑和数学上均正确(详见附录D.1及表8中的正确示例)。我们还随机检查了50个模型答错的样本,分析总结显示,46%的思维链几乎正确,仅存在一些小错误(如计算器错误、符号映射错误或缺少一步推理),而其余54%的思维链则存在语义理解或连贯性上的重大错误(详见附录D.2)。
为了探究模型规模为何能提升链式思维的推理能力,我们对PaLM 62B的错误进行了类似分析,并比较这些错误是否被扩展到PaLM 540B时修正。结果表明,将模型扩展到540B参数,修正了62B模型中大量缺失一步推理和语义理解的错误(详见附录A.1)。
3.3 消融研究
使用链式思维提示带来的性能提升,引出了一个自然的问题:是否通过其他类型的提示也能带来类似的性能提升?图5展示了三个链式思维变体的消融实验,具体如下。
仅输出方程。链式思维提示之所以有效的一个原因可能是它生成了需要计算的数学方程,因此我们测试了一个变体,模型仅被提示先输出数学方程,再给出答案。图5显示,仅输出方程的提示对GSM8K帮助不大,这暗示GSM8K中问题的语义过于复杂,难以在没有链式思维中自然语言推理步骤的情况下,直接转换成方程。然而,对于只有一步或两步问题的数据集,我们发现仅输出方程的提示确实能提升性能,因为这些问题的方程可以很容易地从问题中推导出来(详见附录表6)。
变量计算。另一种直觉认为,链式思维让模型能在更复杂的问题上投入更多计算(即生成更多中间推理步骤的标记)。为了将变量计算的效果与链式思维推理区分开,我们测试了一个变体:模型被提示输出一串点(“: : :”),点的数量等于解题所需方程字符数。这个变体的表现与基线差不多,说明单纯的变量计算并不是链式思维提示成功的原因,表明通过自然语言表达中间步骤确实带来了额外价值。
答案后链式思维。链式思维提示的另一个潜在好处可能是帮助模型更好地访问预训练期间获得的相关知识。为此,我们测试了另一种设置——链式思维提示仅在答案之后给出,以检验模型是否真正依赖链式思维过程来得出最终答案。这个变体的表现与基线相当,表明链式思维中体现的顺序推理过程对于提升性能有重要作用,不只是激活已有知识那么简单。
3.4 Chain of Thought 的鲁棒性
示例的敏感性是提示方法中的一个关键考虑因素——例如,改变few-shot示例的排列顺序,可能导致GPT-3在SST-2任务上的准确率从接近随机的54.3%波动到接近最先进水平的93.4%(Zhao等,2021)。在本节的最后一小节中,我们评估了不同标注者编写的链式思维的鲁棒性。除了上述使用标注者A编写的链式思维外,本文的另外两位合著者(标注者B和C)也独立为相同的few-shot示例编写了链式思维(见附录H)。标注者A还编写了另一组比原始版本更简洁的链式思维,风格参考了Cobbe等(2021)中给出的解题示例。
图6展示了LaMDA 137B模型在GSM8K和MAWPS数据集上的实验结果(其他数据集的消融结果见附录表6和表7)。虽然不同链式思维注释之间存在差异,这在使用基于示例的提示时是预料之中的(Le Scao和Rush,2021;Reynolds和McDonell,2021;Zhao等,2021),但所有链式思维提示集均远超标准基线。这一结果表明,链式思维的成功应用不依赖于特定的语言风格。
温馨提示:
阅读全文请访问"AI深语解构" Cot2:思维链提示激发大型语言模型的推理能力