图结构上的数据扩充
由于以下特定特征,直接在基于图的推荐中采用CV和NLP任务中的数据增强是不可行的。
- 用户和物品的特征是离散的,如one-hot ID等分类变量。因此,图像上的增强操作,如随机裁剪、旋转或模糊,是不适用的。
- 更重要的是,与将每个数据实例视为独立的CV和NLP任务不同,交互图中的用户和项目本质上是相互连接和依赖的。因此,我们需要为基于图的推荐定制新的增强运算符。
二部图建立在观察到的用户-物品交互上,因此包含协同过滤信号。具体来说,第一跳邻近节点直接描述了自我用户和项目节点,即用户的历史项目(或项目的交互用户)可以被视为用户(或项目)的预先存在特征。用户(或项目)的第二跳邻近节点表示类似用户(或类似项目)。此外,从用户到商品的higher-order路径反映了用户对商品的潜在兴趣。毫无疑问,挖掘图结构中的固有模式有助于表示学习。因此,作者在图结构上设计了三个算子:node dropout, edge dropout 和 random walk,以创建不同的节点视图。运算符可以一致表示为:
其中,在图G中独立进行随机选择s1和s2,从而构建两个相关视图Z1(l)和Z2(l)。三个增广算子详细阐述如下:Node Dropout (ND):以概率ρ从图中丢弃每个节点及其连接边。
式中,M`, M``∈{0,1} | V |是两个掩码向量,应用于节点集V生成两个子图。因此,这种增强可以从不同的增强视图中识别出有影响的节点,使表示学习对结构变化不那么敏感。Edge Dropout (ED):以概率ρ从图中丢弃边。
其中M1, M2∈{0,1} | E |是边集E上的两个掩码向量。只有邻域内的部分连接对节点表示有贡献。因此,耦合这两个子图的目的是捕获节点局部结构的有用模式,并进一步赋予表示对噪声交互的更强的鲁棒性。
Random Walk :上面的两个算子生成一个跨所有图卷积层共享的子图。为了探索更高的性能,作者考虑为不同的层分配不同的子图。这可以看作是使用随机游走为每个节点构造单独的子图。假设在每一层(有不同的比例或随机种子)选择edge dropout,则可以通过利用边掩蔽向量对层敏感来制定RW(如下图所示):
为了简单起见,作者在图结构的每个epoch上应用这些增强,也就是说,在一个新的训练epoch开始时,对每个节点生成两个不同的视图(对于RW,每层生成两个不同的视图)。请注意,对于两个独立进程(即s1和s2), dropout和masking比率是相同的。我们将不同比例的调整留到以后的工作中。值得一提的是,只涉及到dropout和masking操作,并且没有添加任何模型参数。
对比学习
将来自同一节点的增强视图视为正例,来自不同节点间的增强视图视为负例。正例辅助监督促进了同一节点的不同视图之间的预测一致性,而负例监督则强化了不同节点之间的分歧。形式上,遵循SimCLR,并采用对比损失InfoNCE来最大化正例的一致性,最小化负例的一致性:
项目上的损失如上类似构建。最终的自监督任务损失如下:
多任务学习
为了改进自监督学习任务的推荐,作者利用多任务训练策略联合优化经典推荐任务和自监督学习任务:
本文的主要贡献总结如下:
探索了自监督学习解决监督学习范式下基于图推荐的局限性的潜力;
提出了一个模型无关的框架SGL来补充监督推荐任务与自监督学习的用户-项目图;
从图结构的角度,设计了三种不同方面的数据扩充来构建辅助对比任务。
下面给大家留一个讨论题,希望大家踊跃发表意见,让我们所有人都从讨论中受益:
除了DHCN、MHCN和SGL,你还知道哪些将对比学习与推荐系统结合的模型,它们是如何将自监督应用在推荐任务中的,损失函数又是什么样的?