将完形填空题用于少样本分类和自然语言推理

将完形填空题用于少样本分类和自然语言推理

论文标题:Exploiting Cloze Questions for Few Shot Text Classification and NaturalLanguage Inference
论文来源:EACL2021
论文链接:arxiv.org/pdf/2001.07676.pdf
源码链接:github.com/timoschick/pet

Abstract

一些NLP任务可以通过提供预训练的语言模型和自然语言的 "任务描述",以完全无监督的方式解决。虽然这种方法的性能低于有监督的对应方法,但我们在这项工作中表明,这两种思路可以结合起来。 作者引入了Pattern-Exploiting Training(PET),这是一种半监督的训练程序,将输入的例子重新表述为cloze-style(完形填空式)短语,以帮助语言模型理解给定的任务。然后,这些短语被用来给大量的未标记的例子分配软标签。 最后,对最终得到的训练集进行标准监督的训练。 对于一些任务和语言而言,PET在低资源环境下的表现胜过一些监督方法和强半监督方法。

Introduction

一个模型是在一组标记过的例子上训练出来的,然后将其归纳到未见过的数据中。由于大量的语言、领域和任务以及数据标注的成本,在NLP的实际应用中,只有少量的标注过的例子是很常见的,这使得少样本学习成为一个非常重要的研究领域。 不幸的是,将标准的监督学习应用于小的训练集往往效果不佳;许多问题仅仅通过观察几个例子就很难掌握。例如,假设我们得到了下列文本:

如果我们已知 T_1T_2 的标签分别是 l,l^{'} ,我们需要推断 T_3 的类别,这其实是很难的一件事,因为分类成上述两个标签都有一定的理由;但是如果我们知道下游的任务主题是关于price的,那么我们很容易就能给 T_3 分配标签 l^{'} ;这个例子也说明了,当我们进行少样本学习的时候,如果我们拥有任务的描述的时候,问题会变得简单很多。文本的解释帮助我们理解任务是关于什么的。

现在许多的预训练任务也都在输入中融入了任务的描述,这也经常被用于零样本的场景。而在这项工作中,作者表明,提供任务描述可以成功地与小样本设置中的标准监督学习相结合。

作者介绍了一种PET(Pattern-ExploitingTraining )--一种半监督训练程序,使用自然语言模式将输入示例重新表述为完形填空式短语;如下图所示,PET可以分为三个步骤,首先,对于每个模式,在一个小训练集 \tau 上将预训练模型微调;然后,所有模型的集合被用来对一个大型的无标签数据集D进行软标签注释;最后,在软标记的数据库上训练一个标准分类器。我们还设计了 iPET,这是 PET 的迭代变体,随着训练集大小的增加重复此过程。

在多种语言的不同任务集上,作者表明,给定少量到中等数量的标记示例,PET 和 iPET 明显优于无监督方法、监督训练和强半监督基线。

Pattern-Exploiting Training

设M是一个mask语言模型,词表为V,mask的token为____,L表示目标分类任务A的一系列标签;任务A的一系列输入短语x=( s_1,...,s_k );我们定义一种模式为一种函数P,将x作为输入,输出一个短语或者一个句子 P(x) ,只包含一个mask的token,它的输出可以视为一种完形填空问题。除此之外,作者又定义了一种verbalizer作为一种映射函数v:L->V,将每个标签映射为M词表里的一个词。作为将(P,v)称为pattern-verbalizer pair(PVP)。

使用PVP可以通过如下步骤解决任务A:给定输入x,我们提供一种P获得输入表示 P(x) ,接着输入到M里面决定哪个标签y的映射 v(y) 最可能替代mask的token;

例如,对于文本蕴含任务,即判断两个句子是否是矛盾还是包含关系;这个任务,我们或许可以采用模式 P(a,b)= a?_____b,而verbalizer将标签 y_0 映射为“Yes”, y_1 映射为“No”,给定一个输入样例对:

