ESimCSE:无监督语义新SOTA,引入动量对比学习扩展负样本,效果远超SimCSE

2022-04-01 17:07:57 浏览数 (1)

作者 | 对白 出品 | 对白的算法屋 编者寄语:

本文看完,相信你会掌握这个无监督语义新SOTA模型ESimCSE。

从论文标题中可以看出,应该是对4月份丹琦女神发表的新作SimCSE的增强版(Enhance),并且也用到了对比学习来构建正负样本,那么效果是否优于SimCSE呢?

抱着这个好奇的心态,于是完整的读了一遍该论文。好家伙!在语义文本相似性(STS)任务上效果竟然还真的优于BERT base版的SimCSE有2个点(Spearman相关系数),并且提出了两大优化方法,解决了SimCSE遗留的两个问题:

1、SimCSE通过dropout构建的正例对包含相同长度的信息(原因:Transformer的Position Embedding),会使模型倾向于认为相同或相似长度的句子在语义上更相似(insight很合理);

2、更大的batch size会导致SimCSE性能下降(这点确实很困扰);

所以从以上可以看出,ESimCSE并没有使用最小的数据增强方法drouput构建正例对(毕竟有利也有弊哈),并且还扩展了负例对的构建,鼓励模型进行更精细的学习。这点SimCSE并没有考虑,而是直接将一个batch内与自己不同的样本都作为负样本了。

那么ESimCSE到底是如何构建正负样本并且效果还优于SimCSE的呢?让我们接着往下看~

Unsupervised SimCSE

我们首先来回顾一下无监督版的SimCSE。

给定一组成对的句子 ,其中 和 是语义相关的,将被作为一个正例对。无监督SimCSE 的核心思想是使用相同的句子来构建正例对,即 。在 Transformer中,在Feed Forword Network全连接层和Multi-head Attention中间放置了一个dropout mask。因此,SimCSE是通过应用不同的 dropout mask 和 将相同的输入 两次输入给Transformer,并输出两个单独的句子Embedding 和 ( 为正样本)以构建正例对,如下所示:

对于batch size大小为 N 的mini-batch中每个句子的 和 ,对比学习的训练目标为:

其中 τ 是温度超参数, 是相似度度量,通常是余弦相似度函数,如下所示:

SimCSE的缺点(一)

在讲解ESimCSE之前,我们一定要搞清楚SimCSE的缺点以及作者的intuition是如何产生的。

使用 dropout 作为最小数据增强方法简单有效,但是预训练语言模型如BERT是建立在Transformer上,它将通过position embedding对句子的长度信息进行编码。因此,同一个句子通过BERT产生的正例对具有相同的长度,而来自两个不同句子的负例对通常包含不同长度的信息

因此,正例对和负例对所包含的长度信息是不同的,可以作为特征来区分它们。具体来说,由于这样的差异,会导致模型训练时出现偏差,让模型自动认为相同或相似长度的两个句子在语义上更相似。

因此作者根据句子对的长度差异将 STS 任务数据集划分为组,并分别使用 Spearman相关系数计算相应的语义相似度。随着长度差异的增加,无监督SimCSE 的性能变差。无监督SimCSE在长度相似(≤3)的句子上的性能远远超过在长度差异较大(>3)的句子上的性能,如下图所示:

为了缓解这个问题,作者提出了一种简单但有效的样本增强方法。对于每个正例对,我们期望在不改变其语义的情况下改变句子的长度。现有的改变句子长度的方法一般采用随机插入和随机删除。但是,在句子中插入随机选择的词可能会引入额外的噪音,这可能会扭曲句子的含义;从句子中删除关键字也会大大改变其语义。因此,我们提出了一种更安全的方法,称为“Word Repetition”,它随机复制句子中的一些单词,如下图所示:

原句翻译为“我喜欢这个苹果,因为它看起来很新鲜,我认为它应该很好吃”。

随机插入可能会产生“我不喜欢这个苹果,因为它看起来很不新鲜,我认为它应该是狗的美味”;随机删除可能会产生“我这个苹果,因为它看起来如此,我认为它应该如此”。两者都偏离了原句的意思。

相反,“Word Repetition”的方法可能会得到“我喜欢这个苹果,因为它看起来很新鲜,我认为它应该很好吃。”或“我喜欢这个苹果,因为它看起来很新鲜”我认为它应该很好吃。”两者都很好地保持了原句的意思。

SimCSE的缺点(二)

由于对比学习是在正例对和负例对之间进行的,理论上更多的负例对可以导致更好的比较。因此一个潜在的优化方向是利用更多的负例对,鼓励模型进行更精细的学习。然而在SimCSE中,更大的batch size并不总是更好的选择。例如,如下图所示, 对于无监督的SimCSE-BERTbase模型,最佳batch size大小为 64,batch size大小的其他设置会降低性能

