目录
概
gated GNN 用在 Session-based 问题之上, 说实话, 没有眼前一亮的感觉 (以 2023 年的眼光).
符号说明
- \(V = \{v_1, v_2, \ldots, v_m\}\), items;
- \(s=[v_{s, 1}, v_{s, 2}, \ldots, v_{s, n}]\), 按序排列的 session \(s\);
- \(\mathcal{G}_s = (\mathcal{V}_s, \mathcal{E}_s)\), 由 session \(s\) 所构成的图;
- \(\mathbf{v} \in \mathbb{R}^d\), item \(v\) 的 embedding;
- \(\mathbf{s}\), session \(s\) 的 embedding.
基本框架
-
输入 session:
\[s=[v_{s, 1}, v_{s, 2}, \ldots, v_{s, n}]. \] -
映射成 embeddings:
\[\mathbf{v}_{s, 1}, \mathbf{v}_{s, 2}, \ldots, \mathbf{v}_{s, n}. \] -
将 session 映射为图, 利用该图在上述 embeddings 的基础上通过 gated GNN 进行变换得到 隐变量:
\[\mathbf{v}_{s, 1}^T, \mathbf{v}_{s, 2}^T, \ldots, \mathbf{v}_{s, n}^T. \] -
令
\[\mathbf{s}_l = \mathbf{v}_n^T \]表示 local 的信息, 接下来通过 attention 聚合各隐变量得到 global 的信息:
\[\alpha_i = \mathbf{q}^T \sigma(\mathbf{W}_1 \mathbf{v}_n + \mathbf{W}_2 \mathbf{v}_i + \mathbf{c}), \\ \mathbf{s}_g = \sum_{i=1}^n \alpha_i \mathbf{v}_i, \]最后得到混合的表示
\[\mathbf{s}_h = \mathbf{W}_3 [\mathbf{s}_l; \mathbf{s}_g]. \] -
于是 next-item 的得分可以通过
\[\hat{z}_i = \mathbf{s}_h^T \mathbf{v}_i. \]得到.
-
得到
\[\hat{\mathbf{y}} = \text{softmax}(\hat{\mathbf{z}}), \]然后通过交叉熵进行训练.
gated GRU
容易发现, 实际上就是 \(\mathbf{a}\) 这个地方不同, 以前的 GRU 是直接用 embedding 作为 \(\mathbf{a}\), 现在需要加一步聚合.
技术细节
我看了代码, 和 GRU4REC 不同的是, 它是事先把数据集处理好的, 比如训练集中本来有一个完整的 session \([v_1, v_2, v_3, v_4]\), 那本文就会把它切分成:
\[[v_1]; \: v_2, \]\[[v_1, v_2]; \: v_3, \]\[[v_1, v_2, v_3]; \: v_4, \]三个预测任务 (\(;\) 后面 target), 这样一来 coding 会简单一点, 不过效率可能会稍差一点.