引言
通过模块化语言模型调用,并组成pipleines来解决复杂任务,极大的推动了NLP任务的发展(下图为prompt优化样例)。在此过程中需要对每个模块设计有效的prompt。为此本文作者重点研究了LLM编程的prompt优化,旨在通过优化提示来最大化下游任务指标。作者将复杂问题分解为优化每个模块的指令提示,并引入了几种策略来制作基于任务的指令,并开发了一种新型优化器MIPRO,使用Llama3-8B在多个项目上都得到了不错的效果,且最高可提升13%的准确率。
https://arxiv.org/pdf/2406.11695
背景介绍
使用语言模型(LM)来解决复杂的任务,通常需要应用高级的提示技术(prompting techniques)并将它们组合成多阶段的流程(multi-stage pipelines)。尽管如此,当前的LM程序大多是通过“提示工程”(prompt engineering)来设计的,这是一种通过手动试错来创建长提示的方法,以迫使LM在特定流程中执行特定步骤。
当前最新的研究提出了提示优化器(prompt optimizers),例如APE、OPRO和EvoPrompt等,它们可以检索字符串以识别高性能提示的算法。但是,大多数方法并不能够直接应用于多阶段LM程序,因为在这些程序中缺乏对单个LM调用的评估指标。最近ICLR2024提出的编程模型:DSPy,将LM pipeline抽象为文转图,可以学习如何应用提示、微调、增强和推理技术的组合。但该优化器尽管可以创建多阶段pipeline表示来优化prompt和权重,但是并不能对复杂multi-prompt pipelines的 free-form 指令进行调优。
为此,本文在弱假设条件下探讨任意语言模型(LM)程序中高效优化提示(prompts)的方法,特别是那些具有多个阶段的程序。具体来说,作者无法访问LM权重,只需要LM程序本身、一个优化度量标准以及一组输入输出的训练集。这使得在不收集每个模块的详细训练数据的情况下,可以优化使用黑盒LM的程序。
针对该研究方向,作者正式定义了LM程序的提示优化问题,并提出了两个关键挑战:1)随着模块数量的