对比学习在语义表征中的应用:SBERT/SimCSE/ConSERT/ESimCSE复现(一)

简介: 对比学习在语义表征中的应用:SBERT/SimCSE/ConSERT/ESimCSE复现(一)

本篇博文主要比较目前常用的Sentence Embedding方法,包括双塔模型SBERT,对比学习SimCSE、ConSERT、ESimCSE,这里谈谈论文里的细节,以及本人在中文语料(Chinese-SNLI、Chinese-STS-B)复现后的结果。


部分方法在半年前已复现过,但最近研究了sentence_transformers库的源码,发现竟然提供了对比学习的损失函数,在此基础上做二次开发,方便了不少,因此重新改了下代码,做了新的实验,使用用的base model均为macbert base。


1. SBERT



论文链接:《Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks》


cecebb4f066932fe4d277d20ed93de25.png


  • SBERT采用哪种Pooling策略,论文实现过,MEAN效果是最好的


当损失函数是softmax时,论文里提到把u,v,|u-v|拼接起来后接分类层效果是最好的,其实sbert库SoftmaxLoss也是默认采用这种做法,但做inference的时候,sbert还是默认拿mean pooling后的向量做后续相似度计算


  • 论文中,Unsupervised STS指用NLI数据集(包括SNLI和MultiNLI)做softmax有监督训练后,在STS中的测试效果,论文中效果如下,下表显示的是在STS test集中的表现


1111.png


本人用中文语料复现,但只采用了Chinese-SNLI,然后在中文的STS-B上测效果,训练参数为max_len=64,batch_size=64, learning rate=2e-5,保存dev集上表现最好的模型,再用test集做测试。


fe59cf6b57c79a8bc260c73a1ee14d4.png059bb67810f611d11c7e98d0ca45244e.png


论文中,Supervised STS,是采用NLI和STSb做有监督训练,其中NLI用softmax损失,STSb用regression损失,然后在STSb test集的效果如下


本人复现只用了STS-B训练集做训练,效果如下


4b4c61b916c77c038df64b3f9978dab.png


2. SimCSE



论文链接:《SimCSE: Simple Contrastive Learning of Sentence Embeddings》


陈丹奇团队的作品,去年3月份挂在arxiv,被2021年EMNLP接受。


edaa24dc46b4294b9e563c575435c144.png


  • alignment和uniformity,SimCSE能在提高uniformity的同时,通过dropout构建的正样本对来避免alignment的下降


  • 论文中,Unsupervised SimCSE是用wiki百科的100W个句子做的,下图是效果,展示的是STS test集


676b8f51c074a440365f68cd5517200a.png


本人复现直接拿STS的数据作为训练语料,试验发现dropout取为0.1、0.2、0.3效果都差不多(最后还是沿用论文里,里,采用0.1),不同于SBERT的mean pooling,用CLS token作为向量更好(论文里是说训练时CLS后接MLM,预测时用CLS的输出作为向量,不过感觉相差不了太多,所以这里实验直接用CLS)


image.png


论文中的Supervised SimCSE是用改造后的NLI数据集训练的,结果如下,本人没有复现这个。


abafaa9233723b5e0307135058138d88.png


3. ConSERT



论文链接:《ConSERT: A Contrastive Framework for Self-Supervised Sentence Representation Transfer》


美团发表在2021年ACL会议的论文,这篇论文主要介绍对比学习应用在NLP语义计算中的通用框架,作为了解对比学习在语义向量中的应用是十分不错的入门文章。


539f9d3f73807ac92fde515069f9870d.png


  • 提出四种做positive pair的方式,其中adversarial attack需要结合有监督训练,无监督部分,论文里发现feature cutoff与token shuffling结合是最好的


d94a9c131c5980baabcca8104fedc729.png


  • Unsupervised部分如下,不同于SimCSE用wiki百度的语料做无监督,这里的ConSERT直接用STS的语料做无监督训练


4444444444.png


