Supporting Clustering with Contrastive Learning笔记

news2024/11/24 17:41:38

在这里插入图片描述
这篇文章使用了对比学习进行了聚类,一种端到端的离线聚类模型。

主要流程

Feature model

比较主流的句向量编码器SBERT。本文主要使用两个损失函数去微调SBERT的参数。使得SBERT的生成的特征表示具有以下两个特点:

  • 簇间距离拉大(inter-cluster)
  • 簇内距离缩小(intra-cluster)

对于数据 x x x, 编码: e = Φ ( x ) e = \Phi(x) e=Φ(x)

微调完成之后,将得到的 Feature Matrix ,使用K-means进行聚类。典型的离线聚类(outline-cluster)

cluster head

聚类头主要是用这篇paper的思想。

使用 SBERT 对数据进行编码得到 Feature Matrix,然后利用K-means算法进行聚类。得到K(数据集 簇类的数量)个聚类中心。并将他们设置成簇类头的初始参数。
每个前向传播会使用特征向量 x x x 和聚类中心参数 μ \mu μ,结合t-student分布生成一个概率矩阵Q:
q i , k = ( 1 + ∣ ∣ e i − μ k ∣ ∣ 2 2 / α ) − α + 1 2 ∑ k ′ = 1 K ( 1 + ∣ ∣ e i − μ k ′ ∣ ∣ 2 2 / α ) − α + 1 2 q_{i, k} = \frac{(1+||e_i-\mu_k||_2^2 / \alpha)^{-\frac{\alpha+1}{2}}}{\sum_{k'=1}^{K} (1+||e_i-\mu_{k'}||_2^2 / \alpha)^{-\frac{\alpha+1}{2}}} qi,k=k=1K(1+∣∣eiμk22/α)2α+1(1+∣∣eiμk22/α)2α+1
其中, α \alpha α是超参数, q i , k q_{i, k} qi,k 表示数据 x i x_i xi属于 簇 k k k的概率。
然后再使用一个辅助函数,生成一个目标概率分布,这个函数的特点是将Q中每一行数值比较大的元素变得更大一点,相当于是将置信度比较高的数据着重学习一下。
辅助概率分布P:
p i , k = q j k 2 / f k ∑ k ′ q j k 2 / f k ′ p_{i, k} = \frac{q_{jk}^2/f_k}{\sum_{k'} q_{jk}^2/f_{k'}} pi,k=kqjk2/fkqjk2/fk
其中, f k = ∑ i = 1 M q i k f_k = \sum_{i=1}^{M}q_{ik} fk=i=1Mqik, M M M 是batch size 的大小。
最后使用KL散度损失函数,使Q的分布不断向P的分布靠近。

这种做法有三种好处:

  • 提高聚类的纯度
  • 注重使用置信度高的数据
  • 归一化每个之心的损失贡献,防止大簇扭曲数据的特征分布空间。(对这一点我存在质疑,当面对长尾数据集的时候,归一化每个质心的损失贡献会不会起到反作用?)

Contrastive head

