【新智元导读】提示工程可以自动化了?Evoprompt的出现解决了大型语言模型性能依赖高质量提示的挑战,同时展示了LLM在传统算法中的潜在价值。
将LLM的能力和传统算法结合起来,会碰撞出怎样的火花?
最近清华大学、微软研究院和东北大学的一项新研究表明,利用传统进化算法来处理提示词工程中的问题,可以大大提升效率。
将进化算法融入到提示词工程中,利用LLM来模仿进化算法中的进化算子来生成新的提示词,将性能更好的提示词保留下来不断迭代,这个自动化生成提示词的方式也许在未来会成为提示词工程中最重要的方法。
论文地址:https://arxiv.org/pdf/2309.08532
有网友自嘲到:
是我太老了吗,我记得两周以前「提示工程师」还是一个新职业......
研究人员借鉴进化算法的思想,提出了一种离散提示词(Discrete prompt)调优框架——Evoprompt。
虽然进化算法中的进化算子通常是针对序列设计的,但它们倾向于独立改变标记以生成新的候选解决方案。
不幸的是,这种方法忽略了标记之间的连接,这对于保持离散提示词的连贯性和可读性至关重要。
因此,为离散提示词设计进化算子(Evolutionary Operator)具有挑战性。
而研究人员利用LLM在自然语言处理方面的专业知识和进化算法的卓越优化能力,结合两种方式的优势,让LLM根据进化算子生成新的候选提示,而进化算法指导优化过程,保留最佳提示词。
具体来说,基于几个初始提示,研究人员利用LLM模仿进化算法中的进化算子来生成新的候选提示,并保留在开发集上性能更好的提示。
通过这种方式不停迭代来提高生成的提示词的质量。研究人员使用总共9个数据集,与手动设计的提示和以前的自动提示生成方法相比,Evoprompt能持续获得更好的提示词。
离散提示词的自动优化
目前先进的大型语言模型(LLM)通常通过黑箱API进行交互,而梯度和参数则是不可访问的。进化算法(EA)是无导数算法,具有出色的准确性和快速的收敛性。
因此,研究人员考虑将EA引入到离散提示词(discrete prompt)优化中。
然而,在生成新的候选解决方案时,进化算子通常独立地编辑当前解决方案中的元素,而没有考虑它们之间的联系。这使得在需要连贯性和可读性的离散提示词上应用进化算子变得具有挑战性。
为解决这一挑战,研究人员设计了一种协同方法,将LLM的自然语言处理专长与EA的优化能力相结合,称之为Evoprompt。
具体而言,LLM基于进化算子生成新的候选提示词,而EA引导优化过程以找到最佳的提示词。
为了在实践中实现Evoprompt,有必要用EA的特定算法来实例化它。
EA有多种类型,研究人员考虑采用两种广泛使用的算法(遗传算法和差分进化算法)。GA是最受好评的进化算法之一,而DE自诞生以来已经成为解决复杂优化问题的最广泛使用的算法之一。两种算法都在业界获得了显著的认可和使用。
Evoprompt的框架
EA(进化算法)通常从一个包含N个解决方案(在研究人员的研究中相当于提示词)的初始群体开始,然后使用当前群体上的进化算子(例如,变异和交叉)迭代地生成新的解决方案,并根据一个评分函数更新群体。
按照典型的EA,Evoprompt主要包括三个步骤:
1. 初始群体:基于研究人员的观察,即大多数现有的基于提示词的方法忽视了人类知识提供的高效先验初始化,研究人员应用几个手动提示作为初始群体,以利用人类的智慧作为先验知识。
此外,EA通常从随机生成的解决方案(提示词)开始,产生一个多样的群体,并避免陷入局部最优。相应地,研究人员还将由LLM生成的一些提示词引入到初始群体中。
2. 进化:在每次迭代中,Evoprompt使用LLM作为进化算子,根据从当前群体中选出的几个父提示生成一个新的提示。
为了实现这一点,研究人员仔细设计了针对每种特定类型的EA的变异和交叉算子的步骤,以及相应的指令,以指导LLM根据这些步骤生成新的提示。
3. 更新:研究人员在开发集上评估生成的候选提示,并保留那些性能优越的提示,类似于自然界中的适者生存。
具体的更新策略可能会根据所使用的EA的类型而有所不同。
算法在迭代次数达到预定义的上限时停止。Evoprompt的详细内容如上图所示。当用EA的特定算法实例化Evoprompt时,需要调整进化和更新过程,关键的挑战是设计用于离散提示的进化算子。
遗传算法的实例化
选择:在GA(遗传算法)中,通常会根据适应度值使用轮盘赌选择法选择两个父解决方案。类似地,研究人员使用轮盘赌选择法根据在开发集上评估的分数,从当前群体中选择两个父提示。
进化:根据GA中的进化算子,通过基于选定的两个父提示的两步过程生成一个新的候选提示:1)父提示经历交叉,从而生成一个从两个父提示中有选择性地组合成分的新提示;2)第一步中新生成的提示经历变异,在其中对其部分内容进行随机修改。
基于这个两步过程,研究人员设计了指导LLM生成基于这些步骤执行算法1中的Evo(·)的新提示的指令。该过程在下图中进行了详细的描述。
更新
Evoprompt迭代地生成新的候选提示,并使用一个被标记为D的开发集来获得量化提示质量的分数。研究人员考虑一种直接的选择策略。具体来说,在每次迭代中,基于GA(遗传算法)的Evoprompt会产生N个新的提示,这些将与当前N个提示的群体合并。然后通过保留得分最高的N个提示来选择更新后的群体。
与差分进化的实例化差分进化的初步知识
在DE(差分进化)中,解决方案由数值向量表示。每个候选向量在群体中被依次选为基础向量x,以进行变异和交叉。变异是基于一个从当前群体中随机抽取的解决方案a来生成一个变异解y。
进化
基于DE的Evoprompt的进化过程可以分解为三个步骤:1)F(b−c);2)y=a+F(b−c);3)x和y的交叉。
在基于DE的Evoprompt中,研究人员遵循这三个步骤来设计进化过程,以及相应的LLM指令,以生成基于这些步骤的新提示,如下图所示:
受到DE中差分向量的启发,研究人员考虑只变异当前群体中两个随机选择的提示的不同部分(上图的步骤1和步骤2)。当前群体中的提示被认为是当前最佳的。因此,两个提示的共享组件往往对性能有正面影响,因此需要保留。
DE的一个变体在变异过程中使用当前最优向量,其中通过将差分向量的规模加到当前最优向量上来生成一个变异向量。基于这一思想,研究人员也利用当前最优的提示。具体来说,研究人员通过选择性地用变异的不同部分替换当前最佳提示的部分来生成一个变异提示(上图的步骤3)。
交叉被定义为用来自变异提示的片段替换基础提示(即,当前群体的一个候选提示)的某些组件的过程。这个操作结合了两个不同提示的特点,可能会创建一个新的和改进的解决方案(上图的步骤4)。
Evoprompt评估实验
在用GPT-3.5来执行进化算子时,研究人员使用了Evoprompt对开源的Alpaca-7b和闭源的GPT-3.5进行了提示优化,并报告了在开发集上得分最高的提示在测试集中的得分。
是通过比较不同的提示方法,确定哪种提示方法能够在自然语言处理任务中实现更好的性能。
有手动设计的提示(ML)、从人工收集的提示中选择的提示(promptSource 和 Natural Instructions),以及一种名为 APE 的方法,后者使用蒙特卡洛搜索来改进初始提示。
在展现了实验的实现细节和性能基线后,研究人员评估了Evoprompt在语言理解和生成任务上的性能。
语言理解
研究人员在7个数据集上进行了Evoprompt的语言理解实验。
如上图所示,与之前在提示符生成(APE)和人类书面指令方面的工作相比,Evoprompt取得了明显更好的结果。
但在情感分类数据集上,Evoprompt(GA)略优于Evoprompt(DE)。
当涉及到主题分类数据集时,Evoprompt(GA)和Evoprompt(DE)的结果类似。
在在主观性分类任务(Subi)上,Evoprompt(DE)明显优于Evoprompt(GA),具有9.7%的准确性优势。
语言生成
研究人员通过文本摘要和简化任务对Evoprompt进行评估。
在文本摘要任务中,用来评估的数据集采用了SAMSum,一个复杂的、具有挑战性的对话总结数据集。
研究人员报告了ROUGE-1/2/L 在 Alpaca-7b 和 GPT-3.5上的得分。
在文本简化任务中,研究人员采用了具有代表性的 ASSET数据集,该数据集具有多个参考文献,目的是在简化文本的同时保留原意。
报告了SARI 分数,这是一种广泛应用于文本编辑任务的基于 n-gram 的度量方法。
总结和简化的结果分别如表2和表3所示。
在两种不同规模的模型(Alpaca-7和 GPT-3.5)上,Evoprompt都明显优于人工设计的提示和APE生成的提示。
此外,在总结任务上,Evoprompt(DE)明显优于Evoprompt(GA),而在简化任务上,Evoprompt(DE)的表现与Evoprompt(GA)相当。
算法分析
进化算子设计
当进化算子适用于离散提示时,Evoprompt(DE)有两个关键的设计方面,包括只对不同部分进行变异和选择当前最佳提示(如图2中的提示3)。
研究人员在一个理解数据集Subj和一个生成数据集ASSET上研究了这些可能影响Evoprompt(DE)有效性的设计,在前者中,Evoprompt(DE)的性能远远优于Evoprompt(GA)。
在后者中,Evoprompt(DE)和Evoprompt(GA)的性能相近。使用 GPT-3.5作为进化算子,并对 Alpaca-7b 的提示进行了优化。
为了说明仅突变不同部分的好处,研究人员将图2中的前两个步骤替换为指令:
「随机突变提示1和提示2」,以允许对提示1和提示2中的所有内容进行突变,如表4中的「Al」所示。
同时,Evoprompt的原始设计,仅突变不同的部分,标记为「Dice」。如表4所示,仅对不同部分进行突变的设计始终提供了改进。
选择prompt3在 Evoprompt(DE) 算法中是应用DE算法的一种变体,在当前种群中选择最佳prompt作为图2中的prompt3。
研究人员通过以下设置来验证这一设计:
1) prompt3从当前群体中随机抽样,在表4中表示为 「随机」:
2) 取消使用prompt3,让基本prompt直接与表4中变异的不同部分交叉。
此外,研究表明选择最佳提示作为提示3比随机抽样更有效。
Evoprompt(GA)vs. Evoprompt(DE)
研究人员在两种具体的算法上实现了提出的Evoprompt,包括遗传算法(GA)和差分进化算法(DE)。
为了了解在这两种算法之间的选择过程,并理解它们各自的优势和局限性,研究人员选择了两个数据集:
1)SST-5,其中Evoprompt(GA)表现更好;
2)Subj,在这个数据集上Evoprompt(DE)表现出更优越的性能。
图3中显示了每次迭代在开发集上的平均和最佳得分。
在 SST-5上,使用 Evoprompt (GA) 的群体平均质量一直优于使用 Evoprompt (DE) 的群体平均质量,同时最优提示也更好。
这得益于GA的选择策略,其中得分较高的提示更有可能被选择为生成新提示的父代。
而在DE中,群体中的每个提示将按顺序选择为基础提示,而提示1和提示2则是随机选择的。
因此,GA更有可能在当前最佳解附近搜索,从而增加了在手动提示相对高质量的情况下获得更好结果的可能性。
例如,SST-5的手动提示已经设计得很好,Evoprompt的改进不是很显著。相反,Subi上现有手动提示的性能较差,Evoprompt比手动提示取得了显著的25%改进。
在这个数据集上,Evoprompt(GA)陷入了局部最优解,而Evoprompt(DE)成功逃脱并取得了更好的结果。
由于选择策略和良好设计的进化操作的优势,综合考虑,建议当已经存在多个高质量的提示时选择Evoprompt(GA),否则选择Evoprompt(DE)。
总结
为了解决LLM(大型语言模型)的性能高度依赖于精心设计的提示的挑战,研究人员设计了Evoprompt,可以从初始群体中优化离散提示,同时使用LLM作为进化算子,以自动生成和搜索最优提示。
此外,基于研究人员的发现,他们相信LLM提供了一个有效和可解释的界面,用于实现传统算法,确保与人类理解和沟通有良好的一致性。
研究人员的发现证实了最近的趋势,即LLM通过收集错误预测的样本,在离散空间内执行「梯度下降」。研究人员的工作通过展示LLM参与一大系列传统算法的潜力,已经取得了重要的进展。研究人员希望他们的探索将激发对LLM与传统算法组合的进一步研究,为LLM的新颖和创新应用铺平了道路。
参考资料:
https://arxiv.org/pdf/2309.08532