【学习记录】Prompt Engineering:ICL、CoT 以及更多


写在前面

仅作个人学习记录用。本文主要记录Prompt Engineering技术的相关知识。

1. Prompt Engineering是什么

Prompt Engineering 是一种技术,用于设计和优化用于训练 AI 模型的 Prompt。Prompt 是一种输入形式,用于指示 AI 模型在进行特定任务时应该采取什么行动或生成什么输出。它是一种自然语言输入,类似于命令或指令,让 AI 模型知道它需要做什么。Prompt engineering 的目标是通过提供清晰、简洁和具有针对性的 Prompt 来优化模型的性能和效果。

在 Prompt Engineering 中,用户提供一个简短的提示,然后模型根据这个提示生成一段文本作为回应。这个提示可以是一个问题、一个关键词、一句话、一段文字等等。Prompt Engineering 为自然语言生成提供了一种非常灵活和高效的方法,因为它可以根据用户提供的具体上下文生成高质量的文本,从而实现更准确和更有意义的交互。同时,Prompt engineering 可以帮助 AI 从业者更好地理解模型的内部工作原理,从而更好地应用和利用 AI 技术。

2. Prompt Engineering前景如何

在这里插入图片描述

引用知乎帖子 什么是 Prompt Engineering? 中的一段话:

用户的角度看,学习 prompt 可以让你更好地使用 ChatGPT 等产品。

产品的角度看,对于用户来说,我认为 prompt 会是个短期过度形态,未来肯定会有更友好的交互形式,或者理解能力更强的 AI 产品。

随着自然语言处理技术的不断进步,大语言模型的能力不断提升,可能会不再需要Prompt Engineering来优化模型的性能。大模型的自动化程度可能会不断提高,不再需要人为设计和优化Prompt,模型可以自动学习和适应不同的任务和场景。但是,在目前阶段,Prompt Engineering仍然是一种非常有用的技术,可以帮助AI模型更好地处理自然语言任务,提高模型的性能和准确性。

3. ICL(上下文学习)与 Prompt

GPT-3的论文首先提出,大规模的训练数据会产生一种有趣的新兴行为,称为上下文学习(In-Context Learning, ICL),其并不需要调整模型参数,仅用几条下游任务的示例就可以取得极佳的结果。

In-Context Learning 与Prompt Engineering关系紧密,如果你需要让大模型按照主题对文章进行分类,你要做的就是给它几个正确分类样例的Prompt,它就能依据你的样例进行分类给你预期的结果,这就是一个简单的上下文学习过程。

如下图所示,在上下文学习中,我们给大模型几组演示样例(输入-输出对)。在样例的末尾添加一个测试输入(绿色),并允许LM仅通过条件化演示样例,进行预测。

为了正确回答以下两个提示,模型需要理解ICL的演示示例,以确定输入分布(金融新闻或者一般新闻主题)、输出分布(积极或者消极情感)、输入-输出映射(情感分类或者主题分类)以及格式。

在这里插入图片描述

4. Prompt Engineering 技巧

4.1 CoT(思维链)

大模型的 In-Context few-shot 能力极强,但是创建很多的中间步骤用来做有监督微调是非常耗时的,而且传统的 Prompt 在面对数学计算等任务时效果不好,如何结合 In-Context few-shot 和中间步骤来改善大模型数学计算、常识推理等能力是一个亟待解决的问题。思维链的一系列工作就是在这样的问题中诞生的。

论文*Chain-of-Thought Prompting Elicits Reasoning in Large Language Model* 提出CoT,在延续 few-shot Prompting 做法的基础上,在每个示例中加入了问题推理过程的描述,即每个示例由<问题,推理链,答案>三部分构成,如下图右侧所示。在对目标问题进行求解时,模型也会仿照示例中的回答方式,先生成一段求解的思路,然后给出答案。就像人经过深思熟虑后往往会做出正确的判断一样,模型利用这种先生成推理链再给出答案的方式也能取得更好的表现。
在这里插入图片描述
值得注意的是,CoT与模型规模相关,是大参数量模型才能涌现的能力。论文指出:当采用约100B参数量以上的模型时采用CoT Prompting相比传统的few-shot Prompting才会有明显的性能增益。但是在小参数量模型(7b、13b等)中使用CoT仍然是一种可以尝试的Prompt Engineering技巧。

Zero-shot-CoT

零样本思维链(Zero-shot-CoT)由论文 Large Language Models are Zero-Shot Reasoners 提出,是对 CoT Prompting 的后续研究,引入了一种非常简单的零样本提示。研究发现,通过在问题的结尾附加 “Let’s think step by step” 这一句话,大语言模型能够生成一个回答问题的思维链。从这个思维链中,他们能够提取更准确的答案。

Zero-shot-CoT 实际上是一个简单的pipeline。也就是说 “Let’s think step by step” 这句话,只是通过这个 prompt 让大模型尽可能生成一些思考过程,然后再将生成的 rationale(理由) 和 question 拼在一起,重新配合一个answer 指向的 prompt 如“The answer is ”来激励模型生成答案。至于为什么是 “Let’s think step by step” 这句话,只是实验中有限的措辞里效果最好的一句话,仍然有挖掘潜力:

在这里插入图片描述

从技术上讲,完整的零样本思维链(Zero-shot-CoT)过程涉及两个单独的提示/补全结果。在下图中,左侧生成一个CoT,而右侧接收来自第一个提示(包括第一个提示本身)的输出,并从CoT中提取答案。这个第二个提示是一个自我增强的提示:
在这里插入图片描述

