1.什么是ContrastiveLearning1.1ContrastiveLearning的定义其自监督学习方式在ICLR2020上被Bengio和LeCun命名为AI的未来,随后登陆NIPS、ACL、KDD、CIKM等各大会议,Google、Facebook、DeepMind、阿里、腾讯、字节跳动等大公司也都在其中投入了精力。CL的相关工作也刷爆了CV,甚至一些NLP问题的SOTA在AI圈风头一时。CL的技术来源来自metriclearning。总体思路是:定义样本的正例和负例,以及映射关系(将实体映射到一个新的空间)。优化目标是使空间中正例与目标样本的距离更近,而负例则相对远一些。正因为如此,CL看起来和vectorizedrecall的思想很像,但实际上两者有着本质的区别。Vectorizedrecall是一种有监督学习,会有明确的标签数据,更注重负样本的选择(被称为负样本为王的“理论”);而CL是self-supervisedlearning(无监督学习的一种范式)的一个分支,不需要人工标注标签信息,直接将数据本身作为监督信息,学习样本数据的特征表示,然后在下游引用任务。另外,CL的核心技术是DataAugmentation,更关注如何构建正样本。下图是一个抽象的CL整体流程图。比较学习的标签信息来源于数据本身,核心模块是数据增强。图像领域的数据增强技术相对直观。例如,图像旋转、遮挡、局部提取、着色、模糊等操作,可以获得与原图像相似但部分不同的新图像(即增强后的新图像)。图),下图是局部图像数据增强的手段(来自SimCLR[1])。1.2对比学习的原理说到CL的原理,就不得不提到自监督学习。它避免了人工标注的高成本和低标签覆盖率的稀疏性,更容易学习通用特征表示。自监督学习可以分为两大类:生成方法和对比方法。生成式方法的典型代表是autoencoder,对比学习的经典代表是ICLR2020的SimCLR,通过特征空间中(增强的)正负样本的比较来学习特征表示。与生成法相比,比较法的优势在于不需要在像素级重构样本,只需要学习特征空间中的可区分性,使得相关优化变得简单。作者认为CL的有效性主要体现在学习itemrepresentation的可区分性,而可区分性的学习取决于正负样本的构建思路,以及具体的模型结构和优化目标。结合CL的实现过程,张博士[2]抽象出CL必须回答的三个问题,这也是它区别于metriclearning的典型特征,即(1)如何构造正例和负例,即数据增强。如何实现它;(2)如何构造Encoder映射函数,既能尽可能多地保留原始信息,又能防止崩溃;(3)如何设计损失函数,目前常用的NCE损失,如下式所示。不难看出,这三个基本问题对应着建模的三要素:样本、模型、优化算法。从损失公式可以看出,分子部分强调与正例的距离越近越好,S函数衡量相似度,距离越近对应S值越大,分母强调距离反例越远越好,loss越低,相应的可区分性越高。在这三个基本问题中,数据增强是CL算法的核心创新点。不同的增强方式是算法有效性的基本保证,也是各大CL算法的同一性;Encoder功能通常通过神经网络实现;除了NCEloss之外,还有其他loss的变体,例如Google[3]提出了supervisedcontrastiveloss。1.3经典对比学习算法系列CL是一种用于自监督学习的学习算法。说到自监督学习,Bert大概是NLP领域绕不开的话题。Bert预训练+Fine-tuning模式在很多问题的解决上都实现了突破,既然自监督在NLP上能成功,那么计算机视觉难道不行吗?事实上,Bert在NLP领域的成功也直接刺激了CL在图像领域的发生和发展。鉴于图像领域可以直观地进行数据增强,CL在CV领域也是率先取得进展。例如CL-SimCLR算法的发展契机,其创新点主要包括(1)探索多种不同数据增强技术的组合,选择最优的;(2)在Encoder之后加入一个非线性映射Projector,主要是考虑到Encoder学习到的向量表示会包含增强信息,而Projector旨在去除这部分影响,回归数据本质。后来Hinton的学生在SimCLR的基础上实现了SimCLRv2。主要改进点是Encoder的网络结构。同时,他们借鉴了MoCo使用的MemoryBank的思想,进一步完善了SOTA。事实上,在SimCLR之前,KaimingHe在2019年底提出了另一个经典的对比学习算法MoCo[4],主要思想是由于是在正负样本之间进行比较,增加负样本的数量可以提高学习任务的难度,从而提升模型的性能,MemoryBank是解决这个问题的经典思路,但它无法避免表示不一致的问题。鉴于此,MoCo算法提出利用动量来更新Encoder参数,从而解决新旧候选样本编码不一致的问题。后来KaimingHe在MoCo的基础上提出了MoCov2(在SimCLR提出之后)。模型的主要框架没有改变,主要在数据增强方式、Encoder结构、学习率等细节上进行了优化。2对比学习的应用对比学习不仅在图像、文本、多模态等诸多领域成为学术界的热门研究方向,而且在以推荐系统为代表的行业也得到了应用。Google将CL应用于推荐系统GoogleSSL[5],目的是为冷门和小众项目学习高质量的向量表示,从而辅助解决推荐冷启动问题。它的数据增强技术主要采用RandomFeatureMasking(RFM)和CorrelatedFeatureMasking(CFM)的方法(CFM在一定程度上解决了RFM可能构造无效变体的问题),然后CL以辅助塔的形式,结合两个塔召回的主要任务一起训练。整体流程如下图所示。在模型的训练过程中,主要任务的item主要来自曝光日志,因此对头部的热门item也比较友好。为了消除马太效应的影响,辅助任务中的样本结构需要考虑不同于主任务的分布,后续的CL在转转的实践中也借鉴了这种思路,所以以保证模型学习结果的全覆盖。数据增强不仅限于项目端。Alibaba-Seq2seq[6]将CL的思想应用到序列推荐问题上,即输入用户行为序列,预测下一个可能的交互项。具体来说,其数据增强主要应用于用户行为序列特征,将用户历史行为序列按照时间序列划分为两个子序列,作为数据增强后用户的表示,馈入双塔模型。最终输出结果尽可能相似。同时,为了显式地对用户的多种兴趣进行建模,本文在Encoder部分提取了多个向量,而不是将它们压缩成一个用户向量。因为随着子序列的拆分和正反例的构建,用户自然而然就拥有了多个行为序列的向量表示。在正例中,用户前半部分历史行为的向量与后半部分历史行为的向量接近,而在负例中,不同用户之间的距离相对较远,甚至对于同一个用户,不同品类的产品向量表示相距较远。CL还可以与其他学习范式相结合,例如图比较学习[7]。整体框架如下图所示。GCL通常通过随机删除图中的点或边来增强图数据,而本文作者倾向于保持重要的结构和属性不变,扰动发生在不重要的边或节点上。3Contrastivelearning在转转实用图像领域已经成功,文本领域也可以。例如Meituan-ConSERT[8]算法,在句子语义匹配任务实验中,相比之前的SOTA(BERT-flow)提升了8%,在少量样本下依然能够表现出不错的性能提升。该算法对Embedding层进行数据增强,采用隐式生成增强样本的方法。具体来说,提出了四种数据增强方法:AdversarialAttack、TokenShuffling、Cutoff和Dropout,这四种方法都是通过调整Embedding矩阵得到的,比显式增强方法更高效。3.1CL在推荐召回方面的实践。转转平台致力于推动低碳循环经济更好发展,可覆盖全品类商品。近年来,在手机3C领域表现尤为出色。CL在转转推荐系统的实践也选择了基于文本的应用思路。考虑到二手交易的独特属性,需要解决的问题包括:(1)二手商品的孤儿属性,导致ID向量不适用;(2)数据增强是如何实现的;(3)如何构建正例和反例;(4)Encoder的模型结构是什么(包括loss的设计问题)。针对这四个问题,结合下面的整体流程图进行详细说明针对二手商品的孤儿属性问题,我们使用基于文本的向量作为商品的表示,具体为文本描述的集合(包括商品名称和内容),训练word2vec模型,在词向量的基础上通过池化得到商品的向量表示。自编码器(AutoEncoder)算法是文本对比学习领域常用的数据增强方法之一(此外还有机器翻译、CBERT等不同思想)。我们同样使用AE算法训练模型,学习产品向量,并使用算法的中间向量作为产品的增强向量表示,就会有正例。反例的产生原理是在batch中随机选择不相似的商品,根据用户的后点击行为计算判断相似商品的依据。在以CF(CollaborativeFiltering)为代表的推荐系统的召回结果中,通过共同的点击行为可以召回的产品组合被认为是相似的,否则被认为是不相似的。之所以用行为基础来判断是否相似,一方面是为了将用户的行为引入其中,实现文本与行为的有机结合,另一方面也是为了契合业务目标尽可能。具体对于Encoder部分,我们采用类似于孪生网络的双塔结构,分别馈送样本的文本向量(positiveorpositiveornegative),训练分类模型。网络结构为三层全连接神经网络,两塔共享网络参数和模型参数,通过优化交叉熵损失来优化。在实际行业中,大多数推荐系统中双塔模型的训练目标是用户的后验行为(点击、收藏、下单等),而我们的训练目标是样本是否相似。我们之所以使用孪生网络形式,也是因为这样做可以保证学习结果的覆盖率。按照CL的常规思路,提取最终Encoder部分的输入向量作为乘积的向量化表示,可以进一步应用于推荐系统的召回、粗排序甚至精排序。目前,转转推荐系统的召回模块已经上线,带来了10%以上的在线订包率提升。3.2转转中CL的未来规划。通过人工评估和在线AB实验,充分证实了CL学习向量表示的有效性。召回模块实现后,可以扩展到推荐系统的其他模块,甚至其他算法场景。.以预训练的方式学习产品向量表示(当然你也可以学习用户向量表示)只是一个应用路径。CL通过数据增强和比较,提供了更多的学习框架或学习思路。该算法学习项目的可区分性。这个思路可以很自然地引入到推荐系统的排序模块中,因为排序问题也可以理解为物品的可区分性。作者简介李光明,高级算法工程师。参与了转转搜索算法、推荐算法、用户画像等系统的算法体系建设,在GNN、小样本学习、比较学习等相关领域有实际应用。微信号:gmlldgm,欢迎建设性的交流。转转是一个面向研发中心和行业合作伙伴的技术学习交流平台,定期分享一线实践经验和行业前沿技术话题。关注公众号《转转技术》(综合)、《大转转FE》(专注FE)、《转qa》(专注QA),更多干货实践,欢迎交流分享~参考资料[1]SimCLR:A_Simple_Framework_for_Contrastive_Learning_of_Visual_Representations[2]张俊林:https://mp.weixin.qq.com/s/2Js8-YwUEa1Hr_ZYx3bF_A[3]Google:Supervised_Contrastive_Learning[4]MoCo:Momentum_Contrast_for_Unsupervised_Visual_Representation_Learning[5]SSL:Self-supervised_Learning_for_Large-scale_Item:Disentangled_Self-Supervision_in_Sequential_Recommenders[7]GCL:Graph_contrastive_learning_with_adaptive_augmentation[8]ConSERT:ConSERT:_A_Contrastive_Framework_for_Self-Supervised_Sentence_Representation_Transfer
