论文阅读_对比学习_SimCSE

news/2024/5/17 3:07:40/文章来源:https://blog.csdn.net/xieyan0811/article/details/126914092

英文题目:SimCSE: Simple Contrastive Learning of Sentence Embeddings
中文题目:SimSCE:用简单的对比学习提升句嵌入的质量
论文地址:https://export.arxiv.org/pdf/2104.08821.pdf
领域:自然语言处理,对比学习
发表时间:2021.04
作者:Tianyu Gao, 普林斯顿大学,清华大学
出处:EMNLP
被引量:83
代码和数据:https://github.com/princeton-nlp/SimCSE
阅读时间:2022.09.18
(周五同事分享,简单整理笔记)

读后感

主要用于提升句嵌入的质量。方法很简单,利用BERT模型本身的dropout性质,通过同一输入输出不同嵌入作为正例对,然后取同一batch下的反例对训练模型。

介绍

自监督学习主要包含:生成式,对比式,对抗式。其中的对比学习原理是:利用无监督数据,通过巧妙的方法构造正例/反例(一般是一个正例对应多个反例),训练模型,让正例距离足够近,反例距离足够远,以利用无监督数据,进行更好地表示(表征)。
一般设计包含三部分:构造正/负例;优化损失函数;调整模型编码器。

评价对比学习的质量有两个关键指标:alignment和uniformity。其中alignment指的是正例中数据对表示的一致性:

uniformity指的是嵌入空间分布的均匀性:

其中Pdata指空间中所有实例。也就是说正例距离越近越好,而随机采样的数据对的距离应该分布在超球体表面。

方法

无监督数据训练SimCSE

之前生成近似正例的方法有:随机增删,近义词替换,交换词序等。本文利用 BERT 模型本身包含 dropout,这样同一个句子两次送入模型,由于随机dropout,最终的编码也不同。用这种方法作为数据增强,生成对比学习中的正例对,使用同一batch中的其它实例作为反例。损失函数定义如下:

表-1对比了文中方法和其它常用方法(删词,剪切),在同义句子匹配STS-B任务中的效果:

图-2把损失拆分成alignment和uniformity,位置处于左下角时效果最好(两个loss都小);可以看到随着迭代训练损失的变化(箭头方向),其中红色线为SimSCE在两个评测方向的变化相对最好。

有监督数据训练SimCSE

文中还研究了SimSCE对比学习如何利用有监督学习的数据来提升模型的表现力。具体使用自然语言推理任务(NLI)数据,NLI用以判断两个句子的关系是:蕴含、中性或矛盾。利用训练集中的标注信息产生对比学习中的正/负例。

选择标注数据
为对比 NLI 的提升效果,先探索了一些构造正例的方法:

  • 使用Kaggle比赛的QQP数据集,它的训练数据标注了两个问句语义是否相同。
  • 使用Flickr30,对每个图片人工标注了五个标题,可将其中的两两标注组成正例对。
  • 使用ParaNMT,大规模的反向翻译数据集(如:中->英->中),作为正例对。
  • 使用NLI任务数据集,最终NLI数据集效果最好,这是由于它包含高质量的众包人工标注,并且正例中词汇重合度小(同一词在两个正例对中均出现)。

将矛盾关系对作为硬负例
为了更好利用NLI数据集,利用标注为矛盾的实例,生成硬负例,并修改了损失函数,实验证明了它的有效性:

可以看到,这里硬负例被充分利用(被计入了N次),图-4展示了实验结果:

为了公正的对比,sample列只采样了134k正例来训练模型。可以看到不同任务训练的模型对 STS-B 效果的提升。

各向异性

各向异性意思是所有向量都被映射在了一个“狭窄”的高维空间。而uniformity是评价所有实例在向量空间中是否均匀分布,SimCSE在uniformity方面提升,也改善了自然语言编码的各向异性问题。

图-3对比了目前各种流行模型的alignment和uniformity:

实验

主实验使用句子相似度任务,在有监督和无监督两方面,对比了不同方法的效果:

可以看到SimSCE效果已超过了目前业界使用最为广泛SBERT(挛生网络)模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_9898.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis的基本使用

1.Redis简介 (1)什么是Redis ①Redis是一个基于内存的key-value结构数据库 ②基于内存存储,读写性能高 ③适合存储热点数据(热点商品、资讯、新闻) ④Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、…

计组--存储系统

存储系统 思维导图: 存储器概述 存储器的分类 按在计算机中的作用(层次)分类 主存储器,简称主存(内存) 存放计算机运行期间所需的程序和数据,CPU可以直接对其进行访问。 辅助存储器,简称辅存(外存) 辅存的内容需要调入主存后才…

普中A6开发版——XPT2046四引脚切换测量(含详细教程以及原理图等资料)

文章目录一、简介二、原理图以及手册三、接线四、选择数码管芯片原理讲解五、代码一、简介 本文介绍了XPT2046的使用方法以及普中A6开发版的接线等,并从原理图以及手册中摘选了详细的介绍,充分理解其工作原理。XPT2046本来是一个电阻式触摸屏控制器&…

监控系统架构方案

前言 对于企业级服务器管理,站群管理,针对服务器的监控是非常必要的。 通常,在电脑出现卡死,或进程停止或被挂起的情况下,大家都会使用任务管理器查看进程情况。针对电脑流畅性或资源优化,通常会使用资源管…