在本人复现的过程,实现了shuffle和token cutoff,其中token cutoff用一种近似的方法来实现,原论文代码是在transofrmers库上做的二次开发,cutoff作用在embedding层,而本人复现的时候对某些position的attention mask取为0来近似代替token cutoff,其中cutoff rate=0.15,训练时关闭dropout,复现结果如下


ab6d30788b7b1b197c94e6a3ef51449.png


  • Supervised部分如下,作者发现先joint联合训练(论文中用NLI有监督和STS无监督),然后用Unsupervised微调是效果最好的。


a7cfafea444a9989fb00dca1bb61e62e.png

相关文章
|
8天前
|
人工智能 机器人
LeCun 的世界模型初步实现!基于预训练视觉特征,看一眼任务就能零样本规划
纽约大学Gaoyue Zhou等人提出DINO World Model(DINO-WM),利用预训练视觉特征构建世界模型,实现零样本规划。该方法具备离线训练、测试时行为优化和任务无关性三大特性,通过预测未来补丁特征学习离线行为轨迹。实验表明,DINO-WM在迷宫导航、桌面推动等任务中表现出强大的泛化能力,无需依赖专家演示或奖励建模。论文地址:https://arxiv.org/pdf/2411.04983v1。
32 21
|
3月前
|
机器学习/深度学习 人工智能 编解码
[大语言模型-论文精读] 词性对抗性攻击:文本到图像生成的实证研究
[大语言模型-论文精读] 词性对抗性攻击:文本到图像生成的实证研究
63 0
|
6月前
|
机器学习/深度学习
ICML 2024:揭示非线形Transformer在上下文学习中学习和泛化的机制
【7月更文挑战第10天】Rensselaer Polytechnic Institute和IBM的研究者探讨了非线性Transformer在上下文学习的理论基础。他们展示了Transformer如何通过注意力层聚焦相关上下文,并利用MLP层进行预测,揭示了其在不需微调情况下的泛化能力。尽管研究局限于二进制分类和单层模型,它为理解复杂模型在不同任务和领域的潜在适应性提供了新视角。[论文链接:](https://arxiv.org/pdf/2402.15607)**
56 1
|
6月前
|
机器学习/深度学习 自然语言处理
预训练语义模型作为特征提取器的方法
预训练语义模型作为特征提取器的方法
|
8月前
|
机器学习/深度学习 编解码 自然语言处理
一文综述 | 万字文总结,近几年都有哪些语义分割模型用了Transformer方法呢?
一文综述 | 万字文总结,近几年都有哪些语义分割模型用了Transformer方法呢?
649 0
|
8月前
|
编解码 算法 测试技术
【论文精读】ICLR2022 - 语言驱动的语义分割
【论文精读】ICLR2022 - 语言驱动的语义分割
|
机器学习/深度学习 编解码 自然语言处理
基于EasyCV复现ViTDet:单层特征超越FPN
ViTDet其实是恺明团队MAE和ViT-based Mask R-CNN两个工作的延续。MAE提出了ViT的无监督训练方法,而ViT-based Mask R-CNN给出了用ViT作为backbone的Mask R-CNN的训练技巧,并证明了MAE预训练对下游检测任务的重要性。而ViTDet进一步改进了一些设计,证明了ViT作为backone的检测模型可以匹敌基于FPN的backbone(如SwinT和MViT)检测模型。
|
算法 搜索推荐 Ubuntu
语义检索系统:基于无监督预训练语义索引召回:SimCSE、Diffcse
语义检索系统:基于无监督预训练语义索引召回:SimCSE、Diffcse
语义检索系统:基于无监督预训练语义索引召回:SimCSE、Diffcse
|
机器学习/深度学习 编解码 自然语言处理
DAFormer | 使用Transformer进行语义分割无监督域自适应的开篇之作(一)
DAFormer | 使用Transformer进行语义分割无监督域自适应的开篇之作(一)
432 0
|
机器学习/深度学习 计算机视觉
论文推荐:基于联合损失函数的多任务肿瘤分割
以FFANet为主干,加入分类的分支,将模型扩展为多任务图像分割框架,设计了用于分类和分割的联合损失函数。
151 0