【2022/图卷积对比/推荐】 Improving Graph Collaborative Filtering with Neighborhood-enriched Contrastive Lea

如果觉得我的分享有一定帮助,欢迎关注我的微信公众号 “码农的科研笔记”,了解更多我的算法和代码学习总结记录。或者点击链接扫码关注【2022/图卷积对比/推荐】 Improving Graph Collaborative Filtering with Neighborhood-enriched Contrastive Lea

【2022/图卷积对比/推荐】 Improving Graph Collaborative Filtering with Neighborhood-enriched Contrastive Learning


原文:https://arxiv.org/abs/2202.06200

源码:https://github.com/rucaibox/ncl

1 动机

图显示了用户和item之间的交互,但是一般这都是稀疏的。那么如何减少稀疏对推荐效果的影响呢?一般可以采用对比学习的方法来增强学习的表征能力,在对比学习中通常都是随机采样来构建对比对,忽略了users或者items之间的邻居关系,特别是忽略了哪些潜在的邻居关系。作者提出了一种Neighborhood-enriched Contrastive Learning(NCL),它显示地把潜在邻居(一个user或者item邻居是包括来自图结构的邻居和语义空间上的邻居两种,作者从图结构和语义空间引入用户(或项目)的邻居)组成正对比对。

2 方法

所提方法

作者定义两类邻居结构:

  • 结构邻居: 指通过高阶路径在结构上连接的节点;
  • 语义邻居: 指语义相似的邻居,在图上可能无法直接到达,但是他们语义存在相关。

如上结构框图可见主要包含三个loss,三个loss分别定义了模型建模的三个方面。

2.1【User-Item Interaction】

典型GCN聚合user和item表征信息的过程,其聚合过程定义如下式:
z u ( l + 1 ) = ∑ i ∈ N u 1 ∣ N u ∣ ∣ N i ∣ z i ( l ) , z i ( l + 1 ) = ∑ u ∈ N i 1 ∣ N i ∣ ∣ N u ∣ z ( l ) , \begin{aligned} z_u^{(l+1)} & =\sum_{i \in N_u} \frac{1}{\sqrt{\left|\mathcal{N}_u\right|\left|\mathcal{N}_i\right|}} z_i^{(l)}, \\ z_i^{(l+1)} & =\sum_{u \in \mathcal{N}_i} \frac{1}{\sqrt{\left|\mathcal{N}_i\right|\left|\mathcal{N}_u\right|}} z^{(l)}, \end{aligned} zu(l+1)zi(l+1)=iNuNuNi 1zi(l),=uNiNiNu 1z(l),
最终用户和item表示为
z u = 1 L + 1 ∑ l = 0 L z u ( l ) , z i = 1 L + 1 ∑ l = 0 L z i ( l ) z_u=\frac{1}{L+1} \sum_{l=0}^L z_u^{(l)}, \quad z_i=\frac{1}{L+1} \sum_{l= 0}^L z_i^{(l)} zu=L+11l=0Lzu(l),zi=L+11l=0Lzi(l)
最终预测结果为
y ^ u , i = z u ⊤ z i , \hat{y}_{u, i}=\mathbf{z}_u^{\top} \mathbf{z}_i, y^u,i=zuzi,
采用 BPRQ 损失,其中 σ \sigma σ 是sigmoid函数。
L B P R = ∑ ( u , i , j ) ∈ O − log ⁡ σ ( y ^ u , i − y ^ u , j ) \mathcal{L}_{B P R}=\sum_{(u, i, j) \in O}-\log \sigma\left(\hat{y}_{u, i}-\hat{y}_{u, j}\right) LBPR=(u,i,j)Ologσ(y^u,iy^u,j)

2.2【Structural Neighbors】

假设用户或物品初始embedding表示为 z 0 z^{0} z0 z l z^{l} zl 可以看作聚合了 l l l 跳以内邻居信息的embedding。将用户物品交互图看作二部图,则我们可以将偶数跳的embedding看作是同质(因为二部图中用户的偶数跳邻居是用户,物品的偶数跳邻居是物品)。将用户自己的嵌入表征和偶数层的表征视为正对,并采用对比损失InfoNCE最小化距离。同类item也是类似操作
L S U = ∑ u ∈ U − log ⁡ exp ⁡ ( ( z u ( k ) ⋅ z u ( 0 ) / τ ) ) ∑ v ∈ U exp ⁡ ( ( z u ( k ) ⋅ z v ( 0 ) / τ ) ) L S I = ∑ i ∈ I − log ⁡ exp ⁡ ( ( z i ( k ) ⋅ z i ( 0 ) / τ ) ) ∑ j ∈ I exp ⁡ ( ( z i ( k ) ⋅ z j ( 0 ) / τ ) ) , \mathcal{L}_S^U=\sum_{u \in \mathcal{U}}-\log \frac{\exp \left(\left(\mathbf{z}_u^{(k)} \cdot \mathbf{z}_u^{(0)} / \tau\right)\right)}{\sum_{v \in \mathcal{U}} \exp \left(\left(\mathbf{z}_u^{(k)} \cdot \mathbf{z}_v^{(0)} / \tau\right)\right)} \\ \mathcal{L}_S^I=\sum_{i \in I}-\log \frac{\exp \left(\left(\mathbf{z}_i^{(k)} \cdot \mathbf{z}_i^{(0)} / \tau\right)\right)}{\sum_{j \in I} \exp \left(\left(\mathbf{z}_i^{(k)} \cdot \mathbf{z}_j^{(0)} / \tau\right)\right)}, LSU=uUlogvUexp((zu(k)zv(0)/τ))exp((zu(k)zu(0)/τ))LSI=iIlogjIexp((zi(k)zj(0)/τ))exp((zi(k)zi(0)/τ)),
综合上面两个损失函数的整体结构对比学习损失函数为
L S = L S U + α L S I . \mathcal{L}_S=\mathcal{L}_S^U+\alpha \mathcal{L}_S^I . LS=LSU+αLSI.
其中, α \alpha α 是超参数,用于权衡两部分损失。

