首页 > 其他分享 >【提示学习】Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference

【提示学习】Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference

时间:2023-04-22 19:42:12浏览次数:57  
标签:PVP Shot Language Classification PET 模型 样本 训练 iPET


论文信息

名称

内容

论文标题

Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference

论文地址

https://arxiv.org/abs/2001.07676

研究领域

NLP, 文本分类, 提示学习, PET

提出模型

PET(Pattern-Exploiting Training)

来源

EACL2021

阅读摘要

  目前流行的第四大范式Prompt的主流思路是PVP,即Pattern-Verbalizer-Pair,主打的就是Pattern(模板)与Verbalizer(标签映射器)。

  本文基于PVP,提出PETiPET,但是关注点在利用半监督扩充自己的数据集,让最终模型学习很多样本,从而达到好效果

  PET: Pattern Exploiting Training ,是一种半监督学习方法,应用于 few-shot learning ,流程为:

  1、训练PVP模型(prompt,supervised):对每一种 prompt pattern,使用单独的 PLM 在 有标签数据集 上微调得到多个「PVP模型」。
  2、在这个过程中,Task Description(textual explanation) 可以让模型了解任务,利用预训练得到的先验知识和mlm参数,所以更加适合小样本学习。
  3、样本扩充:使用得到「PVP集成模型」 给 无标注数据集 打标,生成对应的 soft label,组成完整的有标注数据。

  iPET: iterative variant of PET,一种PET的迭代变体,用于迭代式扩充「prompt模型」的训练集,来增加模型效果。

[0] 摘要

  GPT可以通过提供带有自然语言“任务描述”的输入,以完全无监督的方式解决一些问题,但是它没有有监督的方法效果好。基于此,论文引入了PET,先用无监督给数据答标签,再用有监督学习最终分类模型,这是一种半监督的训练过程,将输入转化为完形填空任务的形式。

[1] 介绍

  标准的监督学习方法,比如预训练+微调,直接应用在小数据集上通常表现很差;只看少量样本,让模型去抓住任务的重点是很难的。论文举例了情感分类任务的三个句子:

  T1:这是我吃过最好吃的披萨。
  T2:你可以半价获得更好的寿司。
  T3:披萨一般。不值得这个价钱。

  如果T1和T2分别是标签A和B,现在问T3的标签。仅仅基于这俩样本进行判断几乎不可能,因为貌似正例的判断在T1、T2中都能找到(best better),然而如果我们提前知道此任务是讨论关于价格的,我们很轻易地可以给T3赋个B。这证明了当任务只有少量样本时,我们可以使用任务描述来使事情更加容易。

【提示学习】Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference_PET

  PET情感分类工作流程:1.准备许多模板/任务描述,这些模板将训练文本转化为完形填空;对于每一个模板,微调一个独立的预训练模型;2.集成上一步的所有模型,对无标签数据进行标注,得到softlabel;3.在这些带soft label的数据上训练标准分类器;

  论文也发明了iPET,一个迭代的PET变体,iPET使用不断增加的训练数据集重复上述过程;在众多任务里面,给定小到中等规模的标注数据集,PET和iPE都大大超过了无监督方法、有监督方法和强的半监督baseline;

[2] 相关工作

  GPT启发了PLM的零样本学习。

  已经有使用完形填空任务的论文证明PLM具有成熟的知识量。

  其它关于NLP中few-shot learning的工作包括探索与任务相关的数据,如数据增强。

  iPET背后的思想是,训练很多版本的模型,当前模型使用的标注数据是之前版本模型标注的,类似于自训练和自助法。

[3] PET

  首先介绍了一下PVP模式的基本流程,可以参考KPT论文笔记的3.1小节的解释。

  辅助语言模型

【提示学习】Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference_学习_02;2)计算整个MLM任务的损失,为【提示学习】Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference_深度学习_03;3)最后加权相加。源码如下:

