当前位置: 首页 > news >正文

大型语言模型中的自动化思维链提示

摘要

大型语言模型(LLMs)能够通过生成中间推理步骤来执行复杂的推理任务。为提示演示提供这些步骤的过程被称为思维链(CoT)提示。CoT提示有两种主要范式。一种使用简单的提示语,如“让我们一步一步思考”,在回答问题之前促进逐步思考。另一种则逐个使用一些手动示范,每个示范包含一个问题和一个推理链,最终得出答案。第二种范式的优越性能依赖于逐个手工制作任务特定的示范。我们展示了通过利用带有“让我们一步一步思考”提示的LLMs生成推理链来逐个构建示范,这样可以消除手动制作的工作。即,让我们不仅仅是一步一步思考,还要逐个思考。然而,这些生成的推理链往往会出现错误。为了减轻这些错误的影响,我们发现多样性对于自动构建示范至关重要。我们提出了一种自动化CoT提示方法:AutoCoT。它通过多样化的问题采样来生成推理链,从而构建示范。在十个公共基准推理任务中,使用GPT-3,Auto-CoT始终与需要手动设计示范的CoT范式表现相当,甚至超越了它。代码可以在 https://github.com/amazon-research/auto-cot 获取。

1 引言

大型语言模型(LLMs)[Brown et al., 2020, Thoppilan et al., 2022, Rae et al., 2021, Chowdhery et al., 2022]通过将多步骤问题分解为中间步骤,再给出答案,已在复杂推理任务中取得了令人瞩目的表现。这一推理过程是通过一种非常新的技术——思维链(CoT)提示[Wei et al., 2022a]激发的。

CoT提示可以分为两种主要范式。一种是在测试问题后添加一个单一的提示,如“让我们一步一步思考”,以促进LLMs中的推理链[Kojima et al., 2022]。由于这一提示范式与任务无关,且不需要输入输出示范,因此被称为zero-shot CoT(图1左)。使用零-shot CoT,LLMs已经显示出不错的 zero-shot推理能力。另一种范式是少量示范的提示,通过手动逐个展示推理链[Wei et al., 2022a]。每个示范包含一个问题和一个推理链。推理链由一系列中间推理步骤和期望的答案组成。由于所有示范都是手工设计的,这一范式被称为手动CoT(图1右)。

在实际应用中,手动CoT的表现比零-shot CoT更强[Wei et al., 2022a, Kojima et al., 2022]。然而,这一优越表现依赖于手工制作有效示范的工作。具体而言,手工设计需要大量的努力来构思问题及其推理链。此外,任务特定示范的设计工作量更大:不同的任务,如算术[Roy and Roth, 2015]和常识推理[Talmor et al., 2019],需要不同方式的示范。为了消除这种手工设计,我们提倡另一种Auto-CoT范式,通过自动化构建带有问题和推理链的示范。具体而言,Auto-CoT利用带有“让我们一步一步思考”提示的LLMs来逐个生成推理链,从而逐步构建示范。也就是说,让我们不仅仅是一步一步思考,还要逐个思考。
在这里插入图片描述

然而,我们发现这个挑战不能通过简单的解决方案有效应对。例如,对于一个数据集中的测试问题,检索语义相似的问题并调用zero-shot CoT来生成推理链会失败。尽管LLMs在零-shot推理上表现不错,但它们并不完美:zero-shot CoT仍然可能在推理链中犯错。

为了减轻zero-shot CoT推理链错误的影响,我们的分析表明,示范问题的多样性是关键。基于这一见解,我们提出了一种Auto-CoT方法来自动构建示范。Auto-CoT包括两个主要步骤。首先,将给定数据集中的问题划分为若干个簇。其次,从每个簇中选择一个代表性问题,并使用简单启发式方法,通过零-shot CoT生成其推理链。

我们在十个基准推理任务上评估了Auto-CoT,包括:(i)算术推理(MultiArith [Roy and Roth, 2015],GSM8K [Cobbe et al., 2021],AQUA-RAT [Ling et al., 2017],SVAMP [Patel et al., 2021]);(ii)常识推理(CSQA [Talmor et al., 2019],StrategyQA [Geva et al., 2021]);(iii)符号推理(最后字母拼接,硬币翻转)[Wei et al., 2022a]。实验结果表明,使用GPT-3时,Auto-CoT始终与需要手动设计的Manual-CoT相当或更好。这表明,LLMs可以通过自动构建示范来执行CoT推理。

2 相关工作

本节回顾了两条为本研究奠定基础的研究线索:链式思维(CoT)提示用于多步推理和上下文学习用于引导LLMs从示范中学习。

2.1 链式思维提示

