Skip to content

Zero-shot 与 Few-shot

一、它们是什么:不重新训练,也能"教"模型

传统上要让模型学会一个新任务,得微调(fine-tuning)——改权重、跑训练。但大模型时代出现了一种更轻量的用法:不碰权重,只靠 Prompt 就把任务说清楚。其中两类最典型:

  • Zero-shot(零样本):一句话描述任务,不给任何示例,直接让模型做。
  • Few-shot(少样本 / 上下文学习 ICL):在 Prompt 里塞几个示范(输入→输出对),让模型"照葫芦画瓢"。
           任务描述(Instruction)
Zero-shot  ───────────────────────────────▶ 模型直接输出
           + 几个示范(Example 1~k)
Few-shot   ───────────────────────────────▶ 模型模仿示范输出

记忆:Zero-shot 是"你告诉我规则",Few-shot 是"我给你几个例子,你照着做"。


二、逐一拆解

1. Zero-shot(零样本)

不给任何示例,仅用自然语言描述任务,依赖模型在预训练/指令微调中已掌握的知识来完成。

请把下面这句话翻译成英文:
"今天天气真好。"

→ 模型输出:The weather is nice today.
  • 模型从没在这个任务上"训练"过样本,靠的是预训练学到的语言能力和世界知识。
  • 适合模型"本来就懂"的常识性、通用任务(翻译、分类、摘要、问答等)。

2. One-shot / Few-shot(单/少样本)

在 Prompt 里先给 1 个(one-shot)或 k 个(few-shot)示范,再给真实问题。

示例1:
输入:苹果
输出:水果
示例2:
输入:胡萝卜
输出:蔬菜
---
现在请分类:
输入:老虎
输出:
  • 模型看到示范的"格式"和"模式"后,会模仿生成同构的输出(这里是"动物")。
  • 多出来的那几个示范,只是拼在 Context 里,模型权重完全不变——这是"上下文学习(In-Context Learning, ICL)"。
  • k 一般取 2~5 个最常用;极少情况下 1 个(one-shot)也够。

3. 为什么 LLM 能"看例子就学会"

关键在 ICL(In-Context Learning):大模型通过注意力机制(Attention),能把 Prompt 里前面的示范"记住"并当作当前预测的隐式条件。相当于在不更新参数的前提下,用上下文临时"构造"出一条推理路径。

直觉:Few-shot 不是让模型"现学新知识",而是帮模型把已会的能力用对的格式/角度激活出来


三、对比一览

方式是否给示例权重是否改变适用场景
Zero-shot0 个通用、常识性任务;快速试水
One-shot1 个格式/风格需要锚定一下
Few-shotk 个(通常 2~5)任务特殊、格式复杂、零样本效果差
Fine-tuning大量标注数据(改权重)稳定、低成本、可批量、领域深度定制

四、怎么写好 Few-shot 示范

Few-shot 的效果质量 > 数量,示范没写好反而有害。几条经验:

  1. 格式严格一致:示范与真实问题的输入/输出结构要完全相同(分隔符、字段名、顺序都别变),否则模型会"学歪"。
  2. 示范要相关:挑和真实任务分布相近的例子,比随便堆 10 个不相关的强得多。
  3. 数量适中:2~5 个通常足够;太多会占用 Context Window,还可能引入噪声与偏见。
  4. 标签均衡:若分类任务,示范里各类别尽量均衡,避免模型偏向"多数类"。
  5. 顺序留意:模型对最后一个示范有偏好(倾向重复其标签/格式),重要模式放后面或均衡安排。
  6. 指令 + 示范不冲突:System Prompt 的全局规则如果和示范矛盾,模型可能混乱。
text
【好的 few-shot:格式统一、类别均衡】
评论:这家店服务态度极差,再也不来了。 → 负面
评论:物流很快,包装也很用心。         → 正面
评论:东西还行,没什么惊喜。           → 中性
评论:客服直接不理人,气死。           → ?

五、与 Fine-tuning(微调)怎么选

维度Few-shot(Prompt)Fine-tuning(微调)
改不改权重不改
数据需求几个示例即可成百上千标注样本
成本低(只写 Prompt)高(训练+算力)
稳定性受示例/顺序影响,偶有波动稳定、可控
迭代速度秒级(改话术)慢(重训)
适合快速验证、长尾/临时任务大规模、稳定上线的业务

经验法则:先用 Zero-shot 试,不行加 Few-shot,还不行/要稳定批量再做微调。


六、常见坑

坑 1:位置偏见(Recency Bias) 模型容易模仿最后一个示范的标签/格式。若最后一个是"正面",即使新输入是负面,也可能被带偏。对策:均衡放置、关键示范靠后、或在指令里强调"按内容判断"。

坑 2:多数类偏见(Majority Label Bias) 示范里某类出现最多,模型倾向直接输出该类。对策:类别示范尽量均衡。

坑 3:顺序敏感 同一批示范,顺序不同结果可能不同。对策:固定顺序、多跑几次取稳。

坑 4:与指令冲突 System Prompt 说"只输出 JSON",示范却给了自然语言,模型会混乱。对策:示范严格遵守最终要求的格式。

坑 5:吞掉 Context 示范太长/太多,挤占上下文窗口,反而影响主干任务。对策:精简示范,留足空间给真实输入。


七、适用场景速查

场景推荐
翻译、通用问答、摘要Zero-shot 起步
特定输出格式(JSON / 特定标签)Zero-shot + 明确格式要求,必要时 One-shot 锚定
小众分类、特殊领域口径Few-shot(2~5 个贴近业务的示范)
需要长期稳定、低成本、大批量化Fine-tuning
临时/一次性任务Few-shot 足矣,不必训练

八、一句话总结

  • Zero-shot:靠预训练+指令微调学到的"常识",不给例子直接做。
  • Few-shot(ICL):在 Context 里给几个示范,模型不改权重、临时"模仿"完成。
  • 三者递进:Zero-shot 试水 → Few-shot 提效 → Fine-tuning 沉淀
  • 写好 Few-shot 的关键:格式一致、示例相关、类别均衡、数量适中

口诀:零样本凭本事,少样本给样子;改格式不动权重,示范写对才像样。

最近更新