前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SIGIR'22 | 推荐系统:图对比学习视图生成新思路

SIGIR'22 | 推荐系统:图对比学习视图生成新思路

作者头像
秋枫学习笔记
发布2022-09-19 10:36:09
5780
发布2022-09-19 10:36:09
举报
文章被收录于专栏:秋枫学习笔记

关注我们,一起学习~

title:Are Graph Augmentations Necessary? Simple Graph Contrastive Learning for Recommendation link:https://arxiv.org/pdf/2112.08679.pdf code:https://github.com/Coder-Yu/QRec from:SIGIR 2022

1. 导读

本文是针对图对比学习在推荐系统中的应用而提出的相关方法SimGCL。通常做对比学习的时候,需要对数据进行增广,得到相同数据的不同视图(view),然后进行对比学习,对于图结构也是一样,需要对用户-商品二部图进行结构扰动从而获得不同视图,然后进行对比学习最大化不同图扩充之间的节点表征一致性。本文通过实验表明

  • 基于对比学习的推荐模型中,对比学习通过学习更均匀的用户,商品表征来隐式的减轻流行度偏差;
  • 图增强只起到了很小的作用

因此,本文提出一种简单的对比学习方法,放弃之前的图增强方法,将均匀噪声添加到embedding空间,从而形成对比视图。虽然本文是针对图对比学习的,但是也许对其他情况的对比学习也有借鉴意义。

2. SimGCL

2.1 总览

本文的总体结构是图+对比学习,基模型采用LightGCN。总体损失函数表示为

L=L_{rec}+\lambda L_{cl}

,其中L_rec为用户和商品embedding经过LightGCN后得到的表征,然后通过BPR损失函数计算损失。L_cl表示对比损失,这里采用流行的infoNCE损失函数,本文的重点在于如何构建节点embedding的不同视图以进行对比学习。因此下文中主要介绍本文的主要创新之处,即如何构建不同视图,而对于其他基础部分如BPR损失,infoNCE损失,LightGCN等不再介绍。

2.2 动机

在SGL[1]上作者进行了如下实验,探究图结构扰动在图对比学习中的作用,ND为节点dropout,ED为边dropout,RW为随机游走,WA不进行数据增广(这里两个视图都用原始embedding)。可以发现,不进行数据增广的情况下,只比增强低一点,说明其作用很小。

以往的做法修改图结构是耗时又麻烦的,作用还小,因此作者考虑是否可以在embedding空间中进行操作。通过添加随机噪声增加一部分扰动,实现快速高效的数据增广。

2.3 方法

给定节点i,他的embedding表示为

e_i

,则其增广过程表示如下,其中

||\Delta||_2=\epsilon

,这个约束用于控制噪声的大小,并且对应的向量在半径为

\epsilon

的球上,

\Delta=\bar{\Delta}\odot sign(e_i)

,sign(x),x<0则输出-1,大于0则输出1,第二个约束要求

e_i

,

\Delta'

\Delta''

应该在同一个超象限,这样添加噪声不会导致新的

e_i

有很大的偏差,导致有效正样本较少。

\bar{\Delta} \sim U(0,1)

均匀分布。由于旋转足够小,增强表示保留了原始表示的大部分信息,同时也保留了一些不一致。

e_i'=e_i+\Delta_i'

,

e_i''=e_i+\Delta_i''

以LightGCN为图编码器进行消息传播,在每次传播的过程中加入噪声,最后将每一层的输出求均值进行池化。公式如下,其中A表示邻接矩阵。

\begin{array}{r} \mathbf{E}^{\prime}=\frac{1}{L}\left(\left(\tilde{\mathrm{A}} \mathrm{E}^{(0)}+\Delta^{(1)}\right)+\left(\tilde{\mathbf{A}}\left(\tilde{\mathrm{A}} \mathrm{E}^{(0)}+\Delta^{(1)}\right)+\Delta^{(2)}\right)\right)+\ldots \\ \left.+\left(\tilde{\mathbf{A}}^{L} \mathbf{E}^{(0)}+\tilde{\mathbf{A}}^{L-1} \Delta^{(1)}+\ldots+\tilde{\mathbf{A}} \Delta^{(L-1)}+\Delta^{(L)}\right)\right) \end{array}

代码:

代码语言:javascript
复制
def perturbed_LightGCN_encoder(self,emb,adj,n_layers):
        all_embs = []
        for k in range(n_layers):
            emb = tf.sparse_tensor_dense_matmul(adj, emb)
            random_noise = tf.random.uniform(emb.shape)
            emb += tf.multiply(tf.sign(emb),tf.nn.l2_normalize(random_noise, 1)) * self.eps
            all_embs.append(emb)
        all_embs = tf.reduce_mean(all_embs, axis=0)
        return tf.split(all_embs, [self.num_users, self.num_items], 0)

3. 结果

image.png

文献

[1] Jiancan Wu, Xiang Wang, Fuli Feng, Xiangnan He, Liang Chen, Jianxun Lian, and Xing Xie. 2021. Self-supervised graph learning for recommendation. In Proceedings of the 44th International ACM SIGIR Conference on Research and Development in Information Retrieval. 726–735

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 秋枫学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2.1 总览
  • 2.2 动机
  • 2.3 方法
  • 文献
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档