4.2 零样本与少样本学习:上下文学习提升推理能力

0 阅读8分钟

4.2 零样本与少样本学习:上下文学习提升推理能力

本节内容基于《大模型应用开发极简入门:基于GPT-4和ChatGPT(第2版)》第4章「提示工程」中的上下文学习编写,涵盖零样本、少样本、思维链(CoT)、自洽性等提升推理能力的核心技巧。


一、上下文学习概述(书4.1.2)

书中将**上下文学习(In-Context Learning)**作为提示工程的核心能力之一,包括:

  • 零样本(Zero-shot):仅通过任务描述,模型即可执行
  • 少样本(Few-shot):在提示中提供少量示例,模型通过模仿完成新任务
  • 思维链(Chain-of-Thought, CoT):引导模型分步推理,提升复杂任务正确率
  • 自洽性(Self-Consistency):多次生成取多数答案,提升稳定性

本节聚焦零样本与少样本,下一节将深入CoT与自洽性。这些技巧均无需微调,仅通过优化提示即可显著提升效果。


二、零样本(Zero-shot)

2.1 定义

零样本指不提供任何示例,仅通过自然语言描述任务,模型即可执行。例如:

将以下英文翻译为中文:
Artificial intelligence is transforming industries.

模型可直接输出"人工智能正在改变各行各业",无需额外示例。

2.2 适用场景

场景说明
简单任务翻译、摘要、分类等模型已充分学习的任务
快速验证快速测试模型是否能完成某任务
通用能力依赖模型预训练阶段学到的通用能力

2.3 零样本的局限

  • 对格式、风格有严格要求时,零样本可能不稳定
  • 领域专业术语、特殊格式需少样本或微调补充
  • 复杂推理任务零样本正确率有限,需CoT等技巧

2.4 与书中提示结构的对应

书中提示工程模板包含角色、上下文、任务、要求。零样本时,通过清晰的任务描述与要求即可,无需示例部分。例如:

角色:你是翻译专家
任务:将用户输入的英文翻译为中文
要求:准确、流畅,保持专业术语

三、少样本(Few-shot)

3.1 定义

少样本指在提示中提供少量示例,模型通过模仿完成新任务。例如书中示例:

翻译成中文:
apple -> 苹果
computer -> 电脑
artificial intelligence ->

模型可根据前两例,正确输出"人工智能"。

3.2 为什么有效

大语言模型在预训练时学习了大量"输入-输出"模式。在提示中提供示例,相当于激活了相关的模式,使模型更容易生成符合格式与风格的输出。

3.3 少样本设计要点(书4.1.2)

要点说明
示例典型选择能代表任务核心的示例,覆盖常见与边界情况
格式一致输入输出格式统一,便于模型模仿
数量适中通常3-5个示例即可,过多增加Token成本且可能过拟合
多样性示例间应有差异,避免重复模式

3.4 情感分类示例(基于书中思路)

将情感分类为正面/负面/中性:
输入:这个产品非常好用。 输出:正面
输入:服务态度太差了。 输出:负面
输入:性价比一般,可以考虑。 输出:中性
输入:物流快,包装完好。 输出:

模型会根据前三例,推断第四句应为"正面"。

3.5 格式转换示例

将日期从中文转为YYYY-MM-DD格式:
2024115-> 2024-01-15
二零二三年十二月三日 -> 2023-12-03
明年春节 -> 

四、少样本与书中提示模板的结合

书中提示工程模板结构为:

# 书中 prompt_engineering_template 结构
prompt_template = f"""
角色:你是一名专业的{task_type}专家
上下文:{context}
示例:{"无" if not examples else "\n".join([f"- {e}" for e in examples])}
要求:{requirements}
"""

少样本对应其中的示例部分。将示例以统一格式嵌入,即可实现少样本学习。书中摘要示例:

summary_prompt = prompt_engineering_template(
    task_type="文本摘要",
    context="人工智能(AI)是一门...",
    examples=["输入:苹果是一种水果,富含维生素。输出:苹果是富含维生素的水果。"],
    requirements="摘要长度不超过50字,保留核心信息,无冗余内容"
)

五、零样本与少样本的选型

