成本砍砍砍!不用数据也能用 BERT 做对比学习?

文 | 小昌
编 | 小戏

大家好,我是小昌,今天和大家聊一聊如何从 BERT 中获取好的句子表征。

大家都知道,BERT 的设计初衷是为了获得更好的单词表征。但是,利用 BERT 来表征句子的需求无论在学术界还是工业界都是非常紧迫的。因此,当下有许多方法被研究者们提出来去利用 BERT 来获取更好的句子表征。最直接的,就是对句子中的每一个单词的表征相加求均值。

而今天带来的这篇文章则是利用了对比学习,使得只使用 BERT 中的标识来表征输入的整个句子也能有很好的效果。与普通对比学习需要大量的额外数据作为训练目标的前提不同,该篇文章将对比学习的目标转换成了一种无监督的模式。因此,这种方法便不再需要额外的数据,确实又省力,效果又好!这篇文章就是《 Self-Guided Contrastive Learning for BERT Sentence Representations

论文题目:
Self-Guided Contrastive Learning for BERT Sentence Representations

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

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

1. 问题定义和设计思路

从 BERT 中获取句子表征的方法有很多种,但是都不够完美。在有监督任务中,BERT 最后一层预定义的表征便可以被用来作为整个句子的表征。原因在于表征常被用作下游任务的输入,在充分训练后能够更好地捕捉整句的信息

而在无监督任务中,通过来表征句子的能力仿佛失效了[1],取而代之的做法便是将句子输入 BERT,并对每个单词最后一层的表征进行均值池化操作。然而,这样的方法经过作者的验证是非常不稳定的。

因此,作者尝试利用对比学习的方式提出一种自引导机制,来解决无监督任务中BERT的句子表征问题。其核心在于将 BERT 的中间隐层用好,使得中间隐层的表征应该和最终句子的表征比较相似(BERT 的中间隐层应为句子表征的正例),因此这也能够摆脱对比学习对于额外数据的需求。此外,作者也重新调整了 NT-Xent 损失(一种在计算机视觉运用广泛的,属于对比学习任务的损失),使得最后的效果进一步提高。除了作者通过实验证明,他们的算法效果较优外,作者也表明其算法在不同领域任务中的表现也都更鲁棒。

2. 具体方法

为了获得高质量的向量来表征输入的句子,作者提出了一种自引导的对比学习方法,即利用 BERT 中间层的表征来作为对比学习的正例对象。这是因为 BERT 的中间层理论上也应该能够用来表征对应的句子,那么中间层的表征和的表征的相似度应该很高。下面用图来进一步具体化说明作者如何设计该算法的。

首先,作者对 BERT 进行复制得到 BERTF(参数固定)和 BERTT(参数可微调)。BERTF 在训练过程中是参数固定的,并起到提供指导训练的作用,而 BERTT 则是在训练过程中需要被微调来生成句子表征的。作者之所以在这里区分二者是希望在训练过程中,训练信号 BERTF 的效果能够始终保持。否则,特别是当 BERTFBERTT 在参数相同的时候,BERTF 的指导效果便会失效。此外,这里也体现了作者希望通过充分利用 BERT 本身不同层的知识来生成句子表征的思想。

随后,当给定一个包含 条句子的训练数据 时, 作者把句子 送入到 BERTF 中,便能得到 中每一个token在BERT中每一层的表征:

此处 BERT 的层数。其中的每一个 是整个句子中包含的 token 数,而 则是 BERT 的隐层表征的维度。

在获得了输入句子在 BERT 中每一层的表征后,作者使用了一个池化方法 ,对句子中每一层的表征 映射到 (从矩阵变为向量),来生成一个句子在 BERT 不同层中的表征。随后,作者再使用了一个采样方法 从句子的 层表征中,采样出一个最终的向量表征 。在此,作者只是使用了一个最大化池化和均匀采样,并表明,在此选择均匀采样是认为每一层的表征其实都有其重要性,因为 BERT 不同的层捕获了句子不同的语言学特征。