现在的任务已经从分配一个没有内在意义的标签,变成了选择被掩盖的位置的最可能是“Yes”还是“No”的问题。

PVP Training and Inference

假设p为一个PVP。我们假设一个有小训练集 \tau 以及一系列未标记的样本D,对于每个仅包含一个mask token的序列z以及 w \in V ,M(w|z) 表示语言模型将w分配在mask位置的未归一化的概率,给定输入x,我们定义标签l的分数为:

经过softmax之后的归一化概率为:

我们使用 q_p(l|x) 和真实的one-hot分布之间的交叉熵损失去训练样本(x,l),总损失为所有样本的损失之和。

Auxiliary Language Modeling

由于只有一小部分训练样本,因此可能导致灾难性遗忘,而预训练语言模型的核心仍然是语言模型,因此作者使用语言模型作为辅助任务; L_{CE} 表示交叉熵损失, L_{MLM} 表示语言模型的损失,最终的损失为:

Combining PVPs

对于这种方法的一个挑战是,很难辨别那种PVPS表现的更好,因此作者选择了一种类似于知识蒸馏的策略。首先作者定义在任务A上直觉上能够有效的一组PVP的集合P,并按照下述方式使用这些PVP:

  • 对于集合P中的每种p,都微调一个单独的语言模型 M_p ,由于只有少量样本,因此这个过程的成本并不高;
  • 使用上述微调之后的模型的综合来标注D中未标注的数据;首先结合每个样本未归一化的类分数:

其中 w(p) 表示每个PVP的权重。作者使用两种方法进行w(p)的选择,一种是给予同样的权重,另一种是根据每个模型在训练集上的准确率分配权重。之后经过一个softmax,并使用一个温度系数获得一个合适的软分布;最终所有已标注的数据包含在训练集 T_C 中;

  • 再使用上述得到的数据集 T_C 微调一个PLM

Iterative PET(iPET)

将所有单个模型的知识提炼成一个单一的分类器,意味着它们不能相互学习。 由于一些模式的表现(可能比其他模式差得多),因此最终模型的训练集可能包含许多错误标记的例子。

作者因此提出了PET的一种变体:首先用已训练的PET模型的一个随机子集来标注D中的数据,以扩充原始的数据集 \tau ;接着在扩充之后的数据集上训练新的PET模型;最后重复这个过程n次。

具体来说, M^0=\{M_1^0,...,M_n^0\} 是在 \tau 上微调的初始PET模型集合;而 M_i^0 表示在 p_i 上训练的模型;接着我们训练k个模型 M^1,...,M^k 集合,每个模型集合有其自己的训练集 T_i^j ;在每个迭代环节,将训练集的大小扩充为之前的d倍,其中d是一个常数,扩充之后的数据集仍保持之前的标签比例;

在扩充数据集的时候,为了尽可能避免生成错误标注的数据,作者倾向于相信置信度高的样例,即生成时概率更高的样本会被选入新的数据集;在经过k轮迭代之后,使用 M_k 创造训练集 T_C ,并最终训练一个分类器。

Experiments

patterns

对于不同的任务,作者会设计不同的模板,例如对于Yelp数据集的相关任务,作者设计的模板如下:

而对于AG's News,作者设计的模板如下:

results

主实验结果,在不同数量样本集下的结果
相比一些半监督sota的结果
跨语言的结果
单独模式选择与综合模式的结果
添加辅助任务对于精确率的提升
n次迭代过程的准确率变化
预训练对于准确率的提升

Conclusions

作者表明,为预训练的语言模型提供任务描述可以与标准的监督训练相结合。作者提出的方法 PET 包括定义成对的完形填空题模式和语言表达器,它们有助于将预训练语言模型中包含的知识用于下游任务。作者为所有模式-语言表达器对微调模型,并使用它们来创建可以训练标准分类器的大型注释数据集。当初始训练数据量有限时,PET比标准监督训练和强半监督方法有很大的提升。

编辑于 2021-08-21 15:35