1. Exploiting Cloze Questions for Few Shot Text Classifification and Natural Language Inference
论文:https://arxiv.org/pdf/2001.07676v3.pdf
代码:https://github.com/timoschick/pet
摘要
监督学习依赖于大量的有标签数据,而大多数NLP任务的有标签数据都是有限的,这使得小样本学习变得十分重要。论文提出了一种半监督的训练过程,制定了一些模板(大多是对任务的文本描述)将有标签数据的输入设计成完形填空的形式,使用预训练语言模型预测填空内容,给大量的无监督数据学习到软标签,打上软标签的数据作为监督数据再进行下游任务的训练。
方法介绍
记原始输入为(其中k是序列的个数,如输入是一个文本对,k=2),模板pattern是一个函数,它将输入映射为只含一个mask token的文本
再定义一个verbalizer为一个函数, 它将每个真实标签()映射为模型词表里的一个单词
我们将一对作为pattern-verbalizer pair (PVP)
举例:
x=("Mia likes pie", "Mia hates pie"); P(x)="Mia likes pie? [mask], Mia hates pie."
真实标签,;,,这里的也就是预训练语言模型对[mask]可能的预测结果。
数据集
- 有标签的训练集,预训练语言模型在这个训练集(输入转换为完形填空形式)上预测mask token,也就是学习软标签
- 无标签数据集(比大得多),训练好的模型给这个数据集打软标签,打上软标签后的数据集作为下游任务的训练集
PVP训练和预测
给定一个PVP 和一个输入, 模型给标签预测的score 和所有标签的概率分布如下:
模型结合交叉熵损失和MLM损失作为最终损失:
多个PVP的结合
该方法的一个难点,由于验证集数量较少,难以决定哪个模板的表现较好。基于此,论文提出了一种结合多个PVP的策略。对于每个模板在训练集上训练一个模型,每个给无标签数据集的一个数据预测一个分数,而的最终分数是所有模型分数的加权平均:
这里是每个模型分数的权重,论文给出了两种实现方法:
- uniform: 对于每个都有
- weighted: 是在训练之前 (zero-shot),模型使用模板在训练集上得到的准确率
打上软标签后的数据集作为训练数据()来微调一个分类器(对于分类任务),作为任务的最终目标模型
Iterative PET (iPET)
由于不同模板的表现有所差异,如某个模板相比其他模板表现较差,上述方法将这些模板独立开来,而无法互相学习,可能会造成较多的错误标注的软标签。iPET就是为了解决这个问题,中心思想是在逐次增多的数据集上迭代模型。具体过程如下图所示:
模型(对应训练集为)中指的是第个PVP (),指的是迭代次数,第0次迭代模型在有标签训练集上训练,之后每次迭代,增加的数据从打上软标签的数据里随机抽取,使得训练集大小都是前一次迭代训练集大小的d倍(保持训练集中标签分布不变);每次迭代都从现有的个模型中随机选取个()做结合,经过次迭代后产生的软标签数据集作为最终分类器的训练集。
2. Knowledgeable Prompt-tuning: Incorporating Knowledge into Prompt Verbalizer for Text Classifification
论文:https://arxiv.org/pdf/2108.02035.pdf
摘要
提示学习的基本思想是在输入文本中插入一些模版(如完形填空的形式),将下游的分类任务转换为mask language modeling任务,预测模板中被mask的tokens。其中的关键过程是如何将预测出的文本(作为软标签)映射为分类任务的真实标签,这个映射过程称为verbalizer。一般通过手动设计或梯度下降法优化得到的verbalizer覆盖面不够广,可能带来偏差和结果上的巨大差异。基于此,论文提出在verbalizer中整合额外的知识库信息扩充软标签,并在预测之前优化软标签来提升提示学习的表现。实验证明基于知识的提示学习(KPT: knowledgealbe prompt-tuning)在小样本和零样本的分类任务上都取得了较好的表现。
方法介绍
记为一个预训练语言模型, 是输入序列, 是加入模板后的输入序列 (带[MASK] token),对于一个二分类问题,真实标签=SCIENCE, =SPORTS, 每个标签的概率计算为
其中是预训练语言模型词表中的词,是所有软标签的集合,是其中映射为真实标签的软标签,函数将软标签的概率映射为真实标签的概率。
KPT方法主要分为一下3个过程:1. 利用知识库生成多个软标签;2. 进一步提升软标签的质量;3. 平均或加权平均多个软标签的结果做最终预测。接下来对这几个过程做详细介绍。
Verbalizer Construction
软标签需要有两个性质:覆盖面广和少的主观偏见。而结构化知识可以同时满足这两个条件。
对于主题分类,希望捕捉到和主题相关的软标签,论文采用知识图谱Related Words作为额外的知识库。图谱中的edge由软标签和主题之间的相关性分数来表示。对于主题(图谱中的一个anchor node),将相关性分数大于某个阈值的词作为该主题词的相关词 (图谱中node 的neighborhood nodes ),得到每个真实标签对应的软标签V_y=N_G(v)\cup \{v\}。
对于二分类的情感分类,目标是得到尽可能多的表达正面和负面情绪的词。论文采用了前人总结的sentiment dictionary作为知识库。
Verbalizer Refinement
上一步通过知识库得到了较全面的软标签,接下来要对这些词作进一步的筛选,保留高质量的词,去除不太相关的词。对于零样本和小样本有不同的优化方法。
- 对于零样本
有三个问题需要解决:
1) 一些软标签不在模型的词表里(out-of-vocabulary),但这些词仍能提供一些信息,所以不能完全去除。对于这些词,对它们tokenize后得到的每个token的概率取平均作为它们本身的概率。
2) 一些知识库中的词在模型词表中比较少见,所以模型对这些词的预测可能不准确。论文采用软标签词的contextualized先验来移除这些词。记语料中输入句子的分布为,对于加入模板后的输入,软标签在[MASK]位置的概率为。取所有句子预测概率的期望作为软标签出现在[MASK]位置的先验分布:
可以通过一个小的无标签数据集(从训练集中抽样,移除它们的标签)可以得到以上期望的近似值 (假设有均匀先验分布)。这样,我们可以移除先验概率低于某阈值的软标签词。
3) 第三个问题是软标签先验概率的巨大差异,导致很多软标签相对其他的更不可能被预测到。论文采用软标签的contextualized先验对预测结果的分布作一个校准, 这个方法称为contextualized calibration (CC):
- 对于小样本
首先移除那些可以被拆分成多个tokens的软标签,因为它们在目标函数中更难处理。为了处理那些有噪声的软标签,给每个软标签一个可学习的权重(初始化为0),被归一化为
直觉上来说,在训练过程中,这些noisy软标签会学习到一个小的权重。
Verbalizer Utilization
最后一步是怎么把优化后的软标签映射为对应的真实标签,也就是映射函数。
对于零样本,可以假设一个类的每个软标签对预测真实标签的贡献是相等的。所以,可以采用上预测得分的平均值作为标签的预测得分。
对于小样本,采用软标签分数的加权平均作为最终的预测得分,权重为\alpha_i。
可以通过对预测概率应用交叉熵损失来进行分类模型的最终优化。
3. GPT Understands, Too
论文:https://arxiv.org/pdf/2103.10385.pdf
代码:https://github.com/THUDM/P-tuning
摘要
传统的通过微调的GPTs在natural language under�standing (NLU)任务上相对BERTs型的预训练语言模型来说表现不好。虽然GPT-3利用手动设计的prompt在小样本和零样本学习上取得了一定成果,但是要找到一个表现好的prompt需要巨大量的验证集,也常常会在测试集出现过拟合。也有研究尝试自动寻找离散的prompts,但神经网络本质上是连续的,离散的prompts往往不会是最优解。论文提出了P-tuning方法,利用可训练的连续的prompt embeddings,通过梯度下降优化连续的prompts。使用了P-tuning的GPTs模型在NLU任务上达到了可比拟BERT模型的表现,也对BERT模型在小样本和监督学习上的表现有所提升。
方法介绍
P-tuning方法将预训练语言模型的input embeddings替换成它的可微的output embeddings.
给定预训练语言模型(词表为), 一个离散的输入序列经过模型的embedding层后为。提示学习利用模板将原始输入、目标输出和prompts都整合到一起,如:
模板= "The capital of Britain is [MASK]." 其中
prompt = "The capital of ... is ..." (是模板里第个prompt token); = "Britain"; = "[MASK]"
对于, 传统的离散prompts(事先定义好的)会被映射为
而P-tuning将视为伪tokens(可以是词表里的[unused] token),并将模板映射为
是可训练的embeddings。利用下游任务的损失函数,可以优化这些, 也就是说连续的prompts不一定是真实存在的词,而是通过训练,得到的最优token embedding.
论文提出利用一个prompt编码器,将作为一个输入序列,通过训练编码器来更新这些伪tokens的embeddings