本文来源于微信公众号“ 自然语言处理算法与实践”,作者:烛之文
大模型是一种指令式(instruction learning)的学习框架,输入合适的instruction,大模型输出的结果往往能提到明显的提升。通常情况下,instruction都是我们手工写出来,尝试多个不同instruction并进行对比,从而选择一个更合适的作为任务的指令。但是人工来设计的方式存在几个问题:1)人工写出来的instruction毕竟空间有限,难以保证是最优的;2)当设计的任务很多或者比较复杂,人工设计会存在效率低下或难以理解任务的真正含义。
为此,自动方式来为大模型设计合适的instruction也成为一个研究点,如比较有名的Automatic Prompt Engineer(APE),其构建一套自动指令收集、筛选、扩充的workflow。今天分享一个新的自动设计指令的方法——INSTRUCTZERO,来自paper<INSTRUCTZERO: EFFICIENT INSTRUCTION OPTIMIZATION FOR BLACK-BOX LARGE LANGUAGE MODELS>。对比APE方法,其创新之处在于:将寻找最优指令从离散的空间转化成低维连续空间,并使用贝叶斯优化来寻找最优指令。简单来说:将寻找最优指令转变一个量化的优化问题,而之前都是离散式的寻找。
论文中涉及贝叶斯优化、核函数设计、分布等相关理论知识,本次只讲述下其主要思路,理论不做深入介绍。INSTRUCTZERO主要思路如下:
(1)设定一个soft prompt(待学习的向量) +任务训练集数据(X,Y)构成输入数据;
(2)利用开源的LLM(LLaMa),生成任务相关的指令v;
(3)利用指令v和X数据,使用黑盒的大模型(GPT4)进行预测出新的y' = f([v,X]);
(4)构建一个评分函数,对预测的y'与原始y进行打分,这样得到一个(soft prompt,instruction,score)三元组;
(5)利用上述的三元组,将其转成贝叶斯优化,进而来更新soft prompt,然后迭代下去,直到y'与y的相似度很大,达到预期目标时,暂定迭代,这时生成的instruction即为任务合理的指令。
整体思路即为,利用soft prompt + 开源的大模型+黑盒的大模型 迭代来生成任务指令,优化目标可表示为:
其中 g(.)代表开源大模型,f(.)代表黑盒大模型,h为评价函数,p为soft prompt;优化的目标将找最合适的指令转化为找令评价指标达到最大的soft prompt。
在优化soft prompt时,文中是将其转成贝叶斯优化,并设计指令相关的核函数来实现,这里就不详细介绍,有兴趣可以查看原文。接下来说说实验效果。
上图是表示论文提出的方法对比APE,Uniform两种生成指令的方法,在32个任务上做zero-shot测评。可以看出:1)论文提出的方法INSTRUCTZERO几乎在数所有的任务都取得最佳结果;2)而且在有的任务上带来近50%以上的提升,如Cause Selection,Orthography等。
上图显示INSTRUCTZERO经过三次迭代,soft prompt 和任务准确率的变化(0.65 -> 0.8 -> 1.0)。其中圆圈大小表示soft prompt对应的评价结果大小,越大越好;数字1、2、3表示每轮中值最大的那个soft prompt;
下图为INSTRUCTZERO在多个任务数据集上找到的最佳指令样例,其实在有些任务上,其找的指令表现也不是特别的好。
本次分享的一种自动为大模型设计合适instruction的方法——INSTRUCTZERO,其核心是利用开源大模型+黑盒大模型来找任务的最佳指令,将优化目标转化为寻找合适的soft prompt,实现量化优化。对比其他自动生成指令的方法(如APE),其在zero-shot的能力得到明显的提升。个人有两点想法:1)整个迭代过程,其结果都是利用两个大模型,这就潜在假设最佳的答案就在大模型中,没有涉及人为干涉或者对齐;2)INSTRUCTZERO找到指令只是去对比zero-shot,这点感觉太窄,能否利用这个思路迭代生成任务增强的指令,然后再用数据集去微调,达到任务提升的效果。