发表时间: 2022-01 · arXiv:2201.11903
原文: https://arxiv.org/abs/2201.11903
作者/机构: Jason Wei, Xuezhi Wang, Dale Schuurmans, Maarten Bosma, Brian Ichter, Fei Xia, Ed H. Chi, Quoc V. Le, Denny Zhou (Google Research, Brain Team)
一句话结论 本文提出了一种名为思维链(Chain-of-Thought, CoT)的少样本提示方法,通过在提示中引导大型语言模型生成一系列中间推理步骤,显著提升了模型在算术、常识和符号等复杂推理任务上的性能。
要解决什么问题 现有的语言模型在处理算术、常识和符号等复杂推理任务时存在明显的性能卡点。传统的标准少样本提示直接将输入映射到最终输出,这种单步映射机制无法处理需要多步逻辑推导的复杂问题,导致模型在面对多步数学应用题或常识推断时表现不佳。另一方面,虽然可以通过微调模型让其生成自然语言解释来提升推理能力,但这需要人工构建海量且高质量的解释数据集,标注成本极其高昂。因此,如何绕开高昂的微调数据成本,仅通过简单的机制就能解锁现成大型语言模型的多步推理潜力,成为了一个亟待解决的关键问题。单纯依靠扩大模型的参数规模,已经被证明不足以在具有挑战性的推理任务上取得高性能。
怎么做的 核心思路是将“生成自然语言推理过程”与“上下文少样本学习”相结合,提出了一种名为思维链的提示方法。该方法绕开了微调模型所需的大规模数据卡点,直接在现成的大型语言模型的少样本提示示例中,将传统的输入输出对替换为包含中间推理步骤的三元组。具体而言,标准提示的示例形式为直接映射的 $\langle \text{输入}, \text{输出} \rangle$,而思维链提示将其改造为 $\langle \text{输入}, \text{思维链}, \text{输出} \rangle$。这里的“思维链”被定义为一个连贯的、由自然语言构成的中间推理步骤序列,它一步步导向最终答案。这种设计的关键在于它赋予了模型分解问题和分配计算资源的能力:面对复杂的多步问题,模型不再被迫进行单步的跳跃性预测,而是通过生成中间步骤,将额外的计算量分配给需要深度推理的环节。同时,这些自然语言步骤也为模型的行为提供了一个可解释的窗口,便于追踪逻辑错误。在实际操作中,只需人工编写极少量的带有思维链的示例作为上下文,就能激发足够大的语言模型模仿这种逐步思考的过程。为了证明这种设计的不可替代性,作者进行了消融实验:如果仅使用数学方程进行提示,模型在复杂问题上依然表现不佳,说明纯方程缺乏语义过渡;如果仅用无意义的点序列代替自然语言步骤,性能退化至基线水平,说明自然语言的表达至关重要;如果将思维链放在最终答案之后,性能同样没有提升,证明思维链所体现的序贯推理过程对于得出正确答案是必要的。
效果如何 实验在算术推理(如 GSM8K、SVAMP)、常识推理(如 StrategyQA、CSQA)和符号推理(如末字母连接、硬币翻转)三大类基准上展开。评估了 GPT-3、LaMDA、PaLM、UL2 和 Codex 等五种未微调的大型语言模型,参数规模最高达 540B,硬件使用 TPU 进行推理,并采用贪心解码采样。对比的基线方法是直接给出问答对的标准少样本提示,代表了传统的上下文学习路线。量化结果显示,在极具挑战性的 GSM8K 数学应用题基准上,仅使用 8 个思维链示例提示的 PaLM 540B 模型,性能大幅超越标准提示,并击败了使用验证器进行微调的 GPT-3 模型,取得了新的 SOTA 表现。在常识推理的 StrategyQA 任务上,PaLM 540B 取得了 75.6% 的 SOTA 成绩,在体育理解任务上以 95.4% 的准确率超过了未经辅助的体育爱好者。在符号推理任务中,思维链提示不仅让模型在同等长度的测试集上达到近乎 100% 的解决率,还能成功泛化到比示例步骤更长的域外测试集上,而标准提示在此场景下完全失效。但该方法存在明显的局限性和代价:首先,思维链是一种涌现能力,实验证明它对小型模型不仅无效甚至会损害性能,只有当模型参数规模达到约 100B 时才会产生显著增益,这导致实际部署成本极其高昂;其次,模型生成的推理路径不保证事实正确,错误分析显示,在回答错误的样本中,46% 的思维链存在计算或符号映射等小问题,而 54% 存在语义理解或连贯性方面的重大错误;最后,尽管模型模仿了人类的思考过程,但这并不能断定神经网络是否在进行真正的逻辑推理。
本文探讨了一种名为“思维链(Chain-of-Thought, CoT)”提示的方法,该方法通过生成一系列中间推理步骤,显著提高了大型语言模型执行复杂推理任务的能力。
核心问题:尽管扩大语言模型的规模已被证明能带来多种好处,例如提升性能和样本效率【27, Brown 等人,2020】,但仅靠扩大模型规模本身并不足以在算术、常识和符号推理等具有挑战性的任务上取得高性能【51, Rae 等人,2021】。传统的少样本提示方法【8, Brown 等人,2020】在需要推理能力的任务上表现不佳。另一方面,虽然通过微调模型以生成自然语言解释(rationales)的方法【16, Cobbe 等人,2021】可以提升推理能力,但这需要创建大量高质量的解释数据集,成本高昂。
研究目标:本文旨在探索一种简单的方法,以解锁大型语言模型的推理能力。该方法结合了“生成自然语言推理过程”和“上下文少样本学习”这两个思想的优点,同时避免它们的局限性。具体来说,研究的目标是让语言模型通过少样本提示(few-shot prompting)的方式,学会为推理任务生成一个“思维链”,即一系列通向最终答案的中间自然语言推理步骤。
创新点/主要贡献:
<输入, 思维链, 输出>三元组的示范。这种方法不需为每个新任务微调模型,也无需大规模的标注数据集,只需提供少数几个带有思维链的示例,就能引导模型生成推理过程并解决问题。
图1:思维链提示使大型语言模型能够处理复杂的算术、常识和符号推理任务。思维链推理过程已高亮显示。
验证思维链提示的有效性:通过在算术、常识和符号推理三大类基准任务上的实验,证明了思维链提示相比标准提示方法能够显著提升大型语言模型的性能。例如,在GSM8K数学应用题基准测试中,使用仅8个思维链示例提示PaLM 540B模型,其性能大幅超越了标准提示方法,并取得了新的SOTA(state-of-the-art)表现,甚至超过了使用验证器进行微调的GPT-3模型。
揭示推理能力是规模的涌现属性:实验表明,思维链提示的效果与模型规模密切相关。对于小型模型,该方法甚至可能损害性能;而只有当模型规模达到约100B参数时,思维链提示才能带来显著的性能增益。这表明复杂的推理能力是模型规模扩大后的一种“涌现能力”(emergent ability)。
思维链的理念与目标。当人类解决一个复杂推理任务(如多步数学应用题)时,通常会将其分解为中间步骤,并逐一解决,最终得出答案。本文的目标是赋予语言模型生成类似“思维链”的能力——一个连贯的、导向问题最终答案的中间推理步骤序列。研究将表明,如果通过少样本提示的示例中提供思维链的演示,足够大的语言模型就能够生成思维链。
思维链的定义与示例。图1展示了一个模型生成思维链来解决一个数学应用题的例子,若不使用思维链则该模型会答错。在这种情况下,思维链类似于一个解题过程,也可以被解释为解题过程,但本文选择称之为“思维链”,是为了更好地捕捉其模仿一步步思考过程以得出答案的理念(此外,解题方案/解释通常在最终答案之后给出【44, Narang 等人,2020;76, Wiegreffe 等人,2022;29, Lampinen 等人,2022】等)。
思维链提示的四大优势。作为一种促进语言模型推理的方法,思维链提示具有几个吸引人的特性:
实验验证计划。在后续的实证实验中,将观察思维链提示在算术推理(第3节)、常识推理(第4节)和符号推理(第5节)中的效用。
多模型与多基准的探索。我们探索了思维链提示在多种语言模型和多个基准测试上的表现。
算术推理基准。我们考虑了以下五个数学应用题基准:(1) GSM8K 数学应用题基准【16, Cobbe 等人,2021】,(2) 结构多样的 SVAMP 数学应用题数据集【47, Patel 等人,2021】,(3) 多样化的 ASDiv 数学应用题数据集【42, Miao 等人,2020】,(4) AQuA 代数应用题数据集,以及 (5) MAWPS 基准【28, Koncel-Kedziorski 等人,2016】。示例问题见附录表12。
基线方法:标准提示。作为基线,我们采用由【8】Brown 等人 (2020) 推广的标准少样本提示方法。在这种方法中,语言模型在为测试样本输出预测之前,会接收到一些包含输入-输出对的上下文示例。示例被格式化为问题和答案,模型直接给出答案,如图1(左)所示。
本文方法:思维链提示。我们提出的方法是在少样本提示的每个示例中,为相应的答案增加一个思维链,如图1(右)所示。由于大多数数据集只有评估集,我们手动编写了一套包含八个思维链的少样本示例用于提示——图1(右)展示了其中一个,完整的示例集在附录表20中。这些示例没有经过提示工程(prompt engineering)优化;其鲁棒性在第3.4节和附录A.2中进行了研究。为了验证这种形式的思维链提示能否成功激发各种数学应用题的推理能力,我们对除AQuA外的所有基准都使用了这同一套八个思维链示例。AQuA是多选题而非自由回答题,因此我们使用了训练集中的四个示例和解题方案,详见附录表21。
图3:算术、常识和符号推理基准的<输入,思维链,输出>三元组示例。思维链已高亮显示。完整提示见附录G。
评估的语言模型。我们评估了五种大型语言模型。第一种是 GPT-3【8, Brown 等人,2020】,我们使用了 text-ada-001、text-babbage-001、text-curie-001 和 text-davinci-002,这些可能分别对应于 350M、1.3B、6.7B 和 175B 参数的 InstructGPT 模型【46, Ouyang 等人,2022】。第二种是 LaMDA【71, Thoppilan 等人,2022】,其模型参数规模为 422M、2B、8B、68B 和 137B。第三种是 PaLM,模型参数规模为 8B、62B 和 540B。第四种是 UL2 20B【70, Tay 等人,2022】,第五种是 Codex【12, Chen 等人,2021】,在 OpenAI API 中为 code-davinci-002。我们通过贪心解码(greedy decoding)从模型中采样(尽管后续工作【72, Wang 等人,2022a】表明,通过对多个采样生成结果取多数最终答案可以改进思维链提示)。对于 LaMDA,我们报告了五个随机种子的平均结果,每个种子对应不同的示例随机排列顺序。由于 LaMDA 的实验在不同种子间方差不大,为了节省计算资源,我们对所有其他模型报告了单一示例顺序的结果。
常识推理基准。我们考虑了五个涵盖多种常识推理类型的数据集。流行的CSQA【67, Talmor 等人,2019】提出关于世界的常识性问题,这些问题涉及复杂的语义,通常需要先验知识。StrategyQA【20, Geva 等人,2021】要求模型推断一个多跳策略来回答问题。我们从BIG-bench【6, BIG-bench collaboration, 2021】中选择了两个专门的评估集:日期理解(Date Understanding),涉及从给定上下文中推断日期;以及体育理解(Sports Understanding),涉及判断一个与体育相关的句子是否合理。最后,SayCan数据集【1, Ahn 等人,2022】涉及将自然语言指令映射到离散机器人动作序列。图3展示了所有数据集带有思维链标注的示例。
提示设置。我们遵循与前一节相同的实验设置。对于CSQA和StrategyQA,我们从训练集中随机选择示例,并手动为其编写思维链作为少样本示例。两个BIG-bench任务没有训练集,因此我们选择评估集中的前十个示例作为少样本示例,并在评估集的其余部分报告结果。对于SayCan,我们使用了【1】Ahn 等人 (2022) 中训练集的六个示例,并同样手动编写了思维链。
符号推理任务。我们使用了以下两个玩具任务:
实验设置与提示。由于这些符号推理任务的构建是明确定义的,对于每个任务,我们考虑一个域内(in-domain)测试集,其中示例的步骤数与训练/少样本示例相同;以及一个域外(out-of-domain, OOD)测试集,其中评估示例的步骤数比示例中的更多。对于末字母连接任务,模型只看到包含两个单词的名字的示例,然后在包含3个和4个单词的名字上进行测试。我们在硬币翻转任务中对潜在的翻转次数也做了同样的处理。我们的实验设置使用了与前两节相同的方法和模型。我们再次为每个任务的少样本示例手动编写思维链,这些示例在图3中给出。
数据集:
模型架构:
本文使用了五种现成的大型语言模型,未进行微调,仅通过提示进行推理。
硬件配置:
软件配置:
eval 函数作为外部计算器,对模型生成的数学表达式进行后处理计算,以验证其推理逻辑的正确性。主要发现:
错误分析 (LaMDA 137B on GSM8K):
消融实验 (LaMDA 137B & PaLM 540B):
鲁棒性分析:
本文探索了思维链提示作为一种简单机制,用以激发大型语言模型的多步推理行为。通过在算术、常识和符号推理任务上的实验,论文得出了以下核心结论:
局限性:
未来展望:
这项工作引发了更多问题,例如:随着模型规模的进一步增加,推理能力还能提升多少?还有哪些其他提示方法可以扩展语言模型能解决的任务范围?研究如何将推理能力引入更小的模型也是一个重要的方向。总之,扩展语言模型能够执行的推理任务范围,有望激励更多基于语言的推理方法研究。
思维链推理是一种涌现能力。成功的思维链推理能力只在特定模型规模下可预测地出现,这一发现引人入胜。扩大语言模型规模已被证明能带来性能提升和样本效率等好处【27, Kaplan 等人,2020】,但思维链推理是“涌现的”,因为它的成功无法仅通过外推小规模模型的性能来预测,实际上对于大多数小于10B参数的模型,思维链反而会损害性能。
错误分析揭示规模效应的原因。为什么模型规模能改善思维链提示是一个多方面的问题,我们通过错误分析初步探讨了这一点。这项小型分析涉及手动阅读 PaLM 62B 犯下的45个错误,并将它们分为语义理解(20个错误)、缺少一步(18个错误)和其他错误(7个错误)。“其他”类别包括幻觉、重复输出和符号映射错误。这个分类是借鉴附录D.2中对LaMDA的初步错误分析,其类别是基于修正思维链所需改进而构想的。
规模扩大修复了各类错误。如图9所示,将PaLM扩展到540B参数修复了所有三个类别中的大部分错误。图10给出了通过将PaLM扩展到540B修复的语义理解和缺少一步错误的例子。这个结果似乎与一个假设一致,即语言模型随着模型规模的扩大获得了一系列语义理解和逻辑推理技能(尽管模型规模常与其他因素,如训练计算量,相混淆)。
小模型失败的原因。关于小语言模型为什么会失败,有三点值得注意。首先,小语言模型在相对简单的符号映射任务上也会失败。如第5节所示,即使是只需要使用少样本示例中给出的相同思维链逻辑结构来泛化到新例子的符号推理任务,小语言模型仍然失败了。其次,小语言模型似乎天生算术能力较弱,正如【8】Brown 等人 (2020) 所示,进行简单的算术运算(不涉及语义理解)需要足够的模型规模。最后,我们定性地注意到,小语言模型常因重复或逻辑无法得出最终答案而无法生成可解析的最终答案。
总结。总之,思维链推理的成功是模型规模的复杂现象,可能涉及多种涌现能力(语义理解、符号映射、保持主题、算术能力、忠实度等)。未来的工作可以更彻底地研究预训练数据、模型架构和优化目标的哪些特性能够因果地促成这种推理能力。
提示敏感性是一个关键考量。提示的一个关键考量是对具体提示的敏感性。大量工作表明,提示会以意想不到的方式影响语言模型【43, Min 等人,2022】。我们创建思维链标注的通用方法是从训练集中选取八个示例,并将推理过程分解为导向最终答案的多个步骤。思维链标注的例子在图3中提供,完整的提示在附录G中。为了分析思维链对提示工程的敏感性,我们针对不同因素进行了鲁棒性实验。
不同因素下的鲁棒性分析。
提示工程仍然重要。尽管在算术推理方面,结果对提示相对鲁棒,但我们想明确指出,提示工程仍然很重要,并且在许多情况下可以显著提高性能。虽然大多数思维链标注都优于标准提示,但在许多情况下存在很大的差异。例如,对于硬币翻转任务,标注者A的性能为99.6%,而标注者C的性能为71.4%,尽管两者都高于标准提示的50.0%(见表7)。甚至有些任务需要提示工程才能获得良好性能。在初步实验中,我们尝试使用思维链让语言模型反转一个包含5个项目的列表的顺序。虽然两位合著者尽管尽了最大努力也未能编写出解决该任务的思维链提示,但第三位合著者却能编写出一个完美解决该任务的思维链。
未来方向。如何以鲁棒的方式生成思维链标注可能是一个有趣的未来研究方向。例如,一个想法是使用大型语言模型通过提示自动生成思维链(并可能在验证集上对此进行优化)。
适用场景的直觉判断。虽然思维链提示原则上适用于任何文本到文本的任务,但它对某些任务的帮助比其他任务更大。基于本文的实验,我们的直觉是,当满足三个条件时,思维链的帮助最大:(1) 任务具有挑战性,需要多步推理;(2) 使用了大型语言模型;(3) 扩展曲线(scaling curve)相对平坦。反之,当一个或多个条件不满足时,收益会变小。
算术推理结果的支持。这些直觉可能得到了算术推理结果的支持。思维链提示的性能增益在PaLM 540B上对GSM8K(挑战性的多步问题,平坦的扩展曲线)最大,这满足了这些条件。对于仅需一两步的MAWPS子集(SingleOP, SingleEq, 和 AddSub),性能增益很小,在这些子集上PaLM 540B已经达到了90%或更高的性能(并且当性能已经很强时,改进空间通常也较小)。
潜在应用与未来工作。尽管在本文中我们专注于多步推理任务(算术、常识和符号),但思维链提示可能适用于任何人类使用“思维链”来解决的任务(至少在原则上)。我们将思维链提示在这些多样化任务(例如,机器翻译等)上的实证评估留给未来的工作。
方程提示的局限性。仅用方程作为中间步骤进行提示在许多数据集上确实有帮助,特别是当数据集只需要少量推理步骤时(SVAMP, ASDiv, MAWPS)。然而,对于GSM8K,仅使用方程并没有显著提高性能。基于定性分析,我们认为这些问题的语义过于复杂,模型无法直接将它们翻译成数学方程。
示例分析。以LaMDA 137B的一个例子来说明:
问题:迈克打乒乓球40分钟。前20分钟,他得了4分。后20分钟,他的得分多了25%。他总共得了多少分?
(4 + 20 * 0.25) = 6。答案是6。4 x 1.25 = 5。所以他在后20分钟得了5分。所以他总共得了9分。答案是9。结论。模型很难直接将所有语义翻译成一个单一的方程,但思维链允许它通过自然语言的中间步骤更好地推理问题的每个部分。
分析方法。正如正文所述,我们分析了LaMDA 137B在GSM8K数据集上得出正确答案的50个思维链。在这50个中,只有一个是通过不正确的推理得出正确答案的(见表9:“偶然正确”)。其余49个的逻辑和数学都正确,示例见表8。其中有五个存在微小瑕疵,但保持了连贯和可理解的逻辑:
对不同任务类型的推论。虽然我们发现对于得出正确答案的数学问题,思维链推理大多是正确的,但这很可能是因为对于自由回答的问题,偶然得出正确答案很难。对于多项选择或二元分类问题,模型通过不正确的推理路径得出正确答案的可能性要大得多(例如,我们评估的所有常识推理数据集)。这是一个局限性,未来的工作应该对此类思维链的事实性进行分析。
错误分类方法。我们还手动分析了LaMDA 137B在GSM8K上答错的50个随机抽样输出。思维链可能出错的方式有很多,这使得错误分类的设计并非易事。我们决定根据修正思维链所需的改动来对错误进行分类,目的是阐明未来如何改进模型。
三类可修正的错误。我们发现许多思维链可以通过以下三类修改之一来修正:
难以修正的错误。我们发现剩余的思维链(50个中的27个;54%)需要大量修改才能成为一个正确的思维链。这里几乎所有的情况都涉及某种语义理解错误(见表11:“语义理解错误”),其中27个中的8个还存在不连贯的思维链,意味着生成的思维链中的某些陈述与前面的陈述不符或违反了基本的常识(见表11:“不连贯的思维链错误”)。
总结与展望。总的来说,无法保证大型语言模型生成的推理过程是连贯或事实正确的,这一点在最近评估语言模型生成内容和解释的事实性的工作中得到了强调【41, Maynez 等人,2020;57, Rashkin 等人,2021;83, Ye 和 Durrett,2022;40, Marasovic 等人,2022;76, Wiegreffe 等人,2022】。不正确的推理过程可能导致错误的最终答案,也可能意外地导致正确的最终答案(对于二元分类等任务,意外正确的可能性比自由回答更高)。提高语言模型生成内容在上下文和世界知识方面的事实性是语言模型研究中一个重要的开放问题,也有望潜在地改善语言模型的多步推理能力。一种提高解码质量的潜在方法可能涉及生成多个推理路径,并用一个验证器对每个路径进行评分,尽管这需要训练验证器【16, Cobbe 等人,2021;66, Shen 等人,2021;71, Thoppilan 等人,2022】。
对少样本示例数量的鲁棒性。由于正文中的实验使用了固定数量(8个)的少样本示例(受限于1024个token的输入长度),我们验证了思维链提示对不同数量的少样本示例是鲁棒的。我们对LaMDA 137B进行了实验,比较了思维链提示与标准提示在五个标准提示扩展曲线大多平坦的数据集上的表现(即最大模型未达到高性能)。如图11所示,思维链提示相对于标准提示的改进在改变提示中少样本示例数量时仍然保持鲁棒。