2.1 模型损失设计

之后,作者从 BERTT 获得了句子 表征,并认为表征是 的正样本。将 放入到一个集合中,便可得到 。而对于所有的 ,作者则使用 NT-Xent 损失来训练句子的表征。NT-Xent 损失来自于 SIMCLR[2]并被广泛地应用在计算机视觉任务中,其本身是希望选定的样本表征和为该样本增强的正例之间的表征能够更加接近,而选定的样本表征和负例的表征之间距离越远

在本论文中,作者则选用作为从中间层得到的句子表征的正例,而一批中的其他句子的表征以及其他句子从中间层获得的句子表征都为负例。具体的公式如下:

在此是一个温度超变量, 在此是一个由多层感知机构成的映射参数,是余弦相似度函数,而其中重要的匹配函数 是用来选取正例的方式,如下图所示

简单分析一下,如果希望该损失降低,那么 的部分就要变大。其中 的相似度越高,那么分子也就越大;  或者 与其它句子的表征 , 之间的差距越大,分母也就越小,那么它们的比值也就越大

此外,作者也添加了一个正则化项 来保证 BERTF(参数固定的)和 BERTT(参数可微调的)之间没有太大的差距。因此便组成了最终的损失函数

2.2 模型损失优化

总结一下,在上述方法中,每个句子会得到和中间隐层表征这两种表征,彼此之间的损失计算可以如下图所示。

在关系(1)中,反应的是作者的核心设定,即一个句子从 BERT 中得到的表征(),应该和中间层构成的表征 越接近越好。而其它的关系,包括(2),(3)(图中的黄色对角线)以及(4)之间应该是距离越大越好。

但是,作者发现,这其中的损失并不是都同等重要。因为作者的目标是提升 的表征,因此其选择放弃关系(4)。此外,作者也发现关系(2)对提升表现也没有作用,因而也一并放弃。因此,只考虑选定句子两个表征 之间的相似度,以及选定的句子的 表征和别的句子的 表征之间的差异度,便可得到如下图所示的损失

为了多样化关系(1),(3)带来的损失,作者允许句子的中间层的每一层表征 也能被加入到损失中去提供句子多维度的表征,即用 来替换上式的 ,即获得损失 ,如下图所示,

并且在该损失后加上正则化,就是最终的损失了。

3. 实验结果和敏感度分析

针对 BERT 模型的选择,作者在英文数据集上使用了 BERT,对于多语言的数据集则使用了 MBERT(multilingual-BERT)。此外,也尝试了 RoBERTaSBERT 来评估方法的泛化能力。为了避免随机性,作者对需要训练的实验,都是进行 8 次的独立实验求均值来减小误差,而模型的超参数择是使用 BERT-baseSTS-B 的验证集上优化得到。

3.1 语义相似度任务

在该任务上,作者选用 STS(Semantic Textual Similarity) 任务来评估提出的算法。作者通过衡量句子对表征之间的相似度来衡量模型的优劣。在此选用的数据集包括 STS-B,SICK-R 等等,这些数据集包含成对的句子,句子之间的相似度从 0 到 5 分进行打分。作者利用皮尔森系数来衡量真实的标签和表征相似度之间的关联性,来评判模型的效果。而对比的基准任务,非 BERT 类的包括 Glove,USE 等等。而 BERT 类的则只考虑在无监督下就能得到句子表征的模型,包括 BERT 的表征,均值池化,WK 池化,Flow,Constrastive(BT)等,而作者提出的方法则为 Constrastive(SG)Constrastive(SG-OPT),分别是使用了 损失,实验结果如下图所示。

从图中可以发现,作者提出的方法在大多数情况下都能够取得更好的效果。而使用优化后的损失函数取得的效果比采用未优化的损失要更好。在这当中,反常的是 WK 池化的方法居然在大多数情况下效果比均值池化的效果更差。

