Self-Supervised Prompt Optimization

论文:[2502.06855] Self-Supervised Prompt Optimization

仓库:GitHub - Airmomo/SPO: SPO | Self-Supervised Prompt Optimization

自监督提示优化(SPO)

创新点

  • 成对比较评估

  • 输出指导优化

全文介绍

背景

随着大语言模型的发展,设计提示对于最大限度发挥模型的推理能力,以及确保符合不同的任务要求,逐渐成为了关键。然而,创建有效的提示通常需要大量的试错实验和深入的特定任务的知识。 (模板填充具体问题 → 生成完整提示 → 输入模型 → 获得输出) 研究人员探索了使用LLM自己的能力来自动改进提示的提示优化(PO)方法。PO提供了一种更系统和更有效的快速设计方法,它通常涉及一个快速优化、执行和评价的迭代过程。现有的方法数值评价机制和文本梯度优化策略上都取得了成功。 数值评价机制:通过可量化的指标直接评估提示的性能,并基于数值反馈迭代优化提示。 文本梯度优化:通过自然语言反馈指导提示优化,利用LLM生成“文本梯度”(即改进建议),逐步调整提示内容。

(相关方法正在整理中)

问题

  • 目前的方法往往严重依赖于外部参考进行评价。

  • 采用真实标签(Ground Truth)进行评价导致其难以适用于开放任务。

  • 现有的方法通常需要对大量样本进行提示评估,以获得可靠的反馈,从而导致大量的计算开销。

解决方案:自监督提示优化(Self-Supervised Prompt Optimization, SPO)

核心贡献

  1. 无需外部参考的优化框架:

    • 提出自监督提示优化(SPO),通过LLM输出的成对比较评估提示质量,摆脱对标注数据或人工反馈的依赖。

    • 利用LLM自身理解任务需求的能力,将输出直接作为优化信号。

  2. 极致的成本效率:

    • 优化成本仅为现有方法的 1.1%~5.6%(如单数据集成本低至 0.15美元),且仅需 3个样本即可完成一轮优化。

  3. 任务普适性:

    • 封闭任务(数学推理、事实核查)和开放任务(创意写作、角色扮演)中均表现优异,尤其提升小模型(如GPT-4o-mini)性能达 30%

模型设计

三大功能:

  1. 优化函数(ϕₒₚₜ):分析当前最优提示及输出,生成新提示(如引入结构化XML模板指导LLM迭代改进)。

  2. 执行函数(ϕₑₓₑ):生成输出(路径 + 答案)

  3. 评估函数(ϕₑᵥₐₗ):通过LLM对输出进行成对比较,选择更优提示。

用户输入  ↓  
[ϕₒₚₜ] 初始化提示模板  ↓  
[ϕₑₓₑ] 执行生成首次输出  ↓  
[ϕₑᵥₐₗ] 评估输出质量  ↓  
[ϕₒₚₜ] 根据反馈优化提示  ↓  
[ϕₑₓₑ] 执行新提示生成输出  ↓  
[ϕₑᵥₐₗ] 多轮对比评估  ↓  
(循环直至收敛)  ↓  
最终输出  

评估

历史分析

  • 评估方法:

    • 预定义的指标

    • LLM-as-a-judge

    • 人类反馈

  • 评估反馈

    • 数值反馈(需要大量样本、容易忽略细节)

    • 文本反馈

    • 排序或选择反馈

评估框架

  • Output vs. Ground Truth(真实标签):需 Ground Truth,适合封闭任务

  • Output vs. Output(核心):不依赖外部参考,适配开放任务

优化函数

目标:基于当前最佳提示和对应输出,生成改进后的新提示。 实现机制

  • 结构化模板引导:使用XML格式的元提示(Meta Prompt)指导LLM分析现有输出的不足并提出改进方向。

  • 基于任务理解的动态调整:LLM根据输出内容反推任务需求,自动调整提示结构。例如,在数学推理任务中,若发现模型忽略坐标计算,新提示会强制要求“每一步更新坐标并记录”。

