预训练大模型时代必备技巧——提示工程指南(Prompt Engineering Guide)

标签:#Prompt##大模型# 时间:2023/04/24 22:37:28 作者:小木

随着预训练大模型技术的发展,基于prompt方式对模型进行微调获得模型输出已经是一种非常普遍的大模型使用方法。但是,对于同一个问题,使用不同的prompt也会获得不同的结果。为了获得更好的模型输出,对prompt进行调整,学习prompt工程技巧是一种必备的技能。


前MetaAI工程师Elvis成立的DAIR AI公司日前发布了Prompt Engineering Guide。详细介绍了Prompt的基本概念及其工程技巧,应该是目前最全的Prompt工程入门指南了。本文将简要介绍一下这个Prompt Engineering Guide。


[TOC]

Prompt的基本概念和价值

Prompt是一种输入形式,用于指示AI模型在进行特定任务时应该采取什么行动或生成什么输出。Prompt是一种自然语言输入,类似于命令或指令,让AI模型知道它需要做什么。

Prompt engineering(提示工程)是一种技术,用于设计和优化用于训练AI模型的Prompt。Prompt engineering的目标是通过提供清晰、简洁和具有针对性的Prompt来优化模型的性能和效果。

Prompt engineering包括以下几个步骤:

  1. 确定任务目标:确定任务的类型和目标,以及期望的输出。

  2. 设计Prompt:设计一个简洁明了、有针对性的Prompt,以激发模型生成适当的输出。Prompt应该尽可能简单,避免冗长和复杂的句子结构。

  3. 优化Prompt:利用验证集和反馈循环等技术,不断优化Prompt的效果和性能。可以使用不同的Prompt,比较它们的表现,并选择效果最佳的一个。

  4. 调整参数:调整模型的超参数和其他参数,以获得更好的结果。

Prompt engineering的好处是可以提高模型的效果和性能,减少训练时间和成本,并提高模型的可解释性和可控性。同时,Prompt engineering可以帮助AI从业者更好地理解模型的内部工作原理,从而更好地应用和利用AI技术。

Prompt的基本组成

尽管Prompt大家可以理解为自然语言表述的一种输入指令,但是能让模型准确理解prompt意图的话还是需要注意prompt应该包含的信息。

