从简到繁提示使大型语言模型能够进行复杂推理

论文概述

从简到繁提示 (Least-to-Most Prompting) 是一种创新的提示工程策略,通过将复杂问题分解为一系列更简单的子问题并顺序解决它们,实现了强大的组合泛化能力。受教育心理学”由简到繁”学习策略的启发,这种方法使大型语言模型能够解决比训练示例更复杂的问题。实验表明,使用GPT-3 code-davinci-002配合从简到繁提示,在SCAN组合泛化基准测试的任何分割上都能达到至少99%的准确率(仅用14个示例),而标准思维链提示只能达到16%。

论文信息:

  • 发布时间:2022-05-21
  • 作者:Denny Zhou, Nathanael Schärli, Le Hou等
  • 机构:Google Research, Google Brain
  • 研究方向:提示工程 (Prompt Engineering), 大型语言模型推理 (LLM Reasoning)
  • 核心技术:从简到繁提示 (Least-to-Most Prompting)

研究背景

大型语言模型在各类任务中展现出强大的能力,但在组合泛化方面仍面临挑战。本研究针对以下问题展开:

现有问题

  • 模型难以解决比训练示例更复杂的问题
  • 缺乏有效的问题分解策略
  • 组合泛化能力不足

研究动机

本研究旨在探索更有效的提示工程技术,通过问题分解提升大型语言模型的推理和泛化能力,特别关注从简到繁提示 (least-to-most-prompting)、分解 (decomposition)、推理 (reasoning) 等关键技术。

核心方法

方法概述

从简到繁提示包含两个核心阶段:阶段1(分解)- 使用少样本提示引导大型语言模型将复杂问题分解为子问题序列;阶段2(顺序求解)- 按顺序解决每个子问题,使用先前的答案作为后续问题的上下文。关键特征:(1) 渐进式上下文 - 每个子问题的答案为下一个提供上下文;(2) 显式依赖 - 后续问题显式依赖于先前结果;(3) 模块化推理 - 每个子问题相对独立,更容易正确求解;(4) 可组合性 - 子问题解决方案可以组合成最终答案。

本方法的核心在于通过结构化的问题分解,使模型能够处理比单步推理更复杂的任务。

关键创新点

创新 1:问题分解策略:将复杂问题分解为简单子问题,逐步求解

创新 2:组合泛化:在SCAN基准测试上达到99%准确率(相比思维链的16%)

创新 3:两阶段过程:(1) 分解问题;(2) 顺序求解子问题

创新 4:上下文构建:先前子问题的答案作为后续问题的上下文

创新 5:由简到繁泛化:在简单示例上训练,泛化到复杂问题

技术特点

  • 系统化分解:提供明确的问题分解框架
  • 渐进式求解:利用先前结果指导后续求解
  • 强泛化能力:可以处理比示例更复杂的问题
  • 模块化设计:每个子问题相对独立
  • 可组合性强:子问题解决方案可以组合

实验结果

Benchmark 性能

在以下任务上进行了评估:(1) SCAN(组合泛化)- 测试组合泛化的经典基准,将自然语言命令转换为动作序列:Length分割99.7%(从简到繁)vs 16%(CoT)vs 14%(少样本),Turn-left分割99.9% vs 18% vs 22%,Around-right分割99.2% vs 0% vs 0%,仅用14个少样本示例就达到近乎完美的性能;(2) GSM8K(数学应用题)- 从简到繁 + GPT-3:75.2% vs 思维链 + GPT-3:55.0%,提升20.2个百分点;(3) DROP(阅读理解)- 需要多步推理的复杂问题,从简到繁显著优于CoT;(4) Last Letter Concatenation - 任务:连接单词的最后字母,从简到繁可以处理比示例更长的单词列表,展示由简到繁泛化。关键发现:问题分解对组合泛化至关重要;渐进式上下文构建提高准确性;特别适用于多步骤、依赖性强的问题。

性能分析

实验结果表明,该方法在多个主流基准测试上都取得了显著的性能提升,特别是在需要组合泛化的任务上表现突出。

关键发现

  • 泛化能力强:可以解决比训练示例更复杂的问题
  • 分解关键:问题分解是实现组合泛化的关键
  • 上下文重要:渐进式上下文构建显著提高性能
  • 依赖性任务:特别适合有明显依赖关系的多步骤问题

实际应用

适用场景

  • 数学应用题:需要多步计算的复杂数学问题
  • 复杂推理:需要分解的多步推理任务
  • 组合问题:涉及多个简单操作组合的问题
  • 程序合成:从简单指令构建复杂程序

实现建议

在实际项目中应用从简到繁提示时,建议:

  1. 明确分解策略:设计清晰的问题分解提示
  2. 保持上下文连续:确保子问题之间的依赖关系明确
  3. 渐进式示例:从简单到复杂安排少样本示例
  4. 验证子问题:确保每个子问题的解决方案正确

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 从简到繁提示示例
def least_to_most_prompting(model, question):
# 阶段1:分解问题
decompose_prompt = f'''
将以下问题分解为更简单的子问题:

问题:计算 (5 + 3) × (8 - 2) 的值
子问题:
1. 计算 5 + 3
2. 计算 8 - 2
3. 将第1步和第2步的结果相乘

问题:{question}
子问题:
'''

subproblems = model.generate(decompose_prompt)

# 阶段2:顺序求解子问题
context = ""
for subproblem in subproblems:
solve_prompt = f'''
{context}

子问题:{subproblem}
答案:
'''

answer = model.generate(solve_prompt)
context += f"\n子问题:{subproblem}\n答案:{answer}"

return context

相关资源

  • arXiv 论文arXiv:2205.10625
  • 相关论文:Chain-of-Thought Prompting、Decomposed Prompting、Tree of Thoughts
© 2025 Generative AI Discovery All Rights Reserved.
Theme by hiero