优化过程

  • 优化方向由模型输出的缺陷驱动

  • 修改的是提示的语义内容

执行函数

目标:将优化后的提示应用于LLM,生成任务输出。 关键设计

  • 小样本高效执行:仅需3个随机样本(无需标注答案)即可运行,大幅降低成本。

  • 输出结构化:强制要求输出包含推理路径和最终答案,便于后续评估。

评估函数

目标:通过LLM对比新旧提示的输出,选择更优者。 评估流程

  1. 构建对比对:将同一问题在新旧提示下的输出组成对(Output A vs. Output B)。

  2. 设计评估指令:要求LLM基于任务需求(如逻辑严谨性、格式合规性)判断优劣。

  3. 多轮随机评估:每个迭代进行4轮独立比较,减少偶然偏差。

评估结果处理

  • 若新提示胜率超过阈值(如3/4),则替换为当前最佳提示;

  • 否则保留原提示,进入下一轮优化。

闭环迭代流程

  1. 初始化:从基础提示模板(如Chain-of-Thought)和3个样本开始。

  2. 迭代优化

    • 第1轮:生成Prompt₁ → 执行 → 评估 vs. Prompt₀;

    • 第2轮:生成Prompt₂ → 执行 → 评估 vs. Prompt₁;

    • 持续至达到最大迭代次数(如10轮)或性能收敛。

  3. 终止条件:达到预设迭代次数或连续多轮无显著改进。

全文总结

一句话总结:在实现显著成本效益的同时的同时,消除了对外部参考的依赖。

成果

(1)克服了依赖于外部参考实现快速优化的问题。

(2)以每个数据集仅0.15美元的价格实现了显著的成本效益。

(3)实现了最先进的结果,而只需要现有方法成本的1.1%- 5.6%。

(4)在标准基准测试和不同的实际应用程序上的成功验证了SPO的有效性和泛化能力。

风险

  • 潜在的偏见放大:SPO依赖LLM自身作为评估者,导致“偏见反馈→优化强化偏见”(正反馈调节)。【尝试解决将有可能导致风险3】

    • 解决方案:1.加入公平性约束(Bias Penalty Loss),惩罚带有偏见的输出。【注意:平衡成本】2.去偏数据集微调评估函数(ϕₑᵥₐₗ)?

    • Mitigating Social Bias in Large Language Models: A Multi-Objective Approach within a Multi-Agent Framework

    • Bias and Fairness in Large Language Models: A Survey

  • 有害内容产生的误用:SPO仅以性能为优化目标,忽略内容安全性。【尝试解决将有可能导致风险3】

    • 解决方案:内置Moderation API?

  • 以及过度依赖LLM:SPO生成的提示可能会更符合人类的偏好,且全流程无需人工介入,用户可能忽视对关键结果的二次验证。

    • 解决方案:增加置信度分析。数据集微调评估函数(ϕₑᵥₐₗ)?

细节

1、优化函数如何根据输出修改提示?

通过元提示(Meta Prompt)调用LLM,直接生成改进后的提示。

(元提示模板eg.)

<analyse>  
分析当前输出的缺陷:{缺陷描述}  
</analyse>  
<modification>  
总结改进方向:{改进策略}  
</modification>  
<prompt>  
生成优化后的完整提示  
</prompt>  

这个提示模板指导llm通过结构化XML分析迭代地改进现有的提示。它需要识别提示输出中的缺陷,提出修改,并生成优化的版本。

该模板在保持需求遵从性的同时,也强调了增量式的改进。

在每次迭代中,优化函数生成新提示后,评估函数会进行四轮独立评估,具体流程如下:

  1. 每轮从数据集中随机抽取不同的样本(3个最优,10次迭代)

  2. 四轮中若新提示胜出≥3次,则判定为优化成功;否则保留原提示

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

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

