prompt 工程整理(未完、持续更新)

news2024/10/5 15:25:14

工作期间会将阅读的论文、一些个人的理解整理到个人的文档中,久而久之就积累了不少“个人”能够看懂的脉络和提纲,于是近几日准备将这部分略显杂乱的内容重新进行梳理。论文部分以我个人的理解对其做了一些分类,并附上一些简短的理解,若读者对其感兴趣,可通过论文名称进行搜索。后续有时间,会持续更新和补充。

提示工程(Prompt Engineering)关注提示词开发和优化,帮助用户将大语言模型(Large Language Model,LLM)用于各场景和研究领域。

prompt 为人类与通用模型(如 LLM)的交互和使用提供了一个自然和直观的界面。由于其灵活性,prompt 已被广泛用作 NLP 任务的通用方法。然而,LLMs 需要细致的 prompt 工程,无论是手动还是自动,因为模型似乎不能像人类那样理解 prompt。尽管许多成功的 prompt 调整方法使用基于梯度的方法在连续空间上进行优化,但随着规模的扩大,这变得不太实际,因为计算梯度变得越来越昂贵,对模型的访问转向可能不提供梯度访问的 API。

论证研究

研究:prompt 顺序、格式的影响

  • Calibrate Before Use:Improving Few-Shot Performance of Language Models:few-shot 学习可能是不稳定的,prompt 格式的选择、训练示例、甚至训练示例的顺序都会导致准确性从随机猜测到接近最先进的水平。不稳定性来自于语言模型对预测某些答案的偏向,多数标签偏差、回顾性偏差和常见 token 偏差。并提出上下文校准,一种调整模型输出概率的简单程序。
  • Fantastically Ordered Prompts and Where to Find Them: Overcoming Few-Shot Prompt Order Sensitivity:论证了 prompt 的顺序对推断的结果有影响。
  • Rethinking the Role of Demonstrations:What Makes In-Context Learning Work?:研究 demonstration 对于 ICL 成功所起到的作用。demonstration 中的 ground truth 输入-标签映射所起到的作用比想象的要小得多——用随机标签替换 gold 标签,只稍微降低了性能。收益主要来自于输入空间和标签空间的独立规范(independent specification);使用正确的格式,模型可以通过只使用输入或只使用标签集来保持高达 95% 的性能收益;带有语境学习目标的元训练会放大这些趋势。

研究:context 位置研究

  • Lost in the Middle: How Language Models Use Long Contexts:模型更善于使用出现在上下文开头(首要偏差)和结尾(回顾偏差)的相关信息,而当被迫使用输入上下文中间的信息时,性能就会下降。并且用实验证明,在使用输入上下文方面,扩展上下文模型并不一定比非扩展上下文模型更好。

具体实现

prompt 优化

prompt 优化分为调整 context,或者在 context 中添加更多的信息,例如错误的信息、或者从错误信息中抽取到的思考、原则等辅助信息,也可以是通过检索得到的世界性知识或者专属知识。

方式:调整 context

添加更多的信息

