预训练大模型时代必备技能——Prompt Tuning简介
大型语言模型在自然语言处理领域取得了惊人的成就,已经成为AI技术的前沿。但是,这些模型的巨大规模和强大的计算能力也带来了一些潜在的问题,如高能耗、计算时间长、模型的可解释性等。此外,这些模型在某些特定任务上的表现可能不理想,需要进一步改进。
在解决这些问题的过程中,Prompt Tuning变得非常重要。关于为什么需要Prompt Tuning以及它和传统的Fine-Tuning的区别我们已经在之前的博客中回答(参考:预训练大语言模型的三种微调技术总结:fine-tuning、parameter-efficient fine-tuning和prompt-tuning的介绍和对比)
本文主要是针对Prompt概念进行解释,并说明它和我们理解的指令(Instruction)有什么区别。本文主要的内容如下:
Prompt是什么?它与Instruction的区别是什么
当年BERT横空出世,其强大的自然语言处理能力给大家带来震撼的同时也让大家发现该模型训练成本较高,难以基于该模型架构应用在新的领域。因此,fine-tuning技术也随之流行。而进入到ChatGPT时代,有两个问题变得不同:一个是模型规模巨大,传统的fine-tuning也难以进行;另一个是尽管ChatGPT可以更好地理解人类意图,回答人类的问题,但是不同的提问也会影响模型的输出,那么如何合理的提问获得更好的结果也变得重要。
而Prompt就是解决上述2个问题的重要方法。
Prompt是一种短文本字符串,用于指导语言模型生成响应。中文通常翻译成提示文本。Prompt可以包含任务相关的信息和上下文,以帮助模型更好地理解要求并生成正确的输出。通常,Prompt是由人类设计的,以帮助模型更好地理解特定任务或领域。
除了Prompt外,Instruction也是一种常见的与ChatGPT之类的模型一起出现的东西,中文翻译是指令。
Prompt和instruction都是指导语言模型生成输出的文本片段,但它们有着不同的含义和用途。
Prompt通常是一种短文本字符串,用于指导语言模型生成响应。Prompt提供上下文和任务相关信息,以帮助模型更好地理解要求,并生成正确的输出。例如,在问答任务中,prompt可能包含问题或话题的描述,以帮助模型生成正确的答案。Prompt通常是人类设计的,以帮助模型更好地理解特定任务或领域。
Instruction通常是一种更详细的文本,用于指导模型执行特定操作或完成任务。Instruction可以是计算机程序或脚本,也可以是人类编写的指导性文本。Instruction的目的是告诉模型如何处理数据或执行某个操作,而不是简单地提供上下文或任务相关信息。
因此,Prompt和Instruction都是用于指导模型生成输出的文本,但它们的目的和使用方式是不同的。Prompt更多地用于帮助模型理解任务和上下文,而Instruction则更多地用于指导模型执行具体操作或完成任务。

上图是Google发布的FLAN模型论文中的截图,说明了Prompt微调与Instruction微调的区别。最主要的是Instruction微调的目的是将任务分解,然后告诉模型如何去执行。
哪种技术更好取决于具体应用场景和任务需求。如果任务需要模型对特定任务和上下文进行理解并生成准确和有用的输出,则Prompt-tuning可能更为适合。如果任务需要模型执行特定的操作或任务,则Instruction-tuning可能更为适合。通常情况下,这两种技术都可以在特定的应用场景中为语言模型提供优化和改进。
为何Prompt的设计很重要
在使用语言模型执行任务时,Prompt的设计非常重要。通过调整Prompt的内容和格式,可以引导模型生成更准确和有用的输出。例如,在问答任务中,Prompt可能包含问题或话题的描述,以帮助模型生成正确的答案。在文本生成任务中,Prompt可以包含一些文本片段,以帮助模型更好地理解要求并生成更自然的输出。
Prompt的重要性在few-shot learning等场景中尤为突出。在这种情况下,模型只有很少的训练样本,而Prompt的设计可以帮助模型更好地泛化到新的例子,并提高性能。
总之,Prompt是一种非常有用的工具,可用于指导语言模型生成更准确和有用的输出。在实际应用中,通过精心设计和优化Prompt,可以使语言模型更好地满足特定任务的要求。
通过调整提示文本,可以使语言模型更好地理解任务的要求和上下文,从而提高其在特定任务上的表现。Prompt tuning是使大型语言模型更加智能和高效的关键步骤之一。只有通过精心设计和优化提示文本,我们才能充分发挥大型语言模型的潜力,并使其更好地服务于人类的需求。因此,Prompt engineering,这一种新的工程能力也开始变得重要。

Prompt engineering是指设计和精细化语言模型的提示文本,以提高其在特定任务上的表现的过程。提示文本是一种短文本字符串,作为语言模型的输入,提供上下文并指导其生成响应。
Prompt engineering包括精心设计提示文本以从语言模型中获得所需的响应。这可能涉及选择正确的词汇,以一种模型可以理解的方式格式化提示,并在提示文本中平衡特定性和概括性水平,以避免过度拟合或欠拟合。
总之,Prompt engineering是构建高性能语言模型的关键部分,因为它有助于将模型的行为量身定制到特定的任务和领域。
不同的Prompt的输出对比
你可以使用简单的提示文本来实现很多功能,但结果的质量取决于你提供的信息量以及提示文本的设计质量。提示文本可以包含指令或问题等信息,同时还包括上下文、输入或示例等其他细节。你可以利用这些元素更好地指导模型,并从而获得更好的结果。
下面的例子来自OpenAI的ChatGPT
测试结果:

这个提示就是complete the sentence: the sky is
,但是如果我们更改成complete the sentence like a child: the sky is
,那么ChatGPT的回答如下:

上面的例子我们可能还看不出来不同的prompt的价值,那么我们看一个prompt提高回答质量价值的案例。假如我们想了解一下丘吉尔,那么可以直接这样提问GPT-3.5:

显然这个回答不错,但是不够详细,那么如果我们换成如下的回答那么可以得到更好的回复:

显然,第二个回答更加丰富,原因是第二个prompt包含了更加具体和详细的上下文信息,所以模型可以给出更好的结果。尽管这是一个简单的例子,在实际应用中,你要想解决好一个复杂的问题,如何设计好prompt是非常重要的。
一个实际的案例证明Prompt设计巨大价值的例子
下面列举一个真正的用不同的Prompt输入给GPT-4的实际例子。DataLearner曾经遇到过一个对我来说十分不好解决的问题,DataLearner的预训练模型筛选有多个条件,如下图所示:

正常情况下,我们后台有这样的参数接受上面筛选的条件:
SELECT * FROM PRETRAINED_MODELS WHERE MODEL_TYPE=? AND IS_OPEN_SOURCE=? AND PUBLISHER=?
显然,任意条件组合都可以筛选到结果。但是,有的时候我们也不想筛选某个条件,也就是说我想查询自然语言领域全部的开源模型,不管哪个机构发布的都可以。这样的SQL就无法解决了。于是我们求助GPT-4:

虽然这个方案可能可以解决问题,但是对于这样一个小的需求来说,写这样复杂的SQL语句并不是我们想要的。所以我们更换了一个新的prompt,如下图所示:

看到没,十分简单的方案!一下解决了所有的问题,这就是Prompt Engineering的魔力!
总结
Prompt的设计如今已经是十分重要的记录,而因这个诞生的Prompt Engineering可能就是新时代AI民工的搬砖必备。
欢迎大家关注DataLearner官方微信,接受最新的AI技术推送
