Qiming の 小屋

Qiming の 小屋

向LLaMA-1/2和GPT-3.5/4提问原则性指令

29
2024-10-08
https://arxiv.org/html/2312.16171v2

Bsharat, Sondos Mahmoud, Aidar Myrzakhan, and Zhiqiang Shen. "Principled instructions are all you need for questioning llama-1/2, gpt-3.5/4." arXiv preprint arXiv:2312.16171 (2023).

翻译论文的前三章节。


1 介绍

“提示工程是与生成式大型语言模型沟通的艺术。” ——ChatGPT, 2023

大型语言模型(LLMs),如ChatGPT,已在多个领域和任务中展现出令人瞩目的能力,包括回答问题、数学推理、代码生成等。然而,对于普通用户而言,这些模型的应用和使用方法,尤其是在设计最佳指令或提示方面,有时并不清晰。在本研究中,我们的目标是向开发者或普通用户揭示与LLMs交互和查询时的这些谜团,并通过精心策划更好的提示,进一步提升预训练LLMs响应的质量。

图1:应用原则前后的提示及相应回复的示例说明。

图1:应用原则前后的提示及相应回复的示例说明。左侧为原始提示及GPT-4的回复,右侧为遵循原则的提示及相应的回复。此处应用了原则5和原则6。

鉴于直接对大型语言模型(LLMs)进行特定任务的微调对于大多数用户和开发者而言往往因效率低下而不切实际或难以实现,研究界已将注意力转向优化提示。提示工程技术,即手动或通过自动化手段精心构建精确的任务特定自然语言指令,并仔细选择具有代表性的示例包含在提示中,已成为大型语言模型研究的核心领域。尽管付出了这些专注的努力,但可靠地引导大型语言模型产生特定响应并充分利用预训练大型语言模型的能力仍然是一个巨大的挑战。

在本研究中,我们提出了全面的原则性指令,以提高大型语言模型提示的质量。具体而言,我们研究了向不同类型和表述方式的提示输入时出现的广泛行为,如将目标受众纳入提示中,例如添加“受众是该领域的专家”或“受众是5岁的儿童”,以及其他多个方面的大型语言模型特征。我们的研究结果表明,更大的模型具有相当大的模拟能力。提供的任务或指令越精确,模型的性能就越有效,其响应与我们的期望就越一致。这表明大型语言模型不仅仅是记忆训练数据,而是能够将这些信息适应不同的提示,即使核心询问保持不变。因此,为大型语言模型分配特定角色以产生更符合我们预期结果的输出证明是有益的。

我们在第3节中详细阐述了大型语言模型提示的原则性指令,提供了进一步的动机,并详细说明了几个具体的设计原则。我们通过实验证明,与标准的大型语言模型提示相比,所提出的原则能够产生质量更高、更简洁、更事实准确且不太复杂或繁琐的响应。具体而言,在使用包含每个原则多个问题的手动设计的ATLAS基准测试时,我们引入的专门提示在应用于GPT-4时,分别将大型语言模型响应的质量和准确性平均提高了57.7%和36.4%。此外,随着模型规模的增加,改进更为显著,例如,从LLaMA-2-7B到GPT-4的性能提升超过了20%。

2 相关工作

大型语言模型。大型语言模型(LLMs)的演进在自然语言处理(NLP)领域的发展中起到了关键作用。本节回顾了LLMs的关键发展,为当前研究提供了基础。从Google的BERT开始,其通过双向训练方法革新了上下文理解,而T5则通过将各种NLP任务整合到一个框架中进一步推动了该领域的发展。同时,GPT-1引入了一种开创性的模型,利用Transformer架构进行无监督学习。随后,其继任者GPT-2将参数数量显著扩展到15亿,在文本生成方面展现出了卓越的能力。然后,GPT-3在规模和能力上实现了巨大飞跃,拥有1750亿参数,并在广泛的语言任务中展现出了熟练度。

关于其他最近提出的大型语言模型,Gopher不仅通过其280亿参数的模型提升了语言处理能力,还将伦理考量置于首位。Meta的LLaMA系列强调了效率的重要性,表明在资源较少的情况下也能实现强大的性能,这一概念也得到了Chinchilla的倡导,其提出更小、经过最优训练的模型也能取得卓越成果。这一系列创新中的最新成果是Mistral,它在效率和性能方面表现出色,甚至超过了更大的模型。这一轨迹上的最新里程碑是OpenAI的GPT-4和Google的Gemini系列。它们以增强的理解和生成能力代表了该领域的又一重大进步,为LLMs在各个领域的应用设立了新的基准。

