对比学习有多火?文本聚类都被刷爆了…

article/2025/10/1 13:36:53

文 | 花小花Posy

大家好,我是小花。

对比学习的大火???? 越来越旺了,已然从CV蔓延到NLP了。今天给大家介绍的正是一篇将对比学习应用到文本聚类上的工作,NAACL21新鲜出炉的paper——《Supporting Clustering with Contrastive Learning》。该工作在8个短文本聚类数据集上取得了显著提升(比如正确率提升3%~11%)。

所谓对比学习,重点在于对比,那对比的对象是谁?
答曰:增强的数据。假设如果两个增强句子的原句子一样,那么拉近它们,否则推远它们。

在CV领域,对比学习是和携数据增强一起出道的。给定一张图片,生成不同的变体去增强它,然后用对比思想去学习。NLP领域也如法炮制。给一个句子,使用数据增强去生成和原句子语义相似的句子。比如下面的例子[1]:

如果两个增强句子来自同一个原句子,那么它们是同源的,否则是不同源的。本文发现,利用对比学习的特性,即拉近同源句子、拉远不同源句子,可以解决短文本聚类问题中一个令人头疼的问题——如果学习过程开始时,不同类别在表示空间中就彼此重叠,那么不管怎么学习都很难将各个类别区分开。

下图是原文中对比的原始数据的分布(Original) 和使用聚类(Clustering)模型学习后的分布。

可以看到,Clustering整体效果还不错,但相邻类别黏在一起、无法区分的现象仍然是存在。

而本文发现,使用对比学习(Instance-CL)可以很好地解决该问题。对比学习可以将各个重叠的类别分散开。

更进一步,本文发现将对Instance-CL和Clustering结合(SCCL),不仅可以可以更好地区分不同类别;而且通过显示地拉近同一类的数据的距离,可以促使类内分布更加紧凑,从而达到更优质的聚类效果。

简单讲,本文提出了一个训练框架SCCL,它结合了bottom-up的实例对比学习top-down的聚类学习,收获了更好的类内距离和类间距离。

论文题目:
Supporting Clustering with Contrastive Learning

论文链接:
https://arxiv.org/pdf/2103.12953.pdf

Arxiv访问慢的小伙伴也可以在 【夕小瑶的卖萌屋】订阅号后台回复关键词 【0422】 下载论文PDF~

对比学习扫盲

对比学习的目标是区分两个实例是否是由同一个源数据采样/增强得来,如果是,让它们在表示空间中越接近;如果不是,让它们在表示空间中远离。 早在2006年,Hadsell等人[2]就提出了通过对比正负例来学习表示的思想,但其真正火起来是始于谷歌在19年提出的SimCLR[3]框架。下图展示了SimCLR中对比学习思想的示例图,可以更加直观理解整个流程。具体来说,对于一个源数据 , 使用某种数据增强的方式,给它生成一对增强数据 ,然后对它们哥俩进行编码、映射,接着最大化它们的相似度。

对比学习的一个关键点是如何生成增强数据。在CV中,数据增强依赖图片的空间不变性,通过旋转、缩放、裁剪等方式去给图片增强。在NLP领域中,数据增强主要依靠的是语义不变性,常用方法有词汇替换、回译、字面转换、随机噪声注入等等[3]。本文尝试了3种不同的替换方式,分别是:

  1. WordNet Augmenter:使用WordNet中的同义词对输入 进行替换

  2. Paraphrase via back translation:使用回译的方式生成输入 复述

  3. Contextual Augmenter:对于输入 , 利用预训练Transformer找到其中N个候选位置,对其进行插入或替换

说完了对比学习,接下来我们聊一聊本文是如何使用对比学习及它的效果如何。

SCCL的训练框架

上图展示了SCCL的训练框架,相比以前的聚类方法(蓝色部分),SCCL使用了数据增强,并利用了对比学习去优化增强的数据。相对应的,模型针对Clustering有一个损失函数对源数据进行优化,Instance-CL有一个损失函数对增强数据进行优化。

模型概念了解起来相对简单,就不放公式了。想看公式加深理解的朋友们可以去看原论文。下面看看实验结果如何。

简单的模型,大大的提升

文中使用 ACC(Accuracy)和 NMI(Normalized Mutual Information)两个评价指标来衡量聚类性能。下图展示了SCCL在8个短文本聚类的数据集上的实验结果(几乎完爆所有数据集):

除了大规模的SOTA外,文中还总结了SCCL相比其它模型的优点:

  1. 训练更简单:SCCL只需要端到端的训练,有的模型(STCC)却需要分多步训练,或者使用了垂直领域的特征进行增强(比如HAC-SD)。

  2. 对数据噪声更鲁棒:SCCL不需要任何的数据预处理,其它大部分模型都对数据进行了预处理,比如移除停用词、标点符号、小写化处理。

对比学习加在什么阶段?

SCCL模型包含了两个损失函数:一个负责Clustering的优化,一个负责Instance-CL的优化。那么对于有多个损失函数时,是选择pipeline的方式去一个一个训练呢?还是使用jointly训练的方式更好呢

