Few-shot 和 Zero-shot 是什么意思- [intro-few-shot-zero-shot]
Few-shot 和 Zero-shot 是什么意思?
不训练也能"学会"任务,上下文学习入门第一课
原题:Zero-shot 和 Few-shot 分别是什么意思?在 prompt 里放几个例子,为什么就能改变模型的行为?
Prompt工程
30 秒回答
- Zero-shot(零样本):不给示例,只用文字描述任务,让模型直接作答
- Few-shot(少样本):在 prompt 里放几个"输入→输出"示例,让模型照着模式做
- 两者都不更新模型参数,靠的是上下文学习(In-Context Learning)能力
- 例子能生效,是因为模型在预训练中学会了"识别并延续上文中的模式"
回答与解析
答案要点
Zero-shot(零样本):不给示例,只用文字描述任务,让模型直接作答
Few-shot(少样本):在 prompt 里放几个"输入→输出"示例,让模型照着模式做
两者都不更新模型参数,靠的是上下文学习(In-Context Learning)能力
例子能生效,是因为模型在预训练中学会了"识别并延续上文中的模式"
示例的质量、格式一致性、标签均衡都影响效果;简单任务 zero-shot 够用,格式复杂或任务含糊时 few-shot 更稳
核心概念
Zero-shot(零样本)指在 prompt 中不提供任何示例、仅靠自然语言描述任务就让模型完成,例如直接说"判断这句话的情感是正面还是负面";Few-shot(少样本)指在提问前先给出几个完整的输入输出示例,再让模型处理新输入——这两个词里的 shot 就是"示例"的意思。它们背后共同的机制叫上下文学习(In-Context Learning):模型不改任何参数,只凭上下文里的信息临时"学会"任务。
几个例子为什么能改变行为
大模型的本职是"延续上文最合理的模式"。当上文连续出现三组"输入→输出"对,对模型来说最合理的续写,就是对新输入产出同样模式的输出
示例传递了文字难以说清的信息:输出格式、详略粒度、边界情况怎么处理——示范一遍胜过描述十句
这不是训练:权重没有任何变化,"学到"的东西只存在于当前上下文,会话一换就消失,所以叫"上下文"学习
怎么选、怎么用
| 场景 | 建议 |
|---|---|
| 任务常见、要求简单 | Zero-shot 即可,省 token |
| 输出格式要求严格 | Few-shot,示例统一格式 |
| 任务边界模糊、有易错情况 | Few-shot,把易错情况放进示例 |
注意:示例之间格式要一致,标签分布尽量均衡(别全是正面例子),数量通常 2~5 个即可——放太多占上下文窗口,效果还未必更好。
入门之后,可以往上下文学习的机制、示例的动态检索挑选、few-shot 与微调的对比选型深入。
口语版讲法(约2分钟)
- 一句话点题:zero-shot和few-shot本质是上下文学习
- zero-shot和few-shot的定义与区别
- 几个例子为什么能改变行为:模式延续和隐性信息传递
- 业务场景与落地建议:怎么选,注意什么
面试官问的这个问题,其实是在考察我们对大模型上下文学习机制的理解。说白了,zero-shot和few-shot都不更新模型参数,而是靠prompt里的信息让模型临时学会一个任务。
先简单说下定义。Zero-shot就是不给例子,直接用文字描述任务,比如我写一句“判断这个评论的情感是正面还是负面”,模型直接答。Few-shot是在prompt里放几个输入输出对,像“苹果很好吃 → 正面;这个手机太卡了 → 负面;新买的耳机音质不错 → 正面”,然后再给一个新输入,模型就会照着这个模式输出。
那为什么放几个例子就能改变模型行为呢?核心原因是,大模型在预训练阶段见过海量的文本,它学会了一个能力:识别并延续上文中的模式。当你在prompt里连续给了一组输入输出对,对模型来说,最合理的续写就是对新输入也产生同样模式的输出。而且,例子能传递一些文字描述说不清的东西,比如输出格式的细节、边界情况怎么处理。示范一遍比描述十句管用。
举个例子,在客服场景里,用户问“退款什么时候到账?”,如果我用zero-shot,模型可能会给一个通用回答,比如“一般3-5个工作日”。但如果我用few-shot,在prompt里放几个类似问题的示例,比如“退款申请提交后多久到账 → 根据您的订单,退款已审核,预计2小时内到账;退货物流显示签收后多久退款 → 签收后24小时内处理退款”,模型就会输出更具体、更符合当前业务规则的回答。
这里有个坑,就是示例的质量和格式一致性很重要。如果示例的标签分布不均衡,比如全是正面例子,模型会倾向于输出正面结果。还有,例子数量一般2到5个就够了,放太多会占上下文窗口,效果不一定更好。
所以总的来说,我会把zero-shot和few-shot看成上下文学习的两种策略。简单、常见的任务用zero-shot就够了,省token;但任务边界模糊、输出格式要求严格的时候,few-shot更稳。真正落地时,我倾向于先试zero-shot,如果效果不稳定再补几个精心设计的例子。这也是为什么很多系统里会预置一些few-shot模板。
如果面试官继续问,我可以深入聊聊上下文学习的机制,比如为什么例子数量不是越多越好,以及怎么动态挑选最合适的示例来提升效果。
关键一句:例子数量不是越多越好,以及动态挑选示例来提升few-shot效果
面试官还可能这样问
- 问法 1 · 概念辨析Few-shot 和微调都能让模型"学会"新任务,它们的本质区别是什么?两种情况下模型的参数分别发生了什么变化?
- 问法 2 · 追问边界Few-shot 的例子是不是越多越好?如果放了 20 个示例,效果反而比 5 个还差,你觉得可能是什么原因?