深度学习自然语言处理 原创
作者:wkk
思维链(CoT)是一个循序渐进、连贯的推理链,通常被用作大型语言模型(LLM)的提示策略并体现出了巨大的优势。近年来,基于CoT提示的展示出的效果吸引了众多的研究。
然而,对CoT提示的关键因素仍缺乏系统的总结,对提示的使用也缺乏全面的指导。
为了更深入地了解CoT提示,本文对当前的广泛研究进行了调查,对可能影响CoT提示效果的几个因素进行了系统全面的分析,并介绍了在这些讨论下如何更好地将其应用于不同的应用中。通过进一步分析CoT提示面临的挑战,提出了一些未来的发展方向,为相关研究提供总体参考。
论文:Towards Better Chain-of-Thought Prompting Strategies: A Survey
地址:https://browse.arxiv.org/abs/2310.04959
简介
基于人类的自然逐步思维能力的方式,研究人员基于LLM提出了思维链(CoT)提示来解决多步推理问题。这种提示策略试图结合中间步骤来指导LLM进行渐进式推理,并在许多推理基准上实现了令人惊讶的改进,即使在包括跨域在内的一些任务。
CoT 提示确保了逻辑和可跟踪的推理过程,这对于人类理解更具有可解释性。
CoT提示的结果引发了对不同模型上不同任务的CoT提示策略设计的探索热潮。但在设计具体策略之前,有必要系统地了解哪些因素可能影响CoT提示的表现。此外,尽管CoT提示在推理任务中显示出其优势,但它在通用性和不透明机制等方面仍有一些局限性。为了更好地指导进一步的工作,有必要对CoT的当前挑战进行分析。
本文对CoT进行了全面而系统的分析。首先,将CoT提示形式化,下图展示了CoT的通用方法,这构成了分析和讨论的基础。然后,确定了四个显著影响CoT提示性能的关键因素:
任务类型
提示设计
扩展策略
模型
背景知识
LLMs
大型语言模型(LLMs)是指使用大量语料库预先训练的大型转换器架构模型。随着模型大小和训练语料库的增加,它开始出现一些新的能力。近年来,LLM在许多NLP领域取得了显著进展。
提示和上下文学习
提示是一种通过以特定方式修改输入样本来更好地引出语言模型训练阶段获得的知识和能力的策略。上下文学习是一种特殊设计的提示策略,它在查询样本前面加上一些示例演示,包括查询和答案,使模型能够类似地进行预测。上下文学习是一种无需训练的范式,可以在Few-shot场景下显著提高LLM性能和许多NLP基准的数据效率。
LLM推理
推理是一个复杂的过程,包括使用证据、逻辑思维和论证。最近,结合上下文学习策略,LLM在推理任务方面取得了显著进展。特别是在思维链提示的帮助下,神经网络在许多推理基准上取得了前所未有的突破。一些工作表明,当语言模型处于一定规模时,推理能力可能会出现。
什么是CoT
定义:CoT提示是专门设计的输入序列,用于指示模型生成连贯的一系列中间推理步骤。
其中,“中间推理步骤”指的是不同工作的差异。本文的研究范围是对当今多步任务的提示工作更普遍的覆盖,范围从常见的逐步推理到多步任务部署,涵盖了各种非编程问题划分过程,包括子问题分解和多步部署。
CoT提示是一种利用CoT提示的策略,其工作原理为:
如上图所示,给定一个特定任务,并设计特定的CoT prompt。在可选扩展策略的帮助下,模型根据输入提示预测答案。其中task、prompts、extension strategies和models是CoT的关键因素,对最终性能有重大影响。下图展示了各种CoT提示策略的分类。
任务类型
任务是使用CoT提示时的目标。在设计CoT提示策略之前,有必要澄清哪些类型的任务容易受到CoT提示的推动。
闭域推理与问答
此类型的任务包括问题中的所有必要条件和背景知识。模型需要选择信息丰富的材料并对这些材料进行推理。CoT提示可以提供一种推理模式来指导如何选择关键材料并对其进行推理。
开放域推理和问答
这类任务旨在回答基于大规模非结构化知识库的问题,并且不包括问题中所有必要的知识。在这种情况下,LLM被迫使用自己的知识来解决问题,并且CoT提示的性能在很大程度上取决于LLM的知识质量。有些任务甚至需要对自然语言的语义有更深入的理解。不恰当地将CoT提示引入这些知识或面向语义的任务甚至可能损害性能。为了解决这些问题,一些工作使用外部工具来注入所需的知识。
代码生成
代码生成旨在根据输入指令生成代码。由于代码的内部逻辑形式,CoT的逐步推理链与代码生成所需的能力是一致的。
prompts设计
当任务确定后,有必要设计一个有效的CoT提示。除了查询之外,CoT提示中还有两个特殊元素:CoT示例和文本指令。CoT示例是几个逐步推理的范例,文本指令是主动指导渐进式解决过程的文本序列。CoT提示应该至少包含其中一个元素。通常,带有(或不带有)示例的CoT提示称为few-shot CoT(或zero-shot CoT)。下图展示了几个CoT提示示例。
示例
在Few-shot的CoT中,示例是必不可少的部分。如上图所示,CoT示例是一个(问题、理由、答案)三元组,其中理由包含从问题到答案的中间推理步骤。
文本说明
LLM显示出即使在Zero-shot情况下也能遵循明确指令的能力。受此启发,一些工作发现,用“让我们一步一步地思考”这样的主动理论指令明确提示LLM可以指导渐进推理。在没有任何示例的情况下,与非CoT方法相比,这种简单的Zero-shot策略展示出出色效果,这意味着这些文本指令可以类似地引发LLM的推理能力。一些工作还发现,将这些文本指令与Few-shot CoT相结合可以实现进一步的性能提升。
扩展策略
给定一个 CoT 提示,有许多可能的扩展策略来增强提示性能。
集成
集成学习是一种有效的策略,它结合了不同的学习器,与单个学习器相比提高了模型性能。最近的工作在 CoT 提示上使用集成策略时取得了更好的性能,这有助于纠正单个推理过程产生的错误,并将不同的提示和演示集成到单个预测中。然而,对于 vanilla CoT 已经有效解决的问题,不必要的集成可能会向自信的预测注入噪声,而是会损害模型性能。
子问题划分
当面对问题需要递归推断或比示例更难时,将问题划分为几个子问题可能是一个更好的选择。
与普通 CoT 相比,子问题划分策略将复杂问题分解为一系列简单的子问题,更容易解决,使模型能够完成比示例更难的查询问题。此外,在处理每个子问题时,模型不受与当前子问题无关的信息,更多信息信息容易指导有效的推理。此外,不同子问题所需的能力是不同的。这种策略使得部署具有不同模块的每个子问题并注入外部辅助更加方便。
外部辅助
为了扩展LLM的能力并帮助LLM在更广泛的应用程序中执行,在推理过程中引入外部来源(包括知识、工具或代码解释器)是很有用的。知识注入在需要外部知识的任务中尤其有用,如常识性QA。工具和代码辅助策略在需要精确数值计算或搜索引擎等LLM能力之外的能力的问题上表现出优势。通过适当的提示,LLM可以生成任务部署链,以指示何时何地调用外部工具、代码解释器甚至其他模型,以解决更复杂的问题。
合理化
通常,LLM预测的基本原理会犯一些错误并导致错误的答案。如果这些错误可以被纠正,就有可能合理化推理过程并提高性能。人工合理化是有效的,但成本太高。
一个简单的方法是使用一些提示来引导模型重新思考。当模型产生错误的答案时,可以告诉模型正确的答案,并要求它自我修正不合逻辑的推理,并在答案的基础上重新生成基本原理。这个过程可以被视为一个自学习过程,模型可以在监督答案的情况下逐步提高推理能力。然而,仍然很难将不完美的理由合理化,从而得出正确的答案。
模型
LLM作为解决问题的主要角色,对最终预测有着显著的影响。本文从模型大小和训练语料库两个方面进行讨论,从而分析哪些类型的模型在CoT提示下更有效。
模型大小
许多研究发现,模型相对较小(通常低于 10 亿参数),CoT 不会保持积极影响。但是随着模型大小增加到一定大小(超过 10 亿参数),它将表现出突然的性能中断。这意味着 CoT 是 LLM 的涌现能力。使用 CoT 提示小型模型通常会导致幻觉,这通常表现为流畅但不合逻辑的生成。
但通过CoT增强小模型推理能力仍然是可能的。一些工作用自建的CoT数据集或知识提炼对小模型进行了微调,使小模型兼容,即使在很Few-shot的场景下也能执行逐步推理。然而,除了CoT调整后的逐步推理之外,小模型会忘记其他任务的一般能力,并且在需要大量知识进行推理的任务上仍然落后于大模型。
训练语料库
LLM表现出的能力来源于训练语料库。一些工作发现,当使用CoT提示时,用代码预训练的模型可以获得更多的性能增益。指令调整还显示出与CoT提示和Zero-shot学习表现的相关性,这可以通过指令调整的训练语料库中CoT样样本的存在来说明。最近的工作甚至试图将CoT样本明确地纳入训练语料库,以增强逐步推理能力,避免过度拟合单调的样本模板。
总之,将上述内容纳入训练语料库可以为LLM引入更多的推理材料和必要的知识,从而对CoT推理能力产生深远影响。
未来工作
本文探讨了CoT未来的工作可以从Faithfulness、Generality、Self-rationalization、Rationale Analysis和Theoretical Analysis等方面展开。
总结
本文回顾了思想链提示的研究现状。强调了可能影响CoT提示性能的四个因素,并介绍了基于这些因素的方法。给出了在面对不同环境时正确利用CoT提示的总体方向。此外,还讨论了当前CoT提示方面的挑战,并提出了一些潜在的方向。
备注:昵称-学校/公司-方向/会议(eg.ACL),进入技术/投稿群
id:DLNLPer,记得备注呦