in-context-learning的例子(prompt, examples, templates…)对任务的表现影响还是比较大的,如何找到合适的例子是关键。这篇NAACL的文章主要解决的是如何召回好的prompts。提出了Efficient Prompt Retrival方法,使用一个小的LM对召回的例子进行打分排序,构建正负样本对,再做对比学习。值得注意的是如何构建数据集和如何训练。
如何构建数据集 training阶段,对于给定的样本对,首先需要构建一些正负样本对训练召回器。使用sparse或dense的retriver,按照如下打分方式进行排序: $$ s(\overline{e}l)=Prob{\hat{g}}(y|\overline{e}_l,x) $$ 即计算在给定当前例子和input序列x时,得到目标序列y的概率,概率越大说明给的例子对当前的生成更有帮助。得到分数后对例子进行排序,取topk和bottomk,由于之前一步已经是用target y召回过了所以能保证这里的例子是good prompt或者hard difficult prompt。
训练过程 分别使用input encoder和prompt encoder对输入进行编码,使用的是bert的cls embedding。
每个训练样本有2B个cls embedding对,一个x,一个e+,一个e-,B-1个batch内正例,B-1个batch内batch内负例,一共1个正对,2B-1个负对。
Our training instances are of the form ⟨xi, ei+, ei−,1, .