物联网开发笔记(19)- 使用Micropython开发ESP32开发板之连接WIFI热点

我们的ESP32开发板是拥有WIFI和蓝牙功能的。这里我们先告诉大家如何将ESP32开发板连接到我们家里的无线路由器上,并和连接到家里无线路由器的一台电脑进行通讯。 一、环境 ESP32开发板Thonny IDEWin10网络调试助手工具 后面设备联网的基本信息:开发板IP…

网课答案查题方法详细步骤

网课答案查题方法详细步骤 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 题库:题库后台(点击跳转&#…

Dobbo微服务项目实战(详细介绍+案例源码) - 1.项目介绍及环境配置

系列文章目录 项目介绍及环境配置 文章目录系列文章目录一、项目介绍1. 功能2. 技术选型3. 页面预览⑴. 登录⑵. 交友(主页)⑶. 探花⑷. 搜附件⑸. 桃花传音⑹. 测灵魂⑺. 圈子⑻. 消息⑼. 小视频⑽. 我的二、开发工具1. YAPI2. Android模拟器3. 调试工…

ElasticSearch 命令总结

目录0,ES 与关系型数据库类比1,查看集群信息2,查看索引信息3,创建索引1,创建索引2,重建索引4,文档相关操作1,查看文档2,写入文档3,更新文档4,删除…

上海亚商投顾:A股持续调整 券商成做空主力

上海亚商投顾前言:无惧大盘大跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪三大指数今日低开低走,午后均跌超2%,证券、房地产、煤炭等板块跌幅居前。券商股全线下挫&am…

centos8升级宝塔导致的openssl系列问题

故事的发生是这样的,从前有座山 这个问题很古怪,起先是我把宝塔面板从7.9.3升级到7.9.4,结果升级后宝塔弹出 libk5crypto.so.3: undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b 再后来就是重启的话,连ssh都进不去&…

第137篇 荷兰拍卖

介绍荷兰拍卖,并通过简化版Azuki荷兰拍卖代码,讲解如何通过荷兰拍卖发售 ERC721标准的NFT。 1.荷兰拍卖 荷兰拍卖(Dutch Auction)是一种特殊的拍卖形式。 亦称“减价拍卖”,它是指拍卖标的的竞价由高到低依次递减直到第一个竞买人应价(达到或超过底价)时击槌成交的一种…

05-Java面向对象

文章目录初识面向对象面向过程&面向对象回顾方法及加深对象的创建分析创建与初始化对象构造器详解构造器-无参(默认)构造器-有参创建对象内存分析(简易)面向对象的三大特征封装封装的作用封装演示继承继承示例SuperSuper注意点super VS this方法重写…

Linux 虚拟地址空间

目录 1、一段代码引出一个问题 运行结果: 讨论: 2、Linux下进程虚拟地址空间分布 3、什么是虚拟地址空间? 4、虚拟地址出现之前:进程直接访问物理内存 5、再述虚拟地址空间 虚拟地址空间结构体是如何进行区域划分的呢&…

HTTP1.x协议详解和HTTP2.0笔记

http协议的作用就是指定两个web应用,之间的一种规则,各种特点,管道化,io多路复用,缓存,状态码,都是基于协议之间的字段,和io之间的调度来实现 HTTP的诞生 1989 年 3 月 CERN&#x…

Linux运维笔记[2]-宝塔面板

宝塔面板 宝塔Linux面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能。 有30个人的专业团队研发及维护,经过200多个版本的迭代,功能全,少出错且足够安全,已获得全球百万用户认可安装。 openEuler安装宝塔面板…

ElasticSearch(九)【SpringBoot整合】

九、SpringBoot整合Elasticsearch 9.1 基本环境配置 创建一个springboot工程springboot-elasticsearch在pom.xml导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifac…

Kafka3.1简介及Kafka3.1部署、原理和API开发使用介绍

Kafka3.1简介及Kafka3.1部署、原理和API开发使用介绍第1章-kafka简介 1-1.消息队列简介 什么是消息队列 “消息队列”是在消息的传输过程中保存消息的容器。“消息”是在两台计算机间传送的数据单位。 英文名&#xff1a;Message Queue&#xff0c;经常缩写为MQ 可以简单理…

ElasticSearch之Kibana安装及使用

文章目录1. 安装1.11.2 上传安装包并解压1.3 生成证书1.3 修改配置1.4 修改目录拥有者1.5 启动软件1.6 使用Kibana官方介绍&#xff1a;Kibana 是一个免费且开放的用户界面&#xff0c;能够让您对 Elasticsearch 数据进行可视化&#xff0c;并让您在 Elastic Stack 中进行导航。…

[极客大挑战 2020]

[极客大挑战 2020]Roamphp1-Welcome 已进入页面&#xff0c;以为是这道题的环境不对&#xff0c;可是查看f12竟然有东西&#xff0c;然后查一下405 请求方式有误&#xff0c;比如应该用GET请求方式的资源&#xff0c;用了POST 改为post请求方式&#xff0c;出现源码&#xff…

django的settings配置详解

1.介绍 BASE_DIR 默认值&#xff1a;os.path.dirname(os.path.dirname(os.path.abspath(__file__)))。 这个是Django项目文件夹所在目录得绝对路径DEBUG DEBUG 默认值是True。 在本地开发测试环境下设置DEBUGTrue可以显示bug信息&#xff0c;便于开发者找出代码错误所在。 当…