一、对比学习Contrastive Learning
(一)对比学习简述
1、对比学习的两个阶段
- 特征编码Encoding
- 分类Classification
2、对比学习的两个模型
- 特征编码模型:通过自监督学习,无需依赖外部标注,通过挖掘未标注样本的内部结构,将特征编码模型训练出来。
- 分类模型:通过监督学习,只需要少部分标注样本,就能训练好模型。
3、对比学习的进行
举个简单的例子:
通过原始图片P,得到若干与之相似的图片P_au,这被称为数据增强data augmentation。图片数据增强的方式包括得到灰度图、旋转、镜像、剪裁等。
从足够大的候选集中随机抽取一张图片P_ra,很大概率与原始图片P不是一个类别的。将三者喂入特征编码器压缩,得到三者的有效特征向量V、V_au和V_ra。
要求V和V_au在向量空间内尽可能近,V和V_ra在向量空间内尽可能远。
按照以上方法训练好encoder
(二)对比学习在推荐系统中的作用和使用方式
1、对比学习的作用
对比学习在推荐系统中的作用就是纠偏,放大少数用户/物料在训练样本中的作用。
对比学习是怎么纠偏的:通过数据增强,可以衍生出来更多少数样本,放大少数样本在训练中的作用。
2、对比学习的使用方式
①参与对比学习的样本和参与主任务的样本最好来自于不同的样本空间
主任务要拟合用户和物料之间的真实互动,主要数据来源是曝光数据。
而对比学习数据来源更多的是少数小众样本。
②主任务和对比学习任务之间必须共享参数
比如说主任务和对比学习共享底层embedding。
(三)对比学习和向量化召回的区别
- 向量化召回是有监督学习,依赖标注数据。而对比学习是自监督学习,不依赖标注数据。
- 向量化召回重点关注负样本,因为正样本量大;对比学习重点关注的是如何合理地数据增强获得正样本。
- 向量化召回的主要目标是给用户推荐感兴趣的物料,而对比学习的主要目标是纠偏。
(四)纠偏长尾物料的实践
Google使用对比学习对长尾物料进行纠偏。
1、主要流程描述
物料x_i通过两种数据增强方式得到衍生y_i和y_i',物料x_j通过两种数据增强方式得到衍生y_j和y_j'。对比学习目标是让同一个物料的衍生物料在向量空间内尽可能近,而不同物料的衍生物料在向量空间内尽可能远。
最终对比学习要优化的损失可以是向量化召回中常规使用的sampled softmax loss。
2、设计增强转化函数
算法的关键在于如何设计两个增强转化函数AG和AG',Google提供了以下三种方式:
①随机特征遮蔽:Random Feature Masking(RFM),将一个物料所有field随机拆分到两个变体中。
②关联特征遮蔽:Correlated Feature Masking(CFM),不再是随机拆分field,而是将强相关的field拆分到一个变体中。怎么判断强相关,可以依靠人工判断,也可以计算互信息得到。
③随机丢失:Dropout,不再是随机拆分field,而是将具有多值的field,比如说分类和标签中的值随机拆到不同变体中。
3、样本策略
- 主任务:样本主要来源于曝光数据。
- 对比学习任务: 物料来自于平均抽样,偏向小众样本。
4、学习策略
对比学习作为辅助任务和双塔主任务一起被优化,物料塔和物料embedding都是主辅任务共享的。
(五)纠偏小众用户的实践
对于少数群体的用户历史行为序列,采用对比学习纠偏的传统方式:
- 遮蔽Mask:随机删除序列中的几个元素。
- 截断Crop:随机删除序列中的几个连续的元素。
- 打散Reorder:随机找到一段子序列,打散位置。
但是mask和crop对于短用户序列来说很不友好,因此又提出了两种新的方式:
- 代替:将用户行为序列中某个物料替换成它的相似物料。
- 插入:将用户行为序列中某个物料与它的相似物料插入它的邻近位置。
对于不同用户行为序列采取不同的方式:
- 长序列:五种方式都可。
- 短序列:代替和插入。
二、其他算法
(一)迁移学习
比如用户u在场景O下已经有非常丰富的行为,而在场景N中数据稀疏,因此可以由场景O向场景N进行知识迁移,帮助场景N兴趣建模。
但是如下图所示,场景O中学习到的用户embedding在接入场景N时需要禁止回代。
不仅可以单向迁移,场景N中数据也可以丰富场景O的兴趣建模。
(二)预测物料消费指标
由于新物料的后验消费指标空缺,因此可以通过新物料的基本属性通过模型来预测它的后验消费指标。
- 训练样本都来自于老物料,他们真实的消费指标是稳定可靠的。
- 消费指标是实数值,通过最小化真实消费指标和预测消费指标之间的均方误差来训练模型。
- 训练出来的模型不用于线上推荐,而是在新物料入库的时候,根据基本特征预测其消费指标,当新物料累积足够多的真实数据以后,再用真实数据替代预测值。
(三)以群体代替个体
线上推荐的时候,先将用户泛化为一个群体,再拿这个群体的embedding去找最近邻物料进行推荐。