游乐游手机版
首页/AI热点日报/热点详情

多阶段语言模型程序:提升语言模型性能的新策略

类型:热点整理2026-06-26
在自然语言处理(NLP)领域,语言模型程序——即由多个模块化语言模型调用拼接而成的复杂管道——正成为推动各类任务突破的关键力量。这类程序为问答系统、信息检索、文本生成等难题提供了全新解决方案。然而,构建这样的管道并不容易,其中最核心的挑战之一是如何优化提示词(prompts),以实现各模块的高效协同

在自然语言处理(NLP)领域,语言模型程序——即由多个模块化语言模型调用拼接而成的复杂管道——正成为推动各类任务突破的关键力量。这类程序为问答系统、信息检索、文本生成等难题提供了全新解决方案。然而,构建这样的管道并不容易,其中最核心的挑战之一是如何优化提示词(prompts),以实现各模块的高效协同。近期,DSPy一作、斯坦福大学博士生、即将担任MIT助理教授的Omar Khattab团队发布了一项有趣的研究,专门针对这一难题提出了新方法。

一、研究背景

(一)语言模型程序的发展与挑战

随着技术的不断演进,解决复杂任务时常需要将多种提示技巧组合成多阶段管道。例如在问答系统或文本生成中,将多个语言模型按特定顺序与方式串联,能够发挥出更强的综合能力。然而,目前大多数管道仍依赖于手动“提示工程”——通过反复试错来设计提示词,使特定模型在特定环节产生预期效果。这种方式不仅耗时费力,而且难以保证性能达到最优。

(二)现有提示优化方法的局限

近年来虽然涌现出一些提示优化器,如APE、OPRO和EvoPrompt,但它们主要面向单个语言模型的提示优化,无法直接应用于多阶段程序。在多阶段场景中,由于缺乏针对单次模型调用的“黄金标签”或独立评估指标,优化难度显著增加。

图1:优化问题示例,以一个多跳检索语言模型程序展示。给定一些问答对和一个度量标准,优化器为每个阶段提出新指令并引导新演示(未图示)。

二、问题定义与挑战分析

(一)问题正式化

假设一个语言模型程序Φ包含m个模块,每个模块使用一个语言模型,并由一个带有开放插槽v的提示模板pi定义。目标是找到一组从变量到字符串的映射,使得程序在给定训练集D上,根据评估指标μ达到最优性能。这一任务面临多个挑战:每个字符串可以取任意值,评估指标仅在整体任务层面提供反馈(无法获取语言模型的梯度或嵌入),且通常只有小数据集和有限的模型调用预算。

(二)主要挑战

  1. 提案挑战:提示空间极其庞大,模块数量越多问题越严重。因此,提出高质量的指令是成败的关键。
  2. 信用分配挑战:需要联合优化覆盖所有模块提示的众多变量。要合理分配搜索资源,必须高效推断每个变量配置的真实影响。

三、解决策略

(一)应对提案挑战的策略

  1. 引导演示:简单且有效——从训练集中采样输入,运行程序Φ生成输入/输出轨迹,将成功的轨迹作为潜在的标记演示(即有效的输入/输出示例)。然后从这些演示中挑选组合,构成有效的少样本示例。
  2. 基础设定:为使提案语言模型为特定模块生成高效指令,向其提供相关上下文,例如数据属性、程序控制流、成功任务的示例。具体操作包括:使用零样本语言模型程序描述原始数据集模式、总结控制流、引导程序演示、收集每个阶段的提示及其评估分数,然后将这些信息打包作为上下文。
  3. 学习提案:每个提案策略都有超参数,例如指令生成的温度、是否使用数据摘要等,最优配置可能随任务、程序和提案模型而变化。为此,将提案超参数进行参数化,通过多次试验学习一个贝叶斯模型,以找到最适合当前设置的策略。

图2:引导随机搜索。第一步,将训练输入在程序Φ中运行,保留根据度量标准μ得分足够高的轨迹,引导出演示。第二步,用随机搜索在这些演示集中搜索,返回性能最好的组合。

(二)应对信用分配挑战的策略

  1. 贪婪策略:逐一针对程序的单阶段变化进行提案和评估。这可以避免将错误归因到不正确的阶段,但效率较低——每次只能修改一处,且某些阶段的变化可能需要等待其他阶段先改进才能显现效果。
  2. 替代策略:利用贝叶斯学习构建替代模型,从历史评估中预测不同参数组合的质量,将搜索聚焦于有希望的区域。该方法能够高效优化离散的提案集,但缺点是无法利用过去的评估来改进提案本身。
  3. 基于历史的策略:假设在给定过去评估历史的情况下,一个足够强大的语言模型可以进行信用分配。具体做法是将评估过的指令及其分数包含在上下文中,让提案模型学会分配信用并输出新指令。

四、算法实例与实验

