本文Global Context Enhanced Graph Neural Networks for Session-based Recommendation,是发表在SIGIR20上的一篇文章。
本篇是推荐系统经典论文阅读的第三篇,前两篇分别是SRGNN、LESSR。
前置知识
图神经网络和会话推荐:参见前两篇文章前置知识部分。
全局图:是本文提出的定义,具体来说就是一个项目
v
3
v_3
v3与多个会话有关系,例如
s
e
s
s
i
o
n
1
:
v
1
→
v
3
→
v
2
session1:v_1 \rightarrow v_3 \rightarrow v_2
session1:v1→v3→v2、
s
e
s
s
i
o
n
2
:
v
4
→
v
3
→
v
1
session2:v_4 \rightarrow v_3 \rightarrow v_1
session2:v4→v3→v1,则将其汇聚成具有四个节点
v
1
,
v
2
,
v
3
,
v
4
v_1,v_2,v_3,v_4
v1,v2,v3,v4和三条无向边
v
1
−
v
3
,
v
2
−
v
3
,
v
4
−
v
3
v_1-v_3,v_2-v_3,v_4-v_3
v1−v3,v2−v3,v4−v3的无向图。
概述(动机和存在的问题)
原文概述:基于会话的推荐 (SBR) 是一项具有挑战性的任务,旨在根据匿名行为序列推荐项目。现有的 SBR 解决方案几乎都仅基于当前会话来建模用户偏好,而不利用其他会话,而其他会话可能包含与当前会话相关和不相关的项目转换。本文提出了一种称为全局上下文增强图神经网络 (GCE-GNN) 的新方法,以更微妙的方式利用所有会话中的项目转换,以更好地推断当前会话的用户偏好。具体而言,GCE-GNN 分别从会话图和全局图中学习两级项目嵌入:(i) 会话图,通过对当前会话中的成对项目转换进行建模来学习会话级项目嵌入;(ii) 全局图,通过对所有会话中的成对项目转换进行建模来学习全局级项目嵌入。在 GCEGNN 中,我们提出了一种新颖的全局级项目表示学习层,它采用会话感知注意机制以递归方式合并全局图上每个节点的邻居嵌入。我们还设计了一个会话级项目表示学习层,它使用会话图上的 GNN 来学习当前会话中的会话级项目嵌入。此外,GCE-GNN 使用软注意机制聚合了两个级别中学习到的项目表示。在三个基准数据集上的实验表明,GCE-GNN 始终优于最先进的方法。
概述中得到的信息:当前几乎所有的会话推荐都只关注当前的对话(实际与其建模和任务有关),本文主要利用了其他会话的信息结合推荐。具体针对当前的会话和全局的会话进行嵌入。
引言
此处原文探讨了早期基于会话的推荐,主要使用两种方法:基于相似性和基于链的方法。前者严重依赖当前会话中项目的共现信息(实际就是呈现出来的项目一致性),而忽略了顺序行为模式(就是没考虑顺序)。后者推断出用户对所有商品的所有可能选择序列(根据其他链),这对于商品数量巨大的实际应用来说可能会遇到难以计算的问题。
2020年之前许多深度学习方法被提出,例如使用RNN或记忆网络。引入了两个问题:
(1)一个会话可能会包含用户多方面的选择,包含噪声。对item-transation产生影响。
(2)例如SRGNN中使用了自注意力机制的图神经网络,较为依赖会话中每项对最后一项的item-transation,并通过这些学习整个会话的表示。
此外,几乎当时所有研究都基于当前会话对用户建模而忽略其他会话的项目转换模式。除了CSRM使用了m个会话协作,其中将每个会话视作最小单元,但是这种协作会引入不相干的信息,如下图所示:
假设当前会话为Session 2,那么会话1和3都会被使用进来,CSRM利用其他会话的item-transation有助于模拟当前偏好,例如
v
2
v_2
v2。但同时也会引入不相干的噪声
v
6
v_6
v6。
针对上述挑战,本文使用Global Context Enhanced Graph Neural Networks (GCE-GNN),以更微妙的方式利用所有会话中的item-transation,以便更好地推断当前会话的用户偏好。
Embedding部分:GCEGNN分别从会话图和全局图中学习两个级别的项目嵌入:(i) 会话图,通过对当前会话中的成对item-transation进行建模来学习会话级项目嵌入;(ii) 全局图,通过对会话(包括当前会话)中的成对item-transation进行建模来学习全局级项目嵌入。
模型部分:GCE-GNN提出了一种新颖的全局级项目表示学习层,它采用会话感知注意力机制以递归方式合并全局图上每个节点的邻居嵌入。还设计了一个会话级项目表示学习层,该层使用会话图上的 GNN 来学习当前会话中的会话级项目嵌入。此外,GCE-GNN 使用软注意力机制聚合了两个级别中学习到的项目表示。
主要贡献(除实验):
- 第一项利用所有会话中的全局级item-transation来学习全局级上下文信息进行会话推荐的工作。
- 提出了一个统一的模型,利用来自两个级别的图模型(即会话图和全局图)的成对item-transation信息来提高当前会话的推荐性能。
- 还提出了一种位置感知注意力机制,将反向位置信息纳入项目嵌入中,这显示了基于会话的推荐的优越性能。
相关工作
本文的这一部分值得一看,因为其详细介绍了会话推荐2010~2020间会话推荐的发展:
10年使用马尔科夫链。
接着着重介绍了深度学习相关的会话推荐:[GRU4REC](https://arxiv.org/abs/1511.06939)、[NARM](Neural attentive session-based recommendation)、基于注意力的短期记忆网络STAMP、Transformer启发的SASRec、混合通道模型建模的MCPRM、门控图神经网络SRGNN,以及其一定的变体GC-SAN、多头注意力聚合邻居嵌入的[FGNN](Rethinking the Item
Order in Session-based Recommendation with Graph Neural Network)。
基于协同过滤的仍与深度学习有竞争力。
方法
问题陈述
具有 V = { v 1 , v 2 , . . . , v m } V=\{v_1,v_2,...,v_m\} V={v1,v2,...,vm}这么多个item,以及一个匿名的会话序列 S = [ v 1 s , v 2 s , . . . , v l s ] S=[v^s_1,v^s_2,...,v^s_l] S=[v1s,v2s,...,vls]预测 S S S下一次点击,即 v n + 1 s v^s_{n+1} vn+1s。在该模型下,输出所有可能项目的前 N N N个项目 ( 1 ≤ N ≤ ∣ V ∣ ) (1\leq N \leq |V|) (1≤N≤∣V∣)。
会话图和全局图的模型
会话图模型
每个会话序列都被转换成一个会话图,用于通过 GNN 学习当前会话中项目的嵌入,具体如下图:
其中每对相邻项目
v
i
→
v
j
v_i\rightarrow v_j
vi→vj都有一条有向边
<
i
,
j
>
<i,j>
<i,j>,并对每个节点
v
i
v_i
vi添加自循环
<
i
,
i
>
<i,i>
<i,i>,本文不同item之间设置了四种不同关系的边:分别表示为 𝑟𝑖𝑛、𝑟𝑜𝑢𝑡、𝑟𝑖𝑛−𝑜𝑢𝑡 和 𝑟𝑠𝑒𝑙𝑓。对于边
(
v
i
s
,
v
j
s
)
(v_i^s, v_j^s)
(vis,vjs),𝑟𝑖𝑛 表示仅存在从
v
i
s
v_i^s
vis到
v
j
s
v_j^s
vjs的过渡,𝑟𝑜𝑢𝑡 意味着仅存在从
v
j
s
v_j^s
vjs到
v
i
s
v_i^s
vis的过渡,而 𝑟𝑖𝑛−𝑜𝑢𝑡 表明同时存在从
v
i
s
v_i^s
vis到
v
j
s
v_j^s
vjs的过渡和从
v
j
s
v_j^s
vjs到
v
i
s
v_i^s
vis的过渡; 𝑟𝑠𝑒𝑙𝑓指的是某项的自我转换。
全局图模型
通过整合会话中所有成对item-transation,考虑全局级item-transation以进行全局级项目表示学习。因此,提出了一种用于学习全局级项目嵌入的新型全局图模型,该模型打破了序列独立性假设,基于所有会话(包括当前会话)中的成对转换链接所有项目对。 接下来,我们首先提出一个用于建模全局级项目转换的概念(即𝜀-邻居集),然后给出全局图的定义。
定义 1. 𝜀-邻居集(
N
ε
(
v
)
\mathcal{N}_{\varepsilon}(v)
Nε(v))。对于会话
S
p
S_p
Sp中的任何项目
v
i
p
v_{i}^{p}
vip,
v
i
p
v_{i}^{p}
vip的𝜀-邻居集表示一个项目集合,其中每个元素定义如下,
N
ε
(
v
i
p
)
=
{
v
j
q
∣
v
i
p
=
v
i
′
q
∈
S
p
∩
S
q
;
v
j
p
∈
S
q
;
j
∈
[
i
′
−
ε
,
i
′
+
ε
]
;
S
p
≠
S
q
}
\mathcal{N}_{\varepsilon}(v_{i}^{p})=\left\{v_{j}^{q}|v_{i}^{p}=v_{i'}^{q}\in S_{p}\cap S_{q};v_{j}^{p}\in S_{q};j\in[i^{'}-\varepsilon,i^{'}+\varepsilon];S_{p}\neq S_{q}\right\}
Nε(vip)={vjq∣vip=vi′q∈Sp∩Sq;vjp∈Sq;j∈[i′−ε,i′+ε];Sp=Sq}
其中
𝑖
′
𝑖'
i′是项目
v
i
p
v_{i}^{p}
vip在会话
S
p
S_p
Sp中的顺序,𝜀 是一个超参数,用于控制
v
i
p
v_{i}^{p}
vip和
S
p
S_p
Sp中的项目之间item-transation的建模范围。请注意,参数 𝜀 有利于对会话中的短距离项目转换进行建模,因为如果超出范围(𝜀),它对于捕获全局级别的item-transation信息将无能为力(甚至是噪音,例如不相关的依赖性)。
根据定义 1,对于每个项目 𝑣𝑖 ∈ 𝑉 ,全局级别item-transation定义为 {(𝑣i , 𝑣𝑗)|𝑣𝑖 , 𝑣𝑗∈ 𝑉 ;𝑣𝑗 ∈
N
ε
(
v
i
)
\mathcal{N}_{\varepsilon}(v_i)
Nε(vi)}。
注意的是,为了提高效率,没有区分全局级别item-transation信息的方向,即转换为无向图。
全局图:旨在捕获全局级别的item-transation信息,这些信息将用于学习所有会话中的项目嵌入。全局图是基于所有会话中的 𝜀 邻居项目集构建的,图定义如下,设
G
g
=
(
V
g
,
E
g
)
\mathcal G_{g}=\left(\mathcal{V}_{g}, \mathcal{E}_{g}\right)
Gg=(Vg,Eg)为全局图,其中
V
g
\mathcal{V}_{g}
Vg表示包含 𝑉 中所有项目的图节点集,
E
𝑔
=
{
e
𝑖
𝑗
𝑔
∣
(
𝑣
𝑖
,
𝑣
𝑗
)
∣
𝑣
𝑖
∈
𝑉
,
𝑣
𝑗
∈
N
ε
(
v
i
)
}
E_𝑔=\{e^𝑔_{𝑖𝑗}|(𝑣_𝑖,𝑣_𝑗)|𝑣_𝑖\in 𝑉,𝑣_𝑗\in \mathcal{N}_{\varepsilon}(v_i)\}
Eg={eijg∣(vi,vj)∣vi∈V,vj∈Nε(vi)} 表示边集,每条边对应所有会话中的两个成对项目。图 2b 显示了构建全局图 (𝜀 = 2) 的示例。
有了连接之后,针对每个节点 𝑣𝑖 为其相邻边生成权重,以区分 𝑣𝑖 邻居的重要性,如下所示:对于每条边 (𝑣𝑖 , 𝑣𝑗) (𝑣𝑗 ∈
N
ε
(
v
i
)
\mathcal{N}_{\varepsilon}(v_i)
Nε(vi) ),将其在所有会话中的频率用作相应边的权重;出于效率考虑,仅保留图 G𝑔 上每个项目 𝑣𝑖具有最高权重的𝑁条边。请注意,图
G
g
\mathcal G_{g}
Gg上项目 𝑣 的邻居(即
N
v
g
\mathcal{N}^{g}_v
Nvg)的定义与
N
ε
(
v
)
\mathcal{N}_{\varepsilon}(v)
Nε(v)相同。 因此,由于𝜀-邻居集是无向的,因此
G
g
\mathcal G_{g}
Gg 是一个无向加权图。在测试阶段,出于效率考虑,不会动态更新全局图的拓扑结构。
备注:𝑉 中的每个项目在时间步长 𝑡 被编码到统一的嵌入空间中,即
h
i
t
∈
R
d
\mathbf{h}_i^t\in\mathbb{R}^d
hit∈Rd(𝑑 表示项目嵌入的维度),其以初始化嵌入
h
0
t
∈
R
∣
V
∣
\mathbf{h}_0^t\in\mathbb{R}^{|V|}
h0t∈R∣V∣ 为输入,本文使用基于独热的嵌入,并使用可训练矩阵
W
0
∈
R
d
×
∣
V
∣
\mathbf{W}_0\in\mathbb{R}^{d\times|V|}
W0∈Rd×∣V∣ 将其转换为 𝑑 维潜在向量空间。
提出方法
GCE-GNN 的架构如下图所示,它包含四个主要组件:
(1)全局级项目表示学习层。通过使用会话感知注意力机制基于全局图 (G𝑔) 结构递归地合并每个节点的邻居嵌入,在所有会话中学习全局级项目嵌入;
(2)会话级项目表示学习层。它在会话图 G𝑠 上使用 GNN 模型来学习当前会话中的会话级项目嵌入;
(3)会话表示学习层。它通过聚合会话级和全局级中学习到的项目表示来建模当前会话的用户偏好;
(4)预测层。它输出推荐候选项目的预测概率。
全局级项目表征学习层
这部分主要讲如何在全局图上传播特征,以编码来自其他会话的item-transation信息以帮助推荐。使用GCN构建并采用图注意力网络,根据每个连接的重要性生成注意力权重。
首先描述一个由信息传播和信息聚合两个组件组成的单层,然后将其推广到多个层。
信息传播:
要获取一个item的一阶邻居特征,简单的解决方法是均值池化方法,但是并非所有邻居都与当前偏好相关,因此利用会话感知注意力来区分
N
ε
(
v
)
\mathcal{N}_{\varepsilon}(v)
Nε(v)中项目的重要性。
N
ε
(
v
)
\mathcal{N}_{\varepsilon}(v)
Nε(v)中每个项目根据会话感知注意力得分进行线性组合,
h
N
v
i
g
=
∑
v
j
∈
N
v
i
g
π
(
v
i
,
v
j
)
h
v
j
,
\mathbf{h}_{\mathcal{N}_{v_{i}}^{g}}=\sum_{v_{j}\in\mathcal{N}_{v_{i}}^{g}}\pi(v_{i},v_{j})\mathbf{h}_{v_{j}},
hNvig=vj∈Nvig∑π(vi,vj)hvj,其中
π
(
v
i
,
v
j
)
\pi(v_{i},v_{j})
π(vi,vj)估计了不同邻居的重要性权重。直观地讲,一个项目越接近当前会话的偏好,这个项目对推荐就越重要。 因此我们实现
π
(
v
i
,
v
j
)
\pi(v_{i},v_{j})
π(vi,vj)如下:
π
(
v
i
,
v
j
)
=
q
1
T
LeakyRelu
(
W
1
[
(
s
⊙
h
v
j
)
∥
w
i
j
]
)
,
\pi(v_{i},v_{j})=\mathbf{q}_{1}^{T}\text{LeakyRelu}\big(\mathbf{W}_{1}\big[(\mathbf{s}\odot\mathbf{h}_{v_{j}})\|w_{ij}\big]\big),
π(vi,vj)=q1TLeakyRelu(W1[(s⊙hvj)∥wij]),选择leakyRelu作为激活函数,⊙表示元素乘积,∥表示连接操作,
𝑤
𝑖
𝑗
∈
R
1
𝑤_{𝑖𝑗} \in\mathbb R ^1
wij∈R1 是全局图中边 (𝑣𝑖 , 𝑣𝑗) 的权重,
W
1
∈
R
d
+
1
×
d
+
1
\mathbf{W}_1\in\mathbb{R}^{d+1\times d+1}
W1∈Rd+1×d+1和
q
1
∈
R
d
+
1
\mathbf{q}_1\in\mathbb{R}^{d+1}
q1∈Rd+1是可训练参数,s 可以看作是当前会话的特征,它是通过计算当前会话的项目表示的平均值获得的,
s
=
1
∣
S
∣
∑
v
i
∈
S
h
v
i
.
\mathbf{s}=\frac{1}{|S|}\sum_{v_i\in S}\mathbf{h}_{v_i}.
s=∣S∣1vi∈S∑hvi.与均值池化不同,本文的方法使信息的传播依赖于 𝑆 和 𝑣𝑗 之间的亲和力,这意味着与当前会话的偏好相匹配的邻居将更受欢迎。 然后,采用 softmax 函数对所有与 𝑣𝑖 相连的邻居的系数进行归一化:
π
(
v
i
,
v
j
)
=
exp
(
π
(
v
i
,
v
j
)
)
∑
v
k
∈
N
v
i
g
exp
(
π
(
v
i
,
v
k
)
)
.
\pi(v_i,v_j)=\frac{\exp\left(\pi(v_i,v_j)\right)}{\sum_{v_k\in\mathcal{N}_{v_i}^g}\exp\left(\pi(v_i,v_k)\right)}.
π(vi,vj)=∑vk∈Nvigexp(π(vi,vk))exp(π(vi,vj)).最终的注意力得分能够建议哪些邻居节点应该得到更多的关注。
信息聚合
最后一步是聚合项目表示
h
𝑣
\textbf{h}_𝑣
hv 及其邻域表示
h
N
v
g
h_{\mathcal N_{v}}^{g}
hNvg,实现聚合函数 agg 如下:
h
v
g
=
relu
(
W
2
[
h
v
∥
h
N
v
g
]
)
,
\mathbf{h}_{v}^{g}=\text{relu}(\mathbf{W}_{2}[\mathbf{h}_{v}\|\mathbf{h}_{\mathcal{N}_{v}^{g}}]),
hvg=relu(W2[hv∥hNvg]),选择 relu 作为激活函数,
W
2
∈
R
d
×
2
d
\mathbf{W}_2\in\mathbb{R}^{\boldsymbol{d}\times2\boldsymbol{d}}
W2∈Rd×2d为变换权重。
通过单个聚合器层,项目的表示依赖于其自身及其直接邻居。可以通过将聚合器从一层扩展到多层来探索高阶连接信息,这允许将更多与当前会话相关的信息合并到当前表示中。将第 𝑘 步中的项目表示公式化为:
h
v
g
,
(
k
)
=
arg
(
h
v
(
k
−
1
)
,
h
N
v
g
(
k
−
1
)
)
,
\mathbf{h}_{v}^{g,(k)}=\arg(\mathbf{h}_{v}^{(k-1)},\mathbf{h}_{\mathcal{N}_{v}^{g}}^{(k-1)}),
hvg,(k)=arg(hv(k−1),hNvg(k−1)),
h
v
(
k
−
1
)
\mathbf{h}_{v}^{(k-1)}
hv(k−1)是从先前的信息传播步骤生成的项目 𝑣 的表示,
h
v
(
0
)
\mathbf{h}_{v}^{(0)}
hv(0) 在初始传播迭代中设置为 h𝑣。这样,项目的 𝑘 阶表示就是其初始表示和最多 𝑘 跳的邻居的混合。这使得更有效的消息能够被纳入当前会话的表示中。
会话级项目表示学习层
会话图包含当前会话内的成对项目转换。接下来介绍如何学习会话级项目嵌入。
由于会话图中项目的邻居对其自身的重要性不同,利用注意力机制来学习不同节点之间的权重。注意力系数可以通过元素乘积和非线性变换来计算:
e
i
j
=
LeakyReLU
(
a
r
i
j
⊤
(
h
v
i
⊙
h
v
j
)
)
,
e_{ij}=\text{LeakyReLU}\left(\mathbf{a}_{r_{ij}}^\top\left(\mathbf{h}_{v_i}\odot\mathbf{h}_{v_j}\right)\right),
eij=LeakyReLU(arij⊤(hvi⊙hvj)),其中𝑒𝑖𝑗表示节点𝑣𝑗的特征对节点𝑣𝑖的重要性,选择LeakyReLU作为激活函数,𝑟𝑖𝑗是𝑣𝑖与𝑣𝑗的关系,
a
∗
∈
R
d
\mathbf{a}_*\in\mathbb{R}^d
a∗∈Rd是权重向量。
对于不同的关系,训练四个权重向量,分别是 𝑎𝑖𝑛、𝑎𝑜𝑢𝑡、𝑎𝑖𝑛−𝑜𝑢𝑡 和 𝑎𝑠𝑒𝑙𝑓 。由于图中并非每两个节点都相连,仅计算节点
j
∈
N
v
i
s
j\in\mathcal{N}_{v_i}^s
j∈Nvis的 𝑒𝑖𝑗 ,以将图结构注入模型,其中
N
v
i
s
\mathcal{N}_{v_i}^s
Nvis是 𝑣𝑖的一阶邻居。并且为了使系数在不同节点之间具有可比性,通过 softmax 函数对注意力权重进行归一化:
α
i
j
=
exp
(
LeakyReLU
(
a
r
i
j
⊤
(
h
v
i
⊙
h
v
j
)
)
)
∑
v
k
∈
N
v
i
s
exp
(
LeakyReLU
(
a
r
i
k
⊤
(
h
v
i
⊙
h
v
k
)
)
)
.
\alpha_{ij}=\frac{\exp\left(\text{ LeakyReLU }\left(\mathbf{a}_{r_{ij}}^{\top}\left(\mathbf{h}_{v_{i}}\odot\mathbf{h}_{v_{j}}\right)\right)\right)}{\sum_{v_{k}\in\mathcal{N}_{v_{i}}^{s}}\exp\left(\text{LeakyReLU }\left(\mathbf{a}_{r_{ik}}^{\top}\left(\mathbf{h}_{v_{i}}\odot\mathbf{h}_{v_{k}}\right)\right)\right)}.
αij=∑vk∈Nvisexp(LeakyReLU (arik⊤(hvi⊙hvk)))exp( LeakyReLU (arij⊤(hvi⊙hvj))).上式中注意力系数 𝛼𝑖𝑗 是不对称的,因为它们的邻居不同,这意味着它们对彼此的贡献是不平等的。接下来,通过计算与系数对应的特征的线性组合来获得每个节点的输出特征:
h
v
i
s
=
∑
v
j
∈
N
v
i
s
α
i
j
h
v
j
.
\mathbf{h}_{v_i}^s=\sum_{v_j\in\mathcal{N}_{v_i}^s}\alpha_{ij}\mathbf{h}_{v_j}.
hvis=vj∈Nvis∑αijhvj.会话图中的项目表征由当前会话中项目本身及其邻居的特征聚合而成,通过注意力机制降低噪声对会话级项目表征学习的影响。
会话表示学习层
对于每个项目,通过结合全局上下文和会话上下文来获得其表示,并通过总和池化来计算其最终表示,
h
v
g
,
(
k
)
=
d
r
o
p
o
u
t
(
h
v
g
,
(
k
)
)
h
v
′
=
h
v
g
,
(
k
)
+
h
v
s
,
\begin{aligned}\mathbf{h}_v^{g,(k)}&=\mathrm{dropout}(\mathbf{h}_v^{g,(k)})\\\mathbf{h}_v^{\prime}&=\mathbf{h}_v^{g,(k)}+\mathbf{h}_v^s,\end{aligned}
hvg,(k)hv′=dropout(hvg,(k))=hvg,(k)+hvs,这里在全局层面上使用 dropout 来避免过度拟合。
基于学习到的项目表示,现在介绍如何获取会话表示。提出了一种更全面的策略来学习会话的每个部分对预测的贡献。 在本文的方法中,会话表示是基于会话中涉及的所有项目构建的。请注意,不同项目对下一个预测的贡献并不相等。直观地看,会话中稍后点击的项目更能代表用户当前的偏好,这表明它们对推荐更重要。此外,找到用户的主要目的并过滤当前会话中的噪音也很重要。因此,结合了反向位置信息和会话信息来做出更好的预测。
将会话序列输入图神经网络后,我们可以获得会话中涉及的项目的表示,即
H
=
[
h
v
1
s
′
,
h
v
2
s
′
,
.
.
.
,
h
v
l
s
′
]
\mathbf{H}=\left[\mathbf{h}_{v_{1}^{s}}^{\prime},\mathbf{h}_{v_{2}^{s}}^{\prime},...,\mathbf{h}_{v_{l}^{s}}^{\prime}\right]
H=[hv1s′,hv2s′,...,hvls′]。我们还使用可学习的位置嵌入矩阵
P
=
[
p
1
,
p
2
,
.
.
.
,
p
l
]
\mathbf{P} = [\mathbf{p}_{1},\mathbf{p}_{2},...,\mathbf{p}_{l}]
P=[p1,p2,...,pl],其中
p
i
∈
R
d
\mathbf{p}_i\in\mathbb{R}^d
pi∈Rd是特定位置 𝑖 的位置向量,𝑙 是当前会话序列的长度。位置信息通过连接和非线性变换进行集成:
z
i
=
tanh
(
W
3
[
h
v
i
s
′
∥
p
l
−
i
+
1
]
+
b
3
)
,
\mathbf{z}_i=\tanh\left(\mathbf{W}_3\left[\mathbf{h}'_{v_i^s}\parallel\mathbf{p}_{l-i+1}\right]+\mathbf{b}_3\right),
zi=tanh(W3[hvis′∥pl−i+1]+b3),其中参数
W
3
∈
R
d
×
2
d
\mathbf{W}_3\in\mathbb{R}^{\boldsymbol{d}\times2\boldsymbol{d}}
W3∈Rd×2d和
b
3
∈
R
d
\mathbf{b}_3\in\mathbb{R}^{\boldsymbol{d}}
b3∈Rd是可训练参数。这里选择反向位置嵌入,因为会话序列的长度不固定。与前向位置信息相比,当前项目与预测项目的距离包含更有效的信息,例如,在会话 {𝑣2 → 𝑣3 →?} 中,𝑣3 是序列中的第二个,对预测有很大影响,然而在会话 {𝑣2 → 𝑣3 → 𝑣5 → 𝑣6 → 𝑣8 →?} 中,𝑣3 的重要性相对较小。因此反向位置信息可以更准确地表明每个项目的重要性。
会话信息是通过计算会话的项目表示的平均值获得的,
s
′
=
1
l
∑
i
=
1
l
h
′
v
i
s
.
\mathbf{s'}=\frac{1}{l}\sum_{i=1}^{l}\mathbf{h'}_{v_i^s}.
s′=l1i=1∑lh′vis.通过软注意力机制学习相应的权重:
β
i
=
q
2
⊤
σ
(
W
4
z
i
+
W
5
s
′
+
b
4
)
,
\beta_{i}=\mathbf{q}_{2}^{\top}\sigma\left(\mathbf{W}_{4}\mathbf{z}_{i}+\mathbf{W}_{5}\mathbf{s}^{\prime}+\mathbf{b}_{4}\right),
βi=q2⊤σ(W4zi+W5s′+b4),其中
W
4
,
W
5
∈
R
d
×
d
\mathbf{W}_4,\mathbf{W}_5\in\mathbb{R}^{\boldsymbol{d}\times\boldsymbol{d}}
W4,W5∈Rd×d和
q
2
,
b
4
∈
R
d
\mathbf{q}_2,\mathbf{b}_4\in\mathbb{R}^{\boldsymbol{d}}
q2,b4∈Rd是可学习参数。 最后,可以通过线性组合项目表示来获得会话表示:
S
=
∑
i
=
1
l
β
i
h
′
v
i
s
.
\mathbf{S}=\sum_{i=1}^l\beta_i\mathbf{h'}_{v_i^s}.
S=i=1∑lβih′vis.
会话表示 S 由当前会话中涉及的所有项目构建,其中每个项目的贡献不仅由会话图中的信息决定,还由序列中的时间顺序决定。
预测层
根据获得的会话表示 S,每个候选项目的最终推荐概率基于它们的初始嵌入以及当前会话表示,首先使用点积,然后应用 softmax 函数获得输出
y
^
\hat y
y^:
y
^
i
=
Softmax
(
S
⊤
h
v
i
)
,
\hat{\mathbf{y}}_i=\text{Softmax}\left(\mathbf{S}^\top\mathbf{h}_{v_i}\right),
y^i=Softmax(S⊤hvi),其中
y
^
i
∈
y
^
\hat y_i\in \hat y
y^i∈y^ 表示项目 𝑣𝑖 在当前会话中作为下一个点击出现的概率。
损失函数定义为预测结果
y
^
\hat y
y^ 的交叉熵:
L
(
y
^
)
=
−
∑
m
y
i
log
(
y
^
i
)
+
(
1
−
y
i
)
log
(
1
−
y
^
i
)
,
\mathcal{L}(\hat{\mathbf{y}})=-\sum^{m}\mathbf{y}_{i}\log\left(\hat{\mathbf{y}}_{i}\right)+\left(1-\mathbf{y}_{i}\right)\log\left(1-\hat{\mathbf{y}}_{i}\right),
L(y^)=−∑myilog(y^i)+(1−yi)log(1−y^i),其中 y 表示真实值的独热编码向量。
实验部分
主要解决的问题:
- GCE-GNN 在现实世界数据集中的表现是否优于最先进的会话推荐基线?
- 全局图和全局级编码器是否会提高 GCE-GNN 的性能?GCE-GNN 在不同深度 𝑘 下的表现如何?
- 反向位置嵌入有用吗?
- GCE-GNN 在不同的聚合操作中表现如何?
- 不同的超参数设置(例如节点丢失)如何影响 GCE-GNN 的准确性?
数据集
𝐷𝑖𝑔𝑖𝑛𝑒𝑡𝑖𝑐𝑎、𝑇𝑚𝑎𝑙𝑙 和 𝑁𝑜𝑤𝑝𝑙𝑎𝑦𝑖𝑛𝑔。其中,Diginetica 数据集来自 CIKM Cup 2016,包含典型交易数据。天猫数据集来自 IJCAI-15 竞赛,其中包含天猫在线购物平台上匿名用户的购物日志。Nowplaying 数据集来自 26,描述了用户的音乐收听行为。 过滤掉长度为 1 且出现次数少于 5 次的项目。将上周的会话(最新数据)设置为测试数据,将其余历史数据用于训练。预处理后的数据集统计数据总结在表 1 中。
评估指标
P@N 和 MRR@N:P@N是前 n 个结果的准确度, P指的是Precision。MRR:Mean Reciprocal Rank (MRR). 对每个查询
q
i
q_i
qi , 记它第一个相关的结果排在位置
k
i
k_i
ki , 即rank为
k
i
k_i
ki , 则Reciprocal Rank(RR)得分计作
1
/
k
i
1 / k_i
1/ki对所有query的RR取平均, 即为MRR:
M
R
R
=
1
N
∑
i
1
/
k
i
\mathrm{MRR}=\frac1{\mathrm{N}}\mathrm{~\sum_i1/k_i}
MRR=N1 i∑1/ki
总体比较
回答了第一个问题,具体表现可见下表:
全局特征编码器的影响
接下来在三个数据集上进行实验来评估全局级特征编码器和会话级特征编码器的有效性。特别地,设计了四个对比模型:
- GCE-GNN w/o global:没有全局级特征编码器且仅具有局部特征的GCE-GNN
- GCE-GNN w/o session:没有会话级特征编码器且仅具有全局特征的GCE-GNN
- GCE-GNN-1-hop:具有全局级特征编码器的GCE-GNN,其将跳数设置为1。
- GCE-GNN-2-hop:具有全局级特征编码器的GCE-GNN,其将跳数设置为2。
表3显示了不同对比模型之间的比较。很明显,使用全局级特征编码器,GCE-GNN获得了更好的性能。与不带全局上下文的 GCE-GNN 相比,具有 1 跳和 2 跳全局级特征编码器的 GCE-GNN 可以从其他会话中探索项目转移信息,从而帮助模型做出更准确的预测。还可以观察到,在 Diginetica 上,具有 2 跳的 GCE-GNN 比具有 1 跳的 GCEGNN 表现更好,这表明高级探索可能会从全局图中获得更有效的信息。此外,在天猫上,具有 1 跳的 GCE-GNN 比具有 2 跳的 GCE-GNN 表现更好,这表明更高级别的探索也可能引入噪音。
位置向量影响
设计了一系列对比模型:
- GCE-GNN-NP:用前向位置向量替换反向位置向量的 GCE-GNN。
- GCE-GNN-SA:用自注意功能替换位置感知注意的 GCE-GNN。
表 4 展示了不同对比模型的表现。观察到,本文的反向位置嵌入注意力网络比其他两个变体表现更好。 GCE-GNN-NP 在所有数据集上的表现并不好。这是因为模型无法捕捉到每个商品到预测商品的距离,这会在训练不同长度的会话时误导模型。 GCE-GNN-SA 在三个数据集上的表现都优于 GCE-GNN-NP,这表明会话中的最后一件商品包含了与推荐最相关的信息。然而,它在天猫数据集上表现不佳,因为它缺乏对每件商品贡献的更全面判断。 与这两个变体相比,反向位置嵌入证明了它的有效性。这证实了反向位置信息可以更准确地表明每件商品的重要性。此外,通过注意力机制,过滤了当前会话中的噪音,这使得模型表现更好。
聚合操作影响
将 GCE-GNN 与不同的聚合操作(即门控机制、最大池化和连接机制)进行比较是有意义的。
表 5 展示了不同聚合操作在三个数据集上的性能。可以看出,在 Diginetica 和 Tmall 上,使用 sum pooling 的 GCE-GNN 在 Recall@20 和 MRR@20 方面优于其他聚合操作。Max pooling 在 Diginetica 上的性能最差,但在 MRR@20 方面,它在 Tmall 上的表现优于其他两个聚合器。尽管使用了额外的参数,Gate 机制和 Concatenation 的性能也比 sum pooling 差,可能是因为参数太多可能导致过度拟合。
Dropout设置的影响
为了防止 GCE-GNN 过拟合,采用了 dropout 正则化技术,该技术已被证明在包括图神经网络在内的各种神经网络架构中都是有效的。dropout 的关键思想是在训练期间以概率 𝑝 随机删除神经元,同时使用所有神经元进行测试。
图 4 显示了公式
h
v
g
,
(
k
)
=
d
r
o
p
o
u
t
(
h
v
g
,
(
k
)
)
h
v
′
=
h
v
g
,
(
k
)
+
h
v
s
,
\begin{aligned}\mathbf{h}_v^{g,(k)}&=\mathrm{dropout}(\mathbf{h}_v^{g,(k)})\\\mathbf{h}_v^{\prime}&=\mathbf{h}_v^{g,(k)}+\mathbf{h}_v^s,\end{aligned}
hvg,(k)hv′=dropout(hvg,(k))=hvg,(k)+hvs,中 dropout 对 Diginetica 和天猫数据集的影响。可以观察到,当 dropout 率很小时,该模型在两个数据集上的表现都不佳,因为它很容易过拟合。当 dropout 率在 Diginetica 上设置为 0.4 并在天猫上设置为 0.6 时,它获得了最佳性能。然而,当 dropout 率很大时,模型的性能开始下降,因为模型很难从有限可用神经元的数据中学习。
结论
本文针对编码方式首先使用了全局图与会话图聚合进行embedding与学习,生成全局图的方式和全局图使用四种无向边代替一条或多条有向边,并学习其对应特征。在embedding部分使用了反向的嵌入以代表时间的先后顺序与兴趣的关系,并使用注意力机制过滤掉一部分噪声构成了GCEGNN,总的来说内容比较详实,从多个方面并且结合一定的先验知识对模型进行一定改进,embedding方式也比较有意思。