本文对比了两种方式的区别,并与单独使用其中一个进行对比。下图显示了使用Accuracy作为指标时各个模型的表现:

可以看出,相比单独使用Instance-CL或者Clustering,结合两者使用的两个模型在各个数据集上都取得了提升,而且jointly训练(SCCL)取得的提升一致优于pipeline训练(SCCL-Seq,先训练Instance-CL在训练Clustering)。

数据增强哪家好?

上文提到,本文使用了三种数据增强的方法,那么哪一种最优? 下图展示了三种方法在各个数据集上的实验结果:

整体来讲,Ctxt在各个数据集上的性能都是最好的,也就是说利用预训练Transformer作为增强器是最好的。同时也可看到,有一部分数据集在不同增强方法下表现差别很大,比如SearchSnippers和GooglenewsS,而有一部分的敏感度则较低,比如AgNews、Biomedical和GooglenewsTS。

说明在我们实际使用过程中,到底使用哪种增强方式有效还是需要做做对比实验才晓得

这里我们接着问一个问题。要是我们使用多个增强器呢?效果会变得更好吗?文中对比了使用1个增强器和2个增强器的区别,以及当选择替换不同比例的源句子时的区别。

上图中蓝色表示使用1个增强器橘色表示使用2个增强器。可以看出:

  1. 2个增强器在GoogleNewTS上有轻微的提升,并且没有随着增强数据中被替换词的比例上升而下降;

  2. stackoverflow上的表现却截然不同,随着替换比例的增高,使用两个增强器反而导致性能大幅度下降。

为了探究原因,文中对比了在不同替换比例和不同增强器下(1个或2个),原始文本和增强文本在训练之初时的cosine相似度:

可以看出,当使用2个增强器(橘色)时,增强文本与原始文本之间的相似度逐渐降低,从而解释了为什么使用2个增强器并不一定能使模型性能变好。

小结一下

本文提出了一种简单、有效的无监督聚类的模型SCCL,在基于距离的聚类方法上,使用逐例对比学习区分不同类别。通过联合优化逐例对比学习的损失和聚类的损失,使得模型在拉开距离的同时保证类内距离更近。SCCL在8个短文本聚类数据集上进行测试,大部分实验结果都取得了SOTA,Accuracy提升了3% ~ 11%,NMI提升了4%~15%,证明了模型的有效性。

最后的最后,大家不妨思考下,为什么聚类+对比学习可以带来如此大的提升呢?小花的理解是,聚类关注高层级的语义概念,而实例对比的研究对象往下渗透了一层,它的目标是让相似的实例距离更近,不同的实例距离更远。将它们结合起来,可以:

  1. 增加细粒度的对比。

  2. 数据增强带来了更多的数据,将更多先验知识告诉了模型。

  3. 顶层抽象和底层细节的结合,就像我们人学习的时候既需要具体案例的学习,又需要抽象理解。二者搭配,效果更佳。

有趣的是,在CV中,对比学习是为了让模型不关注像素细节,学习高级特征来区分不同对象。但是在NLP中却是反过来了,希望模型学习实例级别的特征。

一起交流

想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定要备注信息才能通过)

 

[1].A Visual Survey of Data Augmentation in NLP https://amitness.com/2020/05/data-augmentation-for-nlp/

[2].Dimensionality Reduction by Learning an Invariant Mapping https://cs.nyu.edu/~sumit/research/assets/cvpr06.pdf

[3].A Simple Framework for Contrastive Learning of Visual Representations. https://arxiv.org/pdf/2002.05709.pdf

END -



关于BERT,面试官们都怎么问

2021-03-21

如何利用多任务学习提升模型性能?

2021-03-17

增量学习(Incremental Learning)小综述

2021-02-24

Attention!当推荐系统遇见注意力机制

2021-02-22


http://chatgpt.dhexx.cn/article/EMU1WCHy.shtml

相关文章

(附源码)小程序 记账微信小程序 毕业设计 180815

记账微信小程序 摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,记账微信小程序被用户普遍使用&#xff0…

使用Python+OpenCV+Tensorflow实现图像聚类

介绍 大家好,最近在参加深度学习竞赛时,遇到了一个有趣的问题,即如何将给定的图像集进行聚类,你可能会说,这不是一个简单的分类问题吗?使用卷积神经网络, 就实现,但关键在于没有合适…

论文阅读笔记(15):Deep Subspace Clustering with Data Augmentation,深度子空间聚类+数据增强

论文阅读笔记(15):Deep Subspace Clustering with Data Augmentation,深度子空间聚类数据增强 摘要1 介绍2 相关工作带增强的聚类方法具有一致性损失的自监督子空间聚类中的自表达模型 3 深度子空间聚类数据增强总结 4 寻找有效增…

【SaaS金羊毛】微信小程序We分析

微信前几天发布了通告https://mp.weixin.qq.com/cgi-bin/announce?actiongetannouncement&announce_id11652079103ziYFG&version&langzh_CN&token,小程序统计模块会升级为”We分析“这样一款独立的产品。实际上这也符合很多B端产品的趋势&#xff…