CoT提示是一种无梯度的技术,通过生成中间推理步骤来引导LLMs产生最终答案。Wei等人[2022a]正式研究了语言模型中的CoT提示技术。这项技术促使LLMs生成一系列连贯的中间推理步骤,最终得出问题的答案。研究表明,LLMs可以通过zero-shot提示(Zero-Shot-CoT)[Kojima等人,2022]或手动编写的少量示范(Manual-CoT)[Wei等人,2022a]来进行CoT推理。

Zero-Shot-CoT。Kojima等人[2022]展示了LLMs作为zero-shot推理者的优秀能力,其生成的推理过程已经反映了CoT推理。这一发现启发了我们利用自生成的推理过程来构建示范。LLMs生成推理过程在最近的研究中被证明是可行的[Zelikman等人,2022]。在他们的研究中,LLM被提示生成推理过程,选择那些生成正确答案的推理过程。然而,这需要一个带有标注答案的训练数据集。与此不同,我们的研究考虑的是一个更具挑战性的场景,即仅给出一组测试问题(没有训练数据集),这与Wei等人[2022a]和Kojima等人[2022]的CoT提示研究相一致。

Manual-CoT。Manual-CoT通过有效的手动示范激发CoT推理能力,取得了更强的性能。推理过程的示范是手动设计的。然而,设计问题及其推理过程的人工工作量是相当大的。近期的研究主要集中在手动编写更复杂的示范,或利用类似集成的方法来解决这一限制。一种趋势是问题分解。在最小到最多提示方法[Zhou等人,2022]中,复杂问题被分解为子问题,然后顺序解决这些子问题。另一种趋势是对测试问题的多个推理路径进行投票。Wang等人[2022a]提出了一种自一致性解码策略,通过对LLMs生成的多个输出进行采样,然后对最终答案进行多数投票。Wang等人[2022b]和Li等人[2022]通过在输入空间中引入随机性来产生更多样化的输出以进行投票。他们使用手动设计的示范作为种子集,并为这些示范生成额外的推理过程:从种子集中留下一个问题,使用其余示范生成该问题的推理过程,而LLM则完成这一过程。与上述依赖手动设计示范的研究不同,我们的工作旨在通过具有竞争力的性能消除手动设计。

2.2 上下文学习

CoT提示与上下文学习(ICL)[Radford等人,2019;Brown等人,2020]密切相关。ICL通过将一些提示示范作为输入的一部分,促使LLMs执行目标任务。ICL不需要梯度更新,可以让单个模型普适地执行多种任务。为提高ICL的性能,存在多种研究方向:(i)为测试实例检索相关示范,当前流行的做法是动态检索给定测试输入的相关训练示范[Rubin等人,2022;Su等人,2022];(ii)通过细粒度信息增强,如加入任务说明[Mishra等人,2022;Wei等人,2022b;Sanh等人,2022];(iii)操作LLMs输出概率,而不是直接计算目标标签的概率[Holtzman等人,2021;Zhao等人,2021;Min等人,2022a]。

尽管ICL取得了成功,研究表明[刘等人,2022a;陆等人,2022]ICL的效果可能因上下文示范的选择而存在很大差异[刘等人,2022b]。具体来说,提示格式(例如措辞或示范的顺序)可能导致性能波动[Webson和Pavlick,2022;Zhao等人,2021]。最近的研究[Min等人,2022b]甚至质疑了标准输入输出映射的必要性:使用不正确的标签作为示范例子,性能只会略微下降。然而,现有的ICL分析主要基于标准的分类和多选数据集,这些数据集只有简单的<input!output>映射。我们发现这些发现可能不适用于具有更复杂<input!rationale!output>映射的CoT提示场景。例如,在<input!rationale>映射或<rationale!output>映射中出现错误,会导致性能大幅下降(附录A.1)。

3 自动化链式思维的挑战

如前所述,ICL的性能依赖于手工设计的示范。根据Manual-CoT[Wei等人,2022a]的报告,使用不同注释员编写的示范会导致符号推理任务中最多28.2%的准确性差异,而改变示范的顺序则在大多数任务中导致不到2%的变化。这表明,Auto-CoT的关键挑战在于如何自动构造包含良好问题和推理链的示范。

回想一下,Manual-CoT手工设计了少量(例如8个)问题作为示范。由于基于相似性的检索方法在提示LLMs时得到了广泛应用[Rubin等人,2022;Su等人,2022],一个有前景的解决方案是使用相似性检索来采样示范问题。我们遵循CoT研究中更具挑战性的假设[Wei等人,2022a;Kojima等人,2022],即仅提供一组测试问题(没有训练数据集)。参考Liu等人[2022a],我们使用Sentence-BERT[Reimers和Gurevych,2019]对问题进行编码。对于测试数据集中的每个问题 q t e s t q ^ { \mathrm { t e s t } } qtest,我们从其余问题中采样示范问题 q i d e m o ( i = 1 , … , k ) q _ { i } ^ { \mathrm { d e m o } } \, ( i = 1 , \ldots , k ) qidemo(i=1,,k)

