把少样本示例用对
- 什么是少样本提示,以及为什么示例胜过描述
- 如何读懂一条让模型来补完的清爽少样本提示
- 如何挑选、格式化并排序示例(包括边缘情况)
- 什么时候选用零样本,什么时候选用少样本
- 为什么一个马虎的示例比没有示例更糟
少样本提示是指在让模型处理一个新例子之前,先给它看几个做好的任务范例。做得好的话,这是锁定某种格式、风格或边缘情况行为的最快方式——往往比用语言描述你想要什么更有效。
为什么示例胜过描述
"简洁而友好"很含糊。展示两份简洁、友好的输出则毫不含糊。模型会对这些示例进行模式匹配,并延续这个模式。
一条清爽的少样本提示词
注意它的形态:几组格式完全相同的 Message → Label 配对,然后是最后一条带着空 Label: 的消息,留给模型来填。
少样本分类提示词
Classify each support message as: billing, bug, or feature. Message: "I was charged twice this month." Label: billing Message: "The app crashes when I upload a photo." Label: bug Message: "Can you add dark mode?" Label: feature Message: "My subscription renewed at the wrong price." Label:
模型掌握了这个模式;它会把最后一行补完。
如何挑选与格式化示例
Guided walkthrough1 of 5
- 把你在意的边缘情况包含进来。如果某个类别罕见或棘手,就把它包含进来。
- 相同的结构、相同的标签、相同的分隔符。不一致只会教出不一致。
- 2 到 5 个往往就够了。对困难/多变的任务,多一些会有帮助,但会消耗 token,而且可能过拟合到示例的怪癖上。
- 顺序可能很重要——把最清晰的示例放在最前面;对于分类任务,不要把同一标签的示例全都聚在一起。
- 使用分隔符(或 XML 标签)把示例与你真正想要标注的输入分开。
上面提到的 token 成本是实打实的——参见 Token 与上下文。至于分隔符做法,XML 标签是干净、可靠的分隔方式。
零样本对比少样本
先试试零样本(直接提问)——现代模型很强。当你需要某种特定的格式/风格,或任务含糊不清时,再加上示例。如果零样本已经做得很到位,就不必为示例买单。
- 示例就是数据——保持它们干净。一个错误或马虎的示例会主动教出错误的东西。要像对待训练数据一样去精心筛选它们。
- 展示,而非描述:做好的范例胜过含糊的描述。
- 覆盖多样性,尤其是边缘情况,并让每个示例都保持完全相同的格式。
- 2 到 5 个示例通常就够了;更多可能过拟合并消耗 token。
- 顺序很重要——最清晰的放最前面,不要把同一标签聚在一起。
- 从零样本开始;只在需要特定格式/风格或任务含糊时才加上示例。