从ACL2021看对⽐学习在NLP中的应⽤
本⽂⾸发于微信公众号”⼣⼩瑶的卖萌屋“
⽂ | 花⼩花Posy
源 |
最近关注对⽐学习,所以ACL21的论⽂列表出来后,⼩花就搜罗了⼀波,好奇NLPers们都⽤对⽐学习⼲了什么?都是怎么⽤的呀?效果怎样呀?
接收列表中有21篇论⽂题⽬包含了关键词“contrastive”。下图是题⽬的词云,其中最显著的是使⽤对⽐学习去学习表⽰或者帮助语义理解,还有机翻、摘要、关系抽取。
v2-74ae8a6244ee88c625f93bbbf555e95d_b.jpg
⼩花选择了10篇有意思的论⽂跟⼤家分享,⽅向包括句⼦表⽰[1-3],⾃然语⾔理解[4-6], ⽣成式摘要[7],意图检测[8],多模态理解[9],机器翻译[10]。当然还有其它的,⽐如⽤于事件抽取[12]、QA[13]等等,⼤家感兴趣可以⾃⾏补充!
o to o为了⼤家快速get到跟对⽐学习最相关的部分,主要涉及论⽂中哪⾥⽤了对⽐,对⽐的对象是谁
论⽂中哪⾥⽤了对⽐,对⽐的对象是谁。
对⽐学习最重要的原料就是正例和负例的对⽐,以及在不同的应⽤场景下应该如何构造合理的正例和负例,如何设计对⽐损失函数。正负例的构造,可以分为利⽤显式的数据增强⽅式构造正负例[3-5,8-10],或者通过在语义空间/模型层⾯采样/⽣成正负例[1-2,6]。从对⽐损失函数的使⽤上来讲,可以分为与原始的MLM损失加和⼀起进⾏joint训练[1,5,10],或者进⾏pipeline训练[7-8]。
下⾯有请今天的主⾓们登场,⼤家开⼼⾷⽤!
从BERT中提取出句⼦向量的easy模式,想必⼤家都超熟了,使⽤[CLS]的表⽰或者使⽤不同的pooling操作。但这就够了嘛?当然不够!
从预训练语⾔模型中提取出句⼦表⽰的最优⽅法是什么,仍是研究者们在不断探索的问题。除了之前推送过的强者SimCSE以外,下⾯前三篇的主题都是如何利⽤对⽐学习去学习到更好的句⼦/⽂本⽚段表⽰。
[1] ⾃我引导的对⽐学习(⼀个BERT不够,那就两个)
汉英互译词典
来⾃⾸尔⼤学,讨论的问题是如何在不引⼊外部资源或者显⽰的数据增强的情况下,利⽤BERT⾃⾝的信息去进⾏对⽐,从⽽获得更如何在不引⼊外部资源或者显⽰的数据增强的情况下,利⽤BERT⾃⾝的信息去进⾏对⽐,从⽽获得更⾼质量的句⼦表⽰?
BERT的中间层表⽰和最后的CLS的表⽰。模型包含两个BERT,⼀个BERT的参数是固定的,⽤于计算中间层的表⽰,⽂中对⽐的是:BERT的中间层表⽰和最后的CLS的表⽰
其计算分两步:(1) 使⽤MAX-pooling获取每⼀层的句⼦向量表⽰ (2)使⽤均匀采样的⽅式从N层中采样⼀个表⽰;另⼀个BERT是要fine-tune的,⽤于计算句⼦CLS的表⽰。同⼀个句⼦的通过两个BERT获得两个表⽰,从⽽形成正例,负例则是另⼀个句⼦的中间层的表⽰或者最后的CLS的表⽰。
v2-dd661ca980396314147f51c954b497bf_b.jpg
⽂中还对⽐了不同负例组合的⽅式,最后发现只保留CLS的表⽰和隐藏层的表⽰之间的对⽐,忽略CLS和CLS以及中间层和中间层之间的对⽐是最优的,即保留(1)(3)。
这篇论⽂没有选择直接从底层数据增强⾓度出发,是稍微偏模型⽅法的改进的,侧重挖掘模型内部的信息。主实验是在STS和SentEval任务上测试的,从结果来看的话,仍然是SimCSE要好很多,⽽且S
imCSE操作起来是更简单的。不过本⽂也是提供了⼀个不⼀样的思路。[2] 花式数据增强
来⾃北邮的⼯作,也是研究如何在⽆监督的模式下,学习更好的句⼦表⽰。该⼯作主要对⽐了使⽤4种不同的数据增强⽅式进⾏对⽐对句⼦表⽰的作⽤。
v2-8f4490748a1747ca53117f0af2198967_b.jpg
模型是在STS任务上进⾏评估的。和SimCSE⼀样也⽤了NLI做监督,整体性能⽐SimCSE低1-2个点。
[3] ⽆监督⽂本表⽰
DeCLUTR来⾃多伦多⼤学,是NLP领域使⽤对⽐学习中较早的⼀篇,去年6⽉份就放到arxiv上⾯了。
⽂章研究的问题同样是:如何利对⽐学习从⼤量⽆标注数据学习更好的通⽤句⼦表⽰?⽂中的对⽐体现在两个⽅⾯:
1. 对⽐来⾃不同⽂档的⽂本⽚段(span)的语义。如果两个⽂本⽚段(span)来⾃同⼀个⽂档,那么他们的语义表⽰的距离应该相对较
近,否则距离远;
2. 对⽐来⾃同⼀⽂档的⽂本span。当两个⽂本⽚段都来⾃同⼀个⽂档,如果他们在⽂档中的位置距离⽐较近,他们的语义表⽰距离
近,否则远。
在采样正例的时候有些讲究。具体来讲是先从⼀个⽂档中采样N(>=1)个原始⽂本⽚段 (锚点span),然后从每个锚点span周围采样,作为正例 span。采样规则是正例span可以与锚点span交叠、相邻、从属。负例是从⼀个batch中随机采样得到的。对⽐学习的损失函数是InfoNCE。模型整体的损失函数是InfoNCE和MLM的加和。
实验是在SenEval benchmark(28个数据集)上进⾏测试的,包含有/半监督任务和⽆监督任务。有/半监督任务的baline有
xyl
InferSent,Universal Sentence Encoder和Sentence Transformers;⽆监督任务的baline有QuickThoughts。最显著的实验结果是DeCLUTR在⼤部分的数据集上取得了SOTA,并且在⽆监督任务上取得了和有监督任务相当的结果。
接下来两篇⽂章是关于如何利⽤对⽐学习提升⾃然语⾔理解任务的性能。
[4] 论负例对对⽐学习的重要性
来⾃清华⼤学,⽂章探讨的是如何利⽤对⽐学习提⾼模型的鲁棒性。在初步实验中发现⽤探针对句⼦语义进⾏轻微扰动,模型就会预测错
忽略了语义不同或者相反的扰动。这样的语义改误。之前的对抗训练确实能够从扰动的样本中学习,但是主要侧重于语义相似的扰动,忽略了语义不同或者相反的扰动。这样的语义改变⽆法被对抗学习⽆法检测到。本⽂提出CLINE,使⽤⽆监督的⽅法构造负样本。通过同时利⽤语义相似和相反的样例和原始样例进⾏对变⽆法被对抗学习⽆法检测到理智与情感简介
语文高考试卷
⽐,模型可以侦测到扰动导致的语义的改变。
正负例的构造:
正例是将句⼦中的词(名词、动词、形容词)替换为其同义词. 负例是将句⼦中的词替换为其反义词或者随机选择的词。
⽂中的损失函数由三部分构成:掩码语⾔模型的MLM损失 + 检测当前词是否是被替换的词 的损失RTD + InfoNCE对⽐正例和负例。有个⼩细节不太⼀样的是对⽐InfoNCE中并没有引⼊温度参数τ。
v2-7c8176b119dcfce3e13f72c3aafa0f97_b.jpg
实验是在NLU任务上进⾏的,包括NLI(SNLI, PERSPECTRUM,) 情感分析(IMDB,MB) 阅读理解 (BoolQ), 新闻分类(AG)。实验结果表明使⽤CLINE训练的模型可以同时在对抗测试集和对⽐测试集上提升性能。
[5] 对⽐实例学习+远距离监督关系抽取
来⾃阿⾥巴巴-浙江⼤学前沿技术联合研究中⼼,研究如何利⽤对⽐学习提⾼远距离监督的关系抽取任务的性能。
在有噪声的情况下,如何构造正负例。CIL的
够了英文
从对⽐⾓度讲,正例是同⼀关系下的实例对,负例是不同关系的实例对。⽂中的重点是在有噪声的情况下,如何构造正负例
baline是多实例对⽐学习,是将多个属于同⼀关系的实例放在⼀个bag中,⼀起训练得到⼀个关系的表⽰。每个实例都被假设是表达了⼀个实体对之间的关系。
正例:直觉上讲,对于⼀个实例的正例只要从同⼀个bag中随机sample⼀个就好,或者使⽤bag的整体表⽰。但因为是远距离监督,⽆法保证任意两个实例之间都⼀定表达了同⼀种关系,同样也⽆法保证样例和bag的整体表⽰⼀定关系相同。如果这样强⾏构造正负例的话,必然会引⼊噪声。⽂中采⽤
的⼀种⽅式是,对于插⼊/替换掉中不重要的词语(还是数据增强)。
负例:同样因为是远距离监督,不能随便从⼀个别的bag中采样⼀个实例作为的负例,那样噪声会⽐较⼤。因此⽂中采⽤了使⽤整个别的bag的表⽰作为负例,能相对更好地降噪。
模型的损失函数是InfoNCE对⽐损失和MLM损失的加权和。CIL在NYT10,GDS和KBP三个数据集上取得较⼤提升。
[6] Post-training中使⽤对⽐学习
来⾃中⼭⼤学,本⽂主要针对样本量稀少的场景,如何使⽤对⽐学习先在⽆标注数据集进⾏post-training, 然后再在有标注数据集上fine-tuning。
对⽐⽅法:互补的mask⽅法,将⼀个输⼊进⾏多次mask,第⼀次的mask的⽐例是, 第⼆次mask的时候只针对第⼀次mask中没被选择的
对⽐是在多个被mask的输⼊上进⾏的。这样做的token以的⽐例进⾏mask,所以两个句⼦被mask的部分是互补的,第三次以此类推。 对⽐是在多个被mask的输⼊上进⾏的
好处是既可以避免太⼩时,两个句⼦太相似导致对⽐损失迅速降到0,也可以避免太⼤⽽导致模型⽆法恢复mask的内容。(和SimCSE的直接两次dropout相⽐复杂了点,但有异曲同⼯之妙)。
v2-fc51330ee26bb2b1540bab2fb614fbcf_b.jpg
实验是在少样本GLUE上进⾏的,只有20个样例的时候提升不是很明显,样本100和1000的时候相⽐之前SOTA有轻微提升。
[7] 对⽐学习+⽣成式摘要
来⾃CMU,蛮有意思的⼀篇⽂章。核⼼点是利⽤对⽐学习将⽂本⽣成看作是reference-free的评价问题。
ifonly
⽣成式摘要典型的框架是Seq2Seq,之前也有⼯作将对⽐学习损失作为MLE损失的增强。不同的是,这篇⽂章将两个损失⽤在了不同的阶段。⽂中将摘要⽣成分解为两个过程:⽣成 和 评分+选择。从⽽提出了two-stage的框架,stage1是Seq2Seq模型,仍然利⽤MLE损失⽣
这成候选摘要,stage2引⼊对⽐学习,利⽤参数化的评估模型对stage1中⽣成的候选进⾏排序。两个阶段是分开优化的,都是有监督的。这⾥对⽐的是⽣成的候选摘要和原始⽂档。引⼊了⼀个raking loss, 希望预测值和真实值接近;希望每个候选值之间有差距。
⾥对⽐的是⽣成的候选摘要和原始⽂档
[8] 对⽐学习 + 意图检测
来⾃北邮模式识别实验室,研究的问题是:在Task-oriented的对话系统中,如何检测⽤户query中的跟task/domain不相关的问题。⽐如你问⼀个银⾏的app语⾳助⼿,我有多少余额,它检测该问题为in-domain (IND) 的问题,并给出回答;但你如果问它,我们⼀起健⾝的⼩伙伴都怎样呀?我们不希望模型“不懂装懂”,⽽是希望它可以检测该问题为out-of-domain (OOD),并引导⽤户提出domain相关的问题。下图是来⾃数据集[11]中的⼀个样例。
OOD的检测⽅法分为有监督和⽆监督的两种。有监督的⽅式在训练时已知哪些数据OOD的,所以在训练时可以将OOD的数据当成⼀个类型;⽆监督⽅式训练的时候只有标注的IND数据。常⽤的⽅法是先利⽤IND数据学习类别的特征 (分类器),然后使⽤检测算法计算IND样本和OOD样本的相似度。
本⽂的先验假设是:
⼀个OOD检测模型依赖于⾼质量IND类别表⽰模型。之前的IND分类器虽然在IND数据上表现好,应⽤到OOD时性能不⾼,原因是类别间的间隔很模糊。所以该⼯作的核⼼是利⽤对⽐学习减⼩类内距离,增⼤类间距离。更好的IND聚类促使更好的OOD分类。
本⽂主要针对的是⽆监督OOD进⾏训练,策略是先⽤有监督对⽐学习在IND数据上训练,然后⽤cross-
entropy损失对分类器fine-tune,有监督对⽐学习的⽬标是拉近IND中属于拉近同⼀类别的意图,推远不同类别的意图。因此:
正例对来⾃同⼀个类别的数据 负例是不同类别的数据
⽂中也使⽤了对抗攻击⽣成hard正例来做数据增强。⽂中的实验是⽐较全⾯的,对⽐了不同scale的数据集,不同的encoder,不同的OOD 检测算法。
⼩花觉得这篇有意思主要是因为OOD检测的思路,不仅可以⽤在意图检测领域,还可以直接扩展到别的领域,⽐如⽤于关系抽取中检测新的关系。pashmina是什么意思
接下来的两篇论⽂都利⽤了任务本⾝的属性将对⽐扩展到了多对多上,同时包含单个模态/语⾔的对⽐和跨模态/跨语⾔的对⽐。
[9] 对⽐学习 + 多模态学习
来⾃百度的UNIMO,利⽤跨模态的对⽐学习将⽂本和视觉信息对齐到⼀个统⼀的语义空间。之前也有统⼀训练⽂本和视觉的模型,⽐如ViLBERT, VisualBERT,但是它们只能利⽤有限的⽂本-图像对齐的数据,且⽆法有效的适应到单模态的场景。本⽂要解决的是问题是:如何通过对⽐学习同时利⽤单模态和多模态的数据来实现更好的图像-⽂本对齐?
hollys
对于⼀对对齐的图像-⽂本数据,通过⽂本重写的⽅式构造多模对⽐部分核⼼的点是,通过花式重写原始的caption来⽣成正例和负例。对于⼀对对齐的图像-⽂本数据,通过⽂本重写的⽅式构造多模态的正负例样本,同时通过⽂本/图像检索的⽅式构造单模态的正例样本。 正负例样本⼜分为多个level,包括句⼦级别、短语级别、词态的正负例样本,同时通过⽂本/图像检索的⽅式构造单模态的正例样本。
级别。⽐如句⼦级别的多模态的正例是通过back-translation⽣成的,负例是利⽤当前图⽚的字幕从其它图⽚的字幕中找相似的得到的。
v2-485a4cb3cf79774e48715aca5ed3de91_b.jpg
UNIMO的优势在于可以同时利⽤单模态数据和多模态对齐数据进⾏训练,测试时在单模态的理解和⽣成任务上都表现很好。
[10] 对⽐学习 + 机器翻译
看到这篇⽂章的时候,脑⼦⾥想的是,“⼀⽣⼆,⼆⽣三,三⽣万物”。在对⽐学习中,只要存在⼀个对象,我们就可以给它找到或者造⼀个对⽐对象,让它们去⾃我对⽐,⾃⼰进化;当多个对象成⽴的时候,我们都不需要造了,只需要利⽤就好。
多对多机翻就是典型的例⼦。这篇⽂章来⾃字节跳动AI Lab,研究的问题是:如何学习更好的通⽤跨语⾔表⽰,来获得更好的多语⾔翻译效果?尤其是当源语⾔或者⽬标语⾔不是English的时候。
本⽂的先验假设是,如果两句话说的是同⼀个意思,即使它们使⽤的语⾔不相同,那么它们在语义空间中的表⽰也应该接近。所以本⽂的训练⽬标是:减少相似句⼦表⽰之间的距离,增⼤不相关句⼦表⽰之间的距离
减少相似句⼦表⽰之间的距离,增⼤不相关句⼦表⽰之间的距离。⽂中使⽤了fancy的数据增强,同时使⽤单语和多语的数据进⾏对⽐。
v2-af81222c2a603f1cae09906d11e95e5d_b.jpg
⽅法简单,效果好,实验solid,值得细品。
本⽂⾸发于微信公众号”⼣⼩瑶的卖萌屋“
翻译费⽂ | 花⼩花Posy
源 |
参考⽂献
[13] KACE: Generating Knowledge Aware Contrastive Explanations for Natural Language Inference (not public yet)
[14] xMoCo: Cross Momentum Contrastive Learning for Open-Domain Question Answering (not public yet)