ChatGPT基础知识系列之Prompt

时间:2024-10-27 08:06:20

ChatGPT基础知识系列之Prompt

在 ChatGPT 中,用户可以输入任何问题或者话题,如天气、体育、新闻等等。系统将这个输入作为一个“提示”(prompt)输入到 GPT 模型中进行处理。GPT 模型会基于其学习到的语言规律和上下文知识,生成一个自然语言回答,并返回给用户。

例如,当用户输入“明天天气怎么样?”时,ChatGPT 的 prompt 将这句话传送给 GPT 模型。模型会分析这句话,理解用户想要了解的信息(即“明天的天气状况”),然后生成一个回答,例如“明天会有小雨天气,气温为 15 ℃ 左右”。这个回答会被 ChatGPT 输出到聊天界面,让用户看到。

在 ChatGPT 中,prompt 技术的核心是使用 GPT 模型进行文本理解和生成,同时支持基于用户输入的情境和话题扩展,使用情境感知技术和自动聚类技术提高回答精准度。对话前后上下文信息,如历史对话数据、用户输入、主题、语境以及情感等等因素都被融合进回答中,让 ChatGPT 在回答用户问题和模拟人类对话方面逼真性和自然度都有大幅提升。

尽管 ChatGPT 的 prompt 仍然存在一些不足之处,例如对于某些领域专业知识不够丰富,无法提供准确的答案。但是,ChatGPT 的 prompt 技术已经在实现自然语言处理和聊天机器人系统方面取得重要进展,具有广阔的应用前景。

想要让ChatGPT产出有效的回答,需要遵循以下五个原则:

  • 提问清晰:请尽可能清晰地描述您的问题
  • 简明扼要:请尽量使用简单的语言和简洁的句子来表达您的问题
  • 确认问题:请确认您的问题是清晰、明确和完整
  • 单一提问:请一个一个地问,而不是把所有问题放在一个问题中
  • 不要提供敏感信息:请不要在您的问题中提供任何个人敏感信息

ChatGPT提供的输出通常取决于任务的复杂性和提示的质量。一个很好的经验法则是思考如何写出一道单词题供中学生解决。一个写得好的提示为模型提供了足够的信息,让它知道你想要什么以及它应该如何响应。

自GPT-3以来,大语言模型进入了新的训练范式,即“预训练模型+Promp learning”。在这一新的范式下,大语言模型呈现出惊人的zero-shot和few-shot能力,使用较少的训练数据来适应新的任务形式。

NLP的训练范式有哪些

第一范式:基于传统机器学习模型的范式,如 tf-id 特征+朴素贝叶斯等机器算法;

第二范式:基于深度学习模型的范式,如 word2vec 特征 + LSTM 等深度学习算法,相比于第一范式,模型准确有所提高,特征工程的工作也有所减少;

第三范式:基于预训练模型 + finetuning的范式,如 BERT + finetuning 的NLP任务,相比于第二范式,模型准确度显著提高,但是模型也随之变得更大,但小数据集就可训练出好模型;

第四范式:基于预训练模型 + Prompt 的范式,如 BERT + Prompt 的范式相比于第三范式,模型训练所需的训练数据显著减少。

在整个NLP领域,你会发现整个发展是朝着精度更高、少监督,甚至无监督的方向发展的,而 Prompt Learning 是目前学术界向这个方向进军最新也是最火的研究成果。

Prompt

Prompt是一种指令,它告诉人工智能模型要执行什么任务或生成什么样的输出。在机器学习和自然语言处理中,Prompt通常是一些文本或语言,被输入到训练好的模型中,用于指示模型生成一个相应的输出。Prompt可以是一个问题、一个句子或一段话,其作用是引导人工智能模型生成我们想要的文本类型和内容。

在一个智能语音助手应用程序中,当用户说“今天天气如何?”时,应用程序将“今天天气如何?”作为Prompt输入到自然语言处理模型中,该模型将生成一个回答,比如“今天是晴天,最高气温将达到25度”。在这个例子中,Prompt是“今天天气如何?”

Prompt是研究者们为了下游任务设计出来的一种输入形式或模板,将下游的预测等任务转化为语言模型(Language Model)任务,它能够帮助模型“回忆”起自己在预训练时“学习”到的东西,并将语言模型的预测结果转化为原本下游任务的预测结果。

在实际的研究中,prompts应该有空位置来填充答案,这个位置一般在句中或者句末。如果在句中,一般称这种prompt为cloze prompt完形提示;如果在句末,一般称这种prompt为prefix prompt前缀提示。

  1. cloze prompt:填充答案的位置在句中
  2. prefix promp:填充答案的位置在句末

**它是插入到输入示例中的一段文字,能够将原始任务(original task)表述为语言模型问题 (language modeling problem)。**例如,假如我们要对下面这条电影评论“不值得看(No reason to watch)”进行分类,我们可以将prompt“It was”插入到句子中,得到“No reason to watch. It was ____”。很自然的,语言模型产生“terrible(可怕)”的概率比“great(伟大)”的概率高。

Prompt Tuning 和 Fine Tuning

首先我们应该有的共识是:预训练模型中存在大量知识;预训练模型本身具有少样本学习能力。

Prompt Tuning 和 Fine Tuning 都是深度学习中常用的技术。

  1. Prompt Tuning 是指在预训练模型的基础上,通过对输入给出的“提示”信息(prompt)进行微调,来实现对特定任务的适应。
  2. Fine Tuning 是指在预训练模型的基础上,对整个模型进行微调,以适应新任务。