我们设计了一种Retrieval-Q-CoT方法,通过余弦相似度检索出前k个(例如k = 8)相似问题。为了与这种基于相似性的方法进行比较,我们还测试了一种相对更具多样性的方法:Random-Q-CoT,该方法为每个测试问题随机采样k个其他测试问题。

Retrieval-Q-CoT和Random-Q-CoT都调用Zero-Shot-CoT[Kojima等人,2022]来为每个采样的示范问题 q i d e m o q _ { i } ^ { \mathrm { d e m o } } qidemo生成推理链 c i d e m o c _ { i } ^ { \mathrm { d e m o } } cidemo(推理过程和答案),因为LLMs是优秀的zero-shot推理者[Kojima等人,2022]。除非另有说明,我们使用175B参数的GPT-3[Brown等人,2020](text-davinci-002)作为LLM。总体而言,Retrieval-Q-CoT和Random-Q-CoT都将 q i d e m o , c i d e m o p a i r s ( i = 1 , … ; k ) q _ { i } ^ { \mathrm { d e m o } } , c _ { i } ^ { \mathrm { d e m o } } \, \mathsf { p a i r s } \, ( i = 1 , \ldots ; k ) qidemo,cidemopairs(i=1,;k) q t e s t q ^ { \mathrm { t e s t } } qtest的拼接作为输入,预测 q t e s t q ^ { \mathrm { t e s t } } qtest的推理链,最终包含答案(如图1右侧所示)。

令我们感到意外的是,在算术数据集MultiArith [Roy 和 Roth,2015] 上,Retrieval-Q-CoT 的表现不如 Random-Q-CoT(见表1)。需要注意的是,检索方法最初是在带有标注标签的任务中提出的 [Rubin 等人,2022;Su 等人,2022],然而,调用 Zero-Shot-CoT 并不能保证生成的推理链完全正确。因此,我们假设 Retrieval-Q-CoT 表现不佳的原因是由于 Zero-Shot-CoT 生成了错误的推理链。

为了验证这一假设,我们在另外两个数据集 GSM8K [Cobbe 等人,2021] 和 AQuA [Ling 等人,2017] 上对 Retrieval-Q-CoT 进行了实验,这两个数据集具有带有标注推理链的训练集。带“√”的结果如表1所示。在使用标注推理链的设置下,Retrieval-Q-CoT 的表现甚至超过了 Manual-CoT。该结果表明,Retrieval-Q-CoT 在有人类标注时是有效的。

尽管人类标注很有价值,但这种手动工作是非常费力的。然而,通过 Zero-Shot-CoT 自动生成推理链的效果仍然不如 Manual-CoT,尤其是在没有解决问题采样策略挑战的情况下。为了设计出更有效的 Auto-CoT,我们需要更深入地理解其所面临的挑战。
在这里插入图片描述

3.1 Retrieval-Q-CoT 因相似性误导而失败

由于 Retrieval-Q-CoT 与 Manual-CoT 一样使用少量提示性示例,因此理应具备相当的表现。然而,在 Retrieval-Q-CoT 中,推理链(包括中间推理过程和最终答案)是通过 Zero-Shot-CoT 生成的:这可能导致错误,从而产生错误答案。我们将这类带有错误答案的示例称为错误示例(wrong demonstrations)。

直觉上,在从测试问题中检索出相似问题后,由 Zero-Shot-CoT 生成的错误示例可能会误导同一个大型语言模型(LLM)以类似的错误方式进行推理(例如复刻错误),从而导致测试问题也出错。我们将这种现象称为相似性误导(misleading by similarity)。我们将进一步分析相似性误导是否是 Retrieval-Q-CoT 表现不佳的原因之一。

首先,我们在 MultiArith 数据集的全部 600 个问题上调用 Zero-Shot-CoT。结果中,有 128 个问题(记作集合 Q)被错误回答(错误率:21.3% = 128/600)。正如前文所述,Retrieval-Q-CoT 和 Random-Q-CoT 是在 Zero-Shot-CoT 基础上添加额外示例,因此理论上应该表现更优。在这 128 个 Zero-Shot-CoT 失败的问题 Q 中,我们将 Retrieval-Q-CoT 或 Random-Q-CoT 依然失败的子集称为未解决问题(unresolved questions)。

我们通过将未解决问题的数量除以 128 来计算未解决率(unresolving rate)。未解决率越高,说明该方法越可能像 Zero-Shot-CoT 那样犯错。