往 context(prompt)中添加 few-shot 示例、错误的信息(或者从错误信息中抽取得到的思考、原则等辅助信息)。这部分更多与 RAG 结合使用。

  • 2021-01:What Makes Good In-Context Examples for GPT-3?:提出 KATE 方法,根据测试样本与训练集相似度挑选最佳邻居作为上下文示例。
  • 2021-10:Generated Knowledge Prompting for Commonsense Reasoning:提出生成知识提示,包括从语言模型中生成知识,然后在回答问题时将知识作为额外输入。
    • 理解改进:将生成知识单独拆分出来,作为填充知识库内容会更好,因为我们无法保证语言模型中生成的知识是否有幻觉,需要通过一系列的方式进行过滤和处理。在回答问题时,通过 RAG 的方式检索高质量的知识作为额外输入可有效减少幻觉和冗余信息的影响。
  • 2022-12:Structured Prompting:Scaling In-Context Learning to 1,000 Examples:探索了如何利用更多的示例来进行语境学习,并提出了结构化 prompt,以在有限的计算复杂度下扩大示例的数量。对每组演示进行独立编码,并通过 rescaled attention 对语言模型的表征进行 prompt。
  • 2023-11:Chain-of-Note:Enhancing Robustness in Retrieval-Augmented Language Models:介绍了一种新颖的方法 CHAIN-OF-NOTING(CoN)框架,核心理念是为每个检索到的文档生成连续的阅读笔记,以深入评估文档与所提问题的相关性,并整合这些信息来形成最终答案。
  • 2024-02:In-Context Principle Learning from Mistakes:引入了学习原则(LEAP)。首先,有意诱导模型在这几个示例上犯错误;然后,模型本身会对这些错误进行反思,并从中学习明确的特定任务“原则”,这些原则有助于解决类似问题并避免常见错误;最后,提示模型使用原始的 few-shot 示例和这些学到的一般原则来回答未见过的测试问题。
过滤冗余或错误信息
  • 2023-05:Deliberate then Generate: Enhanced Prompting Framework for Text Generation:提出 DTG 提示方法,通过让模型在可能包含错误的合成文本上检测错误类型,鼓励 LLM 在生成最终结果之前进行深思熟虑。
  • 2023-11:System 2 Attention (Is Something You Might Need Too):通过诱导 LLM 重新生成输入上下文,使其只包含相关部分;然后再关注重新生成的上下文,以诱导出最终良好的响应。

方式:prompt 压缩

prompt 压缩可以缩短原始 prompt,同时尽可能保留最重要的信息。这可以减少模型推理阶段的 prefill 时间,并过滤掉 context 中冗余、错误的信息,帮助生成更为准确的回复。本质上也是调整 context,但还是将其另成一派。

可行性结论

  • 语言中常常包含不必要的重复,且无意义的内容,例如在传统 NLP 中,我们时常会去停用词,因为这些停用词没有太多的语义或者对模型输出结果几乎没有影响。
  • 《Prediction and entropy of printed English》表明,英语在段落或章节长度的文本中有很多冗余,大约占 75%。这意味着大部分单词可以从它们前面的单词中预测出来。

疑问

  • prompt 被压缩后,后面位置的 token 其位置编码会相应变化,例如第 500 位置的 token 压缩后到了 200 位置,虽然它在 500 位置处的信息量或者 logits 对结果没有影响,但到了 200 位置是否就变得重要了呢?
  • RLHF 对齐越好的模型,是否对 prompt 压缩越敏感?压缩后的 prompt 几乎人类不可读,与人类喜好对齐强的模型是否也不容易理解?在一篇讲述 Pinecone 搜索方案的博客中将压缩后的 prompt 送入 gpt-4-1106-preview,它会返回文章的格式和用词写法错误,但在 gpt-3.5-turbo 中就不会出现。
相关方法
  • 2023-04:Unlocking Context Constrainits of LLMs:Enhancing Context Efficiency of LLMs with Self-Information-Based Content Filtering:引入了“选择性上下文”(Selective Context 技术),通过过滤掉信息量较少的内容,为 LLM 提供了一种更紧凑、更高效的上下文表示法,同时又不影响它们在各种任务中的性能。
  • 2023-10:LLMLingua:Compressing Prompts for Accelerated Inference of Large Language Models:提出了一种从粗到细的提示压缩方法 LLMLingua,包括一种在高压缩率下保持语义完整性的预算控制器、一种能更好地模拟压缩内容间相互依存关系的 token 级迭代压缩算法,以及一种基于指令调整的语言模型间分布对齐方法。

方式:优化指令

