零样本提示是指只靠一条指令让模型完成任务,不给它看任何你想要的答案示例。“把这段话翻译成西班牙语”和“用两句话总结这封邮件”都是零样本提示。这是人们使用聊天模型的默认方式,对常见任务来说,通常这样就够了。
零样本是什么意思
在机器学习中,“shot”指的是一个完整的示例。这些术语比聊天模型出现得更早,但它们在提示词领域的含义是由 Brown 等人 2020 年的论文《Language Models are Few-Shot Learners》推广开的。这篇论文在三种设置下测试了 GPT-3:任务描述加上提示词中零个、一个或几个示范,三种设置都不重新训练模型。对那个模型来说,给几个示例通常比不给效果更好。
从那以后,聊天模型接受了大量遵循指令的训练,这就是为什么现在一个简单的请求效果就这么好。零样本提示恰好就是它们受训时面对的情境:有人用文字描述一项工作,并期待它被完成。
零样本并不等于零背景信息。一个好的零样本提示仍然会说明读者是谁,贴上输入内容,并描述格式和限制。它唯一省略的,是一个完成好的输出示例。
写得好的零样本提示
下面的提示词从会议记录中提取待办事项,没有给出输出示例,只是精确地描述了输出。把各个部分关掉,看看是哪几行在起作用。
迭代同步会,周二
Priya 会在周五前修复登录超时问题。
讨论了换一家新的 CI 服务商,没有定论。
Tom 负责写 2.4 版本的发布说明。
得有人更新一下新人入职文档。
Lena:我周四前审阅 Tom 的说明。Priya:修复登录超时问题(周五前) Tom:编写 2.4 版本的发布说明 未分配:更新新人入职文档 Lena:审阅 Tom 的发布说明(周四前)
格式那一行起到了示例的作用:它把每一行的确切形式讲清楚了,所以不需要可以照抄的示例。把它关掉,回复就会自己决定格式,常常是一个名字加粗的项目符号列表,读起来没问题,但没法再直接粘贴进任务管理工具。把约束条件关掉,关于 CI 的讨论就可能被列成一项任务,因为没有任何地方告诉模型,没有定论的话题不算数。
什么时候零样本就够了
当模型能从你的文字中推断出一切时,零样本就管用:
- 任务很常见。 总结、翻译、解释、修改语法,以及按照清晰的需求写一个函数,这些任务模型在训练中都见过无数次。
- 你能准确描述输出。 “每项一行,负责人在前”和一个示例一样清楚。要描述交给程序读取的格式,请看结构化输出。
- 类别的含义一看就懂。 把评价分成正面和负面通常不需要示例,因为这两个标签对几乎所有人来说意思都一样。
什么时候该改用示例
有些东西很难用语言说清楚,零样本提示正是在这些地方开始出错:
- 你自己定的界线。 如果你们的客服团队把“登录不了”归为账号问题而不是 bug,模型是不可能知道的。它会选择大多数人会采用的理解。
- 团队的写作风格。 你们团队的提交信息或者你们简报的语气,演示起来比描述更容易。
- 反复出现的小偏差。 如果你已经改写了两次指令,输出还是以同样的方式稍微偏离,就别再改写了,直接展示两三个正确答案。
这就是少样本提示。一个明智的习惯是:先用零样本,看看返回了什么,只针对它做错的具体地方加示例。
零样本思维链
Kojima 等人 2022 年的论文《Large Language Models are Zero-Shot Reasoners》发现,只要加上一句话“让我们一步一步地思考”,大模型在算术、符号和逻辑问题上的表现就明显变好,完全不需要示例。这句话让模型在给出答案前先写出中间步骤,而它写下的每一步都会成为下一步的上下文。他们的方法用了两次调用:第一次生成推理过程,第二次要求给出最终答案。
在下面的代码块中,第一个标签页强制模型立刻回答,第二个标签页给了模型推理的空间。
12:40
第一个回复漏掉了火车追回的 10 分钟:当模型必须在最前面的几个 token 里就给出答案时,就容易犯这种错。现在的模型无论用哪种写法都很可能答对这道题;问题的步骤越多,两者的差距就越大。第二种写法还有一个好处:每一步都看得见,所以你能看出答案在哪里出了错。
会在回答前先在内部推理的模型,不用你要求也会做这项工作,所以“让我们一步一步地思考”对它们来说,除了让回复更长,几乎没有额外帮助。思维链提示深入讲解了这项技巧,包括它的少样本版本。
零样本与少样本一览
| 零样本 | 少样本 | |
|---|---|---|
| 提示词包含什么 | 指令、背景信息和输入 | 同样的内容,再加上几组输入和答案 |
| 最适合 | 输出容易描述的常见任务 | 自定义标签、不常见的格式、团队风格 |
| 成本 | 提示词短 | 提示词更长,每次调用消耗更多 token |
| 典型的失败 | 选择最常见的理解,而不是你的理解 | 照搬示例中碰巧出现的模式 |
常见问题
零样本提示是什么?
零样本提示是只用指令给语言模型布置任务,不提供任何输出示例。“用两句话总结这封邮件”就是一个零样本提示。现在的聊天模型都经过遵循指令的训练,所以零样本提示能很好地处理大多数日常任务。
零样本提示和少样本提示有什么区别?
零样本提示用文字描述任务。少样本提示会再加上几个示例,每个示例都是一个输入配上你想要的答案,让模型照着这个模式做。先从零样本开始;如果输出总是在格式上出错,或者总是分不清某个演示比描述更容易说明的区别,再换成少样本提示。
为什么叫零样本?
在机器学习中,“shot”指的是一个完整的示例。Brown 等人 2020 年的 GPT-3 论文《Language Models are Few-Shot Learners》在提示词中给模型零个、一个或几个任务示范来测试它,这些名称从此成了提示词领域的标准说法:零样本、单样本和少样本。
零样本提示什么时候不管用?
当任务依赖只有你知道的规则时,比如你们团队的分类或写作风格,当输出格式不常见时,以及在模型答得太快的多步推理问题上,它都会吃力。前两种情况用示例解决;第三种情况,让模型一步一步推理会有帮助。
零样本思维链是什么?
它是一种要求模型先推理再回答的零样本提示,最有名的做法是加上一句“让我们一步一步地思考”。Kojima 等人在 2022 年证明,只加这一句话,不给任何示例,就能提高大模型在算术和逻辑题上的成绩。