如图2所示,Retrieval-Q-CoT 的未解决率为 46.9%,远高于 Random-Q-CoT 的 25.8%。这表明,当为测试问题采样相似问题时,Retrieval-Q-CoT 更容易受到相似性误导的负面影响。

为了进一步说明 Retrieval-Q-CoT 的未解决问题更容易“相似”,我们在表2中展示了一个案例分析。在左侧部分,检索出的示例问题与测试问题非常相似,均问及“他还需要多长时间来完成烹饪剩下的食物?”。Zero-Shot-CoT 所生成的推理链却错误地将“the rest”理解为“总共需要的时间”。由于受到这些错误示例的影响,Retrieval-Q-CoT 也误解了“the rest”的含义,因而失败。
在这里插入图片描述

相反,Random-Q-CoT 并未从类似问题中引入错误推理,而是使用了更为多样化(随机)的示例,从而正确理解了“the rest”的含义,避免了相似错误。

3.2 错误频繁集中在同一簇中

受到表 2 中观察结果的启发,我们使用 k-means 将全部 600 个测试问题划分为 k=8k = 8 个簇,其中每个簇包含语义相似的问题1。结合第 3.1 节中通过 Zero-Shot-CoT 生成的推理链,我们接下来关心的是:是否某些簇中的问题更容易被 Zero-Shot-CoT 错误解答。因此,我们为每个簇计算其错误率,即:

错误率=Zero-Shot-CoT 产生错误答案的问题数该簇中的总问题数 错误率 = Zero-Shot-CoT 产生错误答案的问题数 该簇中的总问题数 \text{错误率} = \frac{\text{Zero-Shot-CoT 产生错误答案的问题数}}{\text{该簇中的总问题数}} 错误率=该簇中的总问题数Zero-Shot-CoT 产生错误答案的问题数
在这里插入图片描述

如图 3 所示,存在一个错误频发的簇(Cluster 2),其 Zero-Shot-CoT 错误率高达 52.3%。这一现象可能具有普遍性,因为 Zero-Shot-CoT 在目标任务中可能缺乏解决某些常见问题的能力1。为便于描述,我们将错误率最高的簇称为高错误簇(例如图 3 中的 Cluster 2)。因此,以 zero-shot 方式生成的推理链存在不完善之处,这使得基于相似度的方法容易从高错误簇中检索出多个相似问题。

对于高错误簇中的测试问题,Retrieval-Q-CoT 更容易构造出带有多个相似错误的 demonstration,从而导致它重复 Zero-Shot-CoT 的错误。这一点也通过图 2 中 Retrieval-Q-CoT 更高的未解决率再次得到了印证。
在这里插入图片描述
温馨提示:
阅读全文请访问"AI深语解构" 大型语言模型中的自动化思维链提示

http://www.lryc.cn/news/581649.html

相关文章:

  • 【数据分析】R语言多源数据的基线特征汇总
  • 玄机——第三章 权限维持-linux权限维持-隐藏练习
  • Dify+Ollama+QwQ:3步本地部署,开启AI搜索新篇章
  • 实现Spring MVC登录验证与拦截器保护:从原理到实战
  • 【机器学习深度学习】 如何解决“宏平均偏低 / 小类识别差”的问题?
  • HRDNet: High-resolution Detection Network for Small Objects论文阅读
  • mac中创建 .command 文件,执行node服务
  • Omi录屏专家 Screen Recorder by Omi 屏幕录制Mac
  • 【Linux】基础开发工具(1)
  • 开发项目时遇到的横向越权、行锁表锁与事务的关联与区别、超卖问题
  • Java学习——Lombok
  • Anaconda 常用命令
  • 【Elasticsearch】自定义评分检索
  • 【卫星语音】基于神经网络的低码率语音编解码(ULBC)方案架构分析:以SoundStream为例
  • Maven引入第三方JAR包实战指南
  • Day06- (使用asyncio进行异步编程:事件循环和协程)
  • 群晖 DS3617xs DSM 6.1.7 解决 PhotoStation 安装失败问题 PHP7.0
  • 数据结构---B+树
  • Modbus 与 BACnet 协议互操作:工业协议转换方案(二)
  • 深入理解 classnames:React 动态类名管理的最佳实践
  • 【系统分析师】2023年真题:论文及解题思路
  • 【机器学习笔记Ⅰ】7 向量化
  • 【IOS】XCode创建firstapp并运行(成为IOS开发者)
  • Tuning Language Models by Proxy
  • CentOS-6与CentOS-7的网络配置IP设置方式对比 笔记250706
  • 【Vibe Coding 实战】我如何用 AI 把一张草图变成了能跑的应用
  • 黑马点评系列问题之基础篇16jedis redis依赖引入后仍然还是报错
  • Docker 容器编排原理与使用详解
  • 国内Ubuntu访问不了github等外网
  • 牛客周赛Round 99(Go语言)