3.2 多语言相似度任务

除上述英文数据的实验外,作者也将 STS 任务扩充到多语言的 STS 任务。作者通过使用 MBERT(Multilingual BERT) 作为编码器,在 STS-B 的英语数据上训练后,在 SemEval-2014 任务(西班牙语)以及 SemEval-2017 任务1(阿拉伯语,西班牙语和英语)上做测试,也都取得了较好的结果,证明了作者提出的设计让模型有很好的泛化能力,在此不赘述。

3.3 SentEval 和有监督微调下的表现

除上述无监督的学习外,作者也使用了 SentEval toolkit 来衡量表征的能力。SentEval toolkit 将句子的表征作为输入,利用线性分类器去做下游任务,通过下游任务中分类器的表现来评估输入句子的表征质量。并得到下图所示的实验结果,

通过实验发现,基于作者提出的自引导对比学习方法对于 BERT 的微调带来的提升大于对 SBERT 调整带来的优化。而作者也尝试用它们的算法设计去微调有监督学习下的 BERT,发现并没有影响 BERT 有监督微调的效果。个人猜测,作者可能是希望说明其所提出的方法对于表征的改进和有监督学习下对表征的改进是互相独立的,以后既使用有监督又加上这无监督的额外训练,可能有更鲁棒的效果。

4. 算法分析

从下图消融实验中可以发现,对于 NT-Xent 损失的所有更改都会带来表现上的提升。同时,作者表明对于超参数和映射函数的选择对模型最终的效果也非常重要

为了探究算法对来自不同领域输入数据的鲁棒性,作者将 NLI 数据集进行混合后来观察模型的效果,最后得到的结果是,相比于通过 FLOW 得到的表征,通过 SG-OPT 得到的表征始终要好更多,在此也不在赘述。但是,作者也坦言 NLI 数据集和 STS 任务中存在着一些相似性,后续仍然需要在更多的情况下去验证

而对于计算效率来说,SG-OPT 的训练时间为 7.5 分钟,慢于 FLOW 方法的 2.6 分钟,但是在推理上只需要使用10.51秒,快于其它方法。这是因为 SG-OPT 方法一旦训练完成后就能被使用,而不像别的池化方法还需要额外的操作。

最后,作者也对表征进行了可视化操作。首先,从 STS-B 数据集中采样出 20 个正样例对(相似度打分为 5 的数据对,为红色)以及 20 个负样例对(相似度打分为 0),并用 t-SNE 方法,将向量降维到二维空间中。从图中可见,作者提出的 SG-OPT 使得语义相似的句子的表征更加接近,而原生的 BERT 的表征便不能很好地捕捉到句子之间的相似度

除了对实验的正面分析,作者也坦言自己的方法存在一些不足。例如,并没有考虑到算法可以做的更简单,例如只使用 BERT 的部分中间层,而不是像现在这样使用所有的中间层,以及一些额外的对比学习技巧来提升 BERT 的效果

5. 小结

  1. 作者提出了一种在无监督场景下,利用 BERT 中间层的信息,结合对比学习的方法,使得 BERT 自带的表征能够更好地捕捉输入句子的算法

  2. 作者在无监督、有监督的场景下验证了其算法的有效性,并通过消融实验说明损失设计的作用,最后通过向量可视化直观地展示了算法的效果

  3. 最后,个人感觉这篇论文的实用性是很强的,不需要额外的数据就能用 BERT 做对比学习,省去了获取增强数据的成本。此外,这种强调利用 BERT 本身中间层的思想,可能在别的任务上也能起到一定的作用,给人带来了一些启发!

寻求报道、约稿、文案投放:

添加微信xixiaoyao-1,备注“商务合作”

后台回复关键词【入群

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

后台回复关键词【顶会

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

 

[1].Nils Reimers and Iryna Gurevych. 2019. Sentence- BERT: Sentence embeddings using Siamese BERT- networks.[C]. In EMNLP-IJCNLP.

