A Contextualized Temporal Attention Mechanism for Sequential Recommendation

发布时间 2023-09-06 09:58:26作者: 馒头and花卷

Wu J., Cai R. and Wang H. D'ej`a vu: A contextualized temporal attention mechanism for sequential recommendation. WWW, 2020.

考虑 temporal 信息的序列推荐.

符号说明

  • \(\mathcal{V}\), items, \(|\mathcal{V}| = N\);
  • \(\mathcal{U}\), users, \(|\mathcal{U}| = U\);
  • \(\mathcal{S}^u = \{(t_1^u, v_1^u), (t_2^u, v_2^u), \ldots\}\), 用户 \(u\) 的交互序列, \(t, v\) 分别为时间戳和 item;

CTA

作者给了一个图, 不过说实话, 这个图真是越看越迷糊:

  • 总的来说, 作者的模型总共分为三个阶段, \(\alpha, \beta\) stages 分别提取序列和时间信息, 最后的 \(\gamma\) stage 算是二者的一个融合.

  • 首先, 我们限定序列的最大长度为 \(L\), 即我们只有:

    \[\{(t_i, v_i\}_{i=1}^L. \]

  • 对于序列的 items, 我们将其转换为 embeddings (就是通过最简单的 look up): \(\bm{X} \in \mathbb{R}^{L \times d_{in}}\), 然后将时间戳转换为:

    \[\bm{T} = [t_{L+1} - t_1, \ldots, t_{L+1} - t_L] \in \mathbb{R}^{L \times 1}, \]

    其中 \(t_{L+1}\) 为当前时刻. 实际上 \(\bm{T}\) 是 time span 的信息.

  • 问: 我怎么知道用户会在哪个时候产生交互行为?

\(\alpha\) stage

  • 这个 stage 是希望计算序列 \([v_1, \ldots, v_L]\) 中不同交互的重要性差异, 其主要通过 attention 计算.

  • 首先, 利用一般的 multi-head attention + FFN + LN 的组合得到隐变量 \(\bm{H} \in \mathbb{R}^{L \times d_{in}}\).

  • 不似一般的 Transformer 的架构直接用这个隐变量做预测, 利用

    \[\bm{\alpha} = \text{softmax}(\frac{(\bm{H} W_0^Q) \cdot (\bm{x}_L W_0^K)^T}{\sqrt{d_{in}}}) \in \mathbb{R}^{L \times 1} \]

    来计算隐变量和 last item 的embedding \(\bm{x}_L\) 之间的相似度. \(W_0^Q, W_0^K \in \mathbb{R}^{d_{in} \times d_{in}}\) 为可训练的参数.

\(\beta\) stage

  • 该 stage 希望对 time span 进行一定的转换, 并得到更好的时序信息.

  • 不同的用户往往有着不同的行为模式, 所以对于 time span 的转换应当考虑到这一点, 故作者提出了多种 kernel functions:

    1. \(\phi(\bm{T}) = a e^{-\bm{T}} + b\), 指数衰减 kernel;
    2. \(\phi(\bm{T}) = -a \log (1 + \bm{T}) + b\), 对数衰减 kernel;
    3. \(\phi(\bm{T}) = -a \bm{T} + b\), 线性衰减 kernel;
    4. \(\phi(\bm{T}) = \bm{1}\) , 常数 kernel.
  • 注意到设定不同的 \(a, b \in \mathbb{R}\), 每个 kernel 也会有所不同, 假设我们设定了 \(K\) 个不同的 kernels: \(\{\phi_1, \phi_2, \ldots, \phi_K\}\), 通过这些 kernels 我们得到:

    \[\bm{\beta} = [\phi_1(\bm{T}), \ldots, \phi_K(\bm{T}))] \in \mathbb{R}^{L \times K}. \]

\(\gamma\) stage

  • 该 stage 对两个信息进行一个融合, 主要是希望计算对每一个交互的一个权重.

  • 作者通过 Bidirectional RNN 计算:

    \[\bm{C} = \text{Bi-RNN}(\bm{X}) \oplus C_{attr} \in \mathbb{R}^{L \times d_r}, \]

    其中 \(C_{attr}\) 表示某些具体的属性, 但是实际上在本文中, 作者没有考虑这一点.

  • 接下来:

    \[\bm{\gamma} = \text{softmax}(\bm{\alpha} \odot \bm{\beta}^c) \in \mathbb{R}^{L \times 1}, \\ \bm{\beta}^c = \bm{\beta} \cdot \bm{p} \in \mathbb{R}^{L \times 1}, \\ \bm{p} = \text{softmax}(F^{\gamma} (\bm{C})) \in \mathbb{R}^{K \times 1}, \]

    其中 \(F^{\gamma}\) 是一个 feed-forward layer.

代码

[official]