Self-Guided Contrastive Learning for BERT Sentence Representations

文章链接: 《Self-Guided Contrastive Learning for BERT Sentence Representations》

文章的背景:

尽管bert及后续很多优化的变体,但是对用于句子相似度计算的句子如何最优的表征, 这块的结论并不是很清晰。比如之前常用的方法是直接取bert的倒数第一层 或者 倒数第二层的[cls]向量作为句子表征。然而我们实际中拿这个[cls]向量直接计算句子相似度的时候就会发现, 本该距离远的sentence 的 cls 向量表征也可能很近,这个现象在题目的论文中也有可视化展现.

Self-Guided Contrastive Learning for BERT Sentence Representations_第1张图片

如上图所示,其中红色的数字对为正例的sentence对,即本身距离近的. 蓝色数字为负例. 可以看到部分sentence 重叠在一起,区分度不够好. 同一对的sentence之间,还有其他组的sentence的向量表达距离更近. 效果不够好.  而本文提出了一种对比学习的方法,来提高bert句子表征的质量. 

 

摘要

        尽管BERT及其变体已经重塑了NLP的版图,但如何最好地从这些预先训练过的 Transformer 中提取句子 Embedding 仍然不清楚。在这项工作中,我们提出了一种对比学习方法,利用自我引导来提高BERT句子表示的质量。我们的方法以自我监督的方式微调BERT,不依赖数据扩展,并使通常的[CLS]标记嵌入作为句子向量。此外,我们对 对比学习目标 进行了重新设计,并将其应用于句子表征学习。  我们通过大量的实验证明,在不同的句子相关任务中,我们的方法比竞争性基线更有效。我们也证明了它是有效的推理和鲁棒的领域转移.

1介绍

预训练的Transformer (Vaswani et al., 2017)语言模型,如BERT (Devlin et al., 2019)和RoBERTa (Liu et al., 2019)已经成为近期实现自然语言理解改进的不可或缺的一部分。然而,不能直接将这些模型用于句子级的任务,因为它们基本上是预先训练的,专注于预测给定上下文的(子)词标记。将模型转换为句子编码器的最典型方法是在下游任务的监督下对它们进行微调。在这个过程中,正如Devlin等人(2019)最初提出的,从编码器的最后一层嵌入的预定义token (即[CLS])被视为输入序列的表示。这种简单而有效的方法之所以可行,是因为在有监督的调优过程中,[CLS]嵌入作为预先训练的编码器和特定任务层之间的唯一通信门,鼓励[CLS]向量捕捉整体信息。

另一方面,在标记数据集不可用的情况下,尚不清楚从bert中提取句子嵌入的最佳策略是什么。李等人,2020年;Hu et al., 2020)报告说,na¨ıvely(即没有任何处理)利用[CLS]嵌入作为句子表示,就像监督微调的情况一样,结果令人失望。目前,在没有监督的情况下构建BERT句子嵌入最常见的经验法则是在BERT的最后一层上应用均值池。然而,这种方法仍然是次优的。在初步实验中,我们采用不同BERT层和池化方法的不同组合构建句子嵌入,并在语义文本相似度(STS)基准数据集(Cer et al., 2017)上进行测试我们发现伯特(基地)的性能,用斯皮尔曼相关(×100),范围可以从低至16.71 ((CLS),第十层)到63.19 (max池,第二层)根据所选层和池方法(见图1)。这一结果表明,当前建筑实践伯特句子向量不够solid ,bert 的表现力还有发挥的空间。

在这项工作中,我们提出了一种对比学习方法,利用新提出的自我引导机制来解决上述问题。其核心思想是将中间BERT隐表示循环为正样本,最后一句embeding 应该与之接近。由于我们的方法不需要数据增强,而这在最近的对比学习框架中是必不可少的,因此它比现有方法更简单、更容易使用(Fang和Xie, 2020;Xie et al., 2020)。此外,我们定制了NTXent loss (Chen et al., 2020),这是一种广泛应用于计算机视觉的对比学习目标,用于更好地使用BERT进行句子表示学习。我们证明,我们的方法优于为构建BERT句子向量设计的竞争性基线(Li et al., 2020;Wang and Kuo, 2020)。通过全面的分析,我们还表明,我们的方法在推理上比基线的计算效率更高,而且对域迁移更健壮.