2.3【Semantic Neighbors】

由于基于二部图结构的邻居得到所有的正对,这不可避免会存在噪声的影响,因此采用语义邻居对比学习一定程度上来缓解噪声的影响。我们知道相似的用户或者物品在嵌入空间内应该相似/相近的,而且原型是代表一组语义邻居的集群的中心,则可以将聚类算法应用于用户和商品的嵌入,以获得用户或商品的原型。由于这里无法用end-2-end(端到端)进行优化,则采用EM算法学习并提出原型对比目标。

最大化对数似然函数有下式,其中 c i \mathbf{c}_i ci 是用户 u u u 的原型(用户 u u u 所在集群的中心), Θ \Theta Θ 是模型参数, $ \mathbf{R} 是交互矩阵, 是交互矩阵, 是交互矩阵,\mathbf{e}_u$​ 是用户的embedding。这里在不断地迭代过程,实际上是希望得到的用户嵌入表征是越来越趋于平稳,即得到的聚类模型能够较好的区分不同的语义。
∑ u ∈ U log ⁡ p ( e u ∣ Θ , R ) = ∑ u ∈ U log ⁡ ∑ c i ∈ C p ( e u , c i ∣ Θ , R ) \sum_{u \in \mathcal{U}} \log p\left(\mathbf{e}_u \mid \Theta, \mathbf{R}\right)=\sum_{u \in \mathcal{U}} \log \sum_{\mathbf{c}_i \in C} p\left(\mathbf{e}_u, \mathbf{c}_i \mid \Theta, \mathbf{R}\right) uUlogp(euΘ,R)=uUlogciCp(eu,ciΘ,R)
过K-means聚类得到原型对比学习目标是基于 InfoNCE 最小化以下函数
L P U = ∑ u ∈ U − log ⁡ exp ⁡ ( e u ⋅ c i / τ ) ∑ c j ∈ C exp ⁡ ( e u ⋅ c j / τ ) \mathcal{L}_P^U=\sum_{u \in \mathcal{U}}-\log \frac{\exp \left(\mathbf{e}_u \cdot \mathbf{c}_i / \tau\right)}{\sum_{\mathbf{c}_j \in C} \exp \left(\mathbf{e}_u \cdot \mathbf{c}_j / \tau\right)} LPU=uUlogcjCexp(eucj/τ)exp(euci/τ)
对于物品来说
L P I = ∑ i ∈ I − log ⁡ exp ⁡ ( e i ⋅ c j / τ ) ∑ c t ∈ C exp ⁡ ( e i ⋅ c t / τ ) \mathcal{L}_P^I=\sum_{i \in I}-\log \frac{\exp \left(\mathbf{e}_i \cdot \mathbf{c}_j / \tau\right)}{\sum_{\mathbf{c}_t \in C} \exp \left(\mathbf{e}_i \cdot \mathbf{c}_t / \tau\right)} LPI=iIlogctCexp(eict/τ)exp(eicj/τ)
综合两部分捑失函数得
L P = L P U + α L P I . \mathcal{L}_P=\mathcal{L}_P^U+\alpha \mathcal{L}_P^I . LP=LPU+αLPI.
α \alpha α 是超参数,用于权衡两部分捑失。

2.4【loss】

整体目标如下
L = L B P R + λ 1 L S + λ 2 L P + λ 3 ∥ Θ ∥ 2 , \mathcal{L}=\mathcal{L}_{B P R}+\lambda_1 \mathcal{L}_S+\lambda_2 \mathcal{L}_P+\lambda_3\|\Theta\|_2, L=LBPR+λ1LS+λ2LP+λ3∥Θ2,

3 总结

作者提出方法是模型无关的对比学习框架,提升了目前GCN在推荐中的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值