现代自然语言处理中的零投篮学习

2020-06-03 01:48:46

目前,自然语言处理是一个非常令人兴奋的领域。近年来,社区已经开始从互联网上可用的大量未标记数据中找出一些相当有效的学习方法。从无监督模型中迁移学习的成功使我们在下游监督学习任务上几乎超过了所有现有的基准。随着我们不断开发新的模型架构和无人监督的学习目标,对于有大量标签数据可用的许多任务来说,最先进的技术仍然是一个快速移动的目标。

随着模型的不断增长,一个主要优势是我们看到下游任务对大量带注释的数据的依赖程度下降得非常缓慢。本周,Open AI的团队发布了一份预印本,描述了他们迄今最大的模型GPT-3,参数为1750亿。这篇论文的标题是,语言模型是少之又少的学习者,并表明极大的语言模型可以在下游任务中具有竞争力地执行,而任务特定的数据远远少于较小的模型所需的数据。

然而,这种大小的模型对于现实世界的使用仍然是不切实际的。例如,最大版本的GPT-3必须跨数十个GPU分区才能放入内存。在许多实际设置中,带注释的数据要么很少,要么完全不可用。比GPT-3小得多的模型,如伯特,仍然被证明在它们的权重中编码了大量的信息(Petroni等人。2019年)。看起来,如果我们聪明的话,我们就能够想出一些技术来将这些模型应用到下游任务中,这样就可以利用这些潜在信息,而不需要这么多特定于任务的注释数据。

当然,在这方面其实已经做了一些研究。在这篇文章中,我将介绍一些技术,这些技术来自已发表的研究和我们自己的拥抱脸实验,这些技术使用最先进的NLP模型进行序列分类,而不需要大量的注释训练集。

传统上,零机会学习(ZSL)最常指的是一种相当具体的任务类型:在一组标签上学习分类器,然后在分类器以前从未见过的另一组标签上进行评估。最近,特别是在NLP中,它被更广泛地用来表示让一个模型去做它没有明确训练过的事情。这方面的一个众所周知的例子是在GPT-2论文中,作者评估了下游任务(如机器翻译)的语言模型,而不直接对这些任务进行微调。

定义并不那么重要,但理解这个术语的用法不同是很有用的,因此在比较不同的方法时,我们应该注意理解实验设置。例如,传统的零机会学习需要提供某种描述符(Romera-Paredes等人。2015)用于看不见的类(诸如一组视觉属性或简单的类名),以便模型能够在没有训练数据的情况下预测该类。了解不同的零触发方法可能采用不同的规则来确定允许使用哪种类描述符,这在交流这些技术时提供了相关的上下文。

在计算机视觉设置中零镜头学习的常见方法是使用现有的特征器来将图像和任何可能的类名嵌入到其相应的潜在表示中(例如Socher等人。(2013年)。然后,他们可以获取一些训练集,并且仅使用可用标签的子集来学习线性投影以对齐图像和标签嵌入。在测试时,这个框架允许人们将任何标签(可见或不可见)和任何图像嵌入到相同的潜在空间中,并测量它们的距离。

在文本域中,我们的优势在于可以简单地使用单个模型将数据和类名嵌入到同一空间中,从而消除了需要大量数据的对齐步骤。这并不是一种新技术--研究人员和实践者以类似的方式使用汇集的词向量已经有一段时间了(如Veeranna等人)。2016)。但最近我们看到句子嵌入模型的质量有了很大的提高。因此,我们决定用语句-BERT进行一些实验,这是一种最近的技术,它微调了汇集的BERT序列表示,以增加语义丰富,作为获得序列和标签嵌入的一种方法。

为了形式化,假设我们有一个嵌入模型$\phi_\text{send}$和一组可能的类名$C$的序列。我们根据给定的序列$x$进行分类,

$$\hat{c}=\arg\max_{c\in C}\cos(\phi_\text{send}(X),\phi_\text{send}(C))$$其中$\cos$是余弦相似度。下面是一个示例代码片段,它显示了如何使用语句BERT作为我们的嵌入模型$\phi_\text{send}$:

#从HuggingFace模型集线器加载语句-BERT模型!PIP安装来自变压器的变压器导入AutoTokenizer,AutoModel from torch.nn import function as F tokenizer=AutoTokenizer。FROM_PRESTED(';深度集/语句_BERT&39;)模型=自动模型。FROM_PRESTED(';深集/语句#伯特)语句=';2020年您将投票给谁?';labels=[';business';,';art&;Culture&39;,';Political&39;]#在序列#维上通过模型和均值池运行输入,以获得序列级别的表示INPUTS=TOKENNIZER。Batch_encode_plus([语句]+Labels,Return_Tensor=';pt';,pad_to_max_length=True)input_ids=input[';input_ids';]Attribute_ask=input[';Attribute_ask';]output=model(input_ids,Attribute_MASK=Attribute_MASK)[0]语句_rep=OUTPUT[:1]。Mean(DIM=1)LABEL_REPS=OUTPUT[1:]。均值(dim=1)#现在找出与#句子相似度=F具有最高余弦相似度的标签。余弦_相似性(语句_表示,标签_表示)最近=相似性。用于Ind in Close:Print(f';Label:{Labels[Ind]}\t相似性:{相似性[Ind]}';)的argSort(Downending=True)。

