01. Zero-shot 和 Few-shot 分别适合什么场景?Few-shot 的例子怎么选?

整理 Zero-shot、Few-shot 的适用场景,以及 Few-shot 示例选择原则。

简单回答

Zero-shot 是不给任何示例,直接让模型完成任务;Few-shot 是在 Prompt 里提供若干输入输出示例,引导模型按期望格式和风格生成。能力越强的模型,Zero-shot 的效果越好;任务越模糊、格式要求越具体、或者模型对该类任务理解偏差越大,越需要 Few-shot 来校正。Few-shot 例子的选取至关重要,差的例子会把模型带偏,好的例子应该覆盖典型场景、边界情况、多样风格,且和目标任务保持高度对齐。

详细解答

Zero-shot 的适用场景

Zero-shot 是最简洁的方式,直接用自然语言描述任务让模型完成。对于 GPT-4、Claude 3.5 这类强模型,很多常规任务(摘要、翻译、问答、代码生成)Zero-shot 就能有不错效果,不必要地加入 Few-shot 反而会浪费 token、甚至引入不必要的格式约束。

Zero-shot 比较合适的场景:任务描述本身已经非常清晰("将以下段落翻译成英文");模型对任务类型已经有很好的先验理解;对输出格式没有强约束;或者 context 空间有限,放不下足够多的示例。

Few-shot 的适用场景

当以下情况出现时,Few-shot 比 Zero-shot 有明显优势:

任务定义模糊或有歧义:比如让模型"写一份客户反馈摘要",不同人对"摘要"的理解差异很大——长度、格式、侧重点都可能不同。给几个例子,模型就能立刻对齐你的期望。

输出格式有严格要求:比如要求模型按特定 JSON 结构输出,或者用特定的标题层级组织内容。描述格式不如直接给个例子来得准确。

任务分布偏离训练数据:如果目标任务是非常垂直的领域(法律条文分析、特定行业术语的处理),模型可能对该任务的"正确方式"没有充分先验,Few-shot 能快速告诉模型这个领域里什么算好的输出。

需要特定语气和风格:品牌语气、特定受众的沟通风格(对专家 vs 对普通用户)、或者特定的表达习惯,用描述很难精确传达,但一两个示例就能让模型"学会"这个风格。

Few-shot 例子怎么选

例子的质量直接决定 Few-shot 的效果。一个选例子的经验框架:

多样性优先:例子之间要覆盖不同类型的输入,不要都是相似的简单 case。如果任务是情感分析,正面情感、负面情感、中性情感各给一两个,比五个全是正面情感的例子强得多。

覆盖边界情况:主动把"容易犯错的地方"作为例子放进去。比如任务是提取关键信息,有时候原文里没有某类信息,这种"空值"的处理如果不给例子,模型很容易乱编一个。

质量要高:每个例子的输出都应该是你真正满意的"理想答案"。坏例子会教坏模型,模型会模仿例子里的错误。用质量较差的合成数据作为 Few-shot 例子,很多时候比 Zero-shot 效果还差。

和目标输入分布匹配:例子的输入应该和真实任务的输入风格接近,不要用和目标场景差异很大的例子。如果真实输入是用户的口语化查询,例子也应该是口语化的;如果真实输入是正式文件,例子也要对应。

动态选例子(Advanced):对于有大量候选例子的场景,可以根据每次请求动态选择最相关的例子,而不是固定几个。方法是把候选例子都 Embedding 成向量,每次请求时找和当前输入最相似的 K 个例子。这在 RAG 系统里和文档检索结合使用效果很好。

例子的数量

一般 1~8 个例子是合理范围。很少见到超过 10 个例子仍然有显著增益的情况,超过之后边际效益递减,还占用 context。研究(Min et al., 2022)发现,Few-shot 示例的标签准确性甚至没有示例格式和分布重要——给几个格式正确但标签随机的例子,效果也不比没有例子差多少。这说明 Few-shot 更多是在向模型传达"输出的格式和风格",而不是真正在"教模型新知识"。

面试时可以这样答

Zero-shot 和 Few-shot 选哪个,核心看两件事:任务对模型是不是足够清晰、输出格式有没有强要求。强模型做常规任务 Zero-shot 够用,不用强加例子。但如果任务很垂直、输出格式很具体、或者模型默认行为和你想要的不对齐,就得 Few-shot 来校正。

例子怎么选更重要。几个原则:多样性要够,别全是一类 case;主动覆盖边界情况,比如"如果原文没有相关信息怎么输出"这种;质量要高,坏例子会教坏模型;和真实输入分布要对齐,用口语举例、任务就是口语的。

有个有意思的研究结论:Few-shot 里标签的准确性没有格式和分布重要。给几个格式对但标签随机打的例子,效果也差不多。这说明 Few-shot 主要是在告诉模型"输出应该长什么样",而不是真的在教它新知识。

常见追问

  1. 动态选 Few-shot 例子具体怎么实现?对哪类任务提升最明显?
  2. 例子顺序对 Few-shot 效果有影响吗?应该把哪个例子放最后?
  3. 如果没有高质量人工标注的例子,合成的例子能不能用?