def mlm_train_step(self, labeled_batch: Dict[str, torch.Tensor],
                       unlabeled_batch: Optional[Dict[str, torch.Tensor]] = None, lm_training: bool = False,
                       alpha: float = 0, **_) -> torch.Tensor:
        """Perform a MLM training step."""

        inputs = self.generate_default_inputs(labeled_batch)
        mlm_labels, labels = labeled_batch['mlm_labels'], labeled_batch['labels']

        outputs = self.model(**inputs)
        prediction_scores = self.preprocessor.pvp.convert_mlm_logits_to_cls_logits(mlm_labels, outputs[0])
        # 计算[MASK]位置上的交叉熵损失
        loss = nn.CrossEntropyLoss()(prediction_scores.view(-1, len(self.config.label_list)), labels.view(-1))

        if lm_training:
            lm_inputs = self.generate_default_inputs(unlabeled_batch)
            lm_inputs['masked_lm_labels'] = unlabeled_batch['mlm_labels']
            # 计算MLM任务的交叉熵损失
            lm_loss = self.model(**lm_inputs)[0]
            # 加权相加
            loss = alpha * loss + (1 - alpha) * lm_loss
        return loss

  PVPs组合

【提示学习】Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference_深度学习_04

  一个比较大的挑战是没有较大的验证集,所以很难判断哪些PVP表现更好;思路有点像知识蒸馏(学习集成模型的软label就是蒸馏的思想),把多个Pattern的模型结合起来。

  模板结合过程,3步,参考上图(1)(2)(3):

  1.为每个模板(PVP)微调一个单独的预训练模型,这个成本很低;

  2.通过加权的方式,集成1中所有模型,对无标注样本打softlabel ;Z为归一化因子,w为每个PVP的权重,w要么全设置为1,要么设置为1中训练集的acc,分别命名为uniform和weighted使用softmax归一上面的score,这里的softmax带温度T,T=2(知识蒸馏里经常这么干)。

【提示学习】Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference_学习_05

  3.基于2中的产生的伪标签样本微调预训练模型C。

  iPET

  有些模板表现很差,可能会导致Tc中有很多误标的样本;可以让(1)中的M相互学习,克服上述问题;iPET的核心是不断增加数据量,训练多个版本的模型;训练集扩大d倍,同时保持正负类别比例保持不变;

  iPET过程:

  (a)对于任意一个模型,其它模型对无监督数据集D的一个子集进行标注,产生的样本被扩充到T,然后用来在(b)中训练当前模型;(相互学习)M02和M03标注了一部分D,再加上T,得到T11,T11用来在(b)中训练M11(b)如上所述,基于新的被扩充的数据集,再训练模型;(c)重复(a)(b)k次,每次数据集扩充d倍;

[4] 实验

  5个数据集。所有实验都使用RoBERTa large模型。因为没有足量验证集来调参,所以参数的设置依赖以前的经验。

【提示学习】Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference_学习_06

  1、2行中的unsupervised表示直接构建好PVP进行预测,没有经过任何训练,avg表示取所有PVP的均值,max表示取PVP中在测试集表现最好的。可以看到,不同PVP之间的差距是很大的

  4、5、6行显示,只使用了10个示例进行标准微调,效果非常差,使用PET可以获得最大60%的提升,iPET还可以进一步提升性能。

  7-12行显示:增加训练集大小,PET和iPET的性能增益变小,但对于50和100个示例,PET还是明显优于标准监督训练(行8 vs行7,行11 vs行10),iPET(行9,行12)也优于PET。

  13~14行显示,当训练样本更大,1000份时,PET相对于直接监督微调提升没有那么明显,但仍然可能会有一些提升。

【提示学习】Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference_PET_07

  PVP集成方面的消融实验:10个样本下,最好的、最差的模板指标情况分布如前两行;蒸馏能够提升一些效果,同时也能较大地降低模型sizeuniform和weighted的集成区别不大,weighted更好一些。


标签:PVP,Shot,Language,Classification,PET,模型,样本,训练,iPET
From: https://blog.51cto.com/u_15942590/6215454