场景推荐说明
简单、通用任务零样本成本低,速度快
格式严格、风格特殊少样本通过示例约束输出
领域专业少样本示例可传递领域知识
复杂推理CoT(下节)零样本/少样本正确率有限

六、完整可运行示例(基于书中代码)

以下示例结合书中prompt_engineering_templategpt_basic_completion,实现零样本与少样本的对比:

"""
零样本与少样本对比示例(基于书4.1.2与书中代码模板)
运行: pip install openai python-dotenv
"""

import os
from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))

def chat(prompt: str, temperature: float = 0.3) -> str:
    response = client.chat.completions.create(
        model="gpt-3.5-turbo",
        messages=[{"role": "user", "content": prompt}],
        temperature=temperature,
        max_tokens=200
    )
    return response.choices[0].message.content.strip()

# 零样本:仅任务描述
zero_shot_prompt = """将以下英文翻译为中文:
Artificial intelligence is transforming industries."""
print("零样本结果:", chat(zero_shot_prompt))

# 少样本:带示例
few_shot_prompt = """翻译成中文:
apple -> 苹果
computer -> 电脑
artificial intelligence ->"""
print("少样本结果:", chat(few_shot_prompt))

# 少样本:情感分类
few_shot_classify = """将情感分类为正面/负面:
输入:这个产品非常好用。 输出:正面
输入:服务态度太差了。 输出:负面
输入:性价比一般,可以考虑。 输出:"""
print("少样本分类:", chat(few_shot_classify))

七、Token 与成本考虑(书 4.1.5 提示优化)

书中 4.1.5 提到token 压缩、成本控制。少样本会显著增加输入 Token:每增加一个示例,成本与延迟都会上升。建议示例数量控制在 3–5 个,且每条示例尽量精简;必要时用「代表性最强」的示例替代堆砌数量。零样本在成本上更优,在格式与稳定性允许时优先使用。


八、与 4.1 节结构化模板的配合

4.1 节给出了「角色、上下文、任务、输出要求」的四要素模板。零样本与少样本对应其中的任务示例:零样本时「任务」中写清指令即可;少样本时在「上下文」或单独「示例」中嵌入 1~5 个输入输出对,模型会据此模仿。输出要求(格式、长度)与 4.4 节格式强制结合,可进一步稳定输出。书中 4.1.2 上下文学习与 4.1.1 提示基础是同一章内的递进关系,本节与 4.1 的配合即体现这一点。

8.1 何时增加示例数量

若 3 个少样本仍出现格式漂移或领域偏差,可尝试增至 5 个或补充边界样本;若 5 个后改善不明显,则考虑是否任务本身需要更强推理(改用 CoT,见 4.3)或需要微调(见 4.6)。避免无限制增加示例导致 Token 成本过高且过拟合到示例风格。


九、小结

本节基于书中第4章「上下文学习」,系统讲解了零样本少样本的定义、适用场景、设计要点及与书中提示模板的结合。二者均无需微调,是提升模型任务适配性的低成本手段。下一节将介绍思维链(CoT)与自洽性,进一步提升复杂推理能力。在实际开发中,可先对任务做零样本测试,若格式或风格不稳定再补 1~3 个少样本,往往能快速达到可用水平。


十、与 4.3 CoT、4.6 微调的衔接

4.3 节思维链:零样本/少样本主要解决「任务理解与格式模仿」;对需要多步推理的题目(如数学、逻辑),可在此基础上加 CoT 指令或少样本 CoT 示例,与本节形成「任务描述 + 示例 + 分步思考」的组合。4.6 节微调:当少样本已加至 5 个以上仍无法稳定满足格式或领域要求时,可考虑微调;微调后仍可在推理时使用零样本或少样本作为「推理时提示」,与书中 4.1.2 与 4.2 微调的关系一致。


十一、小结(复述)

零样本与少样本是上下文学习的核心手段,与书中 4.1.2 完全对应。掌握二者适用场景与 Token 成本权衡,即可在多数业务中低成本提升效果;再结合 4.3 CoT、4.4 格式强制与 4.5 防御性提示,形成完整提示工程链路。实际开发中可先对任务做零样本测试,若格式或风格不稳定再补 1~3 个少样本,往往能快速达到可用水平,避免过早投入微调。


下一节预告:4.3 思维链CoT推理与自洽性:复杂问题分步求解实战