前言
在某些序列推荐系统中,一个用户-项目交互序列包括多个子序列(也称为会话)。在这种情况下,除了当前子序列中先前的交互作用外,历史子序列还可能影响当前子序列中预测的下一个用户-项目交互作用。
基于会话的推荐问题旨在基于会话预测用户的行为,以前的相关方法将会话建模为序列,并通过对用户表示进行学习来完成推荐。这些方法虽然取得了令人满意的结果,但它们不足以在会话中获得准确的用户表示,并忽略了复杂的物品表示转换。为了获得准确的物品嵌入和考虑物品表示的复杂转换,本文提出了一种基于会话的GNN网络模型。在 SR-GNN 中,会话序列被建模成图结构数据,基于会话图,GNN可以捕获复杂的物品间的复杂联系。具体来说通过一个全局和局部的注意力网络完成任务。
论文链接:https://export.arxiv.org/pdf/1811.00855
github:https://github.com/CRIPAC-DIG/SR-GNN
1. Introduction
本文提出的 SR-GNN 主要用于探究物品之间复杂联系和生成准确的物品特征嵌入。对于基于会话的推荐,SR-GNN 首先从历史会话序列构造有向图。基于会话图,GNN 能够捕获物品的转换,并相应地生成准确的项目嵌入向量,这是传统顺序方法如基于 mc 和基于 RNN 的方法难以实现的。基于精确的物品嵌入向量,SR-GNN 构建了更可靠的会话表示,可以推断下一个点击物品的概率。
SR-GNN 的框架如图所示
首先,将所有会话序列建模为有向会话图,其中每个会话序列可以被视为一个子图。然后依次处理每个会话图,通过门控图神经网络得到每个会话图中所有节点的嵌入。然后,我们将每个会话表示为用户在该会话中的全局偏好和当前兴趣的组合,其中这些全局和局部会话嵌入都由节点的嵌入组成。最后,对于每个会话,预测每个物品被下一次点击的概率。这项工作的主要贡献总结如下:
- SR-GNN 将分离的会话序列建模为图结构数据,并使用图神经网络来捕获复杂的物品关系。它为基于会话的推荐场景中的建模提供了一个新颖的视角。
- 为了生成基于会话的推荐,SR-GNN 不依赖于用户表示,而是使用会话嵌入,它可以仅仅根据每个会话中涉及的物品嵌入来得到推荐结果。
- 在真实数据集上进行的大量实验表明,SR-GNN的性能明显优于最先进的方法。
2. SR-GNN
基于会话的推荐旨在预测用户下一步将点击哪个物品,仅根据用户当前的连续会话数据,而不根据长期偏好。在基于会话的推荐系统中,设置 V = { v 1 , v 2 , ⋯ , v m } V=\{v_1,v_2,\cdots,v_m\} V={v1,v2,⋯,vm} 代表在所有会话中出现的物品集合。基于时间步的匿名会话序列可以表示为 s = [ v s , 1 , v s , 2 , ⋯ , v s , n ] s=[v_{s,1},v_{s,2},\cdots,v_{s,n}] s=[vs,1,vs,2,⋯,vs,n],其中 v s , i ∈ V v_{s,i} \in V vs,i∈V 代表在会话 s s s 中被用户点击的一个物品。基于会话的推荐系统的目标是预测下一次的点击,具体来说就是预测 v s , n + 1 v_{s,n+1} vs,n+1 的物品种类标签。在基于会话的推荐系统中,对于会话 s s s,输出一个对于所有可能物品的概率矩阵 y ^ \hat{y} y^,其中的每一个值对应于与每一个物品产生交互的概率。在 y ^ \hat{y} y^ 中的 t o p − K top-K top−K 个将成为推荐的结果。
2.1 Constructing Session Graphs
每一个会话可以被建模成一个有向图 G s = ( V s , E s ) \mathcal{G}_s = (\mathcal{V}_s,\mathcal{E}_s) Gs=(Vs,Es)。在会话图中,每一个节点表示一个物品 v s , i ∈ V v_{s,i} \in V vs,i∈V,每一条边 ( v s , i − 1 , v s , i ) ∈ E s (v_{s,i-1},v_{s,i}) \in \mathcal{E}_s (vs,i−1,vs,i)∈Es 代表一个用户在点击物品 v s , i − 1 v_{s,i-1} vs,i−1 后点击的物品 v s , i v_{s,i} vs,i。考虑到同一个物品可能多次出现在会话图中,因此在构建会话图的时候为每一个边增加一个标准化的权重,它的计算方法是边的出现次数除以该边的起始节点的外度。SR-GNN 将每一个物品 v ∈ V v \in V v∈V 嵌入到相同的特征空间,节点向量 v ∈ R d \mathbf{v}\in \mathbb{R}^d v∈Rd 代表 GNN 从会话图中学习到的节点表示,其中 d d d 代表维度。基于节点向量,每一个会话 s s s 可以被表示为一个嵌入 s \mathbf{s} s, s \mathbf{s} s 由图中的每一个节点组成
2.2 Learning Item Embeddings on Session Graphs
通过上面构造图的方法可知会话图的几种特点:有向,边加权,多个会话序列子图。此篇文章中作者所采用的 GNN 方法主要是基于门控图神经网络实现的,实现过程如下:
a
s
,
i
t
=
A
s
,
i
:
[
v
1
t
−
1
,
⋯
,
v
n
t
−
1
]
T
H
+
b
(1)
\mathbf{a}_{s,i}^t=\mathbf{A}_{s,i:}[\mathbf{v}_1^{t-1},\cdots,\mathbf{v}_n^{t-1}]^T\mathbf{H}+\mathbf{b}\tag{1}
as,it=As,i:[v1t−1,⋯,vnt−1]TH+b(1)
z
s
,
i
t
=
σ
(
W
z
a
s
,
i
t
+
U
z
v
i
t
−
1
)
(2)
\mathbf{z}_{s,i}^t=\sigma(\mathbf{W}_za^t_{s,i}+\mathbf{U}_z\mathbf{v}_{i}^{t-1})\tag{2}
zs,it=σ(Wzas,it+Uzvit−1)(2)
r
s
,
i
t
=
σ
(
W
r
a
s
,
i
t
+
U
r
v
i
t
−
1
)
(3)
\mathbf{r}_{s,i}^t=\sigma(\mathbf{W}_ra_{s,i}^t+\mathbf{U}_r\mathbf{v}_i^{t-1})\tag{3}
rs,it=σ(Wras,it+Urvit−1)(3)
v
i
t
~
=
t
a
n
h
(
W
o
a
s
,
i
t
+
U
o
(
r
s
,
i
t
⊙
v
i
t
−
1
)
)
(4)
\widetilde{\mathbf{v}_{i}^{t}}=tanh(\mathbf{W}_oa_{s,i}^t+\mathbf{U}_o(\mathbf{r}_{s,i}^t\odot \mathbf{v}_{i}^{t-1}))\tag{4}
vit
=tanh(Woas,it+Uo(rs,it⊙vit−1))(4)
v
i
t
=
(
1
−
z
s
,
i
t
)
⊙
v
i
t
−
1
+
z
s
,
i
t
⊙
v
i
t
~
(5)
\mathbf{v}_i^t = (1-\mathbf{z}_{s,i}^t)\odot \mathbf{v}_i^{t-1}+\mathbf{z}_{s,i}^t\odot \widetilde{\mathbf{v}_{i}^{t}} \tag{5}
vit=(1−zs,it)⊙vit−1+zs,it⊙vit
(5)
其中
H
∈
R
d
×
2
d
\mathbf{H} \in \mathbb{R}^{d \times 2d}
H∈Rd×2d 代表权重矩阵。
z
(
s
,
i
)
\mathbf{z}_{(s,i)}
z(s,i) 和
r
s
,
i
\mathbf{r}_{s,i}
rs,i 分别代表更新门和重置门,
[
v
1
t
−
1
,
⋯
,
v
n
t
−
1
]
[\mathbf{v}_1^{t-1},\cdots,\mathbf{v}_n^{t-1}]
[v1t−1,⋯,vnt−1] 代表会话
s
s
s 中的节点向量列表,
σ
(
⋅
)
\sigma(\cdot)
σ(⋅) 代表 sigmoid 函数。
⊙
\odot
⊙ 代表矩阵点积。
v
i
∈
R
d
\mathbf{v}_i \in \mathbb{R}^d
vi∈Rd 代表节点
v
s
,
i
v_{s,i}
vs,i 的嵌入。连接矩阵
A
s
∈
R
n
×
2
n
A_s \in \mathbb{R}^{n \times 2n}
As∈Rn×2n 代表图中的节点如何与其他节点相连,
A
s
,
i
∈
R
1
×
2
n
\mathbf{A}_{s,i} \in \mathbb{R}^{1 \times 2n}
As,i∈R1×2n 代表在连接矩阵
A
s
\mathbf{A}_s
As 中与节点
v
s
,
i
v_{s,i}
vs,i 关联的两列。
在这里
A
s
\mathbf{A_s}
As 被定义成两邻接矩阵
A
s
(
o
u
t
)
\mathbf{A}_s^{(out)}
As(out) 和
A
s
(
i
n
)
\mathbf{A}_s^{(in)}
As(in) 的级联, 分别表示会话图中出边和入边的加权连接。举例来说,假设一个会话
s
=
[
v
1
,
v
2
,
v
3
,
v
2
,
v
4
]
s=[v_1,v_2,v_3,v_2,v_4]
s=[v1,v2,v3,v2,v4],则关联图
G
s
\mathcal{G}_s
Gs 和 矩阵
A
s
\mathbf{A_s}
As 表示如下:
如果使用不同的构建会话图的策略,连接矩阵
A
s
\mathbf{A_s}
As 将会相应改变。此外,当节点存在描述信息、类别信息等内容特征时,该方法还可以进一步推广。具体来说,可以用节点向量连接特征来处理这些信息。
对于每一个会话图 G s \mathcal{G}_s Gs,门控图神经网络可以同时处理这些节点。(1)式用于在会话图邻接矩阵 A s \mathbf{A_s} As 的连接限制条件下图中节点的信息传播。具体来说,它提取了邻域的特征,并将其输入到图神经网络中。然后,更新门和重置门分别决定保留和丢弃哪些信息。之后, SR-GNN 根据前面的状态、当前状态和重置们信号构造候选状态,如(4)所述。最后的状态是前一个隐藏状态和候选状态的组合,在更新门的控制下。在更新会话图中的所有节点直到收敛后,可以得到最终的节点向量。
2.3 Generating Session Embeddings
在得到图中节点的特征嵌入后,我们还需要根据此得到整个会话的特征嵌入。以前的基于会话的推荐方法总是假设每个会话都有一个明显的潜在用户表示。相反,本文提出的 SR-GNN 方法没有对该向量做任何假设。会话直接由会话中涉及的节点表示。为了更好地预测用户的下一步点击,本文提出了一种策略,将会话的长期偏好和当前兴趣结合起来,并将这种组合嵌入作为会话嵌入。
我们的最终目标是得到每个会话的特征嵌入 s ∈ R d s \in \mathbb{R}^d s∈Rd,首先考虑当前对于会话 s s s 的局部嵌入 s l \mathbf{s_l} sl。对于一个会话 s = [ v s , 1 , v s , 2 , ⋯ , v s , n ] s=[v_{s,1},v_{s,2},\cdots,v_{s,n}] s=[vs,1,vs,2,⋯,vs,n],则局部嵌入可以被简单定义为最终的交互对象 v s , n v_{s,n} vs,n 的特征 s l = v n \mathbf{s_l}=\mathbf{v}_n sl=vn。
之后考虑该会话图 G s \mathcal{G}_s Gs 的全局特征 s g \mathbf{s_g} sg,全局特征可以通过聚合所有节点特征向量得到。考虑到这些嵌入中的信息可能具有不同的优先级,我们进一步采用软注意机制来更好地表示全局会话偏好:
α
i
=
q
T
σ
(
W
1
v
n
+
W
2
v
i
+
c
)
s
g
=
∑
i
=
1
n
α
i
v
i
(6)
\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\tag{6}
αi=qTσ(W1vn+W2vi+c)sg=i=1∑nαivi(6)
其中
q
∈
R
d
\mathbf{q} \in \mathbb{R}^d
q∈Rd 和
W
1
,
W
2
∈
R
d
×
d
\mathbf{W}_1,\mathbf{W}_2 \in \mathbb{R}^{d \times d}
W1,W2∈Rd×d 控制物品嵌入的权重。
这里感觉文中给出的公式怪怪的,难道考虑全局嵌入就只是考虑目标节点和最后点击节点的注意力权重???还有 c 代表偏置???,具体可能要看一看源码来理解,如果我的理解有误欢迎指出
最终通过对局部和全局的嵌入向量的级联进行线性变化得到了混合嵌入
s
h
\mathbf{s_h}
sh
s
h
=
W
3
[
s
l
;
s
g
]
(7)
\mathbf{s_h}=\mathbf{W}_3[\mathbf{s_l};\mathbf{s_g}]\tag{7}
sh=W3[sl;sg](7)
其中
W
3
∈
R
d
×
2
d
\mathbf{W}_3 \in \mathbb{R}^{d \times 2d}
W3∈Rd×2d 代表线性变换的权重矩阵
2.4 Making Recommendation and Model Training
在得到了每个会话的嵌入后,可以根据此计算出对于物品集中所有物品下一次点击的预测分数
z
i
^
\hat{\mathbf{z}_i}
zi^,具体来说就是通过该物品的特征嵌入和会话特征嵌入得到
z
i
^
=
s
h
T
v
i
(8)
\hat{\mathbf{z}_i}=\mathbf{s_h^T}\mathbf{v}_i \tag{8}
zi^=shTvi(8)
基于此可以得到每个物品的点击预测概率,也就是最终的输出
y
^
=
s
o
f
t
m
a
x
(
z
^
)
(9)
\hat{y}=softmax(\hat{\mathbf{z}})\tag{9}
y^=softmax(z^)(9)
其中
z
^
∈
R
m
\hat{\mathbf{z}}\in\mathbb{R}^m
z^∈Rm 代表全部物品的推荐分数,
y
^
∈
R
m
\hat{\mathbf{y}} \in \mathbb{R}^m
y^∈Rm 代表基于会话
s
s
s 所有物品下一次被点击的概率预测。在模型训练过程中选择交叉熵损失函数,可表示为:
L
(
y
^
)
=
−
∑
i
=
1
m
y
i
l
o
g
(
y
i
^
)
+
(
1
−
y
i
)
l
o
g
(
1
−
y
i
^
)
(10)
\mathcal{L}(\hat{\mathbf{y}})=-\sum_{i=1}^{m}\mathbf{y}_ilog(\hat{\mathbf{y}_i})+(1-\mathbf{y}_i)log(1-\hat{\mathbf{y}_i})\tag{10}
L(y^)=−i=1∑myilog(yi^)+(1−yi)log(1−yi^)(10)
其中
y
\mathbf{y}
y 是讲过 one-hot 编码的向量。最后,文中使用反向传播时间(BPTT)算法来训练所提出的 SR-GNN 模型。在基于会话的推荐场景中,大多数会话的长度都相对较短。因此,建议选择相对较少的训练步骤,防止过拟合。
3. Experiments