(一)算法实例

  1. 引导随机搜索:首先为每个模块引导出一定数量的少样本示例,然后对这些演示集进行随机搜索,返回性能最佳的组合。
  2. 模块级OPRO:将模块级指令与程序分数对的历史输入给提案语言模型,使其为每个模块生成新指令,在程序中评估这些指令,将结果分数添加回历史,重复直到达到最大迭代次数,最后返回得分最高的参数化。
  3. MIPRO:首先通过引导演示和基础设定为每个模块引导出少样本示例和指令,初始化潜在的分类变量。然后使用树结构Parzen估计器采样,选择用于参数化的指令和少样本示例。接着在随机小批量样本上进行评分,用分数更新估计器的先验。每隔一定步骤,在整个训练集上评估平均分最高的候选,返回最优分配。

图3:模块级OPRO优化器。将模块级指令和程序分数对的历史输入给提案语言模型,为每个模块生成新指令,在程序中评估,并将分数和指令一起加回历史,重复I次。

图4:MIPRO优化器。第一步(同引导随机搜索)引导演示;第二步用基础设定策略提出指令;第三步用贝叶斯优化寻找指令和演示候选的最佳组合。

(二)实验设置

  1. 基准测试:我们开发了七个任务用于评估语言模型程序优化器,包括四个多阶段程序和两个单阶段程序,涵盖问答、分类、自然语言推理等领域。训练集使用500个示例,开发集500个,测试集2000个(或完整测试集)。
  2. 方法与模型:我们评估了三种情况:仅优化指令、仅优化少样本示例、两者联合优化。比较了Module-Level OPRO、0-Shot MIPRO、0-Shot MIPRO++、Bootstrap Random Search、Bayesian Bootstrap等方法,并以未优化的程序作为基线。还通过有无基础设定的Module-Level OPRO来验证基础设定的效果。提案语言模型使用GPT-3.5,任务模型使用Llama3-8B,引导少样本演示时可能切换模型。

表1:DSPy优化器基准测试及相关程序。我们在七个不同程序上对优化器进行了基准测试。

(三)实验结果与讨论

  1. 引导演示的重要性:对于大多数任务,将优化引导出的演示作为少样本示例是达到最佳性能的关键。实验表明,即使是简单的引导随机搜索,在除一个任务外的所有任务上,其表现也优于最佳仅指令优化器。
  2. MIPRO的优势:在联合优化指令和少样本示例时,MIPRO通常能取得最佳整体性能。但个别任务例如HotPotQA和Heart Disease除外,这可能是因为这些任务本身的特性,指令优化的价值有限。
  3. 指令优化的适用场景:对于包含条件规则的任务——这些规则对语言模型来说不明显,且无法通过有限的少样本示例表达——指令优化最为重要。例如在HotPotQA Conditional任务中,零样本指令优化的效果超越了仅进行演示优化。
  4. 基础设定的效果:基础设定总体上对指令提案有所帮助,但最佳策略因任务而异。在HotPotQA和HoVer中,基础设定对性能提升至关重要;而在ScoNe任务中,反而可能损害性能。这也促进了MIPRO++等方法的诞生,这类方法能够针对任务学习自定义提案策略。
  5. 进一步探索的空间:不同优化器在不同任务和场景下各有优劣。未来还需要研究不同优化预算下的性能差异,以及如何使优化器在不依赖手写输入的情况下学习任务动态。

表2:五次运行的平均结果,分为仅优化指令、仅优化演示、两者同时优化。每列最佳值用粗体突出显示,粗体值表示与第二高值相比的最高平均分,经威尔科克森符号秩检验(p < .05)确认显著性。若显著性未确认,多个结果用粗体表示可比性能。

五、研究贡献与局限

(一)贡献

  1. 对语言模型程序的提示优化问题进行了形式化定义,并提出了算法设计空间,其中包含三种应对提案挑战的策略和三种解决信用分配问题的策略。
  2. 发布了一个涵盖七个任务的优化器基准测试套件,为评估不同优化器提供了统一的标准。
  3. 构建并评估了一组可能的提示优化算法,其中MIPRO在七个任务中的五个上优于基线,为实际应用提供了有效的方法。
  4. 为从业者总结了五条关于优化语言模型程序的关键经验教训,有助于指导实践。

(二)局限

  1. 研究在固定预算下进行,未探讨极低或极高预算场景下的优化动态差异。
  2. 实验中使用固定的提案语言模型和任务语言模型,未来需要评估在不同模型下方法的一致性。
  3. 优化器在推断复杂任务规则方面能力有限,尤其是在没有手写种子提示的情况下。
  4. 虽然建立了涵盖多种任务和程序的基准,但对于越来越复杂的任务和程序,优化器方法的表现还有待进一步验证和完善。

总体而言,这项研究在语言模型程序提示优化方面迈出了重要一步,为后续研究和实践提供了有价值的参考与方向。尽管存在局限性,但也为更深入的探索和改进打开了空间。

来源:https://www.53ai.com/news/LargeLanguageModel/2024101168721.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。