要提出一个好的方式那必然是用来解决另一种方式存在的缺陷或不足,那我们就先从它的上一个范式来说起,就是预训练模型 PLM + finetuning范式 常用的是 BERT+ finetuning,这种范式是想要预训练模型更好的应用在下游任务,需要利用下游数据对模型参数微调;首先,模型在**预训练的时候,采用的训练形式:自回归、自编码,这与下游任务形式存在极大的 gap,**不能完全发挥预训练模型本身的能力,其次,现在的预训练模型参数量越来越大,为了一个特定的任务去 finetuning 一个模型,然后部署于线上业务,也会造成部署资源的极大浪费。

简单理解Prompt learning,其核心就是以特定的模板,将下游任务的数据转成自然语言形式,充分挖掘预训练模型本身的能力,以适应不同的下游任务。Prompt Tuning的本质是改变任务格式,从而迎合大模型的性能。换句话说,Prompt Tuning的前提是预训练模型的性能已经非常好了,我们只需要在推断的时候进行任务格式转换即可获得很好的性能;而Fine-tuning是改变模型,去适应下游任务。

Prompt Tuning 适用于那些需要根据输入的不同提示信息生成不同类型的输出的任务。例如,在文本分类任务中,我们可以指定输入的 prompt,以指导预训练模型生成特定类型的分类结果。这种技术可以加快模型适应特定任务的速度,提高预测的精确度,并减少微调所需的计算资源。

Instruct tuning

指示学习是Google Deepmind团队在2021年的一篇名为《Finetuned Language Models Are Zero-Shot Learners》文章中提出的思想。他们这些论文标题都很有意思,OpenAI在2020年GPT-3那篇论文叫做《Language Models are Few-Shot Learners》。Google发现像GPT-3这样的大规模语言模型可以非常好地学习few-shot,但它在zero-shot上却不那么成功。例如,当时GPT-3在阅读理解、问题回答和自然语言推理等任务上的表现很一般,Google认为一个潜在的原因是,如果没有少量示例的也就是zero-shot的条件下,模型很难在与训练前数据格式(主要是prompts格式)维持一致。

既然如此,那么为什么不直接用自然语言指令做输入呢?所以这篇论文提出一种基于instruction-tuning的方法叫做FLAN(Finetuned LAnguage Net)。对所有的NLP task,根据其任务类型和目标划分若干个簇,随机挑选一个簇内的所有task作为评估,其他所有簇的task用于instruction-tuning。

模型可以先在常识推理、机器翻译、情感分析等任务上先进行微调,这些任务都可以变为instruct的形式,利用大模型进行学习。在这种方式下,而当一个unseen task进入时,比如自然语言推断natural language inference任务,就可以通过理解其自然语言语义可以轻松实现zero-shot的扩展。

Instruct Tuning VS Prompt Tuning

指示学习和提示学习的异同点

  1. 他们的目的都是去挖掘语言模型本身具备的知识。
  2. 不同的是Prompt是激发语言模型的补全能力,例如根据上半句生成下半句,或是完形填空等。Instruct是激发语言模型的理解能力,它通过给出更明显的指令,让模型去做出正确的行动。

Prompt Engineer

ChatGPT模型可以做任何事情,从生成原始故事到执行复杂的文本分析,因为ChatGPT可以做很多事情,所以你必须明确地描述你想要什么。展示,而不仅仅是讲述,往往是一个好提示的秘诀。

创建提示有三个基本准则:

  1. **展示并说明。**通过说明、示例或两者的组合,明确你想要什么。如果你想让模型按字母顺序对项目列表进行排名,或者按情感对段落进行分类,那么就向它展示你想要的。
  2. **提供高质量的数据。**如果你试图建立一个分类器或让模型遵循一个模式,请确保有足够的例子。一定要校对你的例子——这个模型通常足够聪明,可以看穿基本的拼写错误并给你一个回应,但它也可能认为这是故意的,它会影响你的回应。
  3. **检查你的设置。**temperature和top_p设置控制模型在生成响应时的确定性。如果你要求它给出一个只有一个正确答案的答案,那么你会想把它们设置得更低。如果你正在寻找更多样化的回应,那么你可能想把它们设置得更高。人们对这些设置的第一个错误是认为它们是“聪明”或“创造力”的控制。

能把问题描述清楚,就比很多普通人强了,感觉 prompt 在推着向前升级我们每个人的思维

  1. 足够清楚的描述,引导模型
  2. 给一些样例,引导模型
  3. 可以尝试多种方式表达—换一种说法试试,从而达到一种较好的效果

总结

Fine-tuning:先在大规模语料上进行预训练,然后再在某个下游任务上进行微调,如BERT、T5;

Prompt-tuning:先选择某个通用的大规模预训练模型,然后为具体的任务生成一个prompt模板以适应大模型进行微调,如GPT-3;

Instruction-tuning:仍然在预训练语言模型的基础上,先在多个已知任务上进行微调(通过自然语言的形式),然后再推理某个新任务上进行zero-shot。指示学习的优点是它经过多任务的微调后,能够在其他任务上做zero-shot,而提示学习都是针对一个任务,泛化能力不如指示学习,InstructGPT和ChatGPT用到的都是指令微调了。

与 Prompt Tuning 不同,Fine Tuning 是指对整个预训练模型进行微调,以适应新的任务。Fine Tuning 通常需要大量的训练数据,因为它需要在新任务上重新训练模型的所有参数。因此,Fine Tuning 对计算资源和时间的要求较高,但通常可以获得更高的精度和更好的泛化性能。

总之,Prompt Tuning 和 Fine Tuning 是深度学习中常用的两种技术,都可以用来适应不同的任务和数据集。在选择合适的技术时,需要考虑训练数据的大小、计算资源的可用性、任务类型和所需的精度等因素。