关注我们,一起学习~
标题:Enhancing Sequential Recommendation with Graph Contrastive Learning
链接:https://arxiv.org/pdf/2205.14837.pdf
会议:IJCAI 2022
主要参与:山大,南洋理工,阿里
1. 导读
很多现有的序列推荐方法仅利用单个交互序列的局部上下文信息,并仅基于商品预测损失来学习模型参数,通常无法学习较好的序列表示。本文提出了一种新颖的推荐框架,即用于序列推荐的图对比学习(GCL4SR)。
GCL4SR 采用加权商品转移图(WITG),基于所有用户的交互序列构建,为每次交互提供全局上下文信息,并削弱序列数据中的噪声信息。 GCL4SR 使用 WITG 的子图来增强每个交互序列的表征。 提出了两个辅助学习目标,以最大化 WITG 上相同交互序列诱导的增强表征之间的一致性 ,并最小化 WITG 上由全局上下文增强的表征与原始序列的局部表征之间的差异 。
2. 懒人阅读
本文的特点是将图学习和对比学习结合,对序列推荐中的序列表征进行更好的学习 。具体如下,
在所有用户的交互序列上构建加权无向图 ,构建方式不复杂,具体可见“3. 符号与概念”。 既然是对比学习,那就需要构建不同的视图 ,本文采用GraphSage 在上述加权图上针对序列S中的每个商品进行采样得到相应的两个子图。 在子图的基础上,利用GNN进行消息传播,然后构建对比损失 。 构建门控机制 对每个用户进行个性化,并且使用MMD进行表征对齐 。 同时也采用原始的方式(Transformer)对序列进行编码 ,得到相应的表征。 最后结合图表征和序列表征进行预测。
3. 符号与概念
令D表示交互序列的集合,U为用户集合,V为商品集合,每个用户的交互序列为
S=\{v_1,...,v_n\} ,用户embedding为
p_u\in \mathbb{R}^{1\times d} ,商品i的embedding为
e_i ,交互序列的初始embedding可以表示为矩阵
E_{S}^{(0)} \in \mathbb{R}^{n\times d} 。
与对每个单独序列中的序列转换模式进行建模的现有方法不同,本文首先从 D 构建加权的商品转换图
\mathcal{G} ,提供所有用户行为序列中商品转换模式的全局视图 。构建方式如下,以序列S为例,对于每个项目
v_t \in S ,如果G中的商品
v_t 和
v_{t+k} 之间存在一条边,则将边权重更新为
w(v_t,v_{t+k}) \leftarrow w(v_t,v_{t+k})+1/k ;否则,在 G 中构造
v_t 和
v_{t+k} 之间的边,将边权重
w(v_t,v_{t+k}) 设置为1/k,其中
k\in \{1,2,3\} 。分数 1/k 表示目标节点
v_t 对其在序列中的k阶邻居
v_{t+k} 的重要性。在对 D 中的所有用户序列重复上述过程后,归一化 G 中两个节点 vi 和 vj 之间的边权重,如下所示,deg()为无向图G的节点的度。
\widehat{w}\left(v_{t}, v_{j}\right)=w\left(v_{t}, v_{j}\right)\left(\frac{1}{\operatorname{deg}\left(v_{i}\right)}+\frac{1}{\operatorname{deg}\left(v_{j}\right)}\right)
4. 方法
image.png
4.1 图增强的序列表征学习 4.1.1 基于图的增广 给定加权转换图 G,首先通过数据增强为交互序列 S 构建两个增强图视图。其动机是通过对原始序列的某些转换来创建合理的数据。使用GraphSage中的有效邻域采样方法从给定序列的大型转换图生成增强图视图。具体来说,将每个节点
v \in S 视为一个中心节点,并通过将采样深度M设置为 2 并将每一步的采样大小 N 设置为 20 来对 G 中的邻居进行交互采样。考虑边权重,然后保留采样节点之间的边及其在 G 中的权重。对于特定的序列 S,采用基于图的增强后,可以获得两个增强的图视图
\mathcal{G}'_S=(V_S',E_S',A_S') 和
\mathcal{G}''_S=(V_S'',E_S'',A_S'') 。V, E, A是节点、边和邻接矩阵。
4.1.2 共享参数的GNN 使用两个具有共享参数的图神经网络对
\mathcal{G}_S' 和
\mathcal{G}_S'' 进行编码。以
\mathcal{G}_S' 为例,GNN第t层的信息传播和聚合公式如下,其中N是邻居节点集合,经过以下公式的多层信息传播之后,可以得到序列S中各个节点的embedding
H_S' \in \mathbb{R}^{n\times d} ,同样在子图
\mathcal{G}_S'' 上也可以得到一个embedding矩阵
H_S'' 。
\begin{array}{l}
\mathbf{a}_{v_{i}}^{(t)}=\text { Aggregate }^{(t)}\left(\left\{\mathbf{h}_{v_{j}}^{(t-1)}: v_{j} \in N_{v_{i}}^{\prime}\right\}\right) \\
\mathbf{h}_{v_{i}}^{(t)}=\text { Combine }^{(t)}\left(\mathbf{a}_{v_{i}}^{(t)}, \mathbf{h}_{v_{i}}^{(t-1)}\right)
\end{array} 这两个 GNN 的实现方式为,在第一层,使用图神经网络(GCN)来融合增强图的节点信息。然后,使用GraphSage层,该层使用均值池化来聚合增强图的高阶邻域信息。
4.1.3 图对比学习 用图对比学习来确保从相同序列的增强图视图派生的表征是相似的 ,而从不同序列的增强图视图派生的表征是不同的 。设计一个辅助学习目标来区分两个视图是否来自相同的用户交互序列。相同序列的视图作为正对,即
\left\{\left(\mathcal{G}_{S}^{\prime}, \mathcal{G}_{S}^{\prime \prime}\right) \mid S \in \mathcal{D}\right\} ,不同序列的视图作为负对,即
\left\{\left(\mathcal{G}_{S}^{\prime}, \mathcal{G}_{K}^{\prime \prime}\right) \mid S,K \in \mathcal{D},S\neq K\right\} 。然后,使用以下对比目标来区分同一交互序列和不同交互序列的表征,z为从均值池化得到的节点表征
\mathcal{L}_{G C L}(S)=\sum_{S \in \mathcal{D}}-\log \frac{\exp \left(\cos \left(\mathbf{z}_{S}^{\prime}, \mathbf{z}_{S}^{\prime \prime}\right) / \tau\right)}{\sum_{K \in \mathcal{D}} \exp \left(\cos \left(\mathbf{z}_{S}^{\prime}, \mathbf{z}_{K}^{\prime \prime}\right) / \tau\right)}
4.2 用户特定的门控 由于每个单独的用户可能只对商品的某些特定属性感兴趣,因此全局上下文信息应该是用户特定的。这里涉及了用户特定的门控机制来解决上述问题。
\begin{aligned}
\alpha &=\sigma\left(\mathbf{W}_{g 1} \mathbf{H}_{S}^{\prime \top}+\mathbf{W}_{g 2} \mathbf{p}_{u}^{\top}+b_{g}\right), \\
\mathbf{Q}_{S}^{\prime} &=\alpha \otimes \mathbf{H}_{S}^{\prime}+(1-\alpha) \otimes \mathbf{p}_{u}
\end{aligned} 4.2.1 表征对齐 使用最大平均差异 (MMD)来定义个性化全局上下文的表征(即
\mathbf{Q}_{S}^{\prime} 和
\mathbf{Q}_{S}'' )与局部序列表征
E_S^{(0)} 之间的距离 。MMD通常用于衡量两个分布之间的距离,即差异,这里不做过多介绍,想要详细了解的可以查看论文和该链接https://zhuanlan.zhihu.com/p/163839117。
通过MMD来构造辅助损失函数来达到上面说的目的,如下式,
\mathcal{L}_{M M}(S)=M M D\left(\mathbf{E}_{S}^{(0)}, \mathbf{Q}_{S}^{\prime}\right)+M M D\left(\mathbf{E}_{S}^{(0)}, \mathbf{Q}_{S}^{\prime \prime}\right)
4.3 序列编码器 除了序列的图增强表征之外,本文还使用传统的序列模型来编码用户的交互序列。实用 SASRec作为主干模型,堆叠Transformer来对用户交互序列进行建模。给定第l-1层的节点表示
H^{l-1} ,第l层的 Transformer 编码器的输出如下,
\begin{aligned}
\mathbf{H}^{\ell} &=F F N\left(\text { Concat }\left(\text { head }_{1}, \ldots, \text { head }_{h}\right) \mathbf{W}^{h}\right) \\
\text { head }_{i} &=\text { Attention }\left(\mathbf{H}^{\ell-1} \mathbf{W}_{i}^{Q}, \mathbf{H}^{\ell-1} \mathbf{W}_{i}^{K}, \mathbf{H}^{\ell-1} \mathbf{W}_{i}^{V}\right)\
\end{aligned} \operatorname{Attention}(\mathbf{Q}, \mathbf{K}, \mathbf{V})=\operatorname{softmax}\left(\frac{\mathbf{Q K}^{\top}}{\sqrt{d}}\right) \mathbf{V}
4.4 预测层 将序列表征和从图中得到的表征进行拼接,通过注意力层后进行预测得到第n+1次可能交互的所有商品的概率,公式如下,
\mathbf{M}=\operatorname{AttNet}\left(\operatorname{Concat}\left(\mathbf{Q}_{S}^{\prime}, \mathbf{Q}_{S}^{\prime \prime}, \mathbf{H}^{\ell}\right) \mathbf{W}_{T}\right)
\hat{y}^{(S)}=softmax(ME^T)
4.5 多任务学习 前面已经包含了两个辅助损失函数了,这里需要构建主任务的损失函数,将序列划分为不同的子序列,然后以子序列预测后一个商品的交互概率,如
S_u=\{v_u^1,...,v_u^{|S_u|}\} 划分为
\{(S_u^{1:1},v_u^2),...,(S_u^{1:|S_u|-1},v_u^{|S_u|})\} ,构建的损失函数为下式,对于每个用户的每个子序列都要计算,
\mathcal{L}_{\text {main }}=-\sum_{S_{u} \in \mathcal{D}} \sum_{k=1}^{\left|S_{u}\right|-1} \log \left(\hat{\mathbf{y}}^{\left(S_{u}^{1: k}\right)}\left(v_{u}^{k+1}\right)\right)
总损失为下式,
\mathcal{L}=\mathcal{L}_{\text {main }}+\sum_{S_{u} \in \mathcal{D}} \sum_{k=1}^{\left|S_{u}\right|-1} \lambda_{1} \mathcal{L}_{G C L}\left(S_{u}^{1: k}\right)+\lambda_{2} \mathcal{L}_{M M}\left(S_{u}^{1: k}\right)
5. 结果