2 相关工作

对比表示学习。对比学习一直被认为是构建有意义表征的有效方法。例如,Mikolov等人(2013)提出通过将目标词附近的词作为积极样本而将其他词作为消极样本来学习词嵌入。Logeswaran和Lee(2018)推广了Mikolov等人(2013)的句子表征学习方法。最近的几项研究(Fang and Xie, 2020;Giorgi等人,2020年;Wu et al., 2020)建议使用对比学习来训练Transformer模型,类似于我们的方法。然而,它们通常需要数据增强技术,如反向翻译(Sennrich et al., 2016),或训练数据的先验知识,如 order 信息,而我们的方法不需要。此外,我们专注于修改BERT以计算更好的句子嵌入,而不是从头开始训练语言模型。

另一方面,对比学习也受到了计算机视觉界的广泛关注(Chen et al. (2020);Chen and He (2020);他等人(2020年)。我们改进了Chen等人(2020)的框架,通过优化其学习目标来实现预先训练的基于transformer的句子表示学习。关于对比学习的广泛调查,请参考Le-Khac等人(2020)和Jaiswal等人(2020).

在监督下对BERT进行微调。对预先训练的巨大规模的Transformer模型进行微调并不是一件容易的事,特别是在目标领域数据数量有限的情况下(Mosbach et al., 2020)。为了缓解这种训练不稳定性问题,有几种方法(Aghajanyan等人,2020;Jiang et al., 2020;Zhu et al., 2020)最近被提出。特别是Gunel等人(2021)提出利用对比学习作为辅助训练目标,在目标任务的监督下对BERT进行精细调整。相比之下,我们要处理的问题是在没有这种监督的情况下调整BERT。

BERT的句子嵌入

由于BERT及其变体最初被设计为对每个下游任务进行精细调整,以获得最佳性能,因此如何最好地从它们中提取一般的句子表示仍然是模棱两可的,这些表示广泛适用于各种与句子相关的任务。继Conneau等人(2017)之后,Reimers和Gurevych (2019) (SBERT) 提出在BERT的最后一层进行平均池化,然后在自然语言推理(NLI)数据集上对池化向量进行精细调整,从而计算句子嵌入(Bowman等人,2015;Williams等人,2018年)。 与此同时,也有一些研究侧重于更有效地利用BERT中嵌入的知识来构建句子的嵌入。Wang and Kuo(2020)提出了一种基于线性代数算法的池化方法,从BERT的中间层中提取句子向量。 Li等人(2020)建议使用流模型从BERT的最后两层得到的嵌入的平均值学习到一个球形高斯分布的映射,并利用重新分布的嵌入来代替原始BERT表示。 我们遵循Li et al.(2020)的设置,在训练时只使用纯文本,但与其他所有即使在训练后也依赖某种池化方法的方法不同,我们直接对BERT进行精炼,使典型的[CLS]向量可以作为句子嵌入。还要注意存在并行工作(卡尔森等人,2021年;Gao等人,2021年;Wang et al., 2021),其动机与我们类似,试图以无监督的方式改进BERT句嵌入。

3方法

由于BERT通常需要某种类型的适应才能恰当地应用于感兴趣的任务,因此不经过微调就直接从BERT中推导句子嵌入可能是不理想的。尽管Reimers和Gurevych(2019)试图通过典型的监督微调来缓解这个问题,但我们限制自己以无监督的方式修改BERT,这意味着我们的方法只需要一大堆原始句子进行训练。

在可能的非监督学习策略中,我们专注于对比学习,它可以内在地激发BERT意识到不同句子嵌入之间的相似性。考虑到句子向量广泛用于计算两个句子的相似度,对比学习引入的归纳偏差有助于BERT更好地完成这类任务。 问题在于句子层次的对比学习通常需要数据增强(Fang and Xie, 2020)或训练数据的先验知识,例如 顺序信息(Logeswaran and Lee, 2018),才能做出可信的正/负样本。

我们试图通过利用BERT的隐藏表示来绕过这些约束,这些表示很容易被访问,作为嵌入空间中的样本。

3.1对比学习与自我引导

我们的目标是发展一种对比学习方法,不受外部流程,如数据增强。一种可能的解决方案是在嵌入空间中利用(虚拟)对抗性训练(Miyato等人,2018)。然而,当添加随机噪声时,并不能保证句子嵌入的语义保持不变。作为一种替代方案,我们提出利用BERT中间层的隐藏表示,从概念上保证表示相应的句子,作为BERT句子向量应该接近或远离的支点。我们称我们的方法为自导向对比学习,因为我们利用BERT本身产生的内部训练信号对其进行微调。

我们在图2中描述了我们的训练框架。首先,我们将BERT克隆为两个副本,分别是BERTF(固定)和BERT T(调整)。在训练过程中固定BERTF以提供训练信号,而对BERT T进行微调以构建更好的句子嵌入。我们区分BERT F和BERT T的原因是我们想要防止BERT F计算出的训练信号随着训练过程的继续退化,当BERT F = BERT T时经常发生这种情况。这个设计决策也反映了我们的理念,即我们的目标是动态合并存储在BERT的不同层中的知识,以生成句子嵌入,而不是通过额外的训练引入新的信息。注意,在我们的设置中,来自BERT T最后一层的[CLS]向量,即ci,被视为我们在微调期间/之后旨在优化/利用的最后一句话嵌入。

第二,给定一个小批量中的b个句子,例如s 1, s 2,···,s b,我们将每个句子s i输入BERT F,并计算 token 级隐藏表示H i,k∈R len(s i)×d:

式中0≤k≤l(0:非上下文化层),l为BERT隐含层数,len(si) 为token化句子的长度,d为BERT隐含表示的大小。

然后,我们对H i,k应用池函数p,从各层得到不同的句子级视图H i,k∈rd,即H i,k = p(H i,k)。

最后,我们通过应用抽样函数σ来选择最终的视图:

由于我们在定义p和σ时没有特定的限制,为了简单起见,我们使用最大池化 作为p,统一采样器作为σ,除非另有说明。采样器的简单选择意味着每个hi,k具有相同的重要性,这是有说服力的,考虑到不同的BERT层专门用于捕获不同的语言概念(Jawahar et al., 2019).

第三,我们计算我们的句子嵌入ci为s i如下:

Self-Guided Contrastive Learning for BERT Sentence Representations_第2张图片

 

其中BERT(·)[CLS]对应于BERT的最后一层得到的[CLS]向量。

接下来,我们将计算出的向量集合收集到

X = {X | X∈{c i}∪{h i}},

对于所有X m∈X,我们计算NT-Xent损失(Chen et al., 2020):

Self-Guided Contrastive Learning for BERT Sentence Representations_第3张图片

 

注意到τ是温度超参数,f 是由MLP层组成的投影头,g (u, v) = u·v/∥u∥∥v∥为余弦相似函数,

µ(·)为匹配函数,定义如下:

Self-Guided Contrastive Learning for BERT Sentence Representations_第4张图片

 

最后,我们将所有的L m底除以2b求和,并加入正则化器L reg =∥BERT F−BERT T∥22,以防止BERT T与BERT F的距离过远。

因此,最终损失L base为:

Self-Guided Contrastive Learning for BERT Sentence Representations_第5张图片

 

其中λ系数是一个超参数.

总而言之,我们的方法改进 BERT 这样句子嵌入ci  与hi 有较高的相似性(这是 sentence si 的另外一种表征)

子空间投影的f时相对不同的c j, j != i 和h j != i。

训练完成后,我们去掉除了BERT T以外的所有成分,只使用c i作为最后的句子表示.

3.2学习目标优化

在3.1节中,我们依赖于一般NT-Xent损失的一个简单变化,它由四个因素组成。在不失通用性的前提下,给定句子s i和s j,其影响因素如下(图3):

(1) c i→←h i(或c j→←h j):反映我们的核心动机的主要成分,即BERT句子向量(c i)应该与来自BERT的中间视图(h i)保持一致。

(2) c i←→c j:迫使句子嵌入(c i, c j)彼此 远离 的因素。

(3) c i←→h j(或c j←→h i):使c i与其他句子的视图不一致的元素(h j)。

(4) h i←→h j:导致不同句子观点不一致的因素(h i, h j)。

尽管这四个因素都有一定的作用,但有些因素可能是无用的, 甚至对我们的目标造成负面影响。 例如,Chen和He(2020)最近报道,在图像表征学习中,只有(1)是重要的,其他的都是无关紧要的。 同样,我们对培训损失进行了三个主要修改,以使其更适合我们的目的.

首先,由于我们的目标是借助h i来改进c i, 我们重新定义了我们的损失,更多地关注ci,而不是将c i和h i视为等价的实体:

Self-Guided Contrastive Learning for BERT Sentence Representations_第6张图片

 

换句话说,h i仅作为鼓励ci接近或远离的点,而不作为要优化的目标。

这个修改自然会导致(4)被删除。

此外,我们发现(2)对于提高性能也不重要,因此我们得到L i opt2:

 

最后,我们通过允许多个视图{h i,k}来引导c i来分散(1)和(3)中的信号:

 

我们期望通过这种改进,学习目标可以通过考虑提供额外的(和免费的)样本来提供更精确和富有成效的训练信号。我们优化损失的最终形式是:

Self-Guided Contrastive Learning for BERT Sentence Representations_第7张图片

 

在第5.1节中,我们将展示本节中的决策对性能改进的贡献.

4实验

4.1一般配置

在预先训练的编码器方面,我们使用BERT (Devlin et al., 2019)用于英语数据集,MBERT是BERT的多语言变体,用于多语言数据集。在某些情况下,我们还使用RoBERTa (Liu et al., 2019)和SBERT (Reimers和Gurevych, 2019)来评估测试方法的通用性。我们用后缀' -base '和' -large '来区分小型和大型模型。每个可训练模型的性能报告为8次单独运行的平均值,以减少随机性。超参数使用BERTbase在STS-B验证集上进行优化,并在不同模型间使用。具体请参见附录A.1中的表8。我们的实现基于HuggingFace的变形金刚(Wolf et al., 2019)和SBERT (Reimers and Gurevych, 2019)图书馆,可在https://github.com/galsang/SG-BERT上公开。

4.2语义文本相似性任务

我们首先评估了我们的方法和基于语义文本相似度(STS)任务的基线。给定两个句子,我们通过计算它们 Embedding 的余弦相似度来得到它们的相似度评分.

数据和指标。参考文献,我们总共在7个数据集上评估模型,即STS-B (Cer et al., 2017)、sicki - r (Marelli et al., 2014)和STS12-16 (Agirre et al., 2012, 2013, 2014, 2015, 2016)。这些数据集包含两个句子对,它们的相似度评分从0到5。gold 注释与句子向量预测得分的相关性用Spearman相关(× 100)来衡量。

基线和模型规范。我们首先准备了两种非bert方法作为基线,即 Glove (Pennington et al., 2014)均值嵌入和通用句子编码器 (USE;ceral et al.(2018)

此外,还介绍了各种不需要监督的BERT句子嵌入方法作为基线:

•CLS token Embedding: 将BERT最后一层的[CLS]向量作为句子表示

•mean pooling:该方法在BERT的最后一层进行均值池化,并将输出作为句子嵌入。

•WK pooling:这遵循Wang和Kuo(2020)的方法,利用QR分解和额外的技术从BERT中导出有意义的句子向量

•Flow: 这是Li等人(2020)提出的BERT- Flow,这是一种基于Flow的模型,将BERT最后两层的平均池化生成的向量映射到一个高斯空间

•对比(BT):继Fang和Xie(2020)之后,我们用对比学习来修正BERT。然而,与我们的方法不同,这种方法依赖于反向翻译  来获得 正样本。

关于这个基线的详细信息在附录A.2中说明。

我们使用STS-B中的普通句子,使用我们的方法来调整BERT,与Flow相同。7我们将用我们的自引导方法训练的BERT实例命名为对比(SG)和对比(SG- opt),分别使用第3节中的L基和L opt。

结果.  我们在表1和表11(附录A.6)中报告了STS任务中不同方法的性能。从结果来看,我们证实了我们的方法(SG和SG- opt)在各种实验设置中大多优于其他基线的事实。在早期的研究中,na¨ıve [CLS]嵌入和平均池被证明不如复杂的方法。让我们惊讶的是,在大多数情况下,WK池的性能甚至低于平均池,唯一的例外是当WK池应用于sbert基时。“FLOW”表现出的力量胜过简单的策略。 然而,它的性能被证明比我们的方法更差(尽管在SBERT-large的情况下存在一些例外)。请注意,当对比学习与我们的自我引导算法相结合而不是与反向翻译相结合时,它会变得更具竞争性。值得一提的是,我们方法的优化版本(SG- opt)总体表现出比基本版本(SG)更好的性能,证明了学习目标优化的有效性(章节3.2)。综上所述,在STS任务测试中,我们证明了自我引导的对比学习在提高BERT句子嵌入质量方面是有效的。

4.3多语言STS任务

通过使用MBERT和跨语言 zero-shot 转换,我们将实验扩展到多语言环境。具体来说,我们只使用英语数据来改进MBERT,并在其他语言编写的数据集上测试它。如第4.2节所述,我们使用英语STS-B进行培训。(1) SemEval-2014 Task 10(西班牙语;(2) SemEval-2017 Task 1(阿拉伯语、西班牙语和英语;Cer et al.(2017)。为了与以前的工作进行公平的比较,绩效以皮尔森相关(× 100)来衡量。

从表2中可以看出,在SemEval2014上,具有平均池的MBERT的性能已经超过了最佳系统(在竞赛举行的时候),而且我们的方法进一步提高了模型的性能。相比之下,在SemEval-2017的情况下(表3),具有平均池的MBERT甚至不能击败强余弦基线然而,通过采用我们的算法,MBERT有能力超越(英语/西班牙语)或与(阿拉伯语)基线相媲美。我们注意到,尽管使用MBERT进行跨语言迁移在类似英语的语言(如西班牙语)中看起来很有前景,但在遥远的语言(如阿拉伯语)中其有效性可能会下降。与在特定任务数据上训练的最佳系统相比,MBERT显示出合理的性能,考虑到它从未暴露于任何标记的STS数据集。总之,我们证明了通过我们的方法进行优化的MBERT有可能被用作多语言(尤其是欧洲)STS任务的简单而有效的工具。

4.4 SentEval和监督微调

我们还使用SentEval (Conneau and Kiela, 2018)工具包评估BERT句子向量。给定句子嵌入,SentEval在它们之上训练线性分类器,并通过向量在下游任务上的性能(准确性)来估计向量的质量。在可用的任务中,我们使用7个:MR, CR, SUBJ, MPQA, SST2, TREC, mrpc

在表4中,我们将我们的方法(SG-OPT)与两个基线进行了比较。10我们发现我们的方法在SentEval上比通常的平均池更有助于提高BERT-like模型的性能。SG-OPT在BERTbase/large上也优于WK池,而在SBERT-base上是可比的。从结果中,我们推测自导向对比学习和SBERT训练在某种意义上具有相似的归纳偏差,因为我们用我们的方法修正SBERT所获得的收益相对低于我们微调BERT所获得的收益。同时,似乎WK池化提供了一个正交贡献,在聚焦的情况下是有效的,即SBERT-base。

此外,我们还研究了我们的算法如何影响BERT的监督微调,尽管这不是本工作的主要关注点。简而言之,我们发现原始BERT(-base)和用SG-OPT调优的BERT在GLUE (Wang et al., 2019)验证集上表现出了相当的性能,这意味着我们的方法对BERT的监督微调没有多大影响。更多细节请参阅附录A.4。

5分析

本文通过补充实验进一步研究了该方法的工作机理。本节所做的所有实验均按照4.1节和4.2节的配置进行。

5.1消融实验

我们进行了一项消融研究,以证明优化算法的决策是正确的。为此目的,我们评估STS任务的测试集上的每个可能的变体。从表5可以看出,我们对NT-Xent损失的所有修改都有助于性能的提高。此外,我们证明了超参数的正确选择对于实现最佳性能是重要的,并且投影头(f)发挥了重要作用,如Chen et al.(2020)。

5.2对域迁移的鲁棒性

虽然我们的方法在原则上可以接受训练中的任何句子,但它的性能可能会随所使用的训练数据而变化(特别是取决于训练数据和测试数据是否共享同一个域)。为了探讨这个问题,我们利用混合的NLI数据集在BERT-base上应用SG-OPT (Bowman et al., 2015;Williams et al., 2018)代替STS-B,观察差异。从图4中,我们确认了一个事实,无论使用哪个测试集(STS- b或所有七个STS任务),我们的方法在每个情况下都明显优于Flow,显示了它对域转移的相对鲁棒性。SG-OPT只有失去使用NLI而不是STS- b训练时,分别为1.83 (STS- b测试集)和1.63(所有STS任务的平均)点,而Flow则遭受了相当大的损失.

每箱12.16和4.19。然而,请注意,在更多样化的条件下进行后续实验可能是未来的工作,因为NLI数据集本质上与STS任务有一些相似之处。

5.3计算效率

在这一部分中,我们比较了我们的方法的计算效率与其他基线。对于每个算法,我们在STS-B上测试时测量训练(如果需要)和推理过程中所消耗的时间。所有方法都运行在同一台机器上(Intel Xeon CPU E5-2620 v4 @ 2.10GHz和Titan Xp GPU),批大小为16。

表6所示的实验结果表明,虽然我们的方法需要适量的时间(< 8 min.)进行训练,但它是最有效的推理,因为我们的方法不需要任何后处理,如一旦训练完成池。

5.4表示可视化

我们可视化BERT句子表示的一些变体,以直观地了解为什么我们的方法能有效地提高性能。具体来说,我们从STS-B验证集中抽取了20对 正对(红色,相似度为5) 和 20对 负对(蓝色,相似度为0).

然后计算它们的向量,并借助 t-SNE 将它们绘制到二维空间上。在图5中,我们确认了我们的SG-OPT鼓励BERT句子嵌入与它们的积极对更良好的对齐,同时仍然与它们的负例对相对较远。

我们还可视化了SBERT中的嵌入(附录a .5中的图6),并确定了我们的方法和SBERT中使用的监督微调提供了类似的效果,使所得到的嵌入更适合计算它们之间的正确相似性。

Self-Guided Contrastive Learning for BERT Sentence Representations_第8张图片

 

6讨论

在本节中,我们将讨论当前形式下我们的方法的一些弱点,并探讨一些未来工作的可能途径。

首先,在定义第3节中提出的方法时,我们对某些部分的决策没有过多考虑其最优性,而是优先考虑简单性。例如,尽管我们建议在正常的设置中利用BERT和max池的所有中间层(事实上,它在大多数情况下都工作得很好),但在特定的环境中,特定的层子集或另一种池方法可能带来更好的性能,正如我们在4.4节中所观察到的,在SentEval的情况下,我们可以通过使用平均池并排除较低的层来获得更高的数字(详细信息请参阅附录A.3)。因此,在今后的工作中,应结合目标任务的特点,制定系统的优化设计选择方法。

其次,我们期望通过适当地结合不同的技术来进一步提高对比学习在BERT复习中的有效性。作为这个方向的初步尝试,我们进行了一个额外的实验,在运行我们的框架时,我们通过将原始句子插入BERT T和将其反向翻译插入BERT F来测试反向翻译的集成和我们的自我引导算法。在表7中,我们可以看到,两种技术的融合通常会带来更好的性能,这为我们未来的研究方向提供了一些思路。

图5:句子表示可视化。(上)来自原始BERT的嵌入。(下)来自BERT实例的嵌入与SG-OPT进行了微调。红色数字对应的是肯定句对,蓝色数字对应的是否定句对。

在SBERT中使用提供了类似的效果,使结果嵌入更适合计算它们之间的正确相似性。

7结论

在本文中,我们提出了一种基于自导引的对比学习方法来改进BERT句子的嵌入。通过大量的实验,我们已经证明,我们的方法可以享受对比学习的好处,而不依赖于外部程序,如数据增强或反向翻译,成功地生成比竞争基线更高质量的句子表示。此外,我们的方法是有效的推断,因为它不需要任何后处理一旦训练完成,并相对稳健的领域转移。

你可能感兴趣的:(NLP,Deep,Learning,bert,自然语言处理,句子向量表征)