例如,在AutoGPT的代码原理解析中(参考:https://www.datalearner.com/blog/1051681400812596 )我们看到,作者就是构造了十分巧妙的Prompt,让每一次大家的输入都可以被GPT-4理解并以特定的方法返回,才能让AutoGPT完成很多超过语言模型的事情。

在Prompt Engineering Guide中,DAIR AI将Prompt总结包含如下部分:

  • 指令(Instruction) - 即你希望模型帮你完成的一个忒顶的任务或者指令
  • 情景(Context) - 可以涉及外部信息或附加上下文,这些信息可以引导模型生成更好的响应。
  • 输入数据(Input Data) - 是我们感兴趣的输入或问题,我们希望找到一个响应。
  • 输出指标(Output Indicator) - 指示输出的类型或格式。

需要注意的是,很多时候大家都是告诉模型我要干啥,但是常常忽略了情景信息、输入数据和输出指标。尤其是最后一个,十分重要。很多时候如果我们希望得到准确的结果,是需要限制模型的输出的,否则,模型本身可能会给我们一个预期之外的内容。因为目前模型以生成式模型为主,这方面发散程度很高。

如果我们正在训练一个情感分析模型,我们希望模型能够正确地识别输入文本的情感,并输出相应的情感标签。在这种情况下,输出指标应该限制模型输出情感标签,而不是其他不相关的信息。否则,经常会获得模型一大段附加信息,不仅浪费tokens,也会可能会产生没用的输出。

此外,限制输出可以有效帮助我们完成一些模型自动化的能力。例如,在AutoGPT中,GPT-4模型的返回被严格限制成COMMAND+PARAM的形式,也就是说,模型每一次返回的结果都是变成指令+参数,这样我们只需要按照这个规则解析模型返回就可以完成一系列自动化的操作。所以说,限制模型输出是一种十分重要的技巧!

Prompt通用技巧

在Prompt Engineering Guide中,DAIR AI将prompt技巧分成几种形式介绍。首先,它描述了所有的Prompt工程的一般性注意事项:

  • 从简单开始:当你开始设计提示时,应该牢记,这是一个迭代过程,需要大量的实验才能得到最佳结果。你可以从简单的提示开始,随着目标越来越明确,逐渐添加更多元素和上下文以获得更好的结果。
  • 指令很重要:你可以使用指令为各种简单任务设计有效的提示,以指示模型你想要达到的目标,例如“写”,“分类”,“总结”,“翻译”,“排序”等等。请记住,你也需要进行大量的实验,以了解什么效果最佳。尝试不同的指令、关键词、上下文和数据,看看哪种在你特定的用例和任务中表现最佳。
  • 具体性:对你想让模型执行的指令和任务非常具体。提示越具体和详细,结果就越好。当你有一个期望的输出或生成风格时,这点尤为重要。
  • 避免不准确:鉴于以上关于详细描述和改进格式的提示,很容易陷入想要过于聪明的提示陷阱,从而可能导致不准确的描述。通常更好的方法是具体和直接。
  • 要做还是不做?:在设计提示时,另一个常见的技巧是避免说不要做什么,而是说要做什么。这可以鼓励更具体的描述,并关注细节,从而获得良好的模型响应。

指南中有具体案例,我们以避免不准确为例,举个例子,假设,我们想要通过ChatGPT了解什么是是Prompt Engineering,主要是给初中生或者高中生说明。那么,我们正常情况下可能会这样提问:


其实我们的目的就是向初中生解释,那么可以明确的说出来:


可以看到当我们明确表达我们的目的时候,ChatGPT给出了更少的专业术语(如性能等)、语言也更加简单通俗。

针对不同任务的Prompt工程技巧

除了上述通用的技巧外,Prompt Engineering Guide还提供了针对不同类型任务的提示技巧,或者说是不同手段的提问技巧,主要包括:

Zero-shot Prompting

零样本学习是当前大模型都具备的基本能力,即使对于模型没有训练过的任务,大模型也可以给出答案。但是,很多时候这是最困难的问题。这时候一般需要使用指令调整和少样本提示技术。

Few-shot Prompting

虽然大型语言模型展现了卓越的零样本能力,但当使用零样本设置时,在更复杂的任务上仍然表现不足。少样本提示可以用作一种技术,以实现上下文学习,在提示中提供演示来引导模型实现更好的性能。演示作为后续示例的条件,我们希望模型生成一个响应。

这里有例子:


可以看到,我们直接造了一种情感分类的格式,ChatGPT就知道接下来做的是什么了。

Chain-of-Thought Prompting

在Wei等人(2022)的研究中引入的思路链(CoT)提示,通过中间推理步骤实现了复杂的推理能力。你可以将其与少样本提示结合起来,以在需要推理后再响应的更复杂任务上获得更好的结果。

下面是一个例子,我们给出一组数,先找出其中的奇数,然后判断这些奇数求和结果是不是一个偶数:


可以看到,如果我们能将问题分解成不同的步骤,模型也可以得出准确结论。

除了上面常见的Prompt技巧外,Prompt Engineering Guide还列举了如下的技巧:

  • Self-Consistency
  • Generate Knowledge Prompting
  • AUtomatci Prompt Engineering
  • Active-Prompt
  • Directional Stimulus Prompting
  • ReAct
  • Multimodal CoT
  • Graph Pormpting

这些技术都是最近几年的新技术,因为篇幅原因我们不再单独介绍,大家可以去原文查看。

针对不同模型的Prompt工程

除了上面的内容外,Prompt Engineering Guide本身还提供了针对不同模型的Prompt工程指南,包括Flan、ChatGPT、LLaMA、GPT-4等。不过很多内容还在紧张的开发中,大家可以关注。

总结

Prompt作为一种大模型使用技术,几乎决定了大模型使用者所获得的价值。在当前这个AI大时代中,在大模型还没有足够智慧的时候,Prompt工程水平几乎决定了先行者的水平。所以大家一定要重视,在这个机会中获得优势!

Prompt Engineering Guide: https://www.promptingguide.ai/

欢迎大家关注DataLearner官方微信,接受最新的AI技术推送