Appearance
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-shot | 0 个 | 否 | 通用、常识性任务;快速试水 |
| One-shot | 1 个 | 否 | 格式/风格需要锚定一下 |
| Few-shot | k 个(通常 2~5) | 否 | 任务特殊、格式复杂、零样本效果差 |
| Fine-tuning | 大量标注数据 | 是(改权重) | 稳定、低成本、可批量、领域深度定制 |
四、怎么写好 Few-shot 示范
Few-shot 的效果质量 > 数量,示范没写好反而有害。几条经验:
- 格式严格一致:示范与真实问题的输入/输出结构要完全相同(分隔符、字段名、顺序都别变),否则模型会"学歪"。
- 示范要相关:挑和真实任务分布相近的例子,比随便堆 10 个不相关的强得多。
- 数量适中:2~5 个通常足够;太多会占用 Context Window,还可能引入噪声与偏见。
- 标签均衡:若分类任务,示范里各类别尽量均衡,避免模型偏向"多数类"。
- 顺序留意:模型对最后一个示范有偏好(倾向重复其标签/格式),重要模式放后面或均衡安排。
- 指令 + 示范不冲突: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 的关键:格式一致、示例相关、类别均衡、数量适中。
口诀:零样本凭本事,少样本给样子;改格式不动权重,示范写对才像样。