hi,各位伙伴们早上好,好久没有更文了,最近也没有发觉特别有意思的论文,今天给大家带来一篇和Prompt相关的论文,欢迎食用~
论文地址:export.arxiv.org/pdf/2202.04…
一、提出动机
1)本文作者认为Prompt的提示信息不能被预训练模型充分挖掘使用
2)下游任务的数据不能很好地应用于微调阶段,讲的通俗一点就是模型不能很好的学习下游任务的数据
二、核心idea
作者认为Prompt-based(传统prompt方法)比较依赖预训练模型的泛化性,因为预训练模型的数据(BOOKCORPUS plus WIKIPEDIA corpus)和下游任务的数据分布不一致存在gap;然后作者还认为模型预测mask位置的词都是事先固定好的,构建一个能够完全覆盖候选词的说话者需要专家知识,而一个设计拙劣的说话者限制了预测的准确性,这里简单说下自己的看法,如果mask要预测得词都是事先固定好的(就是去计算设定好词的概率)这样就像是在做选择题,而不是和MLM类似的完型填空任务,这样会限制模型的泛化性。
于是本文作者提出以下改进:
2.1 将场景信息以及提示信息融入到预训练模型
具体的做法是使用未标注的测试集加入Prompt提示(Prompt(x) )
然后使用预训练模型去预测mask位置的token得到top-|O|个预测结果,然后将预测top-|O|得结果填补到原来的模板中被mask位置得到新的数据q_i,可以看下原文中给的一个例子:
得到新的数据q_i后再使用ES(使用的TF-IDF算法衡量句子间的相似性)为样本q_i去语料库(这里的语料库指的是预训练使用的数据BookCorpus 等)检索top-k相似的query,将这些检索后的query数据集作者称为D_p,通过这样的操作作者认为预训练的数据和下游数据统一,而且数据集D_p不仅融入的特定任务信息而且还融入了Prompt提示的信息,其实我觉得这里就是做了一个映射,将特定场景的数据加入Prompt提示后,映射到预训练的数据集中。然后将新的数据集D_p 加入到预训练模型做MLM任务,得到新的预训练模型M_{D_p}。
得到新的模型M_{D_p}之后作者认为这是一个融入特定任务的一个模型,然后再重复上诉步骤得到M^{'}{D_p},然后再使用M^{'}{D_p}作为最终的基准模型,我猜想得到这个基准模型之后在进行常规的Prompt-tuning(原文好像没有交待之后的事,也有可能是我看漏了,欢迎补充~)。
2.2 扩展Verbalizer(就是要映射到label的单词)
常规的Prompt做法是将模型预测得结果直接映射到task classes中,例如: “good”for positive and “bad” for negative. 上文中也提到过这种做法会损失模型的一定泛化性因为我们强制的让模型倾向于预测几个固定的结果中,所以本文提出了一种扩展模型预测结果范围的方法。
将测试数据送入PLM中预测得到一系列top-|O|的结果作为候选Verbalizer C,且c\in C,使用训练好的NLI系统去推断s1,s2是否为蕴含关系,如果是蕴含关系则将c加入到Verbalizer集里面。
举个例子:
s1 = I love this movie. In summary, the movie is c(候选verbalizer)
s2 = I love this movie. In summary, the movie is good
将<s1,s2>送入到NLI模型判断两者是否是蕴含关系,如果是则说明如果模型预测结果为c和预测为good效果是一样的都会映射到positive这个类别。