以人的行为习惯、思维方式写下的 prompt 往往能达到及格分,经验丰富老道的提示工程师或许可以在第一步就写出达到 80 分的 prompt。但无论如何,人写下的 prompt 很难跳出人类的思维方式,我们会尽可能将话语和文字组织得通顺连贯、行文结构合理,偶尔捎带些许有趣性,但这并不一定是最符合模型的思考习惯。例如模型的对齐能力是否会有影响?对齐能力强的模型更能理解人的语言,即使低质量的 prompt 也能执行得好,例如 GPT4),我们可以不强求非得以人的视角写出符合人类习惯的 prompt,让模型自己去生成自己能更好理解的 prompt,似乎是一个更好的方向。

  • 2022-03:An Information-theoretic Approach to Prompt Engineering Without Ground Truth Labels:介绍了一种选择 prompt 的方法,在一组候选 prompt 中,选择使输入和模型输出之间的互信息最大化的 prompt。
  • 2022-11:Large Language Models Are Human-Level Prompt Engineers:提出了 APE(自动 prompt 工程师)框架,根据问题和回答让 LLM 自动生成指令,然后再用 LLM 去评估生成指令的质量,从中挑选效果最好的指令。此外,可以根据蒙特卡洛法去检索更好的指令集并减少迭代的计算成本。
  • 2023-02:Active Prompting with Chain-of-Thought for Large Language Models:将主动学习的过程应用到 prompt 工程上,主要是流程和工程上面的改进,制定不确定性标准,例如分歧、熵、方差和置信度来评估 prompt 在特定任务上的效果。选择这些效果不佳的 prompt,交给人工去标注,最后进行推断。不断重复上述过程,与主动学习的过程相同。

方式:定向刺激

  • 2023-02:Guidling Large Language Models via Directional Stimulus Prompting:提出了一个名为“定向刺激 prompt”(Directional Stimulus Prompting)的新型 prompt 框架,先训练一个经过微调、强化学习后的小型模型,然后使用该小型模型根据用户的查询来生成对应的刺激(文本),将其添加到 prompt 中来引导黑盒大语言模型朝着所需的输出方向前进。
  • 2023-07:EmotionPrompt:Leveraging Psychology for Language Models Enhancement via Emotional Stimulus:作者从心理学中汲取灵感,提出 EmotionPrompt(情感提示)来探索情商,以提高 LLM 的性能。具体来说,作者为 LLMs 设计了 11 句情感刺激句子,只需将其添加到原始 prompt 中即可。缺陷在于情绪刺激可能并不适用于其他任务,并且对不同 LLM 的效果无法保证。

连续推理

将中间的推理步骤一步步思考完整,或者将一整个问题逐步分解成子问题来解决。核心在于需要执行多次或多跳来完成任务。

方式:CoT 与类 CoT 大家族

CoT 一系列研究,给我的感觉像是将数据结构中的链表、树和图依次应用到 CoT 中。

  • 2022-02:Chain-of-Thought Prompting Elicits Reasoning in Large Language Models:提出了思维链(CoT)的方法。

  • 2022-03:Self-Consistency Improves Chain of Thought Reasoning in Language Models:提出了自我一致性方法,先使用思维链 prompt,然后通过采样等手段获取多条输入,汇总答案(根据投票以及加权等方式),并选择最一致的答案。该方法受限于固定的答案集,并且计算成本较高(多条输出、推理路径)。但在算术和常识推理任务上能够提高准确性。

    理解改进:核心在于如何选择最一致的答案,在开放式闲聊场景中,使用奖励模型来评分是一个不错的方式,例如生成多条回复,让奖励模型打分,挑选分数最高的回复。

  • 2023-05:Tree of Thoughts:Deliberate Problem Solving with Large Language Models:还未细看。

  • 2023-08:Better Zero-Shot Reasoning with Role-Play Prompting:提出了一种由两阶段框架组成的新型 zero-shot role-play 提示方法,旨在增强 LLM 的推理能力。实验结果凸显了 role-play 提示作为一种隐性和有效的 CoT 触发器的潜力,从而提高了推理结果。

