[ACL2022] DCLR: 无监督句子表征的去偏对比学习

文章探讨了对比学习中假负例的问题,指出简单地将batch内其他样本作为负例可能导致学习偏差。为此,提出了两种改进方法:一是利用高斯分布生成噪声样本,并进行梯度更新以提高负样本质量;二是通过预训练模型对batch内负样本加权,减少假负例的影响。实验结果显示,这些方法在多个数据集上提高了模型性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

句子表征一直是一个很卷的方向。从最开始的DSSM到现在的对比学习(如: SimCSE、CoSERT等),效果不断被刷新。但是在对比学习中,有个问题一直待解决: 假负例。 即一个batch内除了自身以外全部视为当前样本的负例,这样显然有些简单粗暴。如下图:

作者使用simcse训练好的模型在wikipedia的数据集上做了一个测试,当前一个样本和其在一个batch内的255个负例做了相似度计算,发现50%+的样本相似度都大于0.5,也就是有很多都是假负例。显然,这样的学习是有偏的。

针对这种问题,本文提出了一种负采样纠偏的对比学习方法。创新点主要有两个: (1)通过高斯分布产生随机噪声样本。(2)给同batch内的负例进行加权。下面我们看看具体的做法。

模型介绍


上述是本文的模型结构图,左边是输入部分。负样本是随机采样的负样本。正样本可以是dropout生成正例,或者通过增、删等数据增强的方式得到正例。右边分为两部分: Instance Weighting和Noise-based Negatives。即对负例加权,通过高斯分布产生噪声负样本。下面来看看这两种方式的具体实现:

通过高斯分布产生噪声负样本

给定一个样本xix_ixi,首先从高斯分布中采样出k个向量作为负样本。如下所示:

其中δ\deltaδ就是方差。

将这些向量用来和正例做对比学习。之前有一个模型GS_infoNCE就是这样做的。因为在对比学习领域,大家通常认为,负例越多,效果越好。当时GS_infoNCE确实也比它的base模型simcse效果好了一点。

但是本文为了进一步提高噪声负向量的质量,对这些向量进行了梯度更新,用来捕捉语义空间中的非均匀点。

假设原始的向量为hih_ihi, 对应的噪声向量集合为h^\hat hh^, 对应正例为hi+h_i^+hi+,则对比损失如下:

其中τ是温度超参数。sim(hi,hi+)sim(h_i, h_i^+)sim(hi,hi+)计算如下:

然后基于每个噪声负例hj∈h^h_j \in \hat hhjh^ 求导:


其中β\betaβ为学习率。

给同batch内的负样本加权

这一步作者借助了一个训练好的simcse模型,对同一batch内的样本两两打分。假设当前的一个样本就会和其他batch内的负样本计算相关性分数。然后给出一个阈值,将相关性打分映射成0或者1。如下所示:

其中的ϕ\phiϕ就是人为定的阈值。然后将α\alphaα引入到损失计算中,如下所示:

这样在某种程度上就防止了假负例的出现。最后看看实验结果。

实验结果


可以看出,这公开的数据集上,基本都有不同程度的提高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

传道解惑也

打赏一下咯

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值