摘要

我们探讨了生成思维链条(即一系列中间推理步骤)如何显著提高大型语言模型执行复杂推理的能力。特别地,我们展示了这种推理能力如何通过一种简单的方法自然地在足够大的语言模型中涌现,这种方法称为思维链条提示(chain-of-thought prompting),其中一些思维链条示例作为提示的样本提供。

在三个大型语言模型上的实验表明,思维链条提示在算术、常识和符号推理任务上都提高了性能。这些经验收益有时是显著的。例如,在 GSM8K 数学词问题基准测试中,使用仅仅八个思维链条示例提示的 PaLM 540B 取得了最新的最先进准确率,甚至超过了带有验证器的微调 GPT-3。


1 介绍

最近,自然语言处理(NLP)领域因语言模型的出现发生了革命性的变化(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)。在本文中,我们结合了这两个想法的优点,并避免了它们的局限性。具体来说,我们探索了语言模型在给定提示的情况下执行推理任务的能力,提示由三元组组成:〈输入,思维链条,输出〉。思维链条是一系列自然语言的中间推理步骤,导致最终的输出,我们称这种方法为思维链条提示。图 1 显示了一个示例提示。

我们在算术、常识和符号推理基准测试上进行了实证评估,显示了思维链条提示显著优于标准提示,有时达到令人惊讶的程度。图 2 展示了一个这样的结果——在 GSM8K 数学词问题基准测试中,使用 PaLM 540B 的思维链条提示比标准提示的性能高出很多,并且达到了最新的最先进性能。仅提示的方式是重要的,因为它不需要大规模的训练数据集,并且单一模型检查点可以执行许多任务而不会失去普遍性。本研究强调了大型语言模型如何通过少量关于任务的自然语言数据示例学习(相比于通过大规模训练数据集自动学习输入和输出之间的模式)。


2 思维链条提示

考虑到自己在解决复杂的推理任务(如多步骤的数学词问题)时的思维过程。通常会将问题分解成中间步骤,并逐一解决,最终给出答案:“在 Jane 给她妈妈 2 朵花之后,她有 10 朵……然后她给她爸爸 3 朵,她将剩下 7 朵……所以答案是 7。”本文的目标是使语言模型具有生成类似思维链条的能力——即一系列连贯的中间推理步骤,最终为问题得出答案。我们将展示,如果在少样本提示的示例中提供了思维链条推理的示例,那么足够大的语言模型可以生成思维链条。

图 1 展示了一个模型通过生成思维链条来解决一个数学词问题的示例,如果没有这些思维链条,模型本来会给出错误的答案。在这种情况下,思维链条类似于一个解决方案,并且可以解释为一个解决方案,但我们仍然选择称之为思维链条,以更好地捕捉它模仿一个逐步的思考过程来得出答案的想法(而且,解决方案/解释通常出现在最终答案之后(Narang 等,2020;Wiegreffe 等,2022;Lampinen 等,2022 等))。

思维链条提示作为一种促进语言模型推理的方法,有几个吸引人的特性。

  1. 首先,思维链条,原则上,可以让模型将多步骤问题分解为中间步骤,这意味着可以为需要更多推理步骤的问题分配额外的计算资源。
  2. 其次,思维链条提供了一个解释窗口,使得我们可以看到模型是如何得出特定答案的,并提供了在推理路径出错时调试的机会(尽管完全描述支持答案的模型计算仍然是一个开放的问题)。
  3. 第三,思维链条推理可用于数学词问题、常识推理和符号操作等任务,并且原则上适用于任何人类可以通过语言解决的任务。
  4. 最后,只需在少样本提示的示例中包括思维链条序列的示例,即可在足够大的现成语言模型中轻松引出思维链条推理。

在实证实验中,我们将观察到思维链条提示在算术推理(第 3 节)、常识推理(第 4 节)和符号推理(第 5 节)中的实用性。


3 算术推理

我们首先考虑数学词问题(如图 1 中所示),它们衡量了语言模型的算术推理能力。尽管对人类来说很简单,算术推理是一个语言模型经常遇到困难的任务(Hendrycks 等,2021;Patel 等,2021 等)。令人惊讶的是,使用 540B 参数语言模型的思维链条提示在几个任务上表现得与任务特定的微调模型相当,甚至在具有挑战性的 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,这些模型据推测对应于 350M、1.3B、6.7B 和 175B 参数的 InstructGPT 模型(Ouyang 等,2022)。第二个是 LaMDA(Thoppilan 等,2022),其模型参数为 422M、2B、8B、68B 和 137B。第三个是 PaLM,其模型参数为 8B、62B 和 540B。第四个是 UL2 20B(Tay 等,2022),第五个是 Codex(Chen 等,2021,在 OpenAI API 中的 code-davinci-002)。我们通过贪婪解码从模型中进行采样(尽管后续工作表明,通过对多个采样生成的大多数最终答案进行思维链条提示可以提高性能(Wang 等,2022a))。对于 LaMDA,我们报告了五个随机种子上的平均结果,每个种子具有不同的随机混合顺序的示例。由于 LaMDA 实验在不同种子之间没有显示出大的差异,为了节省计算资源,我们报告了其他模型的单一示例顺序的结果。