提示词。提示词作为与大型语言模型交互的一个独特方面,因其无需对模型进行微调而具有简洁性,已发展成为一个细致入微的研究领域,突出了用户输入与大型语言模型响应之间的复杂关系。早期的探索,深入探讨了不同提示设计如何显著影响语言模型的性能和输出,这标志着提示工程的诞生。这一领域迅速扩展,揭示了提示在少样本学习和零样本学习场景中的关键作用,以GPT-3的工作为例,其中精心设计的提示使模型能够仅通过最少的先前示例执行任务。除了任务指令之外,最近的研究已转向理解提示中的语义和上下文细微差别,研究细微变化如何导致大型语言模型产生截然不同的响应。

“Ask-Me-Anything ”提示方法引入了使用多个不完美提示并将它们聚合起来以改善模型性能,特别是在问答格式中。另一种方法是“思维链”(Chain-of-Thought)方法,其中模型生成一系列中间推理步骤以提高在复杂任务上的性能。此外,“从最少到最多”(least-to-most)提示是一种将复杂问题分解为更简单子问题的新策略,显著增强了模型处理比提示中呈现的问题更具挑战性问题的能力。探索了解释的有效性,发现解释可以增强大型语言模型在复杂任务上的学习能力。此外,还使用ChatGPT检查了提示工程技术目录,强调了提示工程在增强大型语言模型在软件开发和教育领域应用中的重要性。它还指出,有效的提示设计对于提高大型语言模型的性能至关重要,特别是在编程实践和学习体验方面。最后,“定向刺激提示”(Directional Stimulus Prompting)提出了一种新颖框架,该框架使用可调策略模型生成辅助提示,引导大型语言模型实现特定的期望结果。这种提示策略的多样性凸显了大型语言模型领域的快速发展,提供了多种有效利用其能力的方向。

3 原则

3.1 动机

由于预训练且与指令对齐的大型语言模型(LLM)生成的响应质量直接与用户提供的提示或指令的质量相关,因此,制作LLM能够理解并有效回应的提示至关重要。向LLM提供的提示是用户与LLM之间交互编程的一种方式,能够增强LLM处理各种任务的能力。这项工作的主要重点是制定和优化提示的方法,以提高输出质量。这需要对LLM的功能和行为、其潜在机制以及支配其响应的原则有全面的了解。在这项工作中,我们通过详细阐述26条适用于不同场景和情况下的全面提示原则来实现这一目标,如图1所示为一些示例。

3.2 概述

原则概述如表1所示。根据其独特性质,我们将其分为如表2所示的五个类别:(1)提示结构和清晰度,例如,在提示中融入目标受众,如受众是该领域的专家;(2)具体性和信息性,例如,在提示中添加以下短语“确保你的回答是无偏见的,并且不依赖于刻板印象。”;(3)用户交互和参与,例如,允许模型通过向你提问来引出精确的细节和要求,直到它拥有足够的信息来提供所需的输出“从现在开始,我希望你通过向我提问来……”。(4)内容和语言风格,例如,与LLM交流时无需礼貌,因此无需添加诸如“请”、“如果你不介意的话”、“谢谢”、“我想”等短语,直接切入要点;(5)复杂任务和编码提示,例如,在交互式对话中将复杂任务分解为一系列更简单的提示。

表1:26条随机排列的提示原则概览

#原则

指令提示原则

1

若偏好更简洁的回答,与大型语言模型(LLM)交流时无需礼貌,因此无需添加“请”、“如果你不介意的话”、“谢谢”、“我想”等短语,直接切入要点。

2

在提示中融入目标受众,例如,受众是该领域的专家。

3

在交互式对话中,将复杂任务分解为一系列更简单的提示。

4

使用肯定性指令,如“请……”,同时避免使用否定性语言,如“不要……”。(注:原文中未给出具体肯定性和否定性指令的示例,因此在此处添加了示例以完善翻译)

5

当你需要澄清或更深入地理解某个主题、想法或任何信息时,使用以下提示:用简单的话解释[插入具体主题];像我是11岁的孩子一样向我解释;像我是[领域]的初学者一样向我解释;用简单的英语写[文章/文本/段落],就像你在向5岁的孩子解释某事一样。

