文 | 花小花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中却是反过来了,希望模型学习实例级别的特征。

寻求报道、约稿、文案投放:
添加微信xixiaoyao-1,备注“商务合作”

萌屋作者:花小花Posy

目前在墨尔本大学NLP组读Ph.D.,主要感兴趣方向包括常识问答,知识图谱,低资源知识迁移。期待有生之年可见证机器真正理解常识的时刻! 知乎ID:花小花Posy

作品推荐:

1.我拿乐谱训了个语言模型!

2.一句话超短摘要,速览752篇EMNLP论文

3.Facebook提出生成式实体链接、文档检索,大幅刷新SOTA!

后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

 

[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

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

  1. #今日论文推荐#ACL 2022 | 引入角度margin构建对比学习目标,增强文本语义判别能力

    #今日论文推荐#ACL 2022 | 引入角度margin构建对比学习目标,增强文本语义判别能力 聚焦的问题:近年来基于对比学习的句子表示学习研究取得了较大的进展,但是大多数方法都只关注如何挑选对比学 ...

  2. ACL 2022 | 引入角度margin构建对比学习目标,增强文本语义判别能力

    ©作者 | 牟宇滔 单位 | 北京邮电大学 研究方向 | 自然语言理解 论文标题: A Contrastive Framework for Learning Sentence Representati ...

  3. 【跨模态】【对比学习】CLIP:文本监督CV的预训练(2021)

    文章目录 前言 一.整体架构 1.训练 2.测试(迁移学习zero shot) 3.prompt engineering and ensembling 二.实验 1.few-shot与zero-sho ...

  4. 对比学习+Prompt+FGSM实现文本分类

    本文主要是基于Robert的文本分类任务,在此基础上考虑融合对比学习.Prompt和对抗训练来提升模型的文本分类能力,我本地有SST-2数据集的train.txt.test.txt.dev.txt三个 ...

  5. 丹琦女神新作:对比学习,简单到只需要Dropout两下

    文 | 花小花Posy 上周把 <对比学习有多火?文本聚类都被刷爆了...>分享到卖萌屋的群里后,遭到了群友们一波嫌弃安利. 小伙伴们表示,插入替换的数据增强方式已经Out了,SimCSE ...

  6. 【NLP】文本分类还停留在BERT?对偶对比学习框架也太强了

    论文简介:对偶对比学习:如何将对比学习用于有监督文本分类  论文标题:Dual Contrastive Learning: Text Classification via Label-Aware Da ...

  7. XMC-GAN:从文本到图像的跨模态对比学习

    Google提出了一个跨模态对比学习框架来训练用于文本到图像合成的 GAN 模型,用于研究解决生成的跨模态对比损失问题. 文 / Han Zhang, Research Scientist and J ...

  8. 超越SimCSE两个多点,Prompt+对比学习的文本表示新SOTA

    可能是因为对比学习,今年以来文本表示方向突然就卷起来了,SOTA刷的嗖嗖的,我还停留在我们ConSERT的阶段,结果别人不精调就已经超了. 昨天实习同学发了我几篇Open Review上ACL的投稿, ...

  9. 张俊林:对比学习在微博内容表示的应用

    点击下面卡片,关注我呀,每天给你送来AI技术干货! 分享嘉宾:张俊林博士 新浪微博 编辑整理:李桂荣 中南财经政法大学 出品平台:DataFunTalk 点这里:当知识图谱遇上预训练语言模型 -- 留 ...

最新文章

  1. 常见的 IO 模型有哪些?Java 中 BIO、NIO、AIO 的区别?
  2. android内存泄漏原因分析,Android Studio3.6的内存泄漏检测功能 VS LeakCanary
  3. 【转】Info.plist中常用的key简介
  4. 大话ion系列(二)
  5. Flexbox兼容性语法汇总
  6. 打开word时出现“在加载ThisDocument时出现错误”
  7. mysql查询字段变慢,MySQL Query IN()子句在索引列上变慢
  8. 来自lombok的注解(解决idea中的找不到get,set方法,找不到log的问题)
  9. Colaboratory平台+Mask R-CNN进行模型训练和实例分割
  10. 易筋SpringBoot 2.1 | 第三十五篇:实战Aparche Maven 的核心概念与理论 Maven仓库管理 从入门到精通
  11. Angr安装与使用之使用篇(十二)
  12. 数字电子技术基础是计算机专业,数字电子技术基础
  13. 总结SlickEdit的快捷键,分享当前自用配置
  14. 信息学奥赛一本通1159:斐波那契数列
  15. 计算机上word如何批量打印,批量打印文件夹中的多个Word文档
  16. 【OPNsense】广东电信拨号用户通过OPNsense获取原生IPV6地址
  17. 如何将ape无损音转码为wav文件
  18. 私藏版64页DevOps笔记免费分享
  19. 超详细的装饰器Decorators解读--附实例
  20. 网络程序设计课程总结

热门文章

  1. MyEclipse中SVN的常见的使用方法
  2. js中this和回调方法循环-我们到底能走多远系列(35)
  3. 基于FPGA的图像处理(一)--System Generator介绍
  4. [推荐]VMware Workstation 6.5虚拟机(汉化补丁+注册机+原版安装文件)
  5. Linux内核代码,第一次看到这样使用的宏
  6. 【深度】韦东山:一文看尽 linux对中断处理的前世今生
  7. 你需要知道的Linux 系统下外设时钟管理
  8. 倩女幽魂7月20日服务器维护,倩女幽魂手游7月20日更新什么?倩女幽魂手游7月20日更新一览...
  9. JS面向对象——Object对象的方法补充、原型继承关系图
  10. RIP协议及距离向量算法(详解)