注意:此代码片段使用深集/语句_BERT,它是S-BERT模型的最小版本。我们的实验使用了更大的模型,这些模型目前只在句子转换器GitHub repo中提供,我们希望很快就能在拥抱脸模型中心提供。

这种方法的一个问题是,语句-BERT被设计为学习有效的句子级,而不是像我们的类名那样的单个或多个单词表示。因此,可以合理地假设我们的标签嵌入可能不像流行的词级嵌入方法(即word2vec)那样在语义上显著。这在下面的t-SNE可视化中可以看到,其中数据似乎按类别(颜色)很好地聚集在一起,但标签对齐得很差。然而,如果我们使用词向量作为标签表示,我们将需要带注释的数据来学习S-BERT序列表示和word2vec标签表示之间的比对。

在我们自己的一些内部实验中,我们通过以下程序解决了这个问题:

以word2vec模型词汇表中出现频率最高的$K$最频繁的单词$V$为例。

因为我们只学习了嵌入单个单词的这个投影,所以我们不能期望它学习S-BERT序列表示和嵌入word2vec的标签之间的有效映射。相反,我们在分类中仅将$Z$用作序列和标签的S-BERT嵌入的附加转换:

$$\hat{c}=\arg\max_{c\in C}\cos(\phi_{\text{send}}(X)Z,\phi_{\text{send}}(C)Z)$$此过程可视为一种降维。如下面的t-SNE可视图所示,该投影使标签嵌入与其对应的数据簇更好地对齐,同时保持了S-BERT与汇集的字向量相比的卓越性能。重要的是,除了按词频排序的word2vec词典之外,此过程不需要任何额外数据。

在Yahoo Answers主题分类任务中,我们发现在有和没有这个预测步骤的情况下,F1分别为$46.9$和$31.2$。在上下文方面,Yahoo Answers有10个类别,监督模型在70年代中期达到了准确率。

这种技术是灵活的,很容易适应这样的情况,即有限数量的标签数据可用(少镜头学习),或者我们只有我们感兴趣的类的子集的注释数据(传统的零镜头学习)。

要做到这一点,我们可以简单地从任何可用标签的对应数据嵌入中学习附加的最小二乘投影矩阵来嵌入任何可用标签。然而,重要的是,我们这样做的方式不能过度适应我们有限的数据。我们的嵌入本身执行得很好,所以我们需要在它们之间找到一个投影,该投影可以从我们拥有的训练数据中学习,同时仍然利用这些表示的丰富语义。

为此,我们添加了L2正则化的变体,它将权重推向单位矩阵,而不是降低它们的范数。如果如上所述定义$X_{Tr},Y_{Tr}$作为我们的训练数据和标签,并且定义$\Phi(X)=\Phi_\Text{Sent}(X)Z$作为我们的嵌入函数,则我们的正则化目标是,

$$W^\ast=\arg\min||\Phi(X)^\top W-\Phi(Y)||^2+\lambda||W-\mathbb{i}_d||^2$$这等效于以单位矩阵为中心的权重和由$\lambda$控制的方差的高斯先验的贝叶斯线性回归。通过将$W$推向单位矩阵,我们有效地将得到的投影嵌入$\Phi(X)W^\ast$推向$\Phi(X)$,这正是我们想要做的。非正式地,我们先前认为数据的最佳表示是我们的嵌入函数$\phi(X)\mathbb{i}_d=\phi(X)$,并且我们仅在遇到更多训练数据时才更新该信念。

我们现在将探索另一种方法,它不仅将序列和标签嵌入到相同的潜在空间中,在那里它们的距离可以测量,而且实际上可以告诉我们一些关于两个不同序列开箱即用的兼容性。

作为快速回顾,自然语言推理(NLI)考虑两个句子:A";前提";和一个";假设";。任务是确定假设是真(蕴涵)还是假(矛盾)。

当使用像BERT这样的转换器架构时,NLI数据集通常通过序列对分类来建模。也就是说,我们将前提和假设作为不同的片段一起通过模型,并学习预测[矛盾,中性,蕴涵]之一的分类头。

该方法是由殷等人提出的。(2019),使用预先训练的MNLI序列对分类器作为开箱即用的零命中文本分类器,实际上工作得很好。这个想法是把我们对标签感兴趣的序列作为前提,然后把每个候选标签变成一个假设。如果NLI模型预测前提包含这个假设,我们就认为这个标签是正确的。请参见下面的代码片段,该代码片段演示了使用🤗转换器可以多么容易地实现这一点。