6

添加“我会为更好的解决方案支付$xxx小费!”

7

实施示例驱动的提示(使用少样本提示)。

8

格式化提示时,以“###指令###”开头,如果相关,则随后是“###示例###”或“###问题###”。然后,展示你的内容。使用一个或多个换行符将指令、示例、问题、上下文和输入数据分开。

9

在提示中融入以下短语:“你的任务是”和“你必须”。

10

在提示中融入以下短语:“你将受到惩罚”。(注:此原则可能在实际应用中引发负面效果,需谨慎使用)

11

在提示中使用“以自然、人性化的方式回答给定问题”这一短语。

12

使用引导性词汇,如写“逐步思考”。

13

在提示中添加以下短语:“确保你的回答是无偏见的,并且避免依赖刻板印象。”

14

允许模型通过向你提问来引出精确的细节和要求,直到它拥有足够的信息来提供所需的输出(例如,“从现在开始,我希望你通过向我提问来……”)。

15

询问特定主题、想法或任何信息,并想测试你的理解时,你可以使用以下短语:“教我任何[定理/主题/规则名称],并在最后包含一个测试,在我回答后告诉我我的答案是否正确,但不要事先提供答案。”

16

为大型语言模型分配角色。

17

使用分隔符。

18

在提示中多次重复特定的单词或短语。

19

将思维链(Chain-of-thought, CoT)与少样本提示相结合。

20

使用输出引导语,即在提示的结尾处加上期望输出的开头。通过以预期回应的开头结束你的提示来使用输出引导语。

21

要写详细的文章/文本/段落/文章或任何类型的详细文本:“为我详细写一篇关于[主题]的[文章/文本/段落],并添加所有必要的信息。”

22

在不改变风格的情况下纠正/修改特定文本:“尝试修改用户发送的每个段落。你应该只改进用户的语法和词汇,并确保听起来自然。你应该保持原始的写作风格,确保正式的段落仍然保持正式。”

23

当你有一个可能分布在不同文件中的复杂编码提示时:“从现在开始,每当你生成的代码跨越多个文件时,生成一个[编程语言]脚本,该脚本可以运行以自动创建指定的文件或对现有文件进行更改以插入生成的代码。[你的问题]”

24

当你想要使用特定单词、短语或句子开始或继续文本时,使用以下提示:我为你提供了开头[歌词/故事/段落/文章……]:[插入歌词/单词/句子]根据提供的单词完成它。保持流畅一致。

25

明确说明模型必须遵循的要求,以便以关键词、规定、提示或指令的形式生成内容。

26

要编写任何与提供的样本相似的文本,如文章或段落,请包含以下指令:使用与提供的段落[/标题/文本/文章/答案]相同的语言。

表2:提示原则分类

类别

原则

原则编号

Prompt的结构与清晰度

1. 在prompt中融入目标受众。 2. 使用肯定性指令,如“做”,避免使用否定性语言,如“不要”。 3. 使用引导性词汇,如“一步一步地思考”。 4. 使用输出引导语,即在prompt的结尾处用预期回应的开头来结束,以此引出期望的输出。 5. 使用分隔符。在格式化prompt时,先以“###Instruction###”开头,随后根据需要选择“###Example###*”或“####Question###”,然后呈现内容。 6. 使用一个或多个换行符来分隔指令、示例、问题、上下文和输入数据。

2, 4, 12, 20, 17, 8

具体性与信息性

1. 实施示例驱动的prompt(使用少量示例的prompt)。 2. 当需要清晰或深入理解某个主题、想法或信息时,使用以下表述: - 用简单的语言解释[具体主题]。 - 像我是11岁的孩子一样向我解释。 - 假设我是[领域]的初学者,向我解释。 - “用简单的英语写[文章/文本/段落],就像你在向一个5岁的孩子解释某件事一样。” 3. 在prompt中添加以下表述:“确保你的回答不带偏见,避免依赖刻板印象。” 4. 要编写与提供的样本相似的任何文本,请包含具体指令: - “使用与提供的段落[/标题/文本/文章/答案]相同的语言。” 5. 当你想使用特定单词、短语或句子开始或继续文本时,使用以下prompt结构: - “我给你提供了[歌词/故事/段落/文章...]的开头:[插入歌词/单词/句子]。根据提供的单词完成它。保持流畅性。” 6. 明确说明模型必须遵循的要求,以生成内容,形式为关键词、规定、提示或指令。 7. 要询问特定主题或想法并测试你的理解,你可以使用以下表述: - “教我[任何定理/主题/规则名称],并在最后包含一个测试,让我回答后告诉我答案是否正确,但不要事先提供答案。” 8. 要编写详细的文章/文本/段落/文章或任何类型的详细文本: - “为我详细写一篇关于[主题]的[文章/文本/段落],添加所有必要的信息。”

