一、背景
协同过滤学习模型从项目的丰富侧面信息中学习的深层表示来扩展MF嵌入功能;神经协同过滤模型则用非线性神经网络取代内积的MF交互函数。
以上的方法都是有效的,但是却无法为CF提供合适的嵌入,这是因为缺少一个协同信号(它潜伏在用户与项目之间的交互中,以揭示用户(或项目)之间的行为相似性。)更具体的是,现有的大多数方法只使用描述性的特性(例如id和属性)构建嵌入功能,而不考虑用户-项目的交互,这些功能只用于定义模型训练的目标函数。因此必须依赖交互功能弥补次优嵌入的不足。虽然直接地使用交互功能能弥补次优嵌入的不足,但是在实际开发中,交互的规模可以容易地达到数百万甚至更大,使得难以提取期望的协作信号。所以在这项工作中,我们解决了所有问题,通过利用来自用户项目交互的高阶连通性,在交互图形结构中对协作信号进行编码的方式。
图 1 说明了高阶连通性的概念。 图1左边所示的为协同过滤用户-项目交互的基本交互图,双圆圈表示需要预测的用户u1,右图为左图以用户u1为根节点扩展的树形结构,l为到达用户u1的路径长度(可以作为兴趣重要度的权重值)。高阶连通性表示从路径长度 l 大于 1 的任何节点到达 u1 的路径。这种高阶连通性包含了承载协同信号的丰富语义。 例如,路径 u1 ← i2 ← u2 表示 u1 和 u2 之间的行为相似性,因为两个用户都与 i2 进行了交互; 较长的路径 u1 ← i2 ← u2 ← i4 表明 u1 很可能采用 i4,因为之前类似的用户 u2 有消费过 i4。此外,从 l = 3 的整体来看,同路径长度为3的项目i4、i5中,明显用户对i4的兴趣度高于i5,这是因为<i4,u1>连接的路径有两条,分别为i4->u2->i2->u1、i4->u3->i3->u1,而<i5,u1>则只有一条,为i5->u2->i2->u1。
本文提出了嵌入函数中高阶连通性信息的建模方法.而不是将交互图扩展为一棵复杂的树。本论文设计了一种在图上递归传播的神经网络方法,受最近发展的图神经网络的启发,可以看作是在嵌入空间中构造信息流。
通过在神经网络中,插入一个嵌入传播层,它通过聚合交互项(或用户)的嵌入来细化用户(或项)的嵌入。叠加多重嵌入传播层,我们可以强制嵌入,以捕获协作信号的高阶连通性.
以图1为例,堆叠两层捕获u1←i2←u2的行为相似性,堆叠三层捕获u1←i2←u2←i4和潜在的信息流的强度(由层间的大小估计权重值)确定i4和i5的推荐优先级。
二、模型结构
模型结构如图2所示,模型由embedding层、embedding传播层和预测层组成:
- 嵌入层:提供用户嵌入和项目嵌入初始化;
- 多嵌入传播层:通过注入高阶连通性关系来细化嵌入;
- 预测层:整合来自不同传播层的细化嵌入,输出用户-项目对的相似度得分。
2.1 embedding层
用嵌入向量
e
u
∈
R
d
(
e
i
∈
R
d
)
e_u∈R^d (e_i∈R^d)
eu∈Rd(ei∈Rd) 来描述用户 u (项目 i ),其中 d 表示嵌入大小。这可以看作是构建一个参数矩阵作为嵌入查找表:
E
=
[
e
u
1
,
⋅
⋅
⋅
,
e
u
N
,
e
i
1
,
⋅
⋅
⋅
,
e
i
M
]
E = [e_{u1},···,e_{uN}, e_{i1},···,e_{iM}]
E=[eu1,⋅⋅⋅,euN,ei1,⋅⋅⋅,eiM]
2.2 embedding传播层
直观上,与用户交互过的项目可以体现用户的偏好,类似的,与项目交互过的用户也可以看作是项目的特性,并且可以用于度量两个项目之间的协同相似性。在GNN消息传递体系结构的基础上,根据图的结构捕获CF信号和细化用户和项目的嵌入。
2.2.1 一阶传播
对于连接的用户-项目对 (u,i),我们将 i 到 u 的消息定义为:
m
u
←
i
=
f
(
e
i
,
e
u
,
p
u
i
)
\mathbf{m}_{u \leftarrow i}=f\left(\mathbf{e}_{i}, \mathbf{e}_{u}, p_{u i}\right)
mu←i=f(ei,eu,pui)
其中
m
u
←
i
m_{u←i}
mu←i 是消息嵌入(即要传播的信息)。 f (·) 是消息编码函数,它以嵌入
e
i
e_i
ei 和
e
u
e_u
eu 作为输入,并使用系数
p
u
i
p_{ui}
pui 来控制边 (u,i) 上每次传播的衰减因子。
m
u
←
i
m_{u←i}
mu←i由下式计算:
m
u
←
i
=
1
∣
N
u
∣
∣
N
i
∣
(
W
1
e
i
+
W
2
(
e
i
⊙
e
u
)
)
\mathbf{m}_{u \leftarrow i}=\frac{1}{\sqrt{\left|\mathcal{N}_{u}\right|\left|\mathcal{N}_{i}\right|}}\left(\mathbf{W}_{1} \mathbf{e}_{i}+\mathbf{W}_{2}\left(\mathbf{e}_{i} \odot \mathbf{e}_{u}\right)\right)
mu←i=∣Nu∣∣Ni∣1(W1ei+W2(ei⊙eu))
W
1
,
W
2
W_1,W_2
W1,W2是可训练的权重矩阵,用于提取有用的传播信息。
与传统的图卷积网络只考虑 e i e_i ei 的贡献不同的是,本文额外将 e i e_i ei 和 e u e_u eu 之间的交互编码为通过 e i ⊙ e u e_i ⊙ e_u ei⊙eu 传递的消息,其中 ⊙ 表示元素乘积。 这使得消息传播依赖于 e i e_i ei 和 e u e_u eu 之间的相似度,例如,从相似的项目中传递更多的消息。
P u i P_{ui} Pui被定义为 1 / ∣ N u ∥ N i ∣ 1 / \sqrt{\left|\mathcal{N}_{u} \| \mathcal{N}_{i}\right|} 1/∣Nu∥Ni∣。 N u \mathcal{N}_{u} Nu和 N i \mathcal{N}_{i} Ni分别代表用户u和项目i第一跳的邻居。从表示学习的角度来看, p u i p_{ui} pui 反映了历史项目对用户偏好的贡献程度。 从消息传递的角度来看, p u i p_{ui} pui 可以解释为折扣因子,考虑到正在传播的消息应该随着路径长度而衰减。
消息聚合函数被定义为:
e
u
(
1
)
=
LeakyReLU
(
m
u
←
u
+
∑
i
∈
N
u
m
u
←
i
)
\mathbf{e}_{u}^{(1)}=\operatorname{LeakyReLU}\left(\mathbf{m}_{u \leftarrow u}+\sum_{i \in \mathcal{N}_{u}} \mathbf{m}_{u \leftarrow i}\right)
eu(1)=LeakyReLU(mu←u+i∈Nu∑mu←i)
e
u
(
1
)
e^{(1)}_u
eu(1) 是用户 u 在一阶嵌入传播层获得的表示.
除了从邻居 Nu 传播的消息外,还考虑了 u 的自连接:
m
u
←
u
=
W
1
e
u
m_{u←u} = W_1e_u
mu←u=W1eu,保留了原始特征的信息。
类似地,我们可以通过从其连接的用户传播信息来获得项目 i 的表示形式
e
i
(
1
)
e^{(1)}_i
ei(1)。
W
1
W_1
W1 是与前一个式子中使用的权重矩阵共享的权重矩阵。
2.2.2 高阶传播
通过堆叠
l
l
l 个嵌入传播层,用户(和项目)能够接收从其 l 跳邻居传播的消息。 如图所示:
在第
l
l
l 步中,用户 u 的表示递归地表示为:
e
u
(
l
)
=
LeakyReLU
(
m
u
←
u
(
l
)
+
∑
i
∈
N
u
m
u
←
i
(
l
)
)
\mathbf{e}_{u}^{(l)}=\operatorname{LeakyReLU}\left(\mathbf{m}_{u \leftarrow u}^{(l)}+\sum_{i \in \mathcal{N}_{u}} \mathbf{m}_{u \leftarrow i}^{(l)}\right)
eu(l)=LeakyReLU(mu←u(l)+i∈Nu∑mu←i(l))
其中正在传播的消息定义如下:
{
m
u
←
i
(
l
)
=
p
u
i
(
W
1
(
l
)
e
i
(
l
−
1
)
+
W
2
(
l
)
(
e
i
(
l
−
1
)
⊙
e
u
(
l
−
1
)
)
)
,
m
u
←
u
(
l
)
=
W
1
(
l
)
e
u
(
l
−
1
)
\left\{\begin{array}{l} \mathbf{m}_{u \leftarrow i}^{(l)}=p_{u i}\left(\mathbf{W}_{1}^{(l)} \mathbf{e}_{i}^{(l-1)}+\mathbf{W}_{2}^{(l)}\left(\mathbf{e}_{i}^{(l-1)} \odot \mathbf{e}_{u}^{(l-1)}\right)\right), \\ \mathbf{m}_{u \leftarrow u}^{(l)}=\mathbf{W}_{1}^{(l)} \mathbf{e}_{u}^{(l-1)} \end{array}\right.
{mu←i(l)=pui(W1(l)ei(l−1)+W2(l)(ei(l−1)⊙eu(l−1))),mu←u(l)=W1(l)eu(l−1)
2.2.3 矩阵形式的传播规则
为了提供嵌入传播的整体视图并促进批量实施,我们提供了逐层传播规则的矩阵形式:
2.3 预测层
由于在不同层获得的表示强调通过不同连接传递的消息,因此它们在反映用户偏好方面有不同的贡献。 因此,我们将它们连接起来构成用户的最终嵌入,即:
e
u
∗
=
e
u
(
0
)
∥
⋯
∥
e
u
(
L
)
,
e
i
∗
=
e
i
(
0
)
∥
⋯
∥
e
i
(
L
)
\mathbf{e}_{u}^{*}=\mathbf{e}_{u}^{(0)}\|\cdots\| \mathbf{e}_{u}^{(L)}, \quad \mathbf{e}_{i}^{*}=\mathbf{e}_{i}^{(0)}\|\cdots\| \mathbf{e}_{i}^{(L)}
eu∗=eu(0)∥⋯∥eu(L),ei∗=ei(0)∥⋯∥ei(L)
2.4 损失函数
为了学习模型参数,我们优化了pairwise BPR loss。 它考虑了观察到的和未观察到的用户-项目交互之间的相对顺序。 具体来说,BPR 假设观察到的交互更能反映用户的偏好,应该比未观察到的交互分配更高的预测值。 目标函数如下: