推荐系统重在挖掘用户偏好,无论是针对数据稀疏、噪声问题或是增强其他效果,对比学习无疑是锦上添花。观察22年的推荐顶会的相关论文,我们可以观察到对比学习出现的频率明显增高,并且各种改进也层出不穷,具有多样化发展的趋势,包括但不限于
- 图数据增强方式的改进(NodeDrop、EdgeDrop、随机游走、引入辅助信息的drop);
- 基于多视图的对比学习(例如在图的结构视图、语义视图、解耦子图间进行对比学习,可以应用到社交网络,知识图谱、bundle推荐、跨域推荐等方向);
- 利用节点关系进行对比任务(利用节点与邻居节点的关系作为样本选取准则、可以考虑GNN节点在不同层的输出表示间的关系、超图);
- 其他角度的对比学习任务(例如,对embedding添加噪声)。
本文从22年的顶会上选取了5篇采用对比学习的推荐相关论文与大家分享~
一、NCL

论文标题:Improving Graph Collaborative Filtering with Neighborhood-enriched Contrastive Learning
论文来源:WWW’22
论文链接: doi.org/10.1145/348…
代码链接:github.com/RUCAIBox/NC…
1 NCL核心思想
利用用户交互历史信息构建的二部图,节点关系可以分为四种:1. 相似用户;2. 相似物品;3. 用户-物品交互关系;4. 具有相似语义关系(例如用户意图等)。大多数推荐任务围绕用户-物品交互关系展开,而对同质节点之间的结构关系考虑较少,对语义关系考虑的次数则更少。NCL创新点则在于利用推荐系统中节点的潜在关系设计对比学习任务(包括结构关系与语义关系)。

在这里我们重点阐释如何去构建这两种对比学习任务,完整具体的算法细节还请大家观看原文~
2 算法细节
节点级的对比学习任务针对于每个节点进行两两学习,这对于大量邻居来说是极其耗时的,考虑效率问题,文章学习了每种邻居的单一代表性embedding,这样一个节点的对比学习就可以通过两个代表性embedding(结构、语义)来完成。

构建基于节点结构关系的对比学习任务:将每个用户(物品)与它的结构邻居进行对比。
由于GNN的第k层输出包含了k-hop邻居的聚合信息,而基于交互二部图的GNN模型的信息在图上经过偶数次传播,则可以聚合同质节点的邻居信息。
因此,为了避免构建其他图,我们直接利用GNN的第k层输出作为一个节点的k-hop邻居的表示,将节点自身的embedding和偶数层GNN的相应输出的embedding视为正样本对:
LSU=u∈U∑−log∑v∈Uexp((zu(k)⋅zv(0)/τ))exp((zu(k)⋅zu(0)/τ))
LSI=i∈I∑−log∑j∈Iexp((zi(k)⋅zj(0)/τ))exp((zi(k)⋅zi(0)/τ))
LS=LSU+αLSI
构建基于节点语义关系的对比学习任务:将每个用户(物品)与它具有相似语义关系的节点进行对比。这里具有语义关系指的是,图上不可到达,但具有相似物品特征、用户偏好等的节点。
怎么识别具有相同语义的节点呢?我们认为相似的节点倾向于落在临近的embedding空间中,而我们的目标就是寻找代表一组语义邻居的中心(原型)。因此,我们对节点embedding应用聚类算法去获取用户或物品的原型。
由于这个过程不可以端到端优化,我们用EM算法学习提出的语义原型对比任务。形式上,GNN模型的目标是最大化对数似然函数:
u∈U∑logp(eu∣Θ,R)=u∈U∑logci∈C∑p(eu,ci∣Θ,R)
其中,ci是用户u的潜在原型。采用基于InfoNCE来最小化以下函数:
LPU=u∈U∑−log∑cj∈Cexp(eu⋅cj/τ)exp(eu⋅ci/τ)
LPI=i∈I∑−log∑ct∈Cexp(ei⋅ct/τ)exp(ei⋅cj/τ)
LP=LPU+αLPI
优化
总体损失函数为:
L=LBPR+λ1LS+λ2LP+λ3∥Θ∥2
其中,由于LP不可以端到端优化,采用EM算法。利用Jensen不等式得到上述最大化对数似然函数的下界(LB):
LB=u∈U∑ci∈C∑Q(ci∣eu)logQ(ci∣eu)p(eu,ci∣Θ,R)
Q(ci∣eu)表示观察到eu时,潜在变量ci的分布。
E步:采用k-means进行聚类得到不同节点embedding对应的聚类中心。若eu属于聚类ci,则Q^(ci∣eu)=1,反之为0。
M步:得到聚类中心,目标函数重写为:
LPU=−u∈U∑ci∈C∑Q^(ci∣eu)logp(eu,ci∣Θ,R)
假设用户在所有聚类上的分布是各向同性高斯分布。因此,函数可以写成:
LPU=−u∈U∑log∑cj∈Cexp(−(eu−cj)2/2σj2)exp(−(eu−ci)2/2σi2)
完整算法:

