对比学习在语义表征中的应用: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

相关文章
|
网络协议
使用网络调试助手时,踩坑
使用网络调试助手时,踩坑
691 0
|
机器学习/深度学习 算法 数据挖掘
即插即用 | 通过自适应聚类Transformer来提升DERT目标检测器的速度(文末附论文下载)(一)
即插即用 | 通过自适应聚类Transformer来提升DERT目标检测器的速度(文末附论文下载)(一)
1375 0
|
弹性计算 数据可视化 机器人
基于ECS搭建ROS Kinetic机器人操作系统
将ROS机器人操作系统搭建至云端,实现远程的机器人控制
1032 1
|
4月前
|
机器学习/深度学习 算法
WebSailor:探索 WebAgent的超人类推理能力
通义实验室推出WebSailor方案,通过创新的post-training方法显著提升开源模型在复杂网页推理任务中的表现。该方案包括合成高不确定性数据、多轮工具调用轨迹重构及强化学习算法DUPO应用,在多个评测中展现优越性能。
388 1
|
3月前
|
人工智能 JavaScript 前端开发
dify工作流+deepseek开启联网搜索
本内容介绍了如何创建一个包含网络搜索和大模型处理的工作流应用,通过编排开始节点、Web搜索API、LLM模型及结束节点,实现根据用户提问自动检索并返回答案的功能。示例展示了查询“今天日期是多少”的完整流程及各节点数据处理情况。
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
LEC: 基于Transformer中间层隐藏状态的高效特征提取与内容安全分类方法
通过利用Transformer中间层的隐藏状态,研究提出了层增强分类(LEC)技术,该技术能够以极少的训练样本和参数实现高效的内容安全和提示注入攻击分类,显著提升了模型的性能,并验证了其跨架构和领域的泛化能力。
391 11
LEC: 基于Transformer中间层隐藏状态的高效特征提取与内容安全分类方法
|
机器学习/深度学习 计算机视觉
深度学习与计算机视觉的最新进展
深度学习与计算机视觉的最新进展
|
JavaScript
成功解决:el-dialog弹出窗口、数据第一次没有加载、第二次打开才能加载数据。(每次页面刷新后、第一次打开dialog窗口、图片数不加载)
这篇文章分享了解决Vue中`el-dialog`弹出窗口在第一次打开时数据未加载问题的技巧,通过改变组件的`key`属性来强制Vue重新渲染DOM,从而确保数据正确加载。
成功解决:el-dialog弹出窗口、数据第一次没有加载、第二次打开才能加载数据。(每次页面刷新后、第一次打开dialog窗口、图片数不加载)
|
人工智能 自然语言处理 数据处理
【AI大模型】Transformers大模型库(十三):Datasets库
【AI大模型】Transformers大模型库(十三):Datasets库
759 0
|
机器学习/深度学习 数据可视化 PyTorch
使用Python实现深度学习模型:变分自编码器(VAE)
使用Python实现深度学习模型:变分自编码器(VAE)
855 2