前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SIGIR'21 微软|基于自监督图学习的召回方法

SIGIR'21 微软|基于自监督图学习的召回方法

作者头像
秋枫学习笔记
发布2022-09-19 11:46:37
3380
发布2022-09-19 11:46:37
举报
文章被收录于专栏:秋枫学习笔记

image.png

Self-supervised Graph Learning for Recommendation https://dl.acm.org/doi/pdf/10.1145/3404835.3462862

1. 背景

本文为召回阶段所提出的相关方法。首先,基于图的推荐系统方法存在以下三个限制:

  • 稀疏的监督信号:通常我们都是根据用户和item之间的交互来作为监督信号,但是这种交互相对于整个交互空间来说是非常稀疏的,导致无法学到足够好的表征。
  • 数据分布倾斜:热门item的交互会更多,而冷门的长尾的item交互会更少,在图中的度会比较低,监督信号更少。这种长尾不平衡数据,分类器会倾向于多数类,导致长尾数据的推荐效果变得更差。
  • 交互中存在噪声:对于隐式反馈,例如点击,查看。这些反馈可能是由于被误导而点击的,而不是用户真正感兴趣的。

为了解决上述难点,本文采用自监督学习构建辅助任务来发掘数据内部的信息,从而为节点产生更好的表征,主要包含以下两部分:

  • 数据增强:为每个节点生成不同的视角
  • 对比学习:使同一节点的不同视角具有一致性

2. 方法

如图所示为本文所提的自监督图学习(SGL)的主要流程,用自监督作为辅助任务从数据的相关性中挖掘内在的监督信号。

2.1 数据增强

在user-item的交互的二部图中,存在这样的关系。一阶关系可以反映user和item之间的交互关系,二阶关系可以反映user之间的相似性或item之间的相似性。更高阶的路径可以反映user对item的潜在兴趣。本节从这方面出发,设计了三个方案:node dropout,edge dropout,random walk,总体上可以表示为下式,其中s是从图G中随机选择得到,然后构建两个节点Z的相关视图。

\mathbf{Z}_{1}^{(l)}=H\left(\mathbf{Z}_{1}^{(l-1)}, s_{1}(\mathcal{G})\right), \mathbf{Z}_{2}^{(l)}=H\left(\mathbf{Z}_{2}^{(l-1)}, s_{2}(\mathcal{G})\right), s_{1}, s_{2} \sim \mathcal{S}
  • Node Dropout(ND):以一定概率
\rho

忽视图中的节点和其对应的边,s1,s2通过下式得到,其中

M',M''\in \{0,1\}^{|\mathcal{V}|}

表示掩码向量(mask),作用于节点集合

\mathcal{V}

上,即0就是忽略了该节点,1就是保留了该节点,最后得到两个子图s1(G),s2(G)。这种增强方式是希望模型能够从不同的视角中识别出有影响,有作用的节点;并且模型对表征的学习对图结构的变化不那么敏感。

s_{1}(\mathcal{G})=\left(\mathbf{M}^{\prime} \odot \mathcal{V}, \mathcal{E}\right), \quad s_{2}(\mathcal{G})=\left(\mathbf{M}^{\prime \prime} \odot \mathcal{V}, \mathcal{E}\right)
  • Edge Dropout(ED):以一定的概率忽略图中的边,公式如下,其中
M_1,M_2 \in {0,1}^\mathcal{E|}

和之前一样,也是mask,作用于边的集合之后,忽略掉一部分的边。通过ED,可以捕捉节点局部结构的有用模式,并且使得表征对噪声交互更具鲁棒性。

s_{1}(\mathcal{G})=\left(\mathcal{V}, \mathbf{M}_{1} \odot \mathcal{E}\right), \quad s_{2}(\mathcal{G})=\left(\mathcal{V}, \mathbf{M}_{2} \odot \mathcal{E}\right)
  • Random Walk(RW):上述两种方案得到的两个子图,在后续的GNN操作过程中一直是不变的,而RW可以使得在不同的GNN层上可以用不同的子图,例子如图所示。这个的实现也不难,就是在每一层都采用上述方法中的一个比如ED,然后在每一层实施的时候采用不同的概率或者随机种子。

image.png

2.2 对比学习

通过增强方法得到同一节点的不同视角子图后,我们令s1,s2中相同节点为正样本对

\left\{\left(\mathbf{z}_{u}^{\prime}, \mathbf{z}_{u}^{\prime \prime}\right) \mid u \in \mathcal{U}\right\}

,不同节点为负样本对

\left\{\left(\mathbf{z}_{u}^{\prime}, \mathbf{z}_{v}^{\prime \prime}\right) \mid u, v \in \mathcal{U}, u \neq v\right\}

。类似于度量学习,这里希望做到的就是同一节点的不同视角应该尽量一致,而不同节点的不同视角应该尽量分散。公式如下,对于节点u,分子计算相同节点的不同视角的相似度,分母计算两两负样本对之间的相似度。

s(\cdot)

表示相似度,例如余弦相似度,

\tau

是温度系数。同样方法可以得到item的对比学习损失,

\mathcal{L}^{item}_{ssl}

\mathcal{L}_{ssl}=\mathcal{L}_{ssl}^{item}+\mathcal{L}_{ssl}^{user}
\mathcal{L}_{s s l}^{u s e r}=\sum_{u \in \mathcal{U}}-\log \frac{\exp \left(s\left(\mathbf{z}_{u}^{\prime}, \mathbf{z}_{u}^{\prime \prime}\right) / \tau\right)}{\sum_{v \in \mathcal{U}} \exp \left(s\left(\mathbf{z}_{u}^{\prime}, \mathbf{z}_{v}^{\prime \prime}\right) / \tau\right)}

2.3 多任务学习

正如前面所说的,本文是将自监督学习(ssl)作为辅助任务,主任务仍然是常用的基于图的推荐算法。因此总的损失函数可以定义为下式,两个损失相加并结合L2正则。

\mathcal{L}=\mathcal{L}_{main}+\lambda_1\mathcal{L}_{ssl}+\lambda_2\|\Theta\|^2_2

3. 结果

相比于lightGCN,所提方法还是有明显提升的。

4. 总结

本文的思想比较简单易懂,就是希望通过减少一些边,节点生成新的子图,然后通过对比学习增强模型的鲁棒性。针对背景中的三点问题,也有了相应的解决方式。例如,通过减少一些节点或边,可以减弱热门item的影响,对边的dropout可以一定程度上增强模型对噪声交互的鲁棒性。我觉得还是比较有启发的文章。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2.1 数据增强
  • 2.2 对比学习
  • 2.3 多任务学习
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档