导言
上一节已经说完了大语言模型(LLM)的接口中各种参数的意义,详见:"提示工程指南(一)------详解LLM中各个参数的意义"。接下来开始讲提示工程本身。
什么是提示工程
提示工程,也称为上下文提示,指的是如何与LLM沟通以引导其行为,从而实现期望结果的方法。提示工程不需要修改模型的参数。它是一门实证科学,提示工程方法的效果在不同模型之间可能会有很大差异,因此需要大量的实验和启发式方法。
这里仅关注自回归语言模型的提示工程,不涉及Cloze测试、图像生成或多模态模型。提示工程目前的核心目标是关于对齐和模型可控性。
在提示工程的实践中,确实存在一些技巧和策略,但真正的挑战在于:
- 如何将这些技巧应用到具体的模型和任务中
- 如何通过实验来验证和优化它们的效果
简单的提示就可以实现很多功能,但结果的质量取决于用户提供的信息量以及提示的精细程度。提示可以包含指令或问题等信息,还可以包括上下文、输入或示例等其他细节。你可以使用这些元素来更有效地指导模型,以提高结果的质量。
普通的提示词可以分成两种:零次(zero-shot)提示和少次(few-shot)提示
最简单的提示词------零次(zero-shot)提示(prompt)
让我们通过一个最简单的提示来开始:
python
输入的提示:
The sky is
模型输出:
blue

零次提示是简单地将任务文本输入模型并要求输出结果。
如果不给模型任何信息,而是直接去询问模型,那么模型可能只会简简单单的返回一个结果。或者给出一些意义不大的输出。
想要让LLM能够提供有效的帮助,就必须要给模型提供更多上下文或指令以明确你想要系统实现的目标。而这正是提示工程的全部内容。比如,我们可以在上边的例子中加入一些对问题的描述:
python
输入的提示:
Complete the sentence:
The sky is
模型输出:
blue during the day and dark at night.
我们明确的告诉模型他要执行的任务,结果就会好一些。这种设计有效提示来指导模型执行期望任务的方法就是本指南中所称的提示工程。
少次(few-shot)提示(prompt)
少次提示指为模型提供一组高质量的示例,每个示例都包括目标任务的输入和期望输出。由于模型首先看到高质量的例子,它能更好地理解人类的意图和标准,才能知道什么样的答案是好的答案。因此,少次提示通常比零次提示有更好的性能。
举个例子,假如我们让LLM去判断文本的情感:
python
输入的提示:
任务:分析文本的情感
示例1:这段文字真是太棒了,我非常喜欢! - 积极
示例2:我不太喜欢这个,感觉很一般。 - 消极
示例3:这本书的内容很客观,提供了很多事实信息。 - 中性
现在,请对以下文本进行情感分析:
1. 我真的对这个产品感到失望,它没有达到我的期望。
2. 这是我看过的最好的电影之一,强烈推荐给大家!
3. 报告详细介绍了市场的现状,很中立。
在这个例子中,模型首先接收到任务的描述和三个带有标签的示例文本。这些示例展示了如何将文本与它们的情感倾向相关联。然后,模型需要使用这些示例作为指导,对新的文本进行情感分类。这种few-shot prompt的方法可以帮助模型在没有大量标注数据的情况下学习新任务。
少次提示的研究进展
许多研究探讨了如何构建上下文示例以最大化性能,并观察到提示格式、训练示例的选择以及示例顺序的选择可能导致截然不同的性能,从接近随机猜测到接近最新技术水平(State of the Art, SoTA)。
Zhao et al. (2021) 研究了利用少次提示完成分类任务的情况,并提出LLM(他们在实验中使用GPT-3)存在几种偏见/问题(biases),这些偏见导致了模型输出偏差较高:
- 如果示例中的标签分布不平衡,则存在多数标签偏见;
- 最近性偏见是指模型可能在最后重复标签的倾向;
- 常见标记偏见表明LLM倾向于比罕见标签更频繁地产生常见标签。
不过,论文中提出了一种解决方案,即:
当输入字符串为N/A(不适用/不可用)时,模型会随机输出标签,因此,当示例中的标签分布不均衡时,可以利用N/A来校准。如下图所示:
假设一个文本情感分类模型偏向于把文本分类为 负面情感:

那么在为模型提供few-shot prompt时,就可以提供一些N/A输入,即无意义输入,类似于NULL,然后为其标上标签。

这些发现揭示了在设计上下文示例时需要考虑的关键因素。通过理解和解决这些问题,用户可以更有效地指导模型的行为,从而提高模型在特定任务上的性能。论文中提出的校准方法提供了一种减少模型输出偏差并提高预测一致性的策略。