CoT:概述与改进方法
概述、Zero-shot CoT、Few-shot CoT、PAL、PoT、ToT、MathPrompter、Complex CoT、PS、Self-Consistency、ART、Auto-CoT、Reprompting、Agent-instruct、MetaCoT、COSP、LogiCoT、Role-Play、Synthetic、AutoMate CoT、Explanation-Selecti
概述
关于提示词和提示词工程的基本概念,请参考Prompt Engineering,本文从网络上汇总各种CoT改进版,其中有些版本还挺流行,如:Role-Play(角色设定)、ToT(思维树)、Self-Consistency(自我一致性)。
CoT综述,论文,开源(GitHub,464 Star,15 Fork)。
CoT优势:
- 提升推理能力:思维链推理将复杂问题分解为可管理的步骤,并建立这些步骤之间的联系,从而促进推理;
- 提供可解释性:思维链推理提供可观察的推理轨迹,使用户能够理解模型的决策过程,使推理过程透明且可信;
- 促进协作:细粒度的推理轨迹促进用户与系统的交互,允许用户改变模型的执行轨迹,从而促进基于LLM的自主代理的发展。
Zero-shot CoT
零样本CoT,允许模型在没有额外训练或示例的情况下,通过一系列逻辑推理步骤来解决复杂问题。核心在于,通过在问题前添加特定的提示,如Let’s think step by step
,激发模型逻辑推理能力,使其能够生成解决问题的中间步骤。
Few-shot CoT
少样本CoT,通过提供少量示例来激发LLM推理能力。核心在于,不仅仅给出问题答案,还要展示出推导答案的思维过程,即思维链。这样,模型可以学习到如何通过一系列逻辑步骤来解决新的问题。通常需要在提示中包含问题的推导过程,让模型学会如何进行推理。
PAL
Program-Aided Language Models,核心是利用LLM来阅读自然语言问题,并生成程序作为中间推理步骤,然后将求解步骤外包给运行时环境,例如Python解释器。这样,LLMs只需要负责将自然语言问题分解成可执行的步骤,而具体的求解任务则由解释器来完成。
PoT
Program of Thoughts,旨在解决复杂的数值推理任务。通过使用语言模型(主要是Codex)来表达推理过程作为程序,将计算从推理中分离出来,由外部计算机执行生成的程序以得出答案。
ToT
论文,开源(GitHub,5.6K Star,562 Fork)。Tree of Thoughts,思维树。ToT将CoT扩展为树状结构,通过将思考过程构建为树状结构,在每个决策点生成多个思考分支,结合搜索算法(如BFS、DFS、Beam Search)探索解决方案空间,利用自评估机制选择最优路径,解决需要探索或战略前瞻的复杂问题。适合需要探索多种解决方案的复杂任务,如24点。缺点:高效的评估机制实现难,可能仅找到局部最优解。
图片来自论文。涉及几个关键步骤:
- Thought decomposition:思维分解,将问题分解为一系列连贯的思维步骤,每个步骤都是一个语言序列,作为问题解决的中介;
- Thought generator:思维生成,为每个树状结构的状态生成潜在的思维步骤;
- State evaluation:状态评估,评估每个状态的潜在价值,作为搜索算法的启发式标准;
- Search algorithm:搜索算法,探索思维树以找到最优解决方案。
MathPrompter
一种用于提高LLMs在解决算术推理任务时性能的技术。核心思想是利用零样本CoT,生成多个代数表达式或Python函数来解决同一个数学问题,从而提高输出结果的置信度。MathPrompter会检查中间步骤的有效性。
工作流程:
- 生成代数模板:将问题转化为代数形式,用变量替换数值,并建立关键值映射;
- 数学提示:使用两种不同的方法(代数方法和Python方法)来生成问题解析解。通过给LLM提供提示,让它生成额外的上下文:
- 代数提示:要求LLM写出数学方程,并以
Answer =
格式生成答案; - Python提示:要求LLM写出一个返回答案的Python函数。
- 代数提示:要求LLM写出数学方程,并以
- 多验证和交叉检查:通过从多个角度解决问题并比较结果,来确认解决方案的有效性,并确保其合理性和准确性。
限制是,尽管通过多次运行来提高结果的准确性,但这并不能总是保证输出的正确性。代数和Python表达式都有可能产生错误的结果,即使提示输出匹配。
Complex CoT
亦Complexity-CoT,旨在通过挑选合适的示例(exemplar)来引导LLM进行更有效的推理。核心思想是,如果作为上下文训练示例的推理路径足够复杂,那么在这些示例组成的提示下引导大模型推理的效果会更好。
PS
Plan-and-Solve,规划和解决,一种用于提升LLM在多步推理任务中表现的提示策略。
- 目的与组成: PS旨在解决Zero-shot-CoT推理中存在的问题,如计算错误、缺失步骤错误和语义误解错误。PS提示策略包含两个主要部分:首先,制定一个计划将整个任务分解为更小的子任务;其次,根据计划执行这些子任务。
- PS与PS+提示:
- PS提示:它使LLMs能够明确地设计解决问题的计划,并在预测输入问题的答案之前生成中间推理过程。
- PS+提示:为了解决计算错误并提高生成的推理步骤的质量,PS提示策略被扩展为PS+提示策略,其中增加更详细的指令,如“注意计算”、“提取相关变量及其对应的数值”以及“计算中间结果”。
PS通过引导LLMs制定详细的计划并执行该计划,提高LLMs在复杂推理任务上的性能,减少由于计算错误或遗漏关键信息而导致的错误。
Self-Consistency
自我一致性,旨在替换链式思维提示中使用的天真贪婪解码方法
。想法是通过少样本CoT,采样多个不同的推理路径,并选择使用生成结果最一致的答案。有助于提高CoT提示在涉及算术和常识推理的任务中的性能。
ART
自动推理并使用工具,使用LLM自动生成包含中间推理步骤的程序,在完成任务时交替运用CoT提示和工具。工作原理:
- 接新任务时从任务库选多步推理和工具使用示范;
- 测试中调用外部工具时暂停生成,整合输出后继续;
- 引导模型总结示范,拆分新任务并在合适处用工具,采用零样本形式,可手动扩展。
Auto-CoT
论文,开源(GitHub,1.9K Star,173 Fork),Auto-CoT,即Automatic CoT,一种自动化构建大模型演示的方法,旨在提高LLM在复杂推理任务中的表现。通过采样丰富的问题并生成相应的推理链来构建演示,实验结果表明,能够达到甚至超过手工设计的演示效果。
核心思想是利用LLM的能力,通过自动化流程来构建让我们一步步思考
的思维过程,从而避免手动设计思维链带来的巨大工作量。
包括两个主要阶段:
- 问题聚类:将给定数据集的问题划分为几个聚类(簇);
- 演示抽样:从每组数组(每个簇)中选择一个具有代表性的问题,并使用带有简单启发式的Zero-Shot-CoT生成其推理链
实现方法主要依赖于问题向量表示、聚类算法和范例构建。使用Sentence-BERT对问题进行编码,然后使用K-means等聚类算法根据问题的向量表示进行聚类,最后选择距离聚类中心近的问题,并生成推理链。
适用于各种需要复杂推理的任务,如数学计算、问题解答和零样本学习。可显著提高模型在解决这些问题时的透明度和准确性,对于教育、搜索引擎优化和智能家居等领域的应用有着巨大的潜力。
Reprompting
一种自动化的链式思考提示推断算法,通过吉布斯采样(Gibbs sampling)来自动学习给定任务的CoT配方,无需人工干预。通过迭代采样新配方,使用先前采样的配方作为父提示来解决其他训练问题,从而推断出对于一组训练样本始终有效的CoT配方。
核心思想是通过迭代采样来发现有效的CoT提示,这些提示可以在训练集上优化,并作为解决未见测试问题的有效CoT提示。这种方法使得LLM能够在没有人工指导的情况下解决复杂的推理任务。Reprompting还支持模型组合,即使用不同的LLMs来初始化和采样新的配方,这可以通过使用一个更强的LLM来生成初始CoT解决方案,然后使用一个较弱的LLM来优化自身提示,从而显著提高较弱模型的性能。
Agent-Instruct
一个可扩展的代理框架,用于自动创建大量多样化和高质量的合成数据。专注于创建示范和反馈数据,只需要原始文档作为输入。它被设计用于生成教学(Generative Teaching),即通过强大的模型创建数据来教授另一个模型新技能或行为。
主要流程:
- 种子收集(Seed Collection):收集各种初始资源,如教科书章节、网络文章和代码片段,作为创建新指令的基础材料。
- 内容转换(Content Transformation):专业代理处理每个种子,将其转换为便于创建指令的中间形式。
- 种子指令生成(Seed Instruction Generation):多个代理使用转换后的种子生成广泛的指令。
- 指令优化(Instruction Refinement):通过迭代过程提高生成指令的复杂性和质量。
通过自动化流程生成高质量的合成数据,用于后训练语言模型,以教授新技能或行为,从而提高模型在各种任务上的性能。
MetaCoT
论文,一种在混合任务场景中提升LLM泛化能力的方法,通过CoT生成中间推理链作为得出答案的依据。核心思想是弥补CoT在使用LLM时的性能与泛化之间的差距。主要包括三个阶段:
- 场景识别(Scenario Identification):通过抽样不同问题作为上下文学习示例,帮助自动根据输入问题分类场景;
- 示例选择(Demonstration Selection):根据第一阶段获得的场景,从池中构建多样化的示例;
- 答案推导(Answer Derivation):使用先前获取的示例对输入问题进行最终的答案推断。
COSP
Consistency-based Self-Adaptive Prompting,一种用于改善零样本CoT的方法。核心在于它不需要手工制作的响应或真实标签,而是通过从LLM的零样本输出中选择和构建示例集。COSP通过结合一致性、多样性和重复性的标准来选择示例。
COSP使用答案熵作为选择标准之一,其思想是利用熵的概念来衡量答案的不确定性或多样性。在COSP中,答案熵被用作一个代理指标,用于评估不同任务中答案的正确性,其中低熵与正确性正相关。具体来说,COSP在第一阶段执行零样本推理,并计算归一化熵,以评估不同解码路径产生的预测的一致性。归一化熵是通过计算预测答案的分布的熵来得到的,如果所有预测都不同,则熵达到最大值;如果预测集中,则熵值较低。通过这种方式,COSP能够识别出那些具有高一致性(即低熵)的预测,并将它们作为构建示例集的候选。
总结来说,COSP通过答案熵来评估LLM输出的一致性,并基于此来选择用于构建示例集的答案,从而提高零样本推理的性能。
LogiCoT
论文,GitHub,LogiCoT(Logical Chain-of-Thought Instruction-Tuning)是一种新的指令调整数据集,专为GPT-4设计的逻辑链式推理能力。它旨在通过一系列指令来提升模型的逻辑推理能力,这些指令能够引导GPT-4生成链式推理的理由。核心在于利用GPT-4的能力来生成高质量的输出,这些输出既包含符号推理也包含多步骤的链式推理,为增强AI模型的逻辑推理能力提供一个全面而细致的资源。
LogiCoT的构建是一个多阶段过程,使用GPT-4作为一个教学助手:
- 选择合适的种子数据,这些数据包含正确的输出和可选的链式推理链;
- 将这些任务转化为清晰、明确的提示,以激发GPT-4的逻辑推理能力;
- 将种子数据和相应的指令结合起来,输入到GPT-4中以生成响应。GPT-4的输出由正确的标签和推理链引导,最终使用正确的输出和GPT-4的响应作为指令数据。
LogiCoT通过指令调整方案对LLaMA-7b模型进行微调,结果表明,与最先进的指令调整模型相比,LogiCoT在逻辑推理基准测试和以人为中心的基准测试上都显示出显著的性能提升。这项工作与最近的研究表明,当小型语言模型专门针对目标链式推理任务时,它们可以实现竞争性的多步推理能力。
总的来说,LogiCoT通过结合逻辑推理和GPT-4的生成能力,为AI系统在逻辑推理任务上的能力提升设定了新的标准。
Role-Play
论文,角色扮演提示,通过给LLM分配角色,来指导响应的风格、语气和焦点,可增强文本的清晰度和准确性,通过与角色对齐来提高推理和解释任务的表现。适用于广泛的任务,如写作、推理和基于对话的应用,并且可以定制响应以适应特定的上下文。
最佳实践包括使用非亲密角色、性别中立术语,并采用两步方法以获得更好的结果。然而,这种方法的限制在于它可能会强化刻板印象,并且严重依赖于模型训练数据中角色表示的质量。
核心在于通过分配角色给LLM来引导其行为,从而增强输出的风格、准确性和深度。无论是为了某种特定的语气、提高清晰度还是引出复杂和微妙的响应,角色扮演提示都可以提供帮助。通过遵循最佳实践并意识到潜在的陷阱,可充分利用角色扮演提示,使你与语言模型的互动更加有效,并满足特定需求。
Synthetic Prompting
通过利用少量手工制作的示例来提示模型自我生成更多的示例,并选择有效的演示来激发更好的推理,在生成新示例时交替进行反向和正向过程。
- 反向过程(Backward Process):模型根据采样的推理链生成一个问题,确保这个问题是可以解决且清晰的。
- 正向过程(Forward Process):模型为合成的问题产生一个更详细的推理链,提高示例的质量。
通过这种方式,可显著提高LLM在数值推理、算法推理和符号推理等任务上的表现,相比于现有的提示技术,可达到高达15.6%的绝对增益。
此外,Synthetic Prompting还提出一种基于簇内复杂度的选择方案,旨在通过聚类它们并从每个簇中选择最复杂的一个(推理链最长的那一个),来最大化演示的多样性和信息量。
AutoMate CoT
论文,GitHub,核心在于减少人工设计推理链的需要,通过自动化的方式生成和选择推理链,以提高模型在复杂推理任务中的表现。
- 自动化推理链生成:AutoMate CoT能够自动从少量标注数据集中增强推理链,并修剪低质量的链,构建基于标签的机器生成推理链的候选池;
- 聚类和抽样:两阶段,聚类阶段,将给定数据集的问题划分为几个簇。抽样阶段,从每个簇中选择一个代表性问题,并使用简单的启发式方法使用Zero-Shot-CoT生成其推理链;
- 质量控制:由于Zero-Shot-CoT生成的推理链可能包含错误,提出一些缓解策略,通过后处理质量控制来生成可用的推理链。
Explanation-Selection
论文,解释-选择,一个在可解释人工智能(XAI)领域中的关键技术,它涉及到从多个可能的解释中选择最合适的一个来解释人工智能系统的行为或决策。一些关键点:
- 自动化推理与解释选择:在XAI领域,自动化推理技术是核心,它帮助构建对AI系统的信任,超越了单纯的预测准确性和鲁棒性。Explanation-Selection技术结合了机器学习和自动化推理,用于生成和选择解释,以促进科学发现的过程;
- 解释选择问题分类:提出一个基于社会学和认知科学见解的解释选择问题的分类体系,这个体系包含现有概念,并引入新属性;
- 解释的期望属性:解释选择问题的研究相对较少,导致文献中存在冗余和重叠的概念。为了解决这些问题,研究者们从社会科学中识别出一组可以用来指导解释选择的期望属性,包括必要性、充分性、最小性和普遍性等;
- 与因果关系和溯因理论的联系:解释选择与依赖理论的因果关系有关,也与溯因理论紧密相关,后者是皮尔斯提出的除了演绎和归纳之外的第三种推理模式;
- 解释选择的应用:在实际应用中,不同解释可导致模型性能的显著差异。未经针对特定任务调整的解释,如非专家编写的现成解释,可能导致平庸的性能。因此,优化解释注入提示成为一个黑盒问题,提出一个两阶段框架来有效地搜索可能获得高分的解释组合;
- 使用未标记数据进行解释选择:在链式思考提示中,可以使用未标记数据来优化解释。首先为提示中的每个示例生成候选解释集,然后通过两阶段框架找到有效的解释组合。首先根据两个代理指标(对数似然和新示例上的准确性)评估每个上下文示例中的解释,然后搜索解释组合以找到在银标发展集上表现良好的那一个;
- 实验结果:在四个文本推理任务中,包括问答、数学推理和自然语言推理,结果表明代理指标与真实准确性相关,并且整体方法可以有效改进提示,超过众包注释和简单搜索策略;
综上所述,Explanation-Selection是一个复杂的过程,涉及到从多个可能的解释中选择最佳解释,以提高AI系统的可解释性和性能。通过自动化推理和科学的解释选择,可以更好地理解和信任AI系统。
BoostedPrompt
论文,GitHub,通过使用一个小数据集来构建一组少样本提示,共同组成一个增强提示集成(boosted prompt ensemble)。核心在于,每个提示的少量样本例子都是逐步选择的,以确保这些例子是“困难”的例子,即在前一步集成上的不确定性较高的例子。
特点:
- 逐步选择困难样本:对于每个提示,其少量样本例子被选择为前一步集成不确定的“困难”例子,这些例子是模型当前性能边界之外的问题
- 优于单一提示集成:在GSM8k和AQuA等数据集上,显示出比单一提示输出空间集成和装袋提示空间集成更好的性能
- 训练时和测试时版本:提出训练时和测试时版本,两个版本使用不同级别的可用标注,并对该算法进行详细的实证研究
- 算法细节:通过逐步迭代过程构建增强的少量样本提示集成,每一步都会添加新的提示以改善性能
- 在线BoostedPrompting:可通过在线方式运行BoostedPrompting,即每当有新的多样化提示可用时,就将其添加到提示集中
CoD
论文,CoT的问题:计算资源消耗大、推理冗长等。提出Chain-of-Draft,草稿链。
人类在解决复杂问题时,通常不会详细阐述每一个细节,而是会记录关键的中间结果,形成简洁草稿,以推动思考过程。CoD正是受到这一人类认知行为的启发而提出的。它旨在通过限制每个推理步骤使用的单词数量,减少冗长的表述,仅关注推进问题解决所需的关键计算或转换,使LLMs在推理过程中生成简洁且信息丰富的输出。
CoD优势:
- 降低延迟和成本;
- 保持推理深度与准确性
TokenSkip
论文,GitHub,提出TokenSkip方法,让LLM在推理时能够自动跳过那些不重要的Token,从而实现可控的思维链压缩,提升推理速度。
具体实现分三个步骤:
- Token修剪:根据每个Token的语义重要性进行排序,根据设定的压缩比例,保留最重要的Token;
- 训练:用修剪后的思维链数据对大模型进行微调。为了让大模型学会在不同的压缩比例下工作(推理),训练数据中会包含不同压缩比例的思维链;
- 推理:让大模型根据设定的压缩比例,自动跳过不重要的Token,生成压缩后的思维链。
对比TokenSkip和其他两种常见的长度控制方法:基于提示的压缩和截断法。实验结果显示,基于提示的压缩方法无法达到指定的压缩比例,而截断法虽然能压缩Token数量,但会导致推理性能大幅下降。相比之下,TokenSkip不仅能够精确控制压缩比例,还能保持较高的推理性能。
CoT合成器
Self-consistency(自一致性)和Best-of-N(N选一)等在一定程度上提高模型推理性能,但都依赖于候选回答的质量,且在所有候选回答都错误时无法生成正确答案。
论文,提出CoT-based Synthesizer,通过结合CoT,分析多个候选回答的互补信息,合成更优的答案,即使所有候选回答都存在错误。
给定一个用户查询 x x x,策略模型会从概率分布中进行 N N N次随机采样生成,生成一组候选回答 R = { r i , r 2 , . . . , r n } R=\{r_i,r_2,...,r_n\} R={ri,r2,...,rn},其中 r i r_i ri表示第 i i i个候选答案。这些候选回答与用户查询 x x x一起组成 { x , R } \{x,R\} {x,R}。随后合成器(Synthesizer)的分析与合成模型会被用来重新生成一个新的答案 y y y。这个过程可以形式化为: ( x , R ) → f S y n t h e s i z e r y (x,R)\xrightarrow{f_{\mathrm{Synthesizer}}}y (x,R)fSynthesizery
其中 f S y n t h e s i z e r f_{\mathrm{Synthesizer}} fSynthesizer,表示应用于查询 x x x和候选回答集 R R R的合成函数,最终生成答案 y y y。
策略模型:指直接生成用户查询响应的模型。它通过多次随机采样生成多个候选回答。
候选回答集:策略模型生成的多个候选回答 R = { r i , r 2 , . . . , r n } R=\{r_i,r_2,...,r_n\} R={ri,r2,...,rn},这些回答可能包含正确的、部分正确的或完全错误的答案。
合成器:合成器是一个后处理模型,它的任务是通过分析候选回答集中的信息,生成一个新的、更优的答案 y y y。
CoT-based Synthesizer,通过分析多个候选回答的互补信息,合成更优的答案。为了实现这一目标,设计一个两阶段的数据生成管道,用于构建高质量的合成训练数据,并基于这些数据训练了一个较小的LLM(Synthesizer-8B),以提升大模型的推理性能。
合成器推理
多样化回答生成
为了生成多样且高质量的候选回答,采用了以下解码策略:
高采样温度:设置较高的采样温度 t t t=0.9,以增加生成回答的随机性,促进多样性。
Top-P采样:使用Top-P采样 p p p=0.9,仅保留累积概率达到的最可能的token,避免生成语义无关的低概率候选回答,确保生成的回答具有连贯性和相关性。
通过这些策略,生成一组多样且连贯的候选回答 R = { r i , r 2 , . . . , r n } R=\{r_i,r_2,...,r_n\} R={ri,r2,...,rn}。
回答分析与合成
生成候选回答后,合成器会对这些回答进行分析和合成,生成最终的答案。具体步骤:
- 回答分析:合成器首先分析用户查询 x x x与每个候选回答 r i r_i ri之间的关系,考虑回答的频率、相关性和准确性。虽然高频回答可能具有较高的可信度,但合成器并不完全依赖频率作为评估标准,而是优先考虑逻辑一致性和事实准确性,从而识别出部分正确或误导性的回答,并从中提取有价值的信息。
- 回答合成:如果候选回答中存在正确答案,合成器会进一步从其他候选回答中提取有效的推理步骤,丰富最终答案。如果所有候选回答都存在缺陷,合成器会利用其推理能力,整合多个候选回答中的合理元素,构建一个更连贯和准确的答案。
数据生成管道
为了训练CoT-based Synthesizer,设计一个两阶段的数据生成管道,确保生成的训练数据具有高质量和多样性。
合成答案生成
对于给定的训练查询 x x x,首先使用采样LLM(如Llama3-8B-Instruct)生成候选回答集 R R R。然后将这些候选回答输入到高性能响应LLM(如Llama3.1-70B-Instruct)中,生成合成答案。由于查询 x x x的复杂性,响应LLM可能无法在第一次尝试中生成准确的答案。因此,进行了多次采样(如 N N N=50次),显著增加了获得正确答案的可能性。为了确保合成答案的质量,使用黄金答案 y g y_g yg进行过滤,保留包含CoT分析和合成的正确回答 y y y。
LLM修复
当所有候选回答 R R R都错误时,响应模型在初始采样阶段难以生成正确的合成答案。为此,需明确告知响应模型所有候选回答 R R R都是错误的,并提示其反思这些回答中的错误。通过分析错误的回答,模型能够识别出有效的推理步骤,并生成更可能正确的答案。然后,对新生成的回答进行过滤,保留正确的回答 y y y。
合成器训练
通过上述数据生成管道,构建合成训练数据集 M = { ( x ( i ) , R ( i ) , y ( i ) ) } i = 1 N M=\left\{(x^{(i)},R^{(i)},y^{(i)})\right\}_{i=1}^{N} M={(x(i),R(i),y(i))}i=1N,其中 x x x表示用户查询, R R R是候选回答集, y y y是由响应LLM生成的正确合成答案。基于该数据集训练CoT-based Synthesizer-8B模型,以用户查询 x x x和候选回答集 R R R作为输入,生成正确答案 y y y作为输出。生成概率定义为: p ϕ ( y ∣ x , R ) = ∏ i = 1 T p ϕ ( y i ∣ x , R , y < i ) p_\phi(y\mid x,R)=\prod_{i=1}^{T}p_\phi(y_i\mid x,R,y_{<i}) pϕ(y∣x,R)=i=1∏Tpϕ(yi∣x,R,y<i)
其中, T T T是序列长度, y i y_i yi是第 i i i个目标token, y < i y_{<i} y<i表示已生成的上下文(即所有之前的token)。
通过训练,模型学会如何利用用户查询 x x x和候选回答集 R R R生成准确且上下文相关的答案 y y y,从而增强其推理和合成能力。
参考
更多推荐
所有评论(0)