SNCSE:一种基于软负例的无监督句向量对比学习方法
写在前面
大家好,我是刘聪NLP。
早上刷arxiv时,发现一篇通过「软负样本」结合「双向边际损失」的无监督句子嵌入对比学习方法-SNCSE。今天分享给大家,全名《SNCSE: Contrastive Learning for Unsupervised Sentence Embedding with Soft Negative Samples》。
paper:https://arxiv.org/pdf/2201.05979.pdf
介绍
句向量表征技术目前已经通过对比学习获取了很好的效果。而对比学习的宗旨就是拉近相似数据,推开不相似数据,有效地学习数据表征。目前大多数对比学习方法,均利用多种数据增强方法生成正样本,将Batch内其他独立的句子作为负样本,采用InfoNCE loss将正样本拉近,将负样本推开。但是由于目前的数据增强方法,获取的正样本均极为相似,导致模型存在特征抑制,即「模型不能区分文本相似度和语义相似度,并更偏向具有相似文本,而不考虑它们之间的实际语义差异」。
模型
软负样本的获取
在SNCSE中,将原始样本的否定内容作为软负样本。利用Spacy工具对句子进行句子解析,获取句子的句法树、词性标签并标记词干,然后据这些信息,将句子转化为句法正确、语义清晰的否定句。注意:这里的「否定」是通过添加「否定词」的显式否定,而不是词语反义的否定。因为添加否定词的否定,在文本相似度上,与原始样本更相似。
SNCSE结构
受到PromptBERT启发,SNCSE在获取句向量表征时,采用prompt技术,即通过三种不同的模板来表示原始样本、正样本和软负样本,
将特殊标记[MASK]的隐藏状态作为模型的输出向量,并在训练过程中,像SimCSE一样,增加了一个带有tanh激活函数的全连接层对进行变换,得到最终的句子向量,
损失的计算共包含两个部分,对比学习原始InfoNCE损失和双向边际损失,如下图所示,
其中,表示余弦相似度,表示温度因子,表示批次大小。计算原始样本与正例和原始样本与软负例之间的余弦相似差,
定义双向边际损失(bidirectional margin loss,BML)来模拟语义相似度差异,
BML损失的目标是将限制在区间内,其中和分别表示正例和软负例语义相似度的上、下差异。最终,总损失为InfoNCE损失和双向边际损失的加权求和,
实验结果
与SimCSE和ESimCSE的无监督学习保持一致,训练数据是从英语维基百科中随机抽取100万个句子,测试数据为STS12-16、STS-B和SICK-R数据集。通过下表,我们可以看出,SNCSE方法取得了较好地效果。
总结
SNCSE方法提出来如何在无监督对比学习下,使用负例进行训练,提高模型效果。也就像SimCSE方法在有监督数据下,通过文本蕴含数据的矛盾数据作为难负例相似。
放假ing,但是也要学习。
往期推荐