论文来源:ACL 2022
论文地址:https://arxiv.org/pdf/2203.09770.pdfhttps://arxiv.org/pdf/2203.09770.pdf
论文代码:https://github.com/thunlp/OpenPrompthttps://github.com/thunlp/OpenPrompt
Abstract
基于提示的预训练语言模型(pre-trained language models, PLMs)调优已经在小样本学习中显示出其优越性。通常,基于提示的调优将输入文本包装成完形填空问题,为了做出预测,模型通过人工设计或者自动构建的表达器(verbalizer)将输出的单词映射到标签上。但是,人工表达器严重依赖于特定领域的先验知识,而自动寻找合适的标签仍然具有挑战性。本文提出了直接从训练数据中构建的原型表达器(ProtoVerb)。具体来说,ProtoVerb通过对比学习将学到的原型向量作为语言表达器。通过这种方式,原型归纳了训练实例,并能够包含丰富的类级别语义。本文对主题分类和实体分类任务进行了实验,结果表明,ProtoVerb显著优于当前的自动生成的表达器,特别是在训练数据极其稀缺的情况下。更令人惊讶的是,即使在未调优的PLM上,ProtoVerb也始终支持基于提示的调优,这表明使用PLM是一种优雅的非调优方式。
Introduction
为了使PLMs适应下游任务,如分类,传统方法通过一个额外的分类器对语言模型进行微调,但是当特定任务的数据有限时,由于预训练任务和微调任务之间的差距,训练额外的高效分类器具有挑战性,并阻碍了PLMs对下游任务的快速适应。
在基于提示的调优中,输入文本被特定任务的模板包装,将原始任务重新形式化为完形填空任务。例如,在主题分类任务中,可以使用模板"<text> This topic is about [MASK]",PLMs推断[MASK]位置的单词,然后通过语言表达器将单词映射到对应的标签。语言表达器在基于提示的调优中是非常重要的,是建立在模型输出和最终预测结果之间的桥梁。
目前大多数工作采用三种类型的语言表达器:人工表达器、基于搜索的表达器和软表达器。如Figure 1所示,人工设计的表达器选择一些标签词来描述类,缺点是要求设计者对下游任务有准确的理解,并且每个类能够用几个词来概括;基于搜索的表达器是通过算法从词表中找到合适的标签词;软表达器使用可训练的token在调优阶段进行优化。在大型词汇表或者低数据环境下的嵌入空间中进行充分搜索或者优化是具有挑战性的,使得自动表达器比人工表达器更不理想。
本文直接通过训练实例计算每个类的原型向量作为语言表达器(封装了一些类级别的语义特征)进行基于提示的调优,并对主题分类和实体分类任务进行了两组实验:当人工表达器可用时,ProtoVerb作为一个额外的表达器;当样本有限,不提供人工表达器时,ProtoVerb也能生成高质量的表达器。
**对比学习:**是一种自监督学习方法,用于在没有标签的情况下,通过让模型学习哪些数据点相似或不同来学习数据集的一般特征。
Prototypical Verbalize
如Figure 2所示,首先获取[MASK]的隐藏层状态来表示实例,然后将其映射到另一个嵌入空间进行原型学习。 原型被用作预测的语言表达器
Instance Representation and Similarity Function
给定一个用模板包装的训练文本x,将[MASK]的最后一层隐藏状态作为文本的初始表示,使用被参数化的编码器,将x的实例表示为。然后,采用权重为W的线性编码器来度量实例之间的余弦相似度。
Loss Function
两个目标:对于实例对,类内对应该比类间对获得更高的相似度分数;对于实例-原型对,类n的实例与原型之间的相似度得分应该高于与其他类实例之间的相似度得分。 为此,基于对比学习中的InfoNCE损失定义目标函数:
Inference
计算查询实例与原型之间的相似度分数,
然后通过argmax函数做预测。
当存在其他的表达器时,首先用一个标准标量来处理不同语言表达器的logits,然后取分数的平均值得到最终分数。
Experiments
Single Verbalizer Results:
Multiple Verbalizer Results: