Paper Sharing: Pattern-Exploiting Training (PET)¶
这次论文分享来自美团实习期间组里的论文分享,正好记录到blog上。
这篇论文提出了一种新颖的方式,将传统的Natural Language Understanding任务通过cloze的方式输入进PLM中。
Motivation & Realated Work¶
在NLP领域,人工标注数据需要大量的成本。在实际应用中,往往只有少量的带标签的数据,这使得模型难以直接从这少量的带标签数据中学习得到很好的效果。
GPT3出现后,它阐释了一种不需要接下游任务的特定模型的方法,而是写“task description”以few-shot的方式去获得想要的结果。但是这种模型在一些NLP任务上比起特定的有监督模型效果要差很多。
本文提出了一种半监督模型PET-Pattern Exploiting Traing (PET),将输入样本转化成完形填空(cloze-style phrases)以帮助模型理解NLP任务,并在未标注的大数据集上进行标注。
PET & iPET framework¶
Tip
核心点:人工构建Pattern和Verbalizer,得到PVP (pattern-verbalizer pair)。对于每一个PVP,用少量的标注数据去微调一个PLM。将所有微调后的PLM集成到一起去标注一个大的未标注数据集T,得到大数据集T的soft label,然后用这个数据集T和soft label去微调得到最后的模型。
PVP (pattern-verbalizer pair)¶
X是一个NLP任务的输入,X=(x1, x2, ..., xk)表示一些句子的排列和组合。L是NLP任务的标签集合,V是词汇表。
定义一个函数P,P(X)为将X转化为带有[mask]的phrase。
定义一个映射v: L -> V,v(l)表示NLP任务标签到一个单词的映射。
例子:k=2,判断两个句子是否矛盾,如果不矛盾则为0;否则为1
人工设计P([a, b]) = "a? [mask], b"
v(0)="Yes", v(1)="No"
如果X = (Mia likes pie, Mia hates pie),
则P("Mia likes pie, Mia hates pie") = "Mia likes pie? [mask], Mia hates pie."
显然这个例子里在mask处填No更合理,通过v的逆映射就能得到1,表示两个句子是矛盾的。
我们可以通过构造PVP,然后去用这部分构造好的小样本数据集微调一个PLM(一个PVP对应一个PLM的微调),然后再用微调好的模型去标注无标签大数据集D。
Training & Inference¶
Loss函数:由两部分组成。 \(L=(1-\alpha) \cdot L_{\mathrm{CE}}+\alpha \cdot L_{\mathrm{MLM}}\) \(L_{\mathrm{CE}}\): cross-entropy loss. \(s_{\mathbf{p}}(l \mid \mathbf{x})=M(v(l) \mid P(\mathbf{x}))\),其中p表示一个PVP(P, v)。等式左边就是在当前的PVP下,对输入信息x的预测结果为l的概率。等式右边就是PLM将v(l)填入到P(x)的[mask]处的非归一化得分。
\(q_{\mathbf{p}}(l \mid \mathbf{x})=\frac{e^{s_{\mathbf{p}}(l \mid \mathbf{x})}}{\sum_{l^{\prime} \in \mathcal{L}} e^{s_{\mathbf{p}}\left(l^{\prime} \mid \mathbf{x}\right)}}\),就是对L的所有标签做一个softmax,然后和真实标签求CE。
\(L_{\mathrm{MLM}}\):因为这个微调的数据量比较小,作者表示可能会出现灾难性消失(catastrophic forgetting)的现象,所以加上了预训练时候的loss。由于这部分loss比较大,所以取值较小,为1e-4。
Combining PVPs¶
因为对于每种PVP我们都会微调一个PLM,那么我们在最后的无标签大数据集D上应该选取哪个微调完的结果呢?这里提出了一个集成策略:
对于PLM集合\(\mathcal{M}=\left\{M_{\mathbf{p}} \mid \mathbf{p} \in \mathcal{P}\right\}\),求\(s_{\mathcal{M}}(l \mid \mathbf{x})=\frac{1}{Z} \sum_{\mathbf{p} \in \mathcal{P}} w(\mathbf{p}) \cdot s_{\mathbf{p}}(l \mid \mathbf{x})\),\(Z\)为\(w(\mathbf{p})\)之和,然后再softmax一下。
对于\(w(\mathbf{p})\),这里提供了两种方案:(1)全都为1,即取一个平均 (uniform) (2)取每个模型在训练集上的accuracy (weighted).
通过上面的操作,可以用这些微调后的PLM给无标签大数据集D打上soft label,得到训练集\(T_c\)。
Iterative PET (iPET)¶
上面的PET的弊端是不同的PLM之间无法相互学习(只有在最后一步的时候进行了一个集成),这会导致很多mislabeled data。为了解决这个问题,作者提出了iPET。
具体步骤是\(\mathcal{M}_{i}^{j}=\left\{M_{1}^{j}, M_{2}^{j}, M_{3}^{j}, ..., M_{n}^{j}\right\}\),表示第j轮迭代后得到的n个模型;其中每个模型使用的训练集是\(T_1^j, T_2^j, ..., T_n^j\)。
每次迭代我们需要对每个\(T_i^j\)进行扩充得到\(T_i^{j+1}\),然后用\(T_i^{j+1}\)训练得到\(M_{i}^{j+1}\)。
具体的扩充方法:从\(N\subset\mathcal{M}^j - {M_{i}^{j}}\)中选取\(\lambda \times (n-1)\)个模型对无标签大数据D标记soft label,并对于每个label为l的数据,选取得分最高的d个样本加入到\(T_i^j\)中形成\(T_i^{j+1}\)。
Experiment¶
Setup¶
本研究在4个英文数据集 (Yelp Reviews, AG's News, Yahoo Questions, MNLI)和一个多语言数据集x-stance上进行评估。
对于英文数据集,使用RoBERTa作为LM;x-stance上使用XLM-R作为LM。
learning rate = 1e-5;batch size = 16;maximum sequence length = 256;
\(\lambda =0.25, d=5\),表示iPET每次扩充训练集时,选25%的模型计算soft label,新训练集扩充5倍大小。\(k=\lceil \log_d(1000/|T|) \rceil\),表示当迭代模型直到当前轮每个训练集大小>=1000则停止。
Results¶
可以看到iPET在四个数据集上的效果都比superviesed的方法要好,且在训练集大小较小时提升更加明显。其中Line1-3是没有经过任何训练的,单个PVP对应的模型效果均低于iPET 10+pp,可见iPET这样的架构比较有用。
跟当时的两个半监督SOTA模型比,效果也有大幅提升。
Summary¶
这篇文章主要就是提出了一种用当时流行的PLM的方法去提升在传统NLP任务上的效果。之前发布的GPT3的报告其实在传统NLP任务上效果并不是最好的,但是本文提出了一种将传统NLP任务的样本通过构造成特定的输入“喂”给语言模型,并把label映射到特定的单词,实现了将这些natural language understanding任务“丝滑”转换到PLM的训练和推理。
这种cloze策略也对之后的很多研究有所贡献。