Graph Masked Autoencoder for Sequential Recommendation
Ye Y., Xia L. and Huang C. Graph masked autoencoder for sequential recommendation. SIGIR, 2023.
概
图 + MAE.
符号说明
- \(\mathcal{U}, \mathcal{V}\), users, items;
- \(S^u = (s_1^u, s_2^u, \cdots, s_{l_u}^u)\), 某个序列;
- \(\mathcal{G} = (\mathcal{V}, \mathcal{E})\), global item transition graph, 这里\[\mathcal{E} = \{(s_t^u, s_{t'}^u): u \in \mathcal{U}, |t - t'| \le h, 1 \le t, t' \le l_u\}, \]其中 \(h\) 是人为给定的距离.
- \(\mathcal{N}_v^k\), 结点 \(v\) 的 k-hop neighbors;
MAERec
Learning to Mask
-
定义 semantic relatedness:
\[\gamma(v) = \frac{1}{|\mathcal{N}_v^k|k} \sum_{v' \in \mathcal{N}_v^k} \frac{\mathbf{e}_v^T \mathbf{e}_{v'}}{\|\mathbf{e}_v\| \|\mathbf{e}_{v'}\|}. \] -
\(\gamma(v)\) 越大, 说明 \(v\) 与它的 k-hop 邻居的结构一致性越好, 此时由该结点所导出的 path 往往具有更少的 noise.
-
为了更鲁棒的结果, 作者从如下分布中采样 (see here):
\[\gamma'(v) \sim \text{Gumbel}(x; \gamma(v), 1), \]实际中, 我们可以通过如下的方式采样:
\[\gamma'(v) = \gamma(v) - \log(-\log(\mu)), \: \mu \sim \text{Uniform}(0, 1). \] -
To elevate the adaptability and learnability of the learning-tomask component for data augmentation, 作者施加如下损失 (关于 embedding) 以促进学习到更好的 mask:
\[\mathcal{L}_{mask} = - \sum_{v \in \mathcal{V}} \gamma' (v). \]
Transition Path Masking
-
为了减少 noise 的影响, 我们采样具有更好的 semantic relatedness 的 items 作为候选点 \(\mathcal{V}_a\).
-
以 \(\mathcal{P}^1 := \mathcal{V}_a\) 为起点, 接下来的第 \(k\) 步:
\[\mathcal{P}^k = \mathcal{P}^{k-1} \cup \varphi (\mathcal{N}(\mathcal{P}^{(k-1)}), p^k), \]其中 \(\varphi(\cdot, p)\) 表示按照 \(p\) 为 drop ratio 的采样操作. \(\mathcal{N}(\mathcal{P}) := \{v \in \mathcal{V}: (v, v') \in \mathcal{E}, v' \in \mathcal{P}\}\).
-
\(\mathcal{P}\) 中 nodes 都会被 mask 掉.
Task-Adaptive Augmentation
- 为了降低 task-irrelevant 信息的影响, 作者引入:\[r(\mathcal{L}_{rec}) = \left \{ \begin{array}{ll} 1 & \text{ if } \nabla \mathcal{L}_{rec} > \bar{\nabla} \mathcal{L}_{rec}' \\ \epsilon & \text{ otherwise } \end{array} \right .. \]其中 \(\nabla \mathcal{L}_{rec}\) 表示当前的推荐损失和上一步的推荐损失的差, \(\bar{\nabla} \mathcal{L}_{rec}'\) 则是以往的推荐损失的平均, \(\epsilon < 1\). 它施加在:\[\mathcal{L}_{mask} = -r(\mathcal{L}_{rec}) \sum_{v \in \mathcal{V}} \gamma' (v), \]倘若当前的 mask 对于推荐损失不怎么友好, 那么更多的权重需要被施加在 mask 的学习之上.
模型
-
GCN-based Graph Encoder:
\[\tag{3} \mathbf{e}_v^{l+1} = \mathbf{e}_v^l + \sum_{v' \in \mathcal{N}_v} \mathbf{e}_{v'}^l; \: \tilde{\mathbf{e}}_v = \sum_{l=1}^L \mathbf{e}_v^l. \] -
Decoder: 用于重建被 mask 的边, 对于 edge \((v, v')\) 作者这里将 encoder 中不同的层的结果交叉的耦合在一起:
\[\mathbf{e}_{v, v'} = \|_{i, j = 1}^L \mathbf{e}_v^i \odot \mathbf{e}_{v'}^j. \]经过 MLP 转换后得到 score \(s_{v, v'}\). 这里, 我们用如下损失用于重构:
\[\mathcal{L}_{con} = -\sum_{(v, v') \in \underbrace{\mathcal{E} \setminus \mathcal{P}^k}_{\text{masked edges}}} \log \frac{\exp(s_{v, v'})}{\sum_{v'' \in \mathcal{V}} \exp(s_{v, v''})}. \] -
Sequence Encoder: 与一般的 Transformer 有所区别的是, 这里的 embedding 采用的是 (3) 中的 \(\tilde{\mathbf{e}}_v\). 然后用 BCE 损失来建模 \(\mathcal{L}_{rec}\).
-
最后总的损失为:
\[\mathcal{L} = \mathcal{L}_{rec} + \mathcal{L}_{mask} + \mathcal{L}_{con} + \lambda \|\Theta\|_F^2. \]
代码
[official]