【2022 ACL outstanding】Fantastically Ordered Prompts and Where to Find Them: Overcoming Few-Shot Prompt Order Sensitivity
文章主要工作大概是:通过自行构建Prompt的数据集,选取性能较好的Prompt,用于few-shot learning的文本分类任务中,改进分类效果。【从Prompt入手】
行文思路大概是:(1)先发现prompt order对于few-shot 分类任务的影响;(2)然后提出寻找有效Prompt order的方法(基于熵)
前置概念:
构建Prompt的过程:
(1)Prompt Order是什么? Table1中的Concatenation展示几个例子的连接顺序
(2)SST-2 dataset是什么? 情感分析数据集(英语)https://huggingface.co/datasets/sst2/viewer/default/train?row=0
相关工作:
Prompt Design for PLMs
提示性设计的核心挑战是将训练数据(如果存在的话)转换为文本序列。
自动生成template的方法:(1)当做cloze-style 任务(2)使用外部语言模型来生成模板;(3)梯度引导的搜索,以找到使性能最大化的模板;(4)使用基于挖掘的方法自动创建多个不同的模板
Order Sensitivity of Prompt Design
基于微调的方法不像上下文学习那样对顺序敏感。
发现问题的过程和实验:
实验:
横坐标:N个Examples,纵坐标:准确度。
衡量不同大小模型在不同的few-shot数量下准确度的方差变化。
发现的问题:
● 添加训练样本并不会显著减少方差(没有太大用处)
● 有效提示不能在各个模型之间迁移
● 有效标签排序在不同模型之间并不一致
● 不良提示的退化行为
要解决的问题——“我们如何自动生成一个‘探测集’来找到有效提示排序?”
具体方法
三步 (i)对于随机选择的训练样本集,我们使用该集合的所有可能的排序排列作为候选样本;
(ii)通过使用所有候选提示作为context查询语言模型来构建一个探测集(也就是候选提示经过LM生成的);
(iii)使用这个探测集,通过使用探测度量(probing metric)对它们进行排序来确定最佳排序。
(1)构建探测集probe set
大概流程如下:
原始数据(比如SST-2数据集)通过构建Prompt,输入到PLM中生成新的句子,作为probing set,生成一个与训练样本共享相似分布的探测集。
(2)探测指标
选取最合适的【Prompt permutation】
全局熵(GlobalE)和局部熵(LocalE)【两种标准】。——找到最优的permution
熵越大,样本质量越高
GlobalE:
如果是情感分析,0和1,熵(不是交叉熵)
LocalE:
对Probing set中数据计算熵,从而衡量对应Prompt的性能。
结束语:
一开始读完,其实觉得原理不是很难。但由于能力有限,没有太多深入的理解,参考别人的一些读后感,觉得很有道理,摘过来:
本论文的亮点可以参考(1)作者通过非常完善的实验,揭露出这种随顺序变化的不稳定性普遍存在于多种任务,不随模型规模与标注样本规模而变动。
(2)作者又从变化中寻找不变,发现了不同prompt顺序导致的预测结果标签分布上的规律,据此提出了基于熵的prompt筛选方法,并验证了效果。这就使得这篇工作变得有意思了起来。
论文可以探究的问题:
除此之外,这篇文章还有一些问题可以继续深究。比如,这种不稳定性只在GPT系列的自回归语言模型中出现么?对于T5、BART一类的语言模型,是否依然存在这种问题?主实验测试集只采用256个样本是否会过少,从而增加不稳定性?如果使用大规模的测试集会观察到什么变化么?前面在SST-2上做的实验,放到所有11个任务上,结果是一致的么?作者提到,基于熵的方法对句对匹配任务的提升相对较低。那对于GPT-3试过的那些非分类任务,比如完形填空之类的,本文发现的规律是否还存在?不探究这些问题,也不会影响到这篇论文的完整性。但这些问题的答案,的确很令人好奇。
参考:https://zhuanlan.zhihu.com/p/539893362