相关文章

AI-Ollama本地大语言模型运行框架与Ollama javascript接入

1.Ollama Ollama 是一个开源的大型语言模型&#xff08;LLM&#xff09;平台&#xff0c;旨在让用户能够轻松地在本地运行、管理和与大型语言模型进行交互。 Ollama 提供了一个简单的方式来加载和使用各种预训练的语言模型&#xff0c;支持文本生成、翻译、代码编写、问答等多种…

分布式多卡训练(DDP)踩坑

多卡训练最近在跑yolov10版本的RT-DETR&#xff0c;用来进行目标检测。 单卡训练语句&#xff08;正常运行&#xff09;&#xff1a; python main.py多卡训练语句&#xff1a; 需要通过torch.distributed.launch来启动&#xff0c;一般是单节点&#xff0c;其中CUDA_VISIBLE…

LLM大型语言模型(一)

1. 什么是 LLM&#xff1f; LLM&#xff08;大型语言模型&#xff09;是一种神经网络&#xff0c;专门用于理解、生成并对人类文本作出响应。这些模型是深度神经网络&#xff0c;通常训练于海量文本数据上&#xff0c;有时甚至覆盖了整个互联网的公开文本。 LLM 中的 “大” …

确保初始化和销毁操作的线程安全-初始化和销毁

你想为代码中的每行加上注释解释,以下是详细的注释: // 定义初始化函数,接收一个 InitOptions 类型的参数 int initGBB(InitOptions _opts) {// 使用原子操作检查初始化/销毁计数器,并增加计数。如果当前是第一次初始化,执行以下操作if (initFiniCnt_.fetch_add(1, std

蓝桥杯备考:动态规划dp入门题目之数字三角形

依然是按照动态规划dp的顺序来 step1&#xff1a;定义状态表示 f[i][j]表示的是到,j这个坐标的结点时的最大权值 step2: 定义状态方程 i,j坐标可能是从i-1 j-1 到i,j 也可能是从i-1 j到 i,j 所以状态方程应该是 f[i][j] max(f[i-1][j-1],f[i-1][j]) a[i][j] step3:初始化…

HarmonyOS NEXT开发进阶(十一):应用层架构介绍

文章目录 一、前言二、应用与应用程序包三、应用的多Module设计机制四、 Module类型五、Stage模型应用程序包结构六、拓展阅读 一、前言 在应用模型章节&#xff0c;可以看到主推的Stage模型中&#xff0c;多个应用组件共享同一个ArkTS引擎实例&#xff1b;应用组件之间可以方…

深入C语言:指针与数组的经典笔试题剖析

1. sizeof和strlen的对比 1.1 sizeof sizeof 是C语言中的一个操作符&#xff0c;用于计算变量或数据类型所占内存空间的大小&#xff0c;单位是字节。它不关心内存中存储的具体数据内容&#xff0c;只关注内存空间的大小。 #include <stdio.h> int main() {int a 10;…

deepseek+mermaid【自动生成流程图】

成果&#xff1a; 第一步打开deepseek官网(或百度版&#xff08;更快一点&#xff09;)&#xff1a; 百度AI搜索 - 办公学习一站解决 第二步&#xff0c;生成对应的Mermaid流程图&#xff1a; 丢给deepseek代码&#xff0c;或题目要求 生成mermaid代码 第三步将代码复制到me…

Solon AI —— RAG

说明 当前大模型与外部打交道的方式有两种&#xff0c;一种是 Prompt&#xff0c;一种是 Fuction Call。在 Prompt 方面&#xff0c;应用系统可以通过 Prompt 模版和补充上下文的方式&#xff0c;调整用户输入的提示语&#xff0c;使得大模型生成的回答更加准确。 RAG RAG &…

STM32——USART—串口发送