3 实验结果
论文的实验结果可以说是很震撼一张大表······但结果属实不错,在五个数据集上的结果证明NCL的有效性,尤其是在Yelp和Amazon book数据集上,与其他模型相比,性能分别提高了26%和17%。

二、ICL

论文标题:Intent Contrastive Learning for Sequential Recommendation
论文来源:WWW’22
论文链接:doi.org/10.1145/348…
代码链接: github.com/salesforce/…
1 ICL核心思想
很有趣的一点,这篇文章所提模型简称ICL和上篇NCL很像啊······
以下图作引,我们直观理解这篇文章的思想。Figure 1中展现了两个用户的购物序列,尽管没有出现一样相同的商品,但是他们最后却购买了同样的物品。原因很简单,因为他俩同为钓鱼爱好者,购买意图冥冥中含有不可言说的关系。

正是因此,我们必须重视不同用户购买序列之间的潜在意图关系。文章提出的一个良好的解决方案是,我们从未标记的用户行为序列中学习用户的意图分布函数,并使用对比学习优化SR模型。具体来说,我们引入一个潜在变量来表示用户的意图,并通过聚类学习潜在变量的分布函数。
2 算法细节

这篇文章的重要价值之一:模型图画的很漂亮,深得我心。从图中可以看出,模型采用EM算法进行优化,在E步中进行聚类,在M步进行损失函数的计算和参数更新。
重在体会思想,详细步骤解释请参照原文。
假设有K个用户潜在意图{ci}i=1K,则目标公式可以改写为:
θ∗=θargmaxu=1∑Nt=1∑TlnE(c)[Pθ(stu,ci)]
由于上述公式优化复杂,根据EM思想,构造下界函数,并使下界最大化:
u=1∑Nt=1∑TlnE(c)[Pθ(stu,ci)]=u=1∑Nt=1∑Tlni=1∑KPθ(stu,ci)=u=1∑Nt=1∑Tlni=1∑KQ(ci)Q(ci)Pθ(stu,ci)
根据Jensen不等式,得到
≥∑u=1N∑t=1T∑i=1KQ(ci)lnQ(ci)Pθ(stu,ci)∝∑u=1N∑t=1T∑i=1KQ(ci)⋅lnPθ(stu,ci)
简单起见,在优化下界时,我们只关注最后一个位置步骤,下界定义为:
u=1∑Ni=1∑KQ(ci)⋅lnPθ(Su,ci)
其中Q(ci)=Pθ(ci∣Su)。
为了学习意图分布Q(c),利用编码器将序列得到表示{hu}u=1∣U∣,并在学习到的表示上进行k-means聚类,从而得到Pθ(ci∣Su)。
Q(ci)=Pθ(ci∣Su)={10 if Su in cluster i else
得到意图分布Q(c),下一步需要求得Pθ(Su,ci)。假设意图满足均匀分布,且给定意图c时,Su的条件分布和L2标准化的高斯分布同向,则可把Pθ(Su,ci)改写为:
Pθ(Su,ci)=Pθ(ci)Pθ(Su∣ci)=K1⋅Pθ(Su∣ci)∝K1⋅∑j=1Kexp(−(hiu−cj)2)exp(−(hu−ci)2)∝K1⋅∑j=1Kexp(hu⋅cj)exp(hu⋅ci),
求得下界最大化即相当于最小化以下损失函数:
−v=1∑Nlog∑j=1Kexp(sim(hu,cj))exp(sim(hu,ci))
可以发现,上式最大化了一个单独序列与其相应意图之间的互信息。我们为每个序列通过增强构建用于对比学习的正样本,然后优化以下损失函数:
LICL=LICL(h~1u,cu)+LICL(h~2u,cu)
LICL(h~1u,cu)=−log∑negexp(sim(h~1u,cneg))exp(sim(h~1u,cu)),
其中,cneg为一个batch中的所有意图,而同一个batch中的用户可能有相同的意图,故为了减轻假阴性的影响,将上式改为:
LICL(h~1u,cu)=−log∑v=1N1v∈/Fexp(sim(h~1,cv))exp(sim(h~1u,cu)),
最终,模型损失函数为:
L=LNextItem +λ⋅LICL+β⋅LSeqCL
完整算法:

3 实验结果
可以看出,ICLRec在所有数据集上始终优于现有方法。与最佳baseline相比,HR和NDCG的平均改善率在7.47%到33.33%之间。

三、RGCL

论文标题:A Review-aware Graph Contrastive Learning Framework for Recommendation
论文来源:SIGIR’22
论文链接:doi.org/10.1145/347…
1 RGCL核心思想
这篇论文的创新点是引入了用户评分和评论作为辅助信息,为了将二者更好地融入图结构中,RGCL以交互评论作为图的边信息,并以此为基础设计了两个分别基于节点增强和边增强的对比学习任务。

2 算法细节

模型图可以说画的是通俗易懂,我们对照图来依次看一下每个模块~
具有特征边的图构建:从Figure 2中的图构建部分我们可以看到,用户物品交互评分矩阵R与评论E组成用户物品交互ε={R,E},而基于评论的推荐数据表示为具有特征边的二部图G=⟨U∪V,E⟩。
**评论感知图学习:**利用评分区分边的类型,评论的表示eij需要由BERT-Whitening生成。这里介绍如何利用基于特征边的图学习节点表示。
- 评论感知信息传递公式为:
xr;j→i(l)=∣Nj∣∣Ni∣σ(wr,1(l)⊤eij)Wr,1(l)eij+σ(wr,2(l)⊤eij)Wr,2(l)vj(l−1)xr;i→j(l)=∣Ni∣∣Nj∣σ(wr,1(l)⊤eij)Wr(l)eij+σ(wr,2(l)⊤eij)Wr,2(l)ui(l−1)
- 消息聚合:
ui(l)=W(l)r∈R∑k∈Ni,r∑xr;k→i(l),vj(l)=W(l)r∈R∑k∈Nj,r∑xr;k→j(l)
- 得到用户和物品最终表示:
u^i=ui(L),v^j=vj(L)
交互建模:区别于一般推荐采用的内积预测方式,论文采用MLP学习用户物品的交互特征,并根据得到的交互特征预测评分(此处的预测评分在对比学习部分会用到):
hij=MLP([u^i,v^j])
r^ij=w⊤hij
两种对比学习任务:增强节点embedding学习和增强交互建模。
基于节点的数据增强采用的是node drop,指定概率随机丢弃物品节点和相应的评论特征:
L3user =−EU[log(F(u^i1,u^i2))]+EU×U′[log(F(u^i1,u^i′2))]
损失为:L3=L3user +L3item 。
增强交互建模,利用交互建模得到的交互特征hij作为anchor example。选择相对应的交互评论eij作为正样本,而从整个训练集中随机得到的一个评论ei′j′作为负样本,ED的目标是将hij与eij靠近,而与ei′j′远离。优化目标公式为:
L2=−EE[log(F(hij,eij))]+EE×E′[log(F(hij,ei′j′))]
优化:由于RGCL侧重于预测用户对物品的评分,因此采用均方误差(MSE)作为优化目标:
L1=∣S∣1(i,j)∈S∑(r^ij−rij)2
L=L1+αL2+βL3.
3 实验结果

四、MCCLK

论文标题:Multi-level Cross-view Contrastive Learning for Knowledge-aware Recommender System
论文来源:SIGIR’22
论文链接:arxiv.org/abs/2204.08…
代码链接:github.com/CCIIPLab/MC….
1 MCCLK核心思想
传统的对比学习方法多通过统一的数据增强方式生成两个不同的视图,本文别出心裁,从知识图不同视图的角度去应用对比学习,提出了一种多层次跨视图对比学习机制。
结合了KGR的特点,论文考虑了三种不同的图视图,包括全局结构视图、局部协同视图和语义视图,视图的理解参见下图~

值得一说的是,针对在语义视图,文章提出物品-物品语义图构建模块去获取以往工作中经常忽略的重要物品-物品语义关系。
2 算法细节

从模型图中可以看出,MCCLK包括三个主要部分视图生成、局部对比学习和全局对比学习。
多视图生成:前面我们说道一共需要构建三个视图,这里详细解释一下三个视图究竟是什么。其中全局结构视图为原始的用户-物品-实体图,协同视图与语义视图分别为用户-物品-实体图生成的用户-物品图和物品-实体图。由于全局结构视图与协同视图很常见,所以重点在构建语义视图。
为了考虑物品-物品语义关系,构建带有关系感知聚合机制的 k 阶邻居物品-物品语义图 S,可同时保留相邻实体和关系信息。其中 Sij表示物品i与j之间的语义相似度,Sij=0表示两个物品之间没有联系。
从知识图G递归学习K′次物品表示,提出的关系感知聚合机制为:
ei(k+1)=∣Ni∣1(r,v)∈Ni∑er⊙ev(k)ev(k+1)=∣Nv∣1⎝⎛(r,v)∈Nv∑er⊙ev(k)+(r,i)∈Nv∑er⊙ei(k)⎠⎞
通过这种方式将KG中的相邻实体和关系编码到物品表示中,并通过余弦相似度构建物品-物品的相似度:
Sij=∥∥ei(K′)∥∥∥∥ej(K′)∥∥∥(ei(K′))⊤ej(K′)
在全连接物品-物品图上进行KNN稀疏化,以减少计算需求、可行噪声和不重要边:
Sij={Sij,0,Sij∈ top-k (Si) otherwise
局部级对比学习:从模型图可以看出,利用协同视图和语义视图中物品的视图embedding,可以实现局部级的交叉视图对比学习。在这之前,我们先来看两个视图中的编码部分。
- 协同视图(即,物品-用户-物品)编码,采用Light-GCN递归地执行聚合操作:
eu(k+1)ei(k+1)=i∈Nu∑∣Nu∣∣Ni∣1ei(k)=u∈Ni∑∣Nu∣∣Ni∣1eu(k)
将不同层地表示相加,得到局部协同表示:
zuc=eu(0)+⋯+eu(K),zic=ei(0)+⋯+ei(K)
- 语义视图,关注物品之间的语义相似度,同样地采用Light-GCN执行聚合操作:
ei(l+1)=j∈N(i)∑Sj(l)
将不同层相加,得到局部语义表示:
ziS=ei(0)+⋯+ei(L)
- 局部级交叉视图对比优化
首先将上述两个视图的embedding送到一个具有隐藏层MLP中:
zi−1cp=W(2)σ(W(1)zic+b(1))+b(2)zi−1sp=W(2)σ(W(1)zis+b(1))+b(2)
对比损失为:

注意,负样本有两个来源,分别为视图内节点和视图间节点,对应于公式分母中的第二项和第三项。
全局级对比学习:这里设计了一个路径感知GNN(该GNN可以在进行L′次聚合的同时保留路径信息,即user-interact-item-relation-entity等远程连接),将路径信息自动编码到节点embedding中,然后利用全局级视图和局部级视图的编码embedding,进行全局级对比学习。
结构视图的聚合公式为:
eu(l+1)ei(l+1)=∣Nu∣1i∈Nu∑ei(l),=∣Ni∣1(r,v)∈Ni∑β(i,r,v)er⊙ev(l),
其中,注意力权重β(i,r,v)的计算公式为:
β(i,r,v)=softmax((ei∥er)T⋅(ev∥er))=∑(v′,r)∈N^(i)exp((ei∥er)T⋅(ev′∥er))exp((ei∥er)T⋅(ev∥er)),
将所有层的表示相加,得到全局表示:
zug=eu(0)+⋯+eu(L′),zig=ei(0)+⋯+ei(L′)
全局级交叉视图对比优化,获取全局级和局部级视图下的节点表示,首先对其映射计算:
zi−gp=W(2)σ(W(1)zig+b(1))+b(2)zi−lp=W(2)σ(W(1)(zic+zis)+b(1))+b(2)
采用与局部级对比相同的正负采样策略,有以下对比损失:

总体目标如下:
Lglobal =2N1i=1∑N(Lig+Lil)+2M1i=1∑M(Lug+Lul)
多任务训练
LMCCLK=LBPR+β(αLlocal +(1−α)Lglobal )+λ∥Θ∥22,
3 实验结果
实验可见,MCCLK在所有度量方面均优于三个数据集的baselines。针对AUC在书籍、电影和音乐数据集,分别提高了3.11%、1.61%和2.77%。

五、MIDGN

论文标题:Multi-view Intent Disentangle Graph Networks for Bundle Recommendation
论文来源:AAAI’22
论文链接:arxiv.org/pdf/2202.11…
代码链接:CCIIPLab/MIDGN (github.com)
1 MIDGN核心思想
该模型将DGCF的解耦思路用在了bundle推荐,从全局(解耦bundle间的用户意图)和局部(解耦bundle中的用户意图)两个视图对用户意图进行解耦,并采用InfoNCE加强学习效果。下图可以形象地解释上述两个视图~

2 算法细节

从图中可以看到,MIDGN由四个不同的模块组成:图解耦模块、 视图交叉传播模块、意图对比模块和预测模块。
图解耦模块
初始化。模型设置K个意图,分别对应一组意图感知图G={G1,G2,⋯,GK}。由于用户和bundle在不同的意图上应该有不同的embedding,故将其embedding分为K块,(u1,u2,⋯,uK),b=(b1,b2,⋯,bK)块与意图相耦合。由于每一件物品为用户出于某一种意图购买的,不需要对物品进行embedding划分,物品embedding通过随机初始化得到。
为每个意图感知图构建一个加权邻接矩阵Ak,其中Ak(c,i)表示bundle与物品交互基于第k个意图的置信度。
A(c,i)=(A1(c,i),A2(c,i),⋯,AK(c,i))
初始化A(c,i)=(1,1,⋯,1)。
意图感知交互图解耦。基于每个意图感知图计算用户和bundle的embedding:
eck(1)=g(ck,{i,i∈Nc})
图解耦模块采用邻居路由机制,对图Gk迭代更新用户/bundle的embedding块ckt和邻接矩阵Akt。每次迭代使用ckt和Akt来记录ck和Ak的更新。对于每个交互(c,i),记录其在K个意图上的置信度。为了得到分布,对置信度应用softmax:
A~kt(c,i)=∑k′=1KexpAk′t(c,i)expAkt(c,i)
然后在每个意图感知图进行embedding传播:
ckt=i∈Nc∑Dtk(c)⋅Dtk(i)A~kt(c,i)⋅i
每个意图下交互的置信度更新公式为:
Akt+1(c,i)=Akt(c,i)+cktT⋅i
embedding的多层组合。模型聚合高阶信息:
eckl=g(eckl−1,{i,i∈Nc})
将来自不同层的意图感知表示求和,得到最终表示:
eck=l∑eckl
图解耦模块从用户-物品交互图中学习分布在不同bundle(全局视图)中的用户意图;从bundle-物品图中,学习用户在每个bundle(局部视图)中的多个意图。结合来自全局和局部视图的意图,得到用户和bundle的表示:
eu=(eu1,eu2,⋯,euK)eb=(eb1,eb2,⋯,ebK)
视图交叉传播模块:为了在不同的视图下在用户和bundle块之间交流意图,模型在用户-bundle交互图采用了LightGCN:
vuvb=b∈Nu∑∣Nu∣∣Nb∣1eb,=u∈Nb∑∣Nb∣∣Nu∣1eu.
意图对比模块:从不同的角度对比用户和bundle的embedding从而捕获意图:
Lcontrast =−log(∑k′exp(eck⋅vck′)exp(eck⋅vck+))
其中,正样本是不同视图中具有相同意图的块,负样本是其他所有块。
预测和优化
y^ub=(eu⊕vu)⊙(eb⊕vb)Lpred =∑(u,b,d)∈Q−lnσ(y^ub−y^ud)+λ⋅∥θ∥2
3 实验结果
实验在两个数据集上进行,效果很好,MIDGN在NetEase数据集上将性能提高了26.8%-38.2%,在Youshu上提高了10.7%-14.2%。

总结
五篇文章分别涉及到了协同过滤、序列推荐、基于知识图谱的推荐与bundle推荐,具体应用的技术涉及了EM算法、解耦等。其中第一篇文章NCL和第二篇文章ICL思路较为相近,均采用聚类的思想为节点/序列寻找语义(意图)相似的“邻居”;第三篇文章引入辅助信息(评分和评论)作为边特征改进GNN的图建模,其对比学习的应用也与辅助信息相结合;第四篇文章在KGR中针对不同视图进行了对比任务;第五篇文章则利用解耦的思想为GNN生成多个子图,并利用解耦的子图作为对比任务的视图,思路虽然简单,但效果不错。愿大家读有所思,多发paper。