3.2 结果

思维链条提示的最强结果总结在图 4 中,所有实验输出结果包括模型集合、模型大小和基准测试显示在附录表 2 中。有三个关键要点。首先,图 4 显示思维链条提示是模型规模的一种突现能力(Wei 等,2022b)。也就是说,思维链条提示对小模型没有积极影响,只有在使用 ∼100B 参数的模型时才会带来性能提升。我们发现小规模的模型生成了流畅但不合逻辑的思维链条,导致比标准提示更低的性能。

3.3 消融研究

使用思维链条提示的好处引发了一个自然的问题:是否可以通过其他类型的提示来实现相同的性能提升。图 5 展示了三个不同类型的思维链条提示的消融研究,详细描述如下。

仅输出方程式。思维链条提示可能有效的一个原因是它生成了需要计算的数学方程式。因此,我们测试了一种变体,其中模型被提示只输出数学方程式,然后给出答案。图 5 显示,仅输出方程式的提示对 GSM8K 的帮助不大,这意味着 GSM8K 的问题语义过于复杂,无法直接翻译成方程式而无需思维链条中的自然语言推理步骤。然而,对于需要一步或两步解决的问题的数据集,我们发现仅输出方程式的提示确实提高了性能,因为方程式可以很容易地从问题中得出(见附录表 6)。

仅变量计算。另一种直觉是,思维链条允许模型在更难的问题上花费更多的计算资源(即中间标记)。为了将变量计算的影响与思维链条推理分离,我们测试了一种配置,其中模型被提示仅输出一个点序列(……),其长度等于解决问题所需的方程式字符数。这种变体的性能与基线差不多,这表明单纯的变量计算并不是思维链条提示成功的原因,使用自然语言表达中间步骤有其独特的价值。

答案后的思维链条。思维链条提示的另一个潜在好处可能只是因为这种提示方式使模型能够更好地访问在预训练期间获得的相关知识。因此,我们测试了一种替代配置,即在答案之后才提供思维链条提示,从而孤立出模型是否依赖于生成的思维链条来给出最终答案。这种变体的性能与基线差不多,这表明思维链条中体现的序列推理不仅仅是激活知识,而是有其他实用价值。

图 5:使用 LaMDA 137B 和 PaLM 540B 进行不同变体提示的消融研究。其他数据集的结果见附录表 6 和表 7。

3.4 思维链条的鲁棒性

提示示例的敏感性是提示方法的一个关键考虑因素——例如,改变少样本示例的排列顺序可以使 GPT-3 在 SST-2 数据集上的准确率从接近偶然性(54.3%)到接近最新水平(93.4%)(Zhao 等,2021)。在本小节中,我们评估了不同注释者写的思维链条的鲁棒性。除了上面使用的由注释者 A 编写的思维链条外,本文的另外两位共同作者(注释者 B 和 C)独立为相同的少样本示例编写了思维链条(见附录 H)。注释者 A 还编写了一个比原始版本更简洁的思维链条,遵循了 Cobbe 等人(2021)给出的解决方案的风格1

图 6 显示了这些结果,这些结果是 LaMDA 137B 在 GSM8K 和 MAWPS 上的表现(其他数据集的消融结果见附录表 6 和表 7)。尽管不同的思维链条注释者之间存在差异,但所有的思维链条提示组都比标准基线高出很多。这一结果表明,成功使用思维链条并不依赖于特定的语言风格。

为了确认成功的思维链条提示在其他示例组中也能发挥作用,我们还进行了三组随机从 GSM8K 训练集中抽取的八个示例的实验,这些示例是独立的来源(该数据集中的示例已经包括了类似思维链条的推理步骤)。2 图 6 显示了这些提示与我们手动编写的示例相比,表现相当,也大大优于标准提示。

除了对注释者、独立编写的思维链条、不同示例和各种语言模型的鲁棒性外,我们还发现,对于算术推理任务,思维链条提示对不同的示例顺序和变化的示例数量具有鲁棒性(见附录 A.2)。

图 6:尽管对不同的提示示例存在预期的变化,但思维链条提示在不同的注释者和不同的示例上都优于标准提示。