Graph Masked Autoencoder for Sequential Recommendation

发布时间 2023-06-22 14:46:14作者: 馒头and花卷

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-to￾mask 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]