相关文章

  • 自然语言处理(Natural Language Processing,NLP)简要
    自然语言处理(NaturalLanguageProcessing,NLP)简要一、发展状况二、发展优势三、发展瓶颈四、具体研究方向五、自然语言处理工具六、未来发展方向自然语言处理(NaturalLanguageProcessing,NLP)是计算机科学和人工智能领域的一个重要研究方向,其目的是使计算机能够理......
  • 18c新特性——PDB snapshot Carousel 快照轮转
    一、关于PDB快照轮转18c新特性PDB快照轮转(SnapshotCarousel)提供了在pdb级别下手工或者自动生成快照的功能。PDB快照主要有两个作用:通过闪回恢复数据到快照时间点使用快照PDB查询历史数据CDB需要使用localundo并处于归档模式下。每个PDB快照都会关联一个快照名称,可以在创建时定义......
  • how to create one command line configuration tool with shell language on Linux A
    howtocreateonecommandlineconfigurationtoolwithshelllanguageonLinuxAllInOne如何在Linux上用shell语言创建一个命令行配置工具RaspberryPiconfigurationtool$sudoraspi-config#等价于,直接修改$sudovim/boot/config.txt$DISPLAY#设......
  • 论文解读( FGSM)《Adversarial training methods for semi-supervised text classificat
    论文信息论文标题:Adversarialtrainingmethodsforsemi-supervisedtextclassification论文作者:TaekyungKim论文来源:ICLR2017论文地址:download 论文代码:download视屏讲解:click1 背景1.1 对抗性实例(Adversarialexamples)通过对输入进行小扰动创建的实例,可显著增加机器......
  • 重构之Divergent Change(发散式变化)&Shotgun Surgery (散弹式修改)
    重构之DivergentChange(发散式变化)&ShotgunSurgery(散弹式修改) 5.DivergentChange发散式变化描述:一个类被锚定了多个变化,当这些变化中的任意一个发生时,就必须对类进行修改。解释:一个类最好只因一种变化而被修改操作:你应该找出某特定原因而造成的所有变化,然后运用ExtractCl......
  • MULTIINSTRUCT: Improving Multi-Modal Zero-Shot Learning via Instruction Tuning
    指令调优是一种新的学习范式,它可以根据指令指定的任务对预先训练好的语言模型进行微调,在各种自然语言处理任务中显示出良好的零目标性能。然而,对于视觉和多模态任务,它仍然没有被探索。在这项工作中,我们介绍了multiinstruction,这是第一个多模态指令调优基准数据集,由47个不同的多模......
  • 迁移学习《Cluster-Guided Semi-Supervised Domain Adaptation for Imbalanced Medica
    论文信息论文标题:Cluster-GuidedSemi-SupervisedDomainAdaptationforImbalancedMedicalImageClassification论文作者:S.Harada,RyomaBise,KengoAraki论文来源:ArXiv2March2023论文地址:download 论文代码:download视屏讲解:click1摘要一种半监督域自适应方法,......
  • 2018-ICML-Understanding and Simplifying One-Shot Architecture Search(论文阅读)
    文章目录前言一、总体介绍二、方法(One-ShotArchitectureSearch)1.SearchSpace设计2.训练one-shot模型3.评估候选结构4.最终模型选择与训练三、One-Shot模型实验1.DropoutRate的影响2.实验结果对比四、理解One-shot模型前言本文重在探究为什么One-Shot模型中的权重能被......
  • Ubuntu系统Flameshot使用问题
    Ubuntu系统Flameshot使用问题系统:Ubuntu22.04问题:使用Flameshot,每次都会先截取整个屏幕,提示需要先分享,再使用Flameshot的功能安装Flameshotsudoaptinstallflameshot先说解决方案开机用户登录时,右下角有设置桌面环境,默认是Ubuntu,修改为UbuntuonXorg问题使用Flame......
  • Headshot UVA - 1636
     #include<iostream>#include<vector>#include<cstring>#include<algorithm>usingnamespacestd;constintN=104;strings;voidsov(){ inti; intlen=s.size();s+=s; inta=0,b=0; for(i=0;i<=len;i++){ if(......