SNCSE:一种基于软负例的无监督句向量对比学习方法

写在前面

大家好,我是刘聪NLP。

早上刷arxiv时,发现一篇通过「软负样本」结合「双向边际损失」的无监督句子嵌入对比学习方法-SNCSE。今天分享给大家,全名《SNCSE: Contrastive Learning for Unsupervised Sentence Embedding with Soft Negative Samples》。

paper:https://arxiv.org/pdf/2201.05979.pdf
github:https://github.com/Sense-GVT/SNCSE

介绍

句向量表征技术目前已经通过对比学习获取了很好的效果。而对比学习的宗旨就是拉近相似数据,推开不相似数据,有效地学习数据表征。目前大多数对比学习方法,均利用多种数据增强方法生成正样本,将Batch内其他独立的句子作为负样本,采用InfoNCE loss将正样本拉近,将负样本推开。但是由于目前的数据增强方法,获取的正样本均极为相似,导致模型存在特征抑制,即「模型不能区分文本相似度和语义相似度,并更偏向具有相似文本,而不考虑它们之间的实际语义差异」

为了减轻特征抑制,该论文提出了通过软负样本结合双向边际损失的无监督句子嵌入对比学习方法-SNCSE。其中,软负样本,即具有高度相似,但与原始样本在语义上存在明显的差异的样本。双向边际损失,即通过扩大原始样本与正例和原始样本与软负例之间的距离,使模型更好地学习到句子之间的语义差别。

模型

软负样本的获取

在SNCSE中,将原始样本的否定内容作为软负样本。利用Spacy工具对句子进行句子解析,获取句子的句法树、词性标签并标记词干,然后据这些信息,将句子转化为句法正确、语义清晰的否定句。 注意:这里的「否定」是通过添加「否定词」的显式否定,而不是词语反义的否定。因为添加否定词的否定,在文本相似度上,与原始样本更相似。

SNCSE结构

受到PromptBERT启发,SNCSE在获取句向量表征时,采用prompt技术,即通过三种不同的模板来表示原始样本、正样本和软负样本,

将特殊标记[MASK]的隐藏状态作为模型的输出向量,并在训练过程中,像SimCSE一样,增加了一个带有tanh激活函数的全连接层对进行变换,得到最终的句子向量,

损失的计算共包含两个部分,对比学习原始InfoNCE损失和双向边际损失,如下图所示,

利用InfoNCE损失来区分正例和负例,

其中,表示余弦相似度,表示温度因子,表示批次大小。 计算原始样本与正例和原始样本与软负例之间的余弦相似差,

定义双向边际损失(bidirectional margin loss,BML)来模拟语义相似度差异,

BML损失的目标是将限制在区间内,其中和分别表示正例和软负例语义相似度的上、下差异。最终,总损失为InfoNCE损失和双向边际损失的加权求和,

实验结果

与SimCSE和ESimCSE的无监督学习保持一致,训练数据是从英语维基百科中随机抽取100万个句子,测试数据为STS12-16、STS-B和SICK-R数据集。 通过下表,我们可以看出,SNCSE方法取得了较好地效果。

为了探讨否定样本的作用,该论文分别将否定样本作为正例、负例、软负例进行实验,如下表所示,如果将负例直接作为正例和负例时,会给模型带来负面影响。 在SNCSE方法损失中,包含、和三个超参数,通过实验发现为0.1时效果最佳,从0.2到0.4时有些许提升,如下表所示。 分析SNCSE方法是否给特征抑制带来了缓解,从STS任务中随机选择5000个句子,使用不同模型在正例、负例和软负例的余弦相似度上的分布进行可视化。通过下图,可以看出SNCSE方法较SimCSE方法,在文本极为相似的情况下,能很好地识别句子间语义相似度。 通过基于秩的误差分析方法,进一步检测SNCSE的不足之处,通过下表可以看出,部分错误是由于原始数据的书写错误、否定的逻辑错误、数据独立性、句子的次序导致。

总结

SNCSE方法提出来如何在无监督对比学习下,使用负例进行训练,提高模型效果。也就像SimCSE方法在有监督数据下,通过文本蕴含数据的矛盾数据作为难负例相似。

放假ing,但是也要学习。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值