目录 一&#xff1a;USART简介 二&#xff1a;初始化USART 1.开启时钟 2.代码 三&#xff1a;USART发送数据 1.USART发送数据函数 2.获取标志位的状态 3.代码 4.在main.c内调用 5.串口调试 1.串口选择要与设备管理器中的端口保持一致 2.波特率、停止位等要与前面…

基于SpringBoot的在线骑行网站的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

通义万相2.1:开启视频生成新时代

文章摘要&#xff1a;通义万相 2.1 是一款在人工智能视频生成领域具有里程碑意义的工具&#xff0c;它通过核心技术的升级和创新&#xff0c;为创作者提供了更强大、更智能的创作能力。本文详细介绍了通义万相 2.1 的背景、核心技术、功能特性、性能评测、用户反馈以及应用场景…

3.3.2 Proteus第一个仿真图

文章目录 文章介绍0 效果图1 新建“点灯”项目2 添加元器件3 元器件布局接线4 补充 文章介绍 本文介绍&#xff1a;使用Proteus仿真软件画第一个仿真图 0 效果图 1 新建“点灯”项目 修改项目名称和路径&#xff0c;之后一直点“下一步”直到完成 2 添加元器件 点击元…

华为OD机试-最长的密码(Java 2024 E卷 100分)

题目描述 小王正在进行游戏大闯关,有一个关卡需要输入一个密码才能通过。密码获得的条件如下: 在一个密码本中,每一页都有一个由26个小写字母组成的密码,每一页的密码不同。需要从这个密码本中寻找这样一个最长的密码,从它的末尾开始依次去掉一位得到的新密码也在密码本…

极狐GitLab 正式发布安全版本17.9.1、17.8.4、17.7.6

本分分享极狐GitLab 补丁版本 17.9.1、17.8.4、17.7.6 的详细内容。这几个版本包含重要的缺陷和安全修复代码&#xff0c;我们强烈建议所有私有化部署用户应该立即升级到上述的某一个版本。对于极狐GitLab SaaS&#xff0c;技术团队已经进行了升级&#xff0c;无需用户采取任何…

Ajax动态加载 和 网页动态渲染 之间的区别及应用场景

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 1. Ajax 动态加载2. 动态渲染3. 两者之间的关系和区别3.1 AJAX 动态加载与动态渲染的关系3.2 流程3.3 两者区别4. 实际应用场景4.1 无限滚动4.2 表单提交4.3 单页应用(SPA)4.4 案例5. 总结Ajax 动态加载 和 动态渲染 …

QT——对象树

在上一篇博客我们已经学会了QT的坏境安装以及打印一个hello world&#xff0c;但是如果有细心的朋友看了代码&#xff0c;就会发现有一个严重的问题&#xff0c;从C语法看来存在内存泄漏。 上面的代码实际上并没有发送内存泄漏&#xff0c;是不是觉得有点奇怪&#xff1f;大家有…

深度学习之-“深入理解梯度下降”

梯度下降是机器学习和深度学习的核心优化算法&#xff0c;几乎所有的模型训练都离不开它。然而&#xff0c;梯度下降并不是一个单一的算法&#xff0c;而是一个庞大的家族&#xff0c;包含了许多变体和改进方法。本文将从最基础的梯度下降开始&#xff0c;逐步深入学习&#xf…

力扣-字符串

字符串不能被修改&#xff0c;所以如果有想修改字符串的行为&#xff0c;需要转换为StringBuilder StringBuilder里也有很多封装方法String没有&#xff0c;比如reverse() StringBuilder sb new StringBuilder();// 添加字符串 sb.append("Hello"); sb.append(&qu…

flink重启策略

一、重启策略核心意义 Flink 重启策略&#xff08;Restart Strategy&#xff09;是容错机制的核心组件&#xff0c;用于定义作业在发生故障时如何恢复执行。其核心目标为&#xff1a; 最小化停机时间&#xff1a;快速恢复数据处理&#xff0c;降低业务影响。平衡资源消耗&…