思维链Prompting促进大型语言模型的推理能力
论文标题:Chain-of-Thought Prompting Elicits Reasoning in Large Language Models
论文链接:https://arxiv.org/abs/2201.11903
论文来源:NeurIPS 2022
一、概述
近来NLP领域由于语言模型的发展取得了颠覆性的进展,扩大语言模型的规模带来了一系列的性能提升,然而单单是扩大模型规模对于一些具有挑战性的任务来说是不够的,比如算术、常识、符号推理任务(arithmetic, commonsense, symbolic reasoning)。本文探讨了如何通过一个简单的方法来解锁大型语言模型的推理能力,这个方法由两个想法驱动。第一个想法是算术推理的技术能够从生成自然语言解释(rationale)中获益。先前的工作通过从头开始训练或微调预训练模型,以及采用形式语言的神经-符号方法来使模型能够生成自然语言的中间步骤。第二个想法是利用大型语言模型实现上下文中的少数样本学习(few-shot learning),即通过提示(prompting)提供少量输入-输出示例,而不是为每个新任务微调单独的语言模型。这种方法在一系列简单问答任务上取得了成功。
然而,这两种方法都存在局限性。对于添加解释的训练和微调方法,创建大量高质量解释的成本很高,远比传统机器学习中使用的简单输入-输出对复杂得多。而传统的少数样本提示方法在需要推理能力的任务上表现不佳,且随着语言模型规模的增加,性能提升有限。为了克服这些局限性,作者将这两个想法相结合,提出了一种称为“思维链提示”(chain-of-thought prompting)的方法。在这种方法中,模型接收到的提示包含三个部分:输入、思维链和输出。思维链是一系列自然语言中的中间推理步骤,它们导致最终输出。
本文通过在算术、常识和符号推理基准任务上的实证评估表明,思维链提示在性能上优于标准提示,有时甚至达到令人惊叹的程度。例如,在GSM8K数学问题基准测试中,PaLM 540B模型使用思维链提示大幅度优于标准提示(如下图),达到了新的SOTA水平。提示方法的重要性在于它不需要大量训练数据集,并且单个模型检查点可以执行多个任务而不会失去通用性。这项工作强调了大型语言模型如何通过少量自然语言任务数据来学习(例如通过大型训练数据集自动学习输入和输出的潜在模式)。
实验二、方法
当人们解决这类问题时,通常会将问题分解成中间步骤,逐个解决,最后给出答案。本文的目标是赋予语言模型生成类似思维链的能力,即一个连贯的中间推理步骤序列,引导模型找到问题的最终答案。作者表明,如果在少数样本提示中提供思维链推理的示例,足够大的语言模型可以生成思维链。下图展示了一个模型在解决数学问题时产生的思维链示例。在这种情况下,思维链类似于一个解决方案,但作者仍选择称其为思维链,以更好地捕捉模拟逐步解决问题的思维过程的概念。
思维链示例思维链提示作为促进语言模型推理的方法具有以下几个有吸引力的特性:
①原则上,思维链允许模型将多步问题分解为中间步骤,这意味着可以为需要更多推理步骤的问题分配额外的计算能力。
②思维链为模型的行为提供了一个可解释的窗口,提示模型如何得出特定答案,并为发现推理路径中的错误提供调试机会(尽管完全描述支持答案的模型计算仍然是一个开放性问题)。
③思维链推理可用于诸如数学问题、常识推理和符号操作等任务,并且原则上适用于任何人类可以通过语言解决的任务。
④最后,通过在少数样本提示的示例中包含思维链序列,可以轻松地在足够大的现成语言模型中引出思维链推理。
本文在算术、常识、符号推理任务上进行了实验,实验中不同数据集的思维链提示示例如下:
示例三、算术推理
- 实验设置
这部分首先考虑了类似于图1所示的数学问题,用以衡量语言模型的算术推理能力。尽管对人类来说很简单,但算术推理是一个让语言模型常常感到困难的任务。令人惊讶的是,当将思维链提示应用于具有540B参数的语言模型时,在几个任务上与特定任务的微调模型表现相当,甚至在具有挑战性的GSM8K基准测试上实现了新的SOTA水平。
- Benchmarks
我们考虑了以下五个数学问题benchmark数据集:
①GSM8K数学问题基准测试;
②SVAMP数据集,包含不同结构的数学问题;
③ASDiv数据集,包含多样化的数学问题;
④AQuA数据集,包含代数问题;
⑤MAWPS基准测试。
- Standard prompting(标准提示)
作为baseline,我们采用GPT-3论文中的标准few-shot prompting,其中语言模型在为测试时示例输出预测之前获得了输入-输出对的上下文示例。示例以问题和答案的形式呈现。如图1(左)所示,模型直接给出答案。
- Chain-of-thought prompting(思维链提示)
我们提出的方法是用问题的关联答案的思维链来增强few-shot prompting中的每个示例,如图1(右)所示。由于大多数数据集仅有一个评估分割,我们手动编写了一组包含思维链提示的八个少数样本示例——图1(右)显示了一个思维链示例。这些特定示例没有经过提示工程。为了研究这种形式的思维链提示是否可以成功引导成功解答一系列数学问题,我们使用了这八个思维链示例,适用于除AQuA之外的所有基准测试,因为AQuA是多项选择而非自由回答。对于AQuA,我们使用了来自训练集的四个示例和解决方案
- 语言模型
我们评估了五个大型语言模型。
①GPT-3,我们使用了text-ada-001、text-babbage-001、text-curie-001和text-davinci-002,它们可能对应于具有350M、1.3B、6.7B和175B参数的InstructGPT模型。
②LaMDA,它有422M、2B、8B、68B和137B参数的模型。
③PaLM,具有8B、62B和540B参数的模型。
④UL2 20B。
⑤Codex。
我们通过贪婪解码从模型中采样(尽管后续工作显示,通过在许多采样生成中采取多数最终答案,可以改进思维链提示)。对于LaMDA,我们报告了五个随机种子的平均结果,每个种子具有不同的随机洗牌顺序的示例。由于LaMDA实验在不同种子之间没有显示出较大的方差,为节省计算资源,我们对所有其他模型报告了单个示例顺序的结果。
- 结果
思维链提示的最优结果汇总在上图中。实验的结果主要反映出三个关键要点。
首先,上图显示,思维链提示是模型规模的一种涌现能力(emergent ability)。也就是说,对于小型模型,思维链提示不会对性能产生积极影响,只有在与大约100B参数的模型一起使用时,才能产生性能提升。我们发现,较小规模的模型产生了流畅但不合逻辑的思维链,导致性能低于标准提示。
其次,对于更复杂的问题,思维链提示的性能提升更大。例如,对于GSM8K(baseline性能最低的数据集),最大的GPT和PaLM模型的性能提高了一倍多。另一方面,对于SingleOp(MAWPS中最简单的子集,只需要一个步骤就可以解决),性能改进要么是负面的,要么非常小。
第三,通过GPT-3 175B和PaLM 540B的思维链提示,与之前的最佳实践相比,表现相当不错,后者通常在带标签的训练数据集上对特定任务的模型进行微调。上图显示了PaLM 540B如何使用思维链提示在GSM8K、SVAMP和MAWPS上实现新的SOTA(请注意,标准提示已经超过了SVAMP的之前最佳记录)。在另外两个数据集AQuA和ASDiv上,PaLM使用思维链提示的方法达到了距离最佳水平2%以内。
为了更好地了解为什么思维链提示起作用,我们手动检查了LaMDA 137B在GSM8K上生成的思维链。在50个随机样本中,模型给出了正确的最终答案,除了两个恰好得到正确答案的样本外,所有生成的思维链都是逻辑和数学上正确的。我们还随机检查了50个模型给出错误答案的样本。总结一下这个分析,46%的思维链几乎是正确的,只有一些小错误(计算错误、符号映射错误或缺少一个推理步骤),另外54%的思维链在语义理解或连贯性方面存在重大错误。为了更好地了解为什么规模化改善了思维链推理能力,我们对PaLM 62B犯的错误以及将其扩展到PaLM 540B是否修复了这些错误进行了类似的分析。总结来说,将PaLM扩展到540B能修复62B模型中的大部分缺失一步和语义理解错误。
这些结果表明,通过引入思维链提示,我们可以显著提高大型语言模型在解决数学问题方面的性能,特别是在处理更复杂数学问题时。尽管较小的模型在生成思维链时可能会产生不合逻辑的结果,但随着模型规模的增加,这种方法在很大程度上提高了解决问题的准确性和逻辑性。
总之,通过在数学问题上应用思维链提示,研究人员观察到了显著的性能提升。随着模型规模的增加,这种方法在解决更复杂数学问题时变得更加有效。此外,通过将思维链提示与大型模型结合使用,研究人员能够实现接近甚至超过之前最佳实践的性能。这表明,思维链提示是一种有前景的方法,可以帮助提高大型语言模型在数学和其他需要多步推理的任务上的性能。
- 消融实验
使用思维链提示所观察到的优势引发了一个自然问题:其他类型的提示是否也能带来相同的性能提升。上图展示了一个消融实验,其中描述了以下三种思维链的变体。
- Equation only
使用思维链提示可能有助于生成要评估的数学公式,所以我们测试了一个变体,在给出答案之前提示模型仅输出数学公式。上图显示,对于GSM8K,仅方程式提示的帮助不大,这意味着GSM8K中问题的语义太具挑战性,无法在没有思维链自然语言推理步骤的情况下直接转换成方程式。然而,对于只需要一步或两步的问题数据集,我们发现仅方程式提示确实提高了性能,因为方程式可以从问题中轻易地得出。
- Variable compute only
另一个直观的想法是,思维链允许模型在更难的问题上花费更多的计算量(即中间token)。为了将可变计算量的效果与思维链推理分离,我们测试了一种配置,其中模型被提示仅输出一系列等于解决问题所需方程中字符数量的点(. . .)。这个变体的性能与基线大致相同,这表明可变计算量本身并非思维链提示成功的原因,而且通过自然语言表达中间步骤似乎具有实用价值。
- Chain of thought after answer
另一个可能的思维链提示优势可能仅仅是这样的提示允许模型更好地访问在预训练期间获得的相关知识。因此,我们测试了一个替代配置,其中在给出答案之后再给出思维链提示,以分离模型是否真的依赖生成的思维链来给出最终答案。这种变体的性能与基线大致相同,这表明思维链中体现的顺序推理对于激活知识之外的原因是有用的。
- 思维链的鲁棒性
对示例的敏感性是提示方法的一个关键考虑因素——例如,改变少量示例的排列可能导致 GPT-3 在 SST-2 上的准确率从接近随机(54.3%)到接近最先进水平(93.4%)。在这最后一个小节中,我们评估了由不同注释者编写的思维链的鲁棒性。除了以上使用 Annotator A 编写的思维链的结果外,本文的另外两位合作者(Annotator B 和 Annotator C)还独立为相同的少量示例编写了思维链。Annotator A 还编写了另一个比原文更简洁的思维链。
上图显示了 LaMDA 137B 在 GSM8K 和 MAWPS 上的这些结果。尽管不同思维链注释之间存在差异,如同使用基于示例的提示时所预期的那样,但所有的思维链提示都大幅度优于标准基线。这一结果表明,成功使用思维链并不依赖于特定的语言风格。
为了证实成功的思维链提示适用于其他示例集,我们还使用从 GSM8K 训练集中随机抽取的三组八个示例进行实验,这是一个独立的来源(这个数据集中的示例已经包括了类似思维链的推理步骤)。上图显示,这些提示的表现与我们手动编写的示例相当,也大大优于标准提示。
除了对注释者、独立编写的思维链、不同示例和各种语言模型的鲁棒性外,我们还发现,对于算术推理的思维链提示在不同的示例顺序和不同数量的示例方面也具有鲁棒性。
四、常识推理与符号推理
除了算术推理任务外,本文还测试了思维链提示在常识推理与符号推理任务上的性能。对于常识推理任务,我们选择了五个涵盖各种常识推理类型的数据集。CSQA提出了关于世界的常识问题,涉及复杂的语义,通常需要先验知识。StrategyQA要求模型推断出一个多跳策略来回答问题。我们从 BIG-bench 项目中选择了两个专门的评估集:Date Understanding,涉及从给定的上下文中推断日期;Sports Understanding,涉及判断与体育相关的句子是合理的还是不合理的。最后,SayCan数据集涉及将自然语言指令映射到离散集合中的一系列机器人动作。实验结果如下:
常识推理符号推理使用以下两个toy任务:
①最后字母拼接。这个任务要求模型将名称中单词的最后字母拼接起来(例如,“Amy Brown” → “yn”)。这是一个比首字母拼接更具挑战性的版本,语言模型已经可以在没有思维链的情况下执行第一个字母拼接。我们通过从名字人口普查数据([https://namecensus.com/)中随机连接前一千个名字和姓氏来生成全名。
②抛硬币。这个任务要求模型回答在人们翻转或不翻转硬币后,硬币是否仍然是正面朝上的(例如,“一枚硬币是正面朝上的。菲比翻转了硬币。奥斯瓦尔多没有翻转硬币。硬币还是正面朝上吗?”→“不是”)。
由于这些符号推理任务的构造是明确的,对于每个任务,我们考虑一个在域内测试集,其中的示例与训练/少量示例的步骤相同,以及一个域外(out-of-domain,OOD)测试集,其中评估示例比示例中的步骤多。对于最后字母拼接,模型只能看到两个单词的名称示例,然后在具有3和4个单词的名称上执行最后字母拼接。我们对抛硬币任务中可能的翻转次数也做同样的处理。我们的实验设置使用与前两节相同的方法和模型。我们再次手动为每个任务的少量示例组合思维链。实验结果如下:
符号推理五、讨论
我们已经探讨了思维链提示作为一种简单机制来引导大型语言模型进行多步推理行为。首先,我们发现思维链提示在算术推理方面大大提高了性能,带来的改进远比消融实验更强大,而且对不同的注释者、示例和语言模型具有鲁棒性。接下来,常识推理实验强调了思维链推理的语言特性使其具有普遍适用性。最后,我们展示了对于符号推理,思维链提示有助于在更长的序列长度上进行OOD泛化。在所有实验中,思维链推理只是通过提示现成的语言模型来引导,没有对语言模型进行微调。
思维链推理属于模型规模的涌现能力,这种能力已经成为研究中的一种普遍主题。对于许多推理任务,标准提示具有平坦的缩放曲线,思维链提示导致了陡峭的增长曲线。链式思维提示似乎扩大了大型语言模型可以成功执行的任务集——换句话说,我们的工作强调,标准提示只提供了大型语言模型能力的下限。这一观察可能引发的问题比答案多——例如,随着模型规模的进一步增加,我们能期望推理能力提高多少?还有哪些提示方法可能扩大语言模型可以解决的任务范围?
至于局限性,我们首先说明,尽管思维链模拟了人类推理者的思维过程,但这并不能回答神经网络是否真正进行了“推理”,我们将这个问题留给未来研究。其次,虽然在少量示例设置中,用思维链手动增强示例的成本很低,但这种注释成本对于微调来说可能是高昂的(尽管这可以通过合成数据生成或零样本泛化来克服)。第三,不能保证正确的推理路径,这可能导致正确和错误的答案;改进语言模型的事实生成是未来工作的一个开放方向。最后,思维链推理仅在大型模型规模上的出现使其在实际应用中的服务成本变得昂贵;进一步的研究可以探讨如何在较小的模型中引入推理。
总之,思维链提示为解决多步推理任务提供了一种有效且简单的方法,仅通过提示现成的语言模型就能实现。然而,这并不意味着思维链提示完美无缺,仍然存在一些局限性和未来需要解决的问题。例如,为了进一步提高推理能力,研究人员可能需要探讨其他提示方法或改进现有的提示方法。此外,未来的研究可以关注如何在保持计算成本较低的情况下,引入推理能力。
通过本文的研究,我们可以更好地理解大型语言模型在推理任务上的性能,并为未来的研究和应用奠定基础。链式思维提示是一种重要的工具,可以帮助我们更好地利用现有的大型语言模型,在各种任务和场景中取得更好的结果。