在计算机视觉中,为了缓解扩展batch size时GPU内存的限制,一个可行的方法是引入动量对比,这也是通过维护一个队列,重用来自前一个mini-batch的编码Embedding来扩展负例对:它总是将当前mini-batch的句子Embedding入队,同时将“最旧”的句子Embedding出队。由于入队的句子Embedding来自前面的mini-batch,我们通过取其参数的移动平均值来保持动量更新模型,并使用动量模型生成入队的句子Embedding。请注意,作者在使用动量编码器时关闭了dropout,这可以缩小训练和预测之间的差距。

上述两种优化分别是作者提出用于构建正负对的新方法。将两者与 unsup-SimCSE结合起来,就得到了ESimCSE。

ESimCSE

在本节中,我们首先介绍ESimCSE构建正例对的方法:Word Repetition(单词重复)和 Momentum Contrast(动量对比学习)扩展负样本对。

Word Repetition

Word Repetition单词重复机制会随机复制句子中的一些单词/子词。这里我们以子词重复为例,给定一个句子s,经过子词分词器处理后,我们得到一个子词序列 ,N是序列的长度。我们将重复标记的数量定义为:

其中dup_rate是最大重复率,这是一个超参数。dup_len是上面定义的集合中的随机采样数,这将在扩展序列长度时引入更多的多样性。确定dup_len后,我们使用均匀分布从序列中随机选择需要重复的dup_len子词,组成dup_set。

例如,如果第一个子词在dup_set中,则序列 变为 ,不同于无监督的SimCSE需要通过两次BERT生成 和 ,ESimCSE生成的 和 是相互独立的

Momentum Contrast

‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍Momentun Contrast(动量对比)允许我们通过维护固定大小的队列来重用来自紧邻的前面mini-batch中编码的句子Embedding。具体来说,队列中的Embedding会被逐步替换。若当前mini-batch中输出句子的Embedding入队时,如果队列已满,则删除队列中“最旧”的句子Embedding。

我们使用动量更新编码器对排队的句子Embedding进行编码。编码器的参数为 ,动量更新编码器的参数为 ,我们按以下方式更新 :‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

其中 为动量系数参数。

‍‍‍‍‍‍‍‍‍‍这里只有参数 通过反向传播进行更新。在这里,我们引入 来为队列生成句子Embedding,因为动量更新可以使 比 变化更平滑。因此,尽管队列中的Embedding由不同的编码器编码(在训练期间的不同“步骤”中),但这些编码器之间的差异可以变小。‍‍‍‍‍‍‍‍‍‍

通过队列中的句子Embedding,ESimCSE的损失函数进一步修改如下:

其中 是表示在动量更新队列中Embedding的句子,M是队列。

实验结果

与Unsup-SimCSE相同,作者也使用了从英文维基百科中随机去的100万个句子进行训练,然后在7个STS任务上进行了实验。下图显示了在STS-B数据集上获得的最佳结果:

可以看出,ESimCSE在BERTbase上优于Unsup-SimCSE 2.40%,在 BERTlarge 2.19%,在RoBERTabase 1.19%,在RoBERTalarge 0.26%

此外,作者进一步评估了ESimCSE在7个STS任务上的结果:

具体来说,ESimCSE 在 BERTbase上的表现平均优于Unsup-SimCSE 2.02%,在BERTlarge 0.90%,在 RoBERTabase 0.87%,在 RoBERTalarge 0.55%

作者还探讨了仅使用Word Repetition或Momentum Contrast时可以为 unsup-SimCSE带来多少改进。如下图所示,无论是Word Repetition还是Momentum Contrast都可以为unsup-SimCSE带来实质性的改进。这意味着所提出的增强正例对和负对的方法都是有效的。更好的是,这两个修改可以叠加(ESimCSE)以获得进一步的改进。

总结

本文提出了两种优化方法来构建 unsup-SimCSE 的正负例对,并将它们与 unsup-SimCSE 相结合,称为ESimCSE。通过大量实验,所提出的 ESimCSE 在标准语义文本相似性任务上比 unsup-SimCSE 取得了相当大的改进。

这篇文章对SimCSE遗留的问题都进行了改进,并且效果上也取得了非常显著的提升,最后通过消融研究合理地解释了每一个改进点为什么work,是一篇非常不错的研究工作。

你好,我是对白,硕士毕业于清华,现大厂算法工程师,拿过八家大厂的SSP级以上offer。

本科时独立创业五年,成立两家公司,并拿过总计三百多万元融资(已到账),项目入选南京321高层次创业人才引进计划。创业做过无人机、机器人和互联网教育,保研后选择退出。

我每周至少更新一篇原创,分享自己的算法技术、创业心得和人生感悟。

0 人点赞