Self-Consistency

自洽性(Self-consistency)由论文 Self-Consistency Improves Chain of Thought Reasoning in Language Models 提出,是对 CoT 的一个补充。

在下图示例中,左侧的提示是使用少样本思维链(Few-shot-CoT)范例编写的。使用这个提示,独立生成多个思维链,从每个思维链中提取答案,通过“边缘化推理路径”来计算最终答案。实际上,这就是取多数答案,即对答案进行多数投票(majority vote):
在这里插入图片描述

4.2 Fine-tune-CoT

Fine-tune-CoT 由论文 Large Language Models Are Reasoning Teachers 提出。前文提到,CoT与模型规模相关,是大参数量模型的涌现能力,而 Fine-tune-CoT 则聚焦于提升小模型的推理能力。

该方法的核心思想是使用 CoT Prompting 从非常大的教师模型中生成推理样本,然后使用生成的样本对小的学生模型进行微调。这种方法保留了基于提示的CoT方法的多功能性,同时克服了它们对大得令人望而却步的模型的依赖。为了最大限度地提高通用性并最小化教师推理成本,而在教师模型上使用了任务不可知的 Zero-shot-CoT 方法,因为它不需要任何推理示例或推断上下文。我们在7.3节讨论了教师帆板提示方法的选择。Fine-tune-CoT被分为三个不同的步骤,可视化的示例如下:
在这里插入图片描述三个阶段如下:

Stage 1:这个阶段叫做推理生成(Reasoning generation)。利用大的教师模型为给定任务生成CoT推理解释。考虑一个由问题 q i q_i qi和它的真实答案 a i a_i ai组成的标准样本 S i S_i Si。使用 Zero-shot-CoT 提示教师模型生成推理解释或基本原理,以解决问题 q i q_i qi并做出最终答案预测,生成文本序列。

Stage 2:这个阶段叫做集展(Curation)。过滤生成的样本,并将它们重新格式化为提示完成对。对于过滤,我们简单地将教师模型的最终预测结果与真实答案 a i a_i ai进行比较

Stage 3:这个阶段叫做微调(Fine-tune)。在推理样本上微调一个小的预训练的学生模型。使用与预训练期间相同的训练目标,例如 autoregressive language modeling、objective 和 next-token prediction。

研究发现 Fine-tune-CoT 可以在小模型中获得显著的推理性能,同时保留了基于提示的CoT推理的大部分通用性,而以前需要>100B参数量的模型。通过利用独特的学习设置、多样化的推理,可以在开发时以额外的教师推理为代价获得显着的性能收益。这使得小到0.3B的模型在某些任务中表现优于更大的学生模型,甚至是175B的教师模型。

4.3 ReAct

论文 ReAct: Synergizing Reasoning and Acting in Language Models 提出通过大模型以交错的方式生成推理轨迹和任务特定操作(ReAct),可以在语言和决策任务上的表现要高于几个最先进水准要求的的基线,同时还提高了大模型的人类可解释性和可信度。

ReAct 是将4.1中介绍的CoT和工具组合,通过内部知识库和外部信息,一起组合思考过程。通过在HotPotQA(知识密集型推理任务如问答)和Fever(事实验证)上使用不同提示方法得到的提示的表现结果说明了 ReAct 表现结果通常优于Act(只涉及操作),同时ReAct 在Fever(事实验证)上的表现优于 CoT,但是却在 HotpotQA(知识密集型推理任务如问答) 上落后于 CoT。ReAct思想的一个简单示例如下:
在这里插入图片描述
论文结论如下:

  • CoT 存在事实幻觉的问题;
  • ReAct 的结构性约束降低了它在制定推理步骤方面的灵活性;
  • ReAct 在很大程度上依赖于它正在检索的信息。

ReAct实现流程如下:

  • 用Prompt喂一个样例,比如模板:Thought: xxx Action: Search[xxx] Observation: xxx
  • LLMs会根据模板相同的逻辑,结合 CoT 思维链方式一步一步思考,并获取外部知识;
  • 最后 Action: Finish 获取最终结果。

4.4 Least to Most Prompting

最少到最多提示过程(Least to Most Prompting)是 CoT Prompting 进一步发展,由论文 Least-to-Most Prompting Enables Complex Reasoning in Large Language Models 提出。首先将问题分解为子问题,然后逐个解决。“Least to Most Prompting” 这一术语借用自教育心理学,用来表示使用循序渐进的提示序列来帮助学生学习一项新技能的技术。

CoT Prompting 有一个关键的局限性:它通常在需要泛化解决比演示例子更难的问题的任务上表现不佳。为了解决这种容易难以一般化的问题,提出了 Least to Most Prompting。它包括两个阶段:首先将一个复杂的问题分解为一组更简单的子问题,然后依次解决这些子问题,从而通过之前解决的答案来解决给定的子问题。具体怎么做如下图示例:
在这里插入图片描述
分为两个阶段:

Stage 1:查询语言模型,将问题分解为子问题。这个阶段叫做分解(Decomposition)。此阶段的提示包含演示分解的固定示例,然后是要分解的特定问题。

Stage 2:查询语言模型,对子问题进行顺序求解。这个阶段叫做子问题解决(Subproblem solving)。这一阶段的提示由三部分组成:(1)演示如何解决子问题的恒定示例;(2)之前回答的子问题和生成的解决方案的潜在空列表,以及(3)接下来要回答的问题。

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值