Python 如何确定K-Means聚类的簇数

背景 “人以类聚,物以群分”,在大千世界中总有那么一些人,性格爱好、行为习惯比较相近,我们就会把他们归为一类人,这就是我们人脑自动进行的一个聚类(归类)。 在数据分析中,我们也经常拿数据来进行K-Means聚…

【机器学习】聚类代码练习

本课程是中国大学慕课《机器学习》的“聚类”章节的课后代码。 课程地址: https://www.icourse163.org/course/WZU-1464096179 课程完整代码: https://github.com/fengdu78/WZU-machine-learning-course 代码修改并注释:黄海广,ha…

【聚类算法】10种Python聚类算法完整操作示例(建议收藏

点击上方,选择星标,每天给你送干货! 来源:海豚数据科学实验室 著作权归作者所有,本文仅作学术分享,若侵权,请联系后台删文处理 聚类或聚类分析是无监督学习问题。它通常被用作数据分析技术&…

理论+实战,一文详解最常使用的10个聚类算法(附代码)

聚类或聚类分析是无监督学习问题。它通常被用作数据分析技术,用于发现数据中的有趣模式,例如基于其行为的客户群。有许多聚类算法可供选择,对于所有情况,没有单一的最佳聚类算法。 相反,最好探索一系列聚类算法以及每…

基于微信小程序的家校通系统-JAVA【数据库设计、源码、开题报告】

第一章 绪 论 1.1选题背景 随着网络时代的到来,互联网的优势和普及时刻影响并改变着人们的生活方式。在信息技术迅速发展的今天,计算机技术已经遍及全球,使社会发生了巨大的变革。 为了不受时间和地点的限制,智能手机用户可以通…

python新闻文本聚类_TextCluster:短文本聚类预处理模块 Short text cluster

推荐Github上一个NLP相关的项目: RandyPen/TextCluster 项目地址,阅读原文可以直达,欢迎参与和Star: https://github.com/RandyPen/TextCluster 这个项目的作者是AINLP交流群里的昭鸣同学,该项目 开源了一个短文本聚…

【组队学习】十一月微信图文索引

十一月微信图文索引 一、组队学习相关 周报: Datawhale组队学习周报(第037周)Datawhale组队学习周报(第038周)Datawhale组队学习周报(第039周)Datawhale组队学习周报(第040周&…

k-means聚类算法从入门到精通

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达 k-means算法是非监督聚类最常用的一种方法,因其算法简单和很好的适用于大样本数据,广泛应用于不同领域,本文详细总结了k-means聚类算…

LaneAF | 利用Affinity Field聚类进行车道线实例分割

点击上方“计算机视觉工坊”,选择“星标” 干货第一时间送达 论文:https://arxiv.org/abs/2103.12040 开源代码:https://github.com/sel118/LaneAF 0 动机 车道线检测对于辅助驾驶、自动驾驶至关重要。全球范围内多种多样的车道线以及复杂的道…

机器学习 --- 聚类性能评估指标

第1关:外部指标 任务描述 本关任务:填写 python 代码,完成 calc_JC 函数、calc_FM 函数和 calc_Rand 函数分别实现计算 JC系数、FM 指数 和 Rand 指数 。 相关知识 为了完成本关任务,你需要掌握: JC 系数; FM 指数&…

如何用 DBSCAN 聚类算法做数据分析?

DBSCAN属于无监督学习算法,无监督算法的内涵是观察无标签数据集自动发现隐藏结构和层次,在无标签数据中寻找隐藏规律。 聚类模型在数据分析当中的应用:既可以作为一个单独过程,用于寻找数据内在规律,也可以作为分类等…

激光点云的物体聚类

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达 文章导读 本文针对自动驾驶中三维点云的道路目标聚类进行讲解,从聚类算法的原理出发,介绍几种常用的点云障碍物聚类算法,并对比分析算…

K-means聚类算法

实训目标 本实训项目介绍无监督学习中,使用最广泛的 K-means 聚类算法。 先修知识 本实训项目假设,你已经掌握了初步的 Python 程序设计的基础知识。学习者若有一些 numpy 的使用经验,则可更快速地通过实训。 实训知识点 欧几里得距离 估算簇…

一文详解激光点云的物体聚类

点击上方“3D视觉工坊”,选择“星标” 干货第一时间送达 文章导读 本文针对自动驾驶中三维点云的道路目标聚类进行讲解,从聚类算法的原理出发,介绍几种常用的点云障碍物聚类算法,并对比分析算法的优劣和适用场景,从工程…

[计算机毕业设计]模糊聚类算法

前言 📅大四是整个大学期间最忙碌的时光,一边要忙着准备考研,考公,考教资或者实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过…

51nod-1548:欧姆诺姆和糖果

1548 欧姆诺姆和糖果 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 一天,欧姆诺诺姆来到了朋友家里,他发现了许多糖果。有蓝色和红色两种。他知道每颗…