Prompt-Engineering-Guide/pages/techniques/fewshot.zh.mdx
2023-03-30 19:14:59 -06:00

105 lines
4.6 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 少样本提示
虽然大型语言模型展示了惊人的零样本能力,但在使用零样本设置时,它们在更复杂的任务上仍然表现不佳。少样本提示可以作为一种技术,以启用上下文学习,我们在提示中提供演示以引导模型实现更好的性能。演示作为后续示例的条件,我们希望模型生成响应。
让我们通过[Brown等人2020年](https://arxiv.org/abs/2005.14165)提出的一个例子来演示少样本提示。在这个例子中,任务是在句子中正确使用一个新词。
*提示:*
```
“whatpu”是坦桑尼亚的一种小型毛茸茸的动物。一个使用whatpu这个词的句子的例子是
我们在非洲旅行时看到了这些非常可爱的whatpus。
“farduddle”是指快速跳上跳下。一个使用farduddle这个词的句子的例子是
```
*输出:*
```
当我们赢得比赛时,我们都开始庆祝跳跃。
```
我们可以观察到模型通过提供一个示例即1-shot已经学会了如何执行任务。对于更困难的任务我们可以尝试增加演示例如3-shot、5-shot、10-shot等
根据[Min等人2022](https://arxiv.org/abs/2202.12837)的研究结果,以下是在进行少样本学习时关于演示/范例的一些额外提示:
- “标签空间和演示指定的输入文本的分布都很重要(无论标签是否对单个输入正确)”
- 使用的格式也对性能起着关键作用,即使只是使用随机标签,这也比没有标签好得多。
- 其他结果表明,从真实标签分布(而不是均匀分布)中选择随机标签也有帮助。
让我们尝试一些例子。让我们首先尝试一个随机标签的例子意味着将标签Negative和Positive随机分配给输入
*提示:*
```
这太棒了!// Negative
这太糟糕了!// Positive
哇,那部电影太棒了!// Positive
多么可怕的节目!//
```
*输出:*
```
Negative
```
即使标签已经随机化我们仍然得到了正确的答案。请注意我们还保留了格式这也有助于。实际上通过进一步的实验我们发现我们正在尝试的新GPT模型甚至对随机格式也变得更加稳健。例如
*提示:*
```
Positive This is awesome!
This is bad! Negative
Wow that movie was rad!
Positive
What a horrible show! --
```
*输出:*
```
Negative
```
上面的格式不一致,但模型仍然预测了正确的标签。我们必须进行更彻底的分析,以确认这是否适用于不同和更复杂的任务,包括提示的不同变体。
### 少样本提示的限制
标准的少样本提示对许多任务都有效,但仍然不是一种完美的技术,特别是在处理更复杂的推理任务时。让我们演示为什么会这样。您是否还记得之前提供的任务:
```
这组数字中的奇数加起来是一个偶数15、32、5、13、82、7、1。
A
```
如果我们再试一次,模型输出如下:
```
是的这组数字中的奇数加起来是107是一个偶数。
```
这不是正确的答案,这不仅突显了这些系统的局限性,而且需要更高级的提示工程。
让我们尝试添加一些示例,看看少样本提示是否可以改善结果。
*提示:*
```
这组数字中的奇数加起来是一个偶数4、8、9、15、12、2、1。
A答案是False。
这组数字中的奇数加起来是一个偶数17、10、19、4、8、12、24。
A答案是True。
这组数字中的奇数加起来是一个偶数16、11、14、4、8、13、24。
A答案是True。
这组数字中的奇数加起来是一个偶数17、9、10、12、13、4、2。
A答案是False。
这组数字中的奇数加起来是一个偶数15、32、5、13、82、7、1。
A
```
*输出:*
```
答案是True。
```
这没用。似乎少样本提示不足以获得这种类型的推理问题的可靠响应。上面的示例提供了任务的基本信息。如果您仔细观察,我们引入的任务类型涉及几个更多的推理步骤。换句话说,如果我们将问题分解成步骤并向模型演示,这可能会有所帮助。最近,[思维链CoT提示](https://arxiv.org/abs/2201.11903)已经流行起来,以解决更复杂的算术、常识和符号推理任务。
总的来说,提供示例对解决某些任务很有用。当零样本提示和少样本提示不足时,这可能意味着模型学到的东西不足以在任务上表现良好。从这里开始,建议开始考虑微调您的模型或尝试更高级的提示技术。接下来,我们将讨论一种流行的提示技术,称为思维链提示,它已经获得了很多关注。