对比学习技术在推荐系统的应用学习笔记

2022-10-05 16:52:05 浏览数 (1)

先占个坑~

本文首先分析推荐系统预测不准的部分因素:数据稀疏和数据分布偏差,其次基于这些因素从增广数据、定义Loss、设计Encoder来介绍对比学习技术是如何帮助推荐系统预估地更准,最后给出一些前人的实践经验和一些个人理解。

本文仅学习笔记,如有理解不到位或者理解有误的地方,还请评论区批评指教~

“猜不准你喜欢”:数据稀疏和数据分布偏差

推荐系统中有相当大的功夫都花费在“猜你喜欢”上,即为用户提供个性化的建议。然而有时候预估的并不是那么准,可能受到数据稀疏和数据分布偏差的影响:

数据稀疏

  • 整体

各类反馈信号的比例极度不均衡,某类稀疏的反馈信号对应的梯度更新被其他反馈对应的梯度淹没,模型没训好,预估不准。

  • 个体

模型对长尾Item预估和长尾User学习不充分,预估不准。

长尾item:用户行为数据分布通常呈现长尾分布,大部分item不存在或者存在极少的用户行为数据。

长尾user:这类用户在推荐系统具有极少行为

数据分布偏差:曝光偏差和流行度偏差

理论上要在公平的环境下,让user对所有item都存在交互才是无偏的。

然而推荐系统能只暴露有限数量item给user,这部分item才能和user进行交互,未曝光的item和user的实际交互是未知的,所以是有偏的。

对比无偏数据,模型使用有偏的数据建模,学习user有偏的喜好,预估不准(即推荐质量次优)。

曝光偏差会形成马太效应,user只和有曝光的item进行交互,慢慢的,多人都点的item(即流行item)会主导模型的梯度更新,使得模型更倾向预测流行的item高分推送给user,无法学习到个体user的兴趣偏好,导致预估不准。

增广数据

针对上述两个问题,可以通过从各种方式来补充训练样本的角度,即增广数据,来使得模型预估地更准。

基于自身数据做增广

基于自身数据做增广,可以用来调整反馈信号的比例、增加用户行为、缓解数据分布偏差,最终达到模型的预估更准一点的效果。

  1. 基于样本

1.1 自监督方式生成新样本

a. 调整user、item输入特征

该方法可以生成多个user, item的view,借助这些增强的样本可以丰富user和item在推荐系统中的行为。

  • Dropout:随机丢弃掉某些特征,这些特征不参与网络训练
  • Mask:将某些特征Mask,这些特征用默认的embedding特征参与网络训练

b. 调整user行为序列

该方法可以生成多个user行为序列,进而得到user增广后的序列表征,用于挖掘user的兴趣意图。

  • Mask:随机Mask user行为序列中的item,避免行为序列被局部信息主导
  • Shuffle:打乱user行为序列的item位置,改变时序性
  • Sample:使用不同的权重采样方法,在长期行为序列上随机采样

c. 调整图结构

  • Node Dropout:以一定概率从图上被丢弃节点
  • Edge Dropout:以一定概率从图上被丢弃边
  • Random Walk:通过随机游走的方式生成不同的待聚合的子图

1.2 调整样本比例,主要用于加强学习稀疏反馈信号,和调整数据分布偏差

这块工作主要集中在负样本采样上,有以下几种方案

  • In-Batch采样,如GoogleDNN双塔
  • 负例队列采样,如阿里的CLRec
  • 全局随机采样,如YoutubeDNN
  • 全局 In-Batch采样,如Google双塔改进方案
  • In-Batch 曝光未点击,如微博的FM召回

2. 基于模型

模型中有部分结构用于生成个体(如user或item)的表达向量,可以在隐层通过Dropout或增加随机噪声的方式生成不同的个体embedding。

  • Dropout:在某个隐层,随机地 mask 掉一些神经元
  • 增加随机噪声:如Gauss噪声

引入外部(跨域、跨场景)数据做增广

如果自身数据并不丰富,可以考虑引入外部数据做增广,来增加用户行为。

如果自身场景与辅助场景的User和Item都存在部分交集,则为跨场景推荐。

如果自身场景与辅助场景的User存在部分交集,Item不存在交集,则为跨域推荐。

定义Loss

衡量相似

对于使用自监督方式生成的新样本,约束其和原始样本在投影空间相似;

对于各种策略负采样得到的样本,约束其和正样本在投影空间不相似;

对于引入外部数据得到的样本,其样本和特征分布一般和目标场景分布不一致,需要约束两个场景的分布相似。

  1. 衡量样本相似

常见的有Cosine,内积等

其中Cosine = L2 norm 内积

2. 衡量分布相似

常见的有MMD,KL散度等

Loss设计

  1. NCE Loss 和 InfoNCE Loss
  • NCE

输入一个pair,预测相似或者不相似

Word2Vec(Negative sampling),图里的DeepWalk用的就是这样的Loss,此处不再赘述。

  • InfoNCE

输入一个正pair,若干个负pair

使得正样本对之间的互信息最大,使负样本对之间的互信息最小,其中调整超参温度因子可以帮助挖掘困难负样本。

这个算是当前对比学习主流的Loss设计方法。

2. MMD Loss 和 KL Loss

直接从度量方法KL和MMD演变出来的Loss,用于约束两个分布相似性。

例如微信的多目标GNN提取模型中,通过MMD loss平滑跨域用户embedding分布。

同样的微信的C2-Rec模型中,通过KL loss约束对增广前后计算得到的softmax概率分布相似。

写累了,待补充~

参考文献

张俊林:从对比学习视角,重新审视推荐系统的召回粗排模型

Self-supervised Graph Learning for Recommendation

Self-supervised Learning for Large-scale Item Recommendations

罗清:对比学习在快手推荐排序的应用

S^3-Rec: Self-Supervised Learning for Sequential Recommendation with Mutual Information Maximization

C^2-Rec: An Effective Consistency Constraint for Sequential Recommendation

Rethinking the Promotion Brought by Contrastive Learning to Semi-Supervised Node Classification

Are Graph Augmentations Necessary? Simple Graph Contrastive Learning for Recommendation

腾讯图神经网络与推荐预训练模型

0 人点赞