方式:问题拆分

  • 2022-10:Measuring and Narrowing the Compositionality Gap in Language Models:提出了 self-ask 的方式,不断将复杂、多跳问题拆分为子问题,然后依次解决子问题,最后回答完整问题。在解决子问题的过程中,可借助搜索引擎来获取事实性知识。
  • 2022-10:ReAct: Synergizing Reasoning and Acting in Language Models:提出了 ReAct 框架。
  • 2023-06:Let’s Verify Step by Step:在数学推理领域,过程监督可以用来训练比结果监督更可靠的奖励模型。主动学习可以用来降低人类数据收集的成本。

风险和误用

真实性(幻觉)

LLM 模型有时会生成看起来连贯且令人信服的回答,但这回答是 LLM 模型虚构的答案,也就是说 LLM 模型在一本正经的胡说八道。改进 prompt 可以帮助提高模型生成更准确/真实的回答,并降低生成不一致和虚构回答的可能性。

偏见

LLMs 可能会产生问题的生成结果,这些结果可能会对模型在下游任务上的性能产生负面影响,并显示可能会恶化模型性能的偏见。其中一些可以通过有效的 prompt 策略来缓解,但可能需要更高级的解决方案,如调节和过滤。

在 Calibrate Before Use:Improving Few-Shot Performance of Language Models 论文中提到“方差在更多的数据和更大的模型中持续存在”,而造成高方差的原因是 LLMs 中存在的各种偏差(偏见),例如:

  • 在 prompt 中经常出现的答案(多数标签偏差)。
  • 在 prompt 的最后(回顾性偏差)。
  • 在预训练数据中常见的答案(常见 token 偏差)。

多数标签偏差

当一个类别更常见时,GPT-3 会严重偏向预测该类别,本质是多数标签严重影响模型预测分布,从而对准确性造成很大影响。

理解:1-shot 时,模型预测很大程度上受到这一个训练示例标签的影响,从而输出该训练示例的标签,而非期望得到的标签。

回顾性偏差

模型的多数标签偏差因其回顾性偏差而加剧:重复出现在 prompt 结束时的答案的倾向。例如,当两个负例出现在最后,模型将严重倾向于负面的类别。

回顾性偏差也会影响到生成任务。对于 4-shot 的 LAMA,更接近 prompt 结束的训练答案更有可能被模型重复。总的来说,回顾性偏差与多数标签偏差一样,都会影响模型预测的分布。

例如,joyland 模型重复问题,很大程度上由于 context 中存在大量重复的回复,尤其是最近几轮相近或相同的回复,加上对话的 prompt 组织格式形似 ICL,这进一步加重回顾性偏差,从而导致当前轮模型回复继续重复。详细研究请参考 Rethinking Historical Messages。

常见 token 偏差

模型倾向于输出预训练分布中常见的 token,而这可能对下游任务的答案分布来说是次优的。在 LAMA 事实检索数据集上,模型常常预测常见的实体,而 ground truth 的答案却是罕见的实体。在文本分类中也出现了更细微的常见token偏差问题,因为某些标签名称在预训练数据中出现的频率较高,所以模型会对预测某些类别有固有偏见。总的来说,常见 token 偏差解释了标签名称的选择对于模型预测的重要性,以及为什么模型在处理罕见答案时会遇到困难。

相关工具

名称链接
awesome-chatgpt-prompts-zhhttps://github.com/PlexPt/awesome-chatgpt-prompts-zh
snackprompthttps://snackprompt.com/
flowgpthttps://flowgpt.com/
promptherohttps://prompthero.com/
publicprompts.arthttps://publicprompts.art/
guidancehttps://github.com/guidance-ai/guidance
Synapse_CoRhttps://github.com/ProfSynapse/Synapse_CoR
PromptInjecthttps://github.com/agencyenterprise/PromptInject

参考资料

  • 工程指南:https://www.promptingguide.ai/zh
  • prompt 学习:https://learningprompt.wiki/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1595190.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

平面上最近点对