[2].Chen T, Kornblith S, Norouzi M, et al. A simple framework for contrastive learning of visual representations[C]. In ICML. PMLR, 2020: 1597-1607.

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

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

相关文章

Mt-Falcon——Open-Falcon在美团点评的应用与实践

监控系统是整个业务系统中至关重要的一环,它就像眼睛一样,时刻监测机房、网络、服务器、应用等运行情况,并且在出现问题时能够及时做出相应处理。 美团点评刚开始使用的是Zabbix监控系统,几经优化,在当时能够达到2W机器…

论文浅尝 | 以知识图谱为基础的开放域对话生成的目标规划

笔记整理 | 韩振峰,天津大学硕士。链接:https://ojs.aaai.org//index.php/AAAI/article/view/6474动机 之前有关开放域对话生成的神经模型没有有效的机制来管理聊天主题,并且往往会生成不连贯的对话。受到人与人对话策略的启发,本…

LeetCode 378. 有序矩阵中第K小的元素(二分查找)

文章目录1. 题目2. 解题2.1 暴力法2.2 二分查找1. 题目 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。 请注意,它是排序后的第k小元素,而不是第k个元素。 示例: matrix [[ 1, 5, 9],[10, 11,…

LeetCode 341. 扁平化嵌套列表迭代器(双栈)

文章目录1. 题目2. 双栈解题1. 题目 给定一个嵌套的整型列表。设计一个迭代器,使其能够遍历这个整型列表中的所有整数。 列表中的项或者为一个整数,或者是另一个列表。 示例 1: 输入: [[1,1],2,[1,1]] 输出: [1,1,2,1,1] 解释: 通过重复调用 next 直到…

外卖O2O的用户画像实践

美团外卖经过3年的飞速发展,品类已经从单一的外卖扩展到了美食、夜宵、鲜花、商超等多个品类。用户群体也从早期的学生为主扩展到学生、白领、社区以及商旅,甚至包括在KTV等娱乐场所消费的人群。随着供给和消费人群的多样化,如何在供给和用户…

论文浅尝 | 利用开放域触发器知识改进事件检测

笔记整理 | 申时荣,东南大学博士来源:ACL 2020源码:https://github.com/shuaiwa16/ekd.git摘要事件检测(ED)是文本自动结构化处理的一项基本任务。由于训练数据的规模小,以前的方法在unseen/标记稀疏的触发…

Beyond 预训练语言模型,NLP还需要什么样的知识?

近年来,深度学习技术已广泛应用于NLP领域,但实际应用效果往往受限于缺乏大规模高质量监督样本。2018年底,预训练语言模型横空出世,极大缓解了这个问题,通过“超大规模无监督语料上的预训练语言模型相对少量的监督样本进…

日志级别动态调整——小工具解决大问题

随着外卖业务的快速发展,业务复杂度不断增加,线上系统环境有任何细小波动,对整个外卖业务都可能产生巨大的影响,甚至形成灾难性的雪崩效应,造成巨大的经济损失。每一次客诉、系统抖动等都是对技术人员的重大考验&#…

LeetCode 324. 摆动排序 II

文章目录1. 题目2. 解题1. 题目 给定一个无序的数组 nums&#xff0c;将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]… 的顺序。 示例 1: 输入: nums [1, 5, 1, 1, 6, 4] 输出: 一个可能的答案是 [1, 4, 1, 5, 1, 6] 示例 2: 输入: nums [1, 3, 2, 2, 3,…

最全的Pycharm debug技巧

最全的Pycharm debug技巧&#xff1a; 工欲善其事&#xff0c;必先利其器。无论你的 IDE 是 IntelliJ IDEA、Pycharm、WebStorm、GoLang、还是PhpStorm &#xff0c;调试器都是标配。在遇到有问题的程序时&#xff0c;合理的利用调试器的跟踪和断点技巧&#xff0c;可以很快的…

OpenKG祝大家端午安康

—????????OpenKG祝大家端午安康????????—

两个月,刷了八千篇Arxiv,我发现……

文 | 白鹡鸰编 | 小轶从五月初到现在&#xff0c;大约刷了八千篇Arxiv之后&#xff0c;我发现我有毛病。当然&#xff0c;这是读论文上头时的牢骚&#xff0c;不是真心话&#xff0c;只是说&#xff0c;我在Arxiv上投入的精力的努力&#xff0c;与我预计的收获不成正比。故事的…

深度学习在美团的应用

近年来&#xff0c;深度学习在语音、图像、自然语言处理等领域取得非常突出的成果&#xff0c;成了最引人注目的技术热点之一。美团这两年在深度学习方面也进行了一些探索&#xff0c;其中在自然语言处理领域&#xff0c;我们将深度学习技术应用于文本分析、语义匹配、搜索引擎…

LeetCode 315. 计算右侧小于当前元素的个数(二叉查找树二分查找归并排序逆序数总结)

文章目录1. 题目2. 解题2.1 二叉查找树2.2 二分插入2.3 归并排序1. 题目 给定一个整数数组 nums&#xff0c;按要求返回一个新数组 counts。数组 counts 有该性质&#xff1a; counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。 示例: 输入: [5,2,6,1] 输出: [2,1,1…

领域应用 | 金融资管领域知识图谱的构建和应用

转载公众号 | DataFunTalk分享嘉宾&#xff1a;李渔 熵简科技 联合创始人编辑整理&#xff1a;唐汝佳出品平台&#xff1a;DataFunTalk导读&#xff1a;本次分享的主题是金融资管领域知识图谱的构建和应用&#xff0c;主要介绍如何运用大数据、AI这些技术手段&#xff0c;来帮助…

我分析了ACL21论文列表,发现对比学习已经...

文 | 花小花Posy小伙伴们&#xff0c;好久不见呀&#xff0c;小花又回来了&#xff01;最近关注对比学习&#xff0c;所以ACL21的论文列表出来后&#xff0c;小花就搜罗了一波&#xff0c;好奇NLPers们都用对比学习干了什么&#xff1f;都是怎么用的呀&#xff1f;效果怎样呀&a…

LeetCode 629. K个逆序对数组(DP)

文章目录1. 题目2. 动态规划3. 优化的DP1. 题目 给出两个整数 n 和 k&#xff0c;找出所有包含从 1 到 n 的数字&#xff0c;且恰好拥有 k 个逆序对的不同的数组的个数。 逆序对的定义如下&#xff1a;对于数组的第i个和第 j个元素&#xff0c;如果满i < j且 a[i] > a[…

快速的找出元素是否在list中 python

number [[1,2],[3,2]] num np.array(number) np.argwhere(num2) np.argwhere(num2) array([[0, 1], [1, 1]], dtypeint64) 注意&#xff1a;只能是维度相同的时候&#xff0c;才能用该方法。 om ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or nd…

论文浅尝 | 知识图谱的神经符号推理(上)

笔记整理 | 叶橄强&#xff0c;浙江大学在读硕士&#xff0c;研究方向为知识图谱的表示学习和预训练。知识图谱推理是支撑信息提取、信息检索和推荐等机器学习任务的基础组成部分&#xff0c;并且由于知识图可以看作知识的离散符号表示&#xff0c;自然可以利用符号技术做知识图…

ICML2021 | Self-Tuning: 如何减少对标记数据的需求?

文 | 王希梅&#xff0c;高敬涵&#xff0c;龙明盛&#xff0c;王建民源 | THUML本文介绍ICML2021的中稿论文&#xff1a;Self-Tuning for Data-Efficient Deep Learning&#xff0c;就“如何减少对标记数据的需求”这一重要问题给出了我们的思考。论文标题&#xff1a;Self-Tu…