手机版 欢迎访问伴佳68(www.banjia68.com)网站

当前位置: 主页 > 分析

关于Prompt Engineering你该了解啥?OpenAI应用研究负责人帮你梳理了

时间:2023-04-24 03:36|来源:网络|作者:小编|点击:

  随着 ChatGPT、GPT-4 等模型的兴起,人们对如何创建提示以获得想要的输出越来越感兴趣。研究者对特定提示的响应可能很难预测,并且会因模型的不同而不同。本文来自 OpenAI 的翁丽莲(Lilian Weng) 撰文介绍了关于提示的一些内容,包括基础提示、指令提示等内容。

  Prompt 工程,也称为 In-Context Prompt,是指在不更新模型权重的情况下如何与 LLM 交流以引导其行为来获得所需结果的方法。这是一门经验科学,Prompt 工程方法的效果在模型之间可能会有很大差异,因此需要大量的实验和启发式方法。

  本文来自 OpenAI 的 Lilian Weng (翁丽莲) 介绍了一些关于提示工程的知识。翁丽莲为 OpenAI 人工智能应用研究的负责人,2018 年加入 OpenAI,在 GPT-4 项目中主要参与预训练、强化学习 & 对齐、模型安全等方面的工作。

  Zero-Shot 学习是简单地将任务文本输入模型并要求其返回结果。(所有情感分析示例均来自 SST-2)

  Few-shot 学习提供了一组关于目标任务的高质量的演示,每个演示都包含目标任务的输入和期望的输出。当模型首先看到好的例子时,它可以更好地理解人类的意图和对所需答案的标准。因此,与 zero-shot 学习相比,few-shot 学习通常会导致更好的性能。然而,这样的代价是消耗更多的 token,并且当输入和输出文本很长时,可能会达到上下文长度限制。

  许多研究探讨了如何构建上下文示例以最大限度地提高性能,并观察到 prompt 格式、训练示例和示例顺序的选择可能导致截然不同的性能,从接近随机猜测到接近 SOTA。

  Zhao 等人的研究调查了 few-shot 分类情况,并提出几个导致高方差的原因(他们在实验中使用 GPT-3):(1)如果标签在示例之间的分布不平衡,会导致 Majority label 偏差;(2) Receny 偏差是指模型可能在最后重复标签的趋势;(3) Common token 偏差表明 LLM 倾向于生成常见的 token 而不是罕见的 token。为了克服这类偏差,他们提出了一种方法来校准模型输出的标签概率,使得当输入字符串为 N/A 时,标签的概率输出变为均匀分布。

  为了选择多样化且具有代表性的示例集,[Su et al. (2022)] 提出使用基于图的方法:(1) 首先,构造一个有向图 G=(V,E) 基于嵌入(例如通过 SBERT 或其他嵌入模型)样本之间的余弦相似度,其中每个节点指向其 k 个最邻近节点;(2) 从一组选定样本 L=∅ 和一组剩余样本 U 开始。每个样本 u∈U 的 score 表示为:

  ,如果选择了 v 的许多邻近节点,则 s (v) 很低,因此评分鼓励选择不同的样本;

  [Rubin et al. (2022)] 提出通过特定于一个训练数据集的对比学习来训练 embedding,以进行上下文学习样本选择。给定每个训练对 (x,y),一个示例 e_i(格式化的输入 - 输出对)的质量可以通过 LM 分配的条件概率来衡量:

  ,可以将其他具有 top-k 和 bottom-k 分数的示例识别为每个训练对的正负候选集,并将其用于对比学习;

  受基于不确定性的主动学习的启发,[Diao et al. (2023)] 建议在多次抽样试验中识别熵较大的例子。然后注释这些示例以用于 few-shot prompt。

  增加模型大小或包含更多训练样本并不能减少不同上下文样本排列的方差。同一顺序可能适用于一个模型,但对另一个模型效果不佳。当验证集有限时,考虑选择顺序,使得模型不会产生极不平衡的预测或对其预测过于自信 (Lu et al. 2022)。

  在 prompt 中使用 few-shot 示例的目的是向模型解释我们的意图,换句话说,以演示的形式向模型描述任务指令。然而,few-shot 样本在标记使用方面可能很昂贵,并且由于上下文长度有限,它会限制输入长度。那么,为什么不直接给出指令呢?

  Instructed LM 模型(例如 InstructGPT、自然指令)通过高质量的元组(任务指令,输入,正确输出)来微调预训练模型,以使 LM 更好地理解用户意图并遵循指令。RLHF(来自人类反馈的强化学习)是一种常用的方法。指令跟随式微调的好处在于,它使模型更加符合人类意图,大大降低通信成本。

  与指令模型交互时,应该详细描述任务要求,尽量具体和精确,避免说 “不要做某事”,而是具体说明要做什么。

  情境指令学习 [Ye et al. 2023] 将 few-shot 学习与指令 prompt 相结合。它在 prompt 中包含多个跨不同任务的演示示例,每个演示都由指令、任务输入和输出组成。请注意,他们的实验仅针对分类任务,指令 prompt 包含所有标签选项。

  自洽采样 [Wang et al. 2022a] 是对 temperature 0 的多个输出进行采样,然后从这些候选中选择最好的一个。选择最佳候选的标准因任务而异。一般的解决方案是选择多数票。对于易于验证的任务,例如带有单元测试的编程问题,可以简单地运行解释器并通过单元测试验证正确性。

  思维链 (CoT) prompt (Wei et al. 2022) 生成一系列短句来逐步描述推理逻辑,称为推理链,最终得出最终答案。CoT 的好处对于复杂的推理任务更为明显,同时使用大型模型(例如,参数超过 50B)。简单的任务从 CoT 的 prompt 中获益甚微。

  few-shot CoT:通过一些演示来给模型 prompt,每个演示都包含人类编写(或模型生成)的高质量推理链。

  Zero-shot CoT:使用像「让我们一步一步来思考」这样的自然语言语句来明确鼓励模型首先生成推理链,然后 prompt「因此答案是」来生成答案 (Kojima et al. 2022)。或者类似的陈述「让我们一步一步地解决这个问题,以确保我们有正确的答案」(Zhou et al. 2022)。

  自洽采样可以通过抽取多个不同的答案然后进行多数表决来提高推理的准确性。(Wang et al. 2022a);

  集成学习的另一种方法是改变样本顺序或使用模型生成的基本原理来代替人工编写的基本原理,以在多个样本试验中引入随机性。然后聚合模型根据多数投票的结果获得最终答案。(Wang et al. 2022b);

  如果训练样例只与真实答案相关联,但没有基本推理,可以遵循 STaR(Self-Taught Reasoner;Zelikman et al. 2022)方法:(1)让 LLM 生成推理链,只保留那些导致正确答案的链;(2) 然后用生成的基本推理微调模型并重复该过程直到收敛。需要注意的是,较高的 temperature 更有可能产生错误的基本原理和正确的答案。如果训练样本没有真实答案,可以考虑使用多数票作为 “正确” 答案;

  Prompt 具有更高推理复杂性的演示可以实现更好的性能,其中复杂性由链中推理步骤的数量来衡量。分隔推理步骤时,换行符

  [Shum et al. (2023) ] 发现在他们的实验中,仅使用复杂示例的 CoT 提示可以提高复杂问题的准确性,但在简单问题中表现不佳 (GSM8k 上的表现就是明显的证据);

  [Ye & Durrett (2022) ] 发现,对于涉及文本推理的 NLP 任务(即 QA 和 NLI),在 prompt 中包含解释的好处有用处但是不大,并且效果因模型而异。他们观察到解释更可能是非事实的而不是不一致的(即解释是否需要预测)。非事实的解释很可能导致错误的预测;

  APE [Automatic Prompt Engineer;Zhou et al. 2022] 是一种搜索模型生成的候选指令池,然后根据所选得分函数过滤候选集以最终选择得分最高的最佳候选的方法。

  3.Select:应用 variance-reduced 梯度策略来学习所选示例的概率分布,同时将示例的概率分布作为策略,将验证集的准确性作为奖励。

  [Zhang et al. (2023) ] 采用聚类技术对问题进行抽样,然后生成链。他们观察到 LLM 倾向于犯某些类型的错误。一种类型的错误在嵌入空间中可能相似,因此被组合在一起。通过只从频繁错误的集群中抽取一个或几个样本,可以防止对一种错误类型的过多错误演示,并收集一组不同的例子。

  2. 示例选择:从每个簇中选择一组有代表性的问题;即来自一个簇的一个示例。每个簇中的样本按到簇质心的距离排序,最接近质心的样本首先被选择;

  [Mialon et al. (2023) ] 对增强语言模型进行的一项调查。涵盖了多类增强推理技能和使用外部工具能力的语言模型。推荐读者可以读一下。

  通常,我们需要在模型预训练时间截止或内部 / 私有知识库之后,完成需要最新知识的任务。在这种情况下,如果不在 prompt 中显式提供上下文,模型将不知道上下文。开放领域问答的许多方法都依赖于首先在知识库上进行检索,然后将检索到的内容作为 prompt 的一部分。这个过程的准确性取决于检索和生成步骤的质量。

  [Lazaridou et al. (2022) ] 研究了如何使用谷歌搜索进行文档检索以增强 LLM。给定一个问题 q,从谷歌返回的 20 个 URL 中提取文本,得到一组文档。由于这些文档很长,因此每个文档被拆分为 6 个句子的段落,{p}。段落是根据证据段落和查询之间基于 TF-IDF 的余弦相似性进行排序的。在 prompt 中只使用最相关的段落来产生答案 a.

  对于闭卷问答,每个演示的格式如下,以构建 few-shot prompt。发现将问题与证据交换(问题和答案之间的距离更长)在所有数据集中始终产生较低的结果。

  根据他们在生成和分类任务的实验,在三个答案的重新排序得分中,PoE 噪声信道推断 RAG。在所有概率中,pLM (aq,pi) 和 pLM (qpi,a) 提供的信息最多。pLM (qpi,a) 捕捉到 LM 在给定证据段落和答案的情况下对问题的解释有多好,并且可以可靠地用于对候选答案进行重新排序。

  针对基于不同日期的问题的 SituatedQA 数据集进行的一项观察是,尽管 LM(预训练截止日期为 2020 年)可以通过 Google 搜索访问最新信息,但其在 2020 年后问题上的表现仍然比 2020 年前问题差很多。这表明上下文信息和模型内部知识之间存在一些差异或参数冲突。

  有趣的是,即使只有 “内部检索” 也是有益的,即在回答问题之前生成关于某个主题的知识 [Liu et al. 2022]。首先可以使用下面的模板来抽取知识:

  TALM(Tool Augmented Language Models [ Parisi et al. 2022])是一种通过文本到文本 API 调用增强的语言模型。LM 被引导生成以任务输入文本为条件的工具调用和工具输入文本,以构建 API 调用请求。当 result 出现时,调用指定的工具 API,并将返回的结果附加到文本序列。最终输出是在 output token 之后生成的。

  TALM 采用 self-play 的方法来迭代引导工具使用示例的数据集,并用它来微调 LM。这个迭代的 self-play 模仿了一个 RL 过程,其中 LM 是策略网络,它由带有二元奖励信号的策略梯度训练。

  1.Prompt 注释下的 API 调用。要求预训练的 LM 通过带有 API 调用使用示例的 few-shot 学习来注释数据集。格式化示例:

  的 API 调用,如果概率大于某个阈值,则选择前 k 个候选在位置 i 进行 API 调用;

  2. 根据 API 调用是否有助于模型预测未来 token 来过滤注释。使用自监督损失来确定哪些 API 调用产生实际的帮助。

  计算 LM 在 token 序列 xi,...,xn 上的加权交叉熵损失,当模型以 prompt 为前缀时。计算了两个版本,一个带有 API 结果,另一个带有空序列 ε;

  大于阈值的 API 调用,这表示添加此 API 调用及其结果有助于模型预测未来的 token。

  在推理时,解码会一直运行,直到模型产生 “→”token,表明它期待接下来来自 API 调用的响应。

  Toolformer 目前不支持在链中使用工具(即使用一个工具的输出作为另一个工具的输入)或以交互方式(即在人工选择后采用 API 响应)。两者都是未来扩展模型的方向。

  原标题:《关于Prompt Engineering你该了解啥?OpenAI应用研究负责人帮你梳理了》

  本文为澎湃号作者或机构在澎湃新闻上传并发布,仅代表该作者或机构观点,不代表澎湃新闻的观点或立场,澎湃新闻仅提供信息发布平台。申请澎湃号请用电脑访问。

banjia68.com 版权所有 | 备案号:鲁ICP备2021038504号-2