OJ:P1429 平面最近点对(加强版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 非常详细的博客:平面上最近点对 - 洛谷专栏 (luogu.com.cn) 更正式的文章:平面最近点对 - OI Wiki 这也是我们算法课的一个实验。不过我做的不好…

Eigen库从入门到放弃(2. Getting Started)

Eigen的头文件定义了多种类型,但是对于简单的来说,使用MatrixXd就足够了,MatrixXd表示任意尺寸的矩阵,但是要注意数据类型是double的。Eigen/Dense的头文件定义了所有MatrixXd和相关类型的成员函数。所有头文件中定义的函数都是在…

康耐视visionpro-CogFindCircleTool操作工具详细说明

◆CogFindCircleTool]功能说明: 通过用多个卡尺找到多个点来拟合所要找的圆 ◆CogFindCircleTool操作说明: ①.打开工具栏,双击或点击鼠标拖拽添加CogFindCircleTool工具 ②.添加输入图像,右键“链接到”或以连线拖拽的方式选择相应输入源 ③预期的圆弧:设置预期圆弧的…

python-numpy(3)-线性代数

一、方程求解 参考资料 对于Ax b 这种方程: np.linalg.inv(A).dot(B)np.linalg.solve(A,b) 1.1 求解多元一次方程一个直观的例子 # AXB # X A^(-1)*B A np.array([[7, 3, 0, 1], [0, 1, 0, -1], [1, 0, 6, -3], [1, 1, -1, -1]]) B np.array([8, 6, -3, 1]…

Unity上接入手柄,手柄控制游戏物体移动

1、unity软件上安装system input 组件。菜单栏【window】-【Packag Manager】打开如下界面,查找Input System,并且安装。 2、安装成功后插入手柄到windows上,打开菜单栏上【window】--【Analysis】--【Input Debuger】 进入Input Debug界面,可以看到手柄设备能被Unity识别。…

Flutter - iOS 开发者速成篇

首先 安装FLutter开发环境:M1 Flutter SDK的安装和环境配置 然后了解Flutter和Dart 开源电子书:Flutter实战 将第一章初略看一下,你就大概了解一下Flutter和Dart这门语言 开始学习Dart语言 作为有iOS经验的兄弟们,学习Dart最快…

快速上手Vue

目录 概念 创建实例 插值表达式 Vue响应式特性 概念 Vue是一个用于 构建用户界面 的 渐进式 框架 构建用户界面&#xff1a;基于数据渲染出用户看到的页面 渐进式&#xff1a;Vue相关生态&#xff1a;声明式渲染<组件系统<客户端路由<大规模状态管理<构建工具 V…

云服务器安装Mysql、MariaDB、Redis、tomcat

前置工作 进入根目录 cd / 进入/user/local文件夹 上传压缩包 rz 压缩包 Mysql 1.下载并安装MySQL官方的 Yum Repository wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm yum install mysql-…

<计算机网络自顶向下> TCPUDP套接字编程

应用实现&#xff1a;源端的应用进程交换报文实现应用协议&#xff0c;来实现各种各样的网络应用&#xff08;dash&#xff0c;email, etc&#xff09; 而应用层通信不可以直接通信&#xff0c;需要借助下层的服务才可以进行&#xff0c;通过层间接口交给下层&#xff0c;通过…

Linux(Ubuntu) 查看并删除使用【dpkg】安装的软件【mysql 8.3安装失败---原因调查(Depends: libc6 (>= 2.35) but 2.31-0ubuntu9.1)】

目录 ■前言 ■查看安装的软件 ■删除安装的软件 正常删除&#xff08;dpkg -r xxxxName&#xff09; 问题解决&#xff1a;use --purge to remove them too ■其他调查信息 命令 图片1 图片2 图片3 图片4 图片5&#xff08;和镜像库有关&#xff09; 图片6 ■前…

在MOS管栅极前加100Ω电阻,有啥妙用