这一块的工作相对来说多一点,会涉及到数据增强。
一个数据 x i x_i xi,经过两种数据增强得到 x i a , x i b x_i^{a}, x_i^b xia,xib,在经过编码得到 z i { a , b } = Φ ( x i { a , b } ) z_i^{\{a, b\}} = \Phi(x_i^{\{a, b\}}) zi{a,b}=Φ(xi{a,b})。这篇论文采用了基于上下文的文本增强方式,并和反译法和增删词法做了比较。并说明对于自己的模型,基于上下文方式的文本增强效果更好。
聚类头的就够很简单:一个三层的非线性MLP。
具体的学习方式就是对比学习的基本范式:
l ^ i a = − log ⁡ exp ⁡ ( s ( z i a , z i b ) / τ I ) ∑ j = 1 M [ exp ⁡ ( s ( z i a , z j a ) / τ I ) + exp ⁡ ( s ( z i a , z j b ) / τ I ) ] l ^ i b = − log ⁡ exp ⁡ ( s ( z i a , z i b ) / τ I ) ∑ j = 1 M [ exp ⁡ ( s ( z i b , z j a ) / τ I ) + exp ⁡ ( s ( z i b , z j b ) / τ I ] \hat{l}_i^a = -\log \frac{\exp(s(z_i^a, z_i^b)/\tau_I)}{\sum_{j=1}^{M} [\exp(s(z_i^a, z_j^a)/\tau_I) + \exp(s(z_i^a, z_j^b)/\tau_I) ]} \\ \hat{l}_i^b = -\log \frac{\exp(s(z_i^a, z_i^b)/\tau_I)}{\sum_{j=1}^{M} [\exp(s(z_i^b, z_j^a)/\tau_I) + \exp(s(z_i^b, z_j^b)/\tau_I ]} l^ia=logj=1M[exp(s(zia,zja)/τI)+exp(s(zia,zjb)/τI)]exp(s(zia,zib)/τI)l^ib=logj=1M[exp(s(zib,zja)/τI)+exp(s(zib,zjb)/τI]exp(s(zia,zib)/τI)
总的损失函数:
L i n s = 1 2 M ∑ i = 1 N ( l ^ i a + l ^ i b ) L_{ins} = \frac{1}{2M} \sum_{i=1}^{N} (\hat{l}_i^a + \hat{l}_i^b) Lins=2M1i=1N(l^ia+l^ib)
其中, τ I \tau_I τI 是温度参数, M M M 是batch size的大小, s ( ⋅ ) s(\cdot) s() 是相似性度量,具体表达为: s ( z i , z j ) = z i T z j / ∣ ∣ z i ∣ ∣ 2 ⋅ ∣ ∣ z j ∣ ∣ 2 s(z_i, z_j) = z_i^Tz_j / ||z_i||_2 \cdot ||z_j||_2 s(zi,zj)=ziTzj/∣∣zi2∣∣zj2

结果展示

在这里插入图片描述
效果显而易见。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

并发编程(2)—Java 对象内存布局及 synchornized 偏向锁、轻量级锁、重量级锁介绍

一、Java 对象内存布局 1、对象内存布局 一个对象在 Java 底层布局(右半部分是数组连续的地址空间),如下图示: 总共有三部分总成: 1. 对象头:储对象的元数据,如哈希码、GC 分代年龄、锁状态…

Android中的OpenGL

前面有关 Android 音视频的渲染都是使用MediaCodec进行渲染,MediaCodec也有自己的弊端比如无法进行视频的编辑处理,而视频可以 OpenGL ES来进行渲染,可以很好进行处理,比如添加滤镜等,这里介绍下 Android 中 OpenGL&am…

GrowingIO是什么?如何将GrowingIO数据导入其他系统

GrowingIO是什么?GrowingIO 是一站式数据增长引擎整体方案服务商,以数据智能分析为核心,通过构建客户数据平台,打造增长营销闭环,帮助企业提升数据驱动能力,赋能商业决策、实现业务增长。GrowingIO 专注于零…

MyBatis-Plus框架解析?

简单介绍:MyBatis-Plus(简称 MP)(由苞米豆公司开源)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。MP会内置集成部分SQL方法,可以直接…

【应用管理总结 Objective-C语言】

一、把应用管理这个案例,给大家总结一下: 1.今天,经过一天的努力,我们终于把这个九宫格应用管理案例的所有功能都实现了吧, 我们一起来,一边看效果,一边来总结, 2.大家先想一下,当我们实现这个效果,按照最终的那个版本来想一下,这个代码是什么样的一个思路, 1)…

QT打包的两种方式

QT打包的两种方式: 一个是QT5自带的windeployqt(不需要下载安装),它可以找到程序(exe)用到的所有库文件,并且都拷贝到exe程序的当前文件。此时打包的exe较小,需要和拷贝进来的文件放…

大话数据结构-图的深度优先遍历和广度优先遍历

4 图的遍历 图的遍历分为深度优先遍历和广度优先遍历两种。 4.1 深度优先遍历 深度优先遍历(Depth First Search),也称为深度优先搜索,简称DFS,深度优先遍历,是指从某一个顶点开始,按照一定的规…

抗锯齿和走样(笔记)

Artifacts(瑕疵): 比如人眼采样频率跟不上陀螺的旋转速度,这时就有可能看到陀螺在反方向旋转怎么做抗锯齿(滤波): 在采样之前先进行一个模糊操作,可以降低锯齿的明显程度 通过傅里叶…

七【SpringMVC参数绑定】

目录🚩一 . 视图传参到控制器🚩二 . SpringMVC跳转方式🚩三 SpringMVC处理json请求和响应🚩四 SpringMVC静态资源处理✅作者简介:Java-小白后端开发者 🥭公认外号:球场上的黑曼巴 🍎…

Flask自定义接口,实现mock应用

问题:后端接口已提供,前端需要依赖后端接口返回的数据进行前端页面的开发,如何配合前端? mock接口 flask自定义接口实现查询接口:查询全部、部分查询 具体看下面的代码: #导入包 from flask import Fla…

企业如何选择固定资产管理系统?

如何促进企业内部信息化的建设,实现企业的高效管理和运转,是企业管理员经常考虑的问题。尤其是企业资金占比较多的固定资产该如何高效管理,是大家经常你讨论的问题。我们都知道行政部门管理着百上千件物品,且还要定期进行盘点&…

【python】标准库详解

注:最后有面试挑战,看看自己掌握了吗 文章目录Standard Library简介python内置对象如何安装发布第三方模块10最好用的模块汇总包的本质datetime模块案例Math模块random模块OS模块sys模块time模块总结自定义模块标准库模块用help查看time模块常用第三方库…

30 openEuler使用LVM管理硬盘-简介和安装

文章目录30 openEuler使用LVM管理硬盘-简介和安装30.1 LVM简介30.1.1 基本概念30.2 安装30 openEuler使用LVM管理硬盘-简介和安装 30.1 LVM简介 LVM是逻辑卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机…

【苹果内购支付】关于uniapp拉起苹果内购支付注意事项、实现步骤以及踩过的坑

前言 Hello!又是很长时间没有写博客了,因为最近又开始从事新项目,也是第一次接触关于uniapp开发原生IOS应用的项目,在这里做一些关于我在项目中使用苹果内购支付所实现的方式以及要注意的事项,希望能给正在做uniapp开…

Hive 数据倾斜

数据倾斜,即单个节点任务所处理的数据量远大于同类型任务所处理的数据量,导致该节点成为整个作业的瓶颈,这是分布式系统不可能避免的问题。从本质来说,导致数据倾斜有两种原因,一是任务读取大文件,二是任务…

Centos7 服务器基线检查处理汇总

1、服务器超时设置 问题描叙 TMOUT的值大于key2且小于等于{key2}且小于等于key2且小于等于{key1}视为合规 查看命令:export检测结果 超时时间:0处理方式 备份/etc/profile文件 cp /etc/profile /etc/profile_bak编辑profile文件 vim /etc/profile修改/新增 TMO…

Spring Cloud(微服务)学习篇(三)

Spring Cloud(微服务)学习篇(三) 1 nacos中使用openFeign(调用方式)实现短信发送 1.1 在shop-sms-api中创建com.zlz.shop.sms.api.service/vo/dto/util,目录结构如下所示 1.2 在pom.xml(shop-sms-api)中加入如下依赖 <dependencies><dependency><groupId>…

西电算法分析与设计核心考点汇总(期末真题,教材算法导论)

文章目录前言一、历年考题1.1 判断题1.2 单选题1.3 复杂度计算1.4 分治1.5 算法设计&#xff08;01背包&#xff0c;最短路径&#xff09;1.6 最大子数组问题1.7 算法设计&#xff08;最长回文串&#xff09;二、核心考点2.1 概述部分考点2.1.1 循环不变式loop-invariants2.1.2…

绪论 基本概念

数据结构 第一章 绪论 概念 数据data&#xff1a;是对客观事物的符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。 数据元素(data element:是数据的基本单位&#xff0c;在计算机程序中通常作为一个整体进行考虑和处理。 数据对象(data …

软件测试面试题和简历模板(面试前准备篇)

一、问题预测 1、让简单介绍下自己&#xff08;这个不用说了每次面试开场&#xff09; 面试官&#xff0c;你好&#xff0c;我叫xxx&#xff0c;xx年本科毕业&#xff0c;从事软件测试将近3年的时间。在此期间做过一些项目也积累过一些经验&#xff0c;能够独立地完成软件测试…