一、任务类型
在使用 CoT Prompts 时,任务类型是目标,也就是说在设计 CoT Prompts 之前,有必要明确哪些类型的任务更容易受到 CoT Prompts 的推动,或者说是不同任务类型如何影响 CoT 的有效性。
封闭领域推理和问答
- 任务特点:这类任务要求模型在处理时要考虑所有必要的条件和背景知识。这意味着任务本身包含了完整的信息,模型需要从中提取有用的材料进行分析和推理。
- 模型需求:模型在执行这些任务时,需要能够识别和选择那些与任务解决直接相关的关键材料。也就是说,模型要有能力从提供的背景信息中找到最重要的部分,然后基于这些关键材料进行推理,以得出正确的答案。
- CoT Prompts 的作用:CoT Prompts 提供了一种推理模式或框架。这种框架能够引导模型逐步推理,帮助模型在复杂的任务中有效地选择和处理信息。
- 应用场景:在特定任务中,比如数学推理、符号推理、表格问答等,使用 CoT Prompts 可以显著提升模型的表现。这是因为 CoT Prompts 能够帮助模型更好地组织和利用提供的信息,从而在这些任务中表现得更为优越。
开放领域推理和问答
- 任务特点:这类任务需要模型基于一个大规模的、非结构化的知识库来回答问题。这意味着任务中没有提供所有必要的知识,模型需要依赖自己的知识储备来推导出答案。
- 模型的挑战:由于问题中不包含所有的信息,模型需要利用自身已经掌握的知识来解决问题。这对模型的知识储备提出了很高的要求。如果模型的知识储备不够丰富或准确,推理出的答案可能也会不准确。
- CoT Prompts 的依赖性:在这些任务中,CoT Prompts 的效果很大程度上依赖于大模型所掌握的知识的质量。如果模型的知识储备质量高,CoT Prompts 可以帮助模型更好地利用这些知识来逐步推理出正确的答案。
- 语义理解的需求:某些任务要求模型对自然语言的语义有更深的理解。也就是说,模型不仅要掌握知识,还要能理解并正确解读语言中的复杂含义。
- CoT Prompts 的限制:如果在这些知识或语义导向的任务中,不恰当地使用 CoT Prompts,反而可能会降低模型的性能。这可能是因为模型在这些任务中无法有效利用 CoT Prompts 提供的推理链条。
- 解决方案:为了解决这个问题,一些研究尝试使用外部工具为模型注入所需的知识。这些工具可能帮助模型更好地掌握和利用任务所需的知识,从而提升 CoT Prompts 的效果。
代码生成
- 代码生成旨在根据输入指令生成代码。由于代码的内部逻辑形式,CoT 的逐步推理链条与代码生成所需的能力相一致。
二、Prompt 设计
当任务类型确定后,就需要设计一个有效的 CoT Prompt。除了查询之外,CoT Prompt 中还有两个特殊元素:
- CoT 示例(CoT Demonstrations)
- 文本指令(Textual Instructions)
**CoT 示例是几个逐步推理的范例,而文本指令是用于积极引导逐步解决过程的文本序列。**一个 CoT Prompt 应至少包含这些元素之一。
通常,包含示例的 CoT Prompt 被称为 few-shot CoT,不包含示例的称为 zero-shot CoT。下图展示了三个 CoT Prompt 示例。
图 3:CoT 提示示例。
在 Few-shot 的 CoT 中,示例是必不可少的部分。如上图所示,它是一个(问题、理由、答案)三元组组成的 CoT Prompt,其中理由包含从问题到答案的中间推理步骤。
以下是在设计 Few-shot CoT Prompt 时的关键考虑因素:
1)复杂性:选择更复杂的问题示例,有助于延长模型的推理链,从而提升模型的推理能力。
2)相关性与多样性:
- 相关性:确保示例与查询问题相似,可以帮助模型更好地模仿正确的推理模式。
- 多样性:提供多样化的示例可以使模型的推理更加稳健,但过多示例可能引入噪声,影响性能。
3)结构完整性:推理链应包括关键逻辑元素(连接对象)和相应的语言模板,以确保推理的严密性和完整性。
4)数量与顺序:示例的数量和排列顺序会影响模型的性能。过多示例可能增加计算成本,而示例过少则可能导致模型对单一示例过度依赖。
大模型在 Zero-shot 的情境下也能遵循文本指令的能力已经得到过证明。所以,在 Zero-shot 的 CoT 中,可以显式通过文本指令,如“让我们一步一步地思考”,来引导大模型进行逐步的推理。即使没有示例,这种简单的零样本策略在某些任务中的效果也令人印象深刻,相较于非 CoT 的方法,表明这些文本指令能有效地引发 LLM 的推理能力。一些研究还发现,结合这些文本指令与 few-shot CoT,可以进一步提高模型的性能。