我们经常会听到在MOSFET栅极前增加一个电阻。那么&#xff0c;为什么要增加这个电阻&#xff0c;进一步地来讲&#xff0c;为什么要增加一个100Ω电阻&#xff1f; 在MOSFET的栅极前增加一个电阻&#xff1f; MOS管是电压型控制器件&#xff0c;一般情况下MOS管的导通&#x…

【学习笔记十五】批次管理和容量管理

一、批次管理 1.配置 SAP EWM 特定参数 激活仓库的批次管理 2.ERP端物料需要启用批次管理 3.EWM物料需要启用批次管理 一般是ERP启用批次管理&#xff0c;相关的配置也会传输到EWM系统 4.建立批次主数据 5.创建采购订单并创建内向交货单&#xff0c;维护批次 6.维护产品主数…

Ubuntu 22.04 开机自动挂载webdav - 设置开机自启脚本 - 解决坚果云webdav无写入权限

效果图&#xff1a; 前言&#xff1a; 1&#xff09;亲测/etc/fstab的办法没有成功自动挂载&#xff0c;换成传统的rc.local可以解决&#xff1b; 2&#xff09;rc-local.service是系统自带的一个开机自启服务&#xff0c;但是在 ubuntu 20.04 上&#xff0c;该服务默认没有开…

NLP_知识图谱_图谱问答实战

文章目录 图谱问答NERac自动机实体链接实体消歧 多跳问答neo4j_graph执行流程结构图![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/1577c1d9c9e342b3acbf79824aae980f.png)company_data![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/20f567d877c743b…

深度学习图像处理基础工具——opencv 实战信用卡数字识别

任务 信用卡数字识别 穿插之前学的知识点 形态学操作 模板匹配 等 总体流程与方法 1.有一个模板 2 用轮廓检测把模板中数字拿出来 外接矩形&#xff08;模板和输入图像的大小要一致 &#xff09;3 一系列预处理操作 问题的解决思路 1.分析准备&#xff1a;准备模板&#…

libbpf-bootstrap库的代码结构介绍(用户层接口介绍),编译链接语句详细介绍,.skel.h文件介绍+示例,bpf程序的后续处理+文件关系总结

目录 libbpf-bootstrap 代码结构介绍 用户层函数 编译 查看 生成内核层的.o文件 第一模块 第二模块 第三模块 第四模块 第五模块 生成辅助文件(.skel.h) 介绍 示例 生成代码层的.o文件 第一模块 第二模块 第三模块 链接出可执行文件 后续总结 libbpf-bootst…

舒欣上门预约系统源码-按摩预约/家政预约全行业适用-小程序/h5/app

上门预约或者到店预约均可&#xff0c;家政&#xff0c;按摩&#xff0c;等等上门类行业均可适用。&#xff08;后台的技师及前台技师这两个字是可以更改的&#xff0c;例如改成家政老师&#xff0c;保洁&#xff0c;等等&#xff09; 视频教程是演示搭建的小程序端&#xff0c…

stm32报错问题集锦

PS&#xff1a;本文负责记录本人日常遇到的报错问题&#xff0c;以及问题描述、原因以及解决办法等&#xff0c;解决办法百分百亲测有效。本篇会不定期更新&#xff0c;更新频率就看遇到的问题多不多了 更换工程芯片型号 问题描述 例程最开始用的芯片型号是STM32F103VE&#…

Abstract Factory抽象工厂模式详解

模式定义 提供一个创建一系列相关或互相依赖对象的接口&#xff0c;而无需指定它们具体的类。 代码示例 public class AbstractFactoryTest {public static void main(String[] args) {IDatabaseUtils iDatabaseUtils new OracleDataBaseUtils();IConnection connection …

微信登录功能-保姆级教学

目录 一、使用组件 二、登录功能 2.1 步骤 2.2 首先找到网页权限 复制demo 代码 这里我们需要修改两个参数 三、前端代码 3.1 api 里weiXinApi.ts 3.2 api里的 index.ts 3.3 pinia.ts 3.4 My.vue 四、后端代码 4.1 WeiXinController 4.2 Access_Token.Java 4.3 We…