#在来自变压器的MNLI上预先训练的负载模型导入BartForSequenceClass,BartTokenizer tokenizer=BartTokenizer。FROM_PRESTED(';BART-LARGE-mnli&39;)model=BartForSequenceClass。FROM_PRESTED(';BART-LARGE-MNLI&39;)#将序列设置为NLI前提,将(政治)标记为假设前提=2020年您将投票给谁?';假设=#39;这篇文章是关于政治的。';#在MNLI INPUT_IDS=TOKENZER上运行预先培训的模型。编码(前提,假设,返回_张量=';pt';)logits=model(Input_Ids)[0]#我们丢弃";中性&34;(Dim 1),并取#";蕴涵&34;(2)的概率作为标签为真的概率entail_conflicent_logits=logits[:,[0,2]]pros=entail_conflatient_logits。Softmax(dim=1)TRUE_PROB=PROBS[:,1]。Item()*100打印(f';标签为真的概率:{TRUE_PROB:0.2F}%';)。

在这篇论文中,作者报告了在Yahoo Answers上使用最小版本的BERT仅在多流派NLI(MNLI)语料库上微调的标签加权F1为37.9美元。只需使用在MNLI上预先培训的更大、更新的BART模型,我们就能够将这一数字提高到53.7美元。

点击这里观看我们的现场演示,亲身体验一下吧!输入您想要分类的序列和任何感兴趣的标签,并实时观看BART的魔术表演。

在少量带注释的数据点上对此模型进行微调是无效的,因此它不是特别适用于少数情况下的设置。然而,在传统的零镜头设置中,我们只有有限数量的类有足够的数据,这个模型表现出色。训练可以通过将序列传递给模型两次来完成:一次使用正确的标签,一次使用随机选择的错误标签,从而优化交叉熵。

微调后出现的一个问题是,模型预测它看到的标签的概率比没有看到的要高得多。为了缓解这个问题,作者介绍了一种程序,该程序在测试时惩罚在培训时看到的标签。有关详细情况,请参阅该报。

查看我们的演示,尝试在Yahoo Answers上微调的这个模型的一个版本。你也可以在这里找到作者GitHub的回帖。

让你关注的一个正在进行中的方法是Schick等人关于模式开发培训(PET)的预印本。(2020)。在本文中,作者将语篇分类重新定义为完形填空任务。完形填空问题考虑的是被部分屏蔽的序列,并且需要根据上下文预测缺失值。PET需要人类实践者构建几个适合任务的完形填空样式模板,在主题分类的情况下,这些模板可能如下所示:

然后,预先训练的掩码语言模型的任务是从每个完形填空句子的可能类名中为掩码(空白)单词选择最可能的值。

结果是每个数据点的一组嘈杂的类别预测。这一过程本身就起到了基本的零射分类器的作用。此外,还介绍了一种知识抽取过程。在从完形填空任务生成一组预测之后,这些预测值被用作代理标签,在该代理标签上从头开始训练新的分类器。我的直觉是,这一步是有效的,因为它允许我们对整个测试集进行集体推理,允许模型从它正在预测的集合中学习,而不是单独对待每个测试点。我怀疑,这一步将特别有帮助时,适应新的领域,不像传销的培训语料库。

在他们的最新一期论文中,作者还讨论了在PET之上的迭代自我训练过程,该过程在Yahoo Answers上的准确率达到了令人印象深刻的70.7美元,几乎接近最先进的监督分类方法的性能。

这让我回到了前面关于比较不同方法时考虑实验参数的观点。虽然PET的性能明显优于这里描述的其他方法,但它也利用了其他方法无法访问的数据:多个特定于任务的手工制作的完形填空语句和大量用于提取/自学步骤的未标记数据。我这么说并不是为了抨击PET,也不是作者将自己与我在这里概述的方法进行比较,而只是强调在比较不同的方法时要小心的重要性,在某种意义上,这些方法都可以被认为是零杆。

作者提出了一种在某些训练数据可用的情况下使用PET的成熟方法,有效地最小化了对任何可用训练数据的优化完形填空预测与标准MLM损失之间的联合损失。细节有些创新,所以如果你感兴趣,我强烈推荐查看他们的预印本、YouTube教程或GitHub Repo。

NLP中一个极其重要的数据稀缺设置是使用低资源语言。幸运的是,这是一个非常活跃的研究领域,已经有很多关于它的文章。对于那些对这一领域感兴趣的人,我强烈推荐查看格雷厄姆·纽比格最近发布的Low Resource NLP训练营。这是一个非常棒的资源,其形式是GitHub资源库,其中包含8个讲座(外加练习),重点是数据稀缺语言中的NLP。此外,我推荐大家看看塞巴斯蒂安·鲁德的著作,其中包括对跨语言单词嵌入模型的调查。