Self-Supervised Prompt Optimization

发布于:2025-03-06 ⋅ 阅读:(17) ⋅ 点赞:(0)

论文:[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次,则判定为优化成功;否则保留原提示