7, 5, 13, 26, 24, 25, 15, 21

用户交互与参与度

允许模型通过向你提问来引出具体细节和要求,直到它获得足够的信息。 “从现在开始,我希望你向我提问以……” 要编写详细的文章/文本/段落/文章或任何类型的详细文本: “为我详细写一篇关于[主题]的[文章/文本/段落],添加所有必要的信息。”

14, 21

内容与语言风格

1. 要在不改变风格的情况下纠正/更改特定文本: - “尝试修订用户发送的每个段落。你只需要改进用户的语法和词汇,并确保听起来自然。你应该保持原有的写作风格,确保正式的段落仍然保持正式。” 2. 使用以下表述:“你的任务是”和“你必须”。 3. 使用以下表述:“你将受到惩罚”。 4. 为语言模型分配一个角色。 5. 在你的prompt中使用“以自然语言形式回答给定问题”这一表述。 6. 与大型语言模型(LLM)交流时无需礼貌,因此无需添加“请”、“如果你不介意的话”、“谢谢”、“我想”等表述,直接切入正题。 7. 在一个prompt中多次重复特定单词或短语。 8. 添加“如果我得到更好的解决方案,我会打赏$xxx!” 9. 在交互式对话中,将复杂任务分解为一系列更简单的prompt。

22, 9, 10, 16, 11, 1, 18, 6, 3

复杂任务与编码Prompt

1. 当你有一个可能涉及不同文件的复杂编码prompt时: - “从现在开始,每当你生成跨越多个文件的代码时,生成一个[编程语言]脚本,该脚本可以运行以自动创建指定的文件或对现有文件进行更改以插入生成的代码。[你的问题]。” 2. 将思维链(Chain-of-thought, Cot)与少量示例的prompt相结合。

23, 19

3.3 设计原则

在本研究中,为制定能够激发预训练大型语言模型产生高质量回复的提示和指令,建立了一系列指导原则:

简洁明了:通常,过于冗长或模糊的提示可能会使模型感到困惑,或导致产生不相关的回复。因此,提示应简洁明了,避免添加对任务无贡献的不必要信息,同时又要足够具体,以便为模型提供指导。这是提示工程的基本指导原则。

上下文相关性:提示必须提供有助于模型理解任务背景和领域的相关上下文。通过包含关键词、领域特定术语或情境描述,可以使模型的回复与正确的上下文相关联。我们在所提出的原则中强调了这一设计理念。

任务一致性:提示应与当前任务紧密相关,使用语言和结构清晰地向模型指示任务的性质。这可能涉及将提示表述为问题、命令或填空语句,以符合任务预期的输入和输出格式。

示例演示:对于更复杂的任务,在提示中包含示例可以展示所需的回复格式或类型。这通常涉及展示输入-输出对,尤其是在“少样本”或“零样本”学习场景中。

避免偏见:设计提示时应尽量减少因模型训练数据而固有的偏见激活。使用中性语言,并注意潜在的伦理影响,尤其是对于敏感话题。

逐步提示:对于需要一系列步骤的任务,可以设计提示来逐步引导模型完成整个过程。将任务分解为一系列相互构建的提示,逐步指导模型。此外,提示应根据模型的性能和迭代反馈进行调整,即需要根据初始输出和模型行为准备好完善提示。而且,提示还应根据模型的性能和回复、以及迭代的人类反馈和偏好进行调整。

最后,更高级的提示可能会融入类似编程的逻辑来完成复杂任务。例如,在提示中使用条件语句、逻辑运算符,甚至伪代码来指导模型的推理过程。提示的设计是一个不断发展的领域,尤其是随着大型语言模型变得越来越复杂。随着研究人员继续探索通过提示工程可以实现哪些极限,这些原则可能会得到改进和扩展。