zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

方法学习微软 基于 &# 21 x27 监督
2023-06-13 09:12:49 时间

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可以一定程度上增强模型对噪声交互的鲁棒性。我觉得还是比较有启发的文章。