文章目录
一、背景
传统的推荐系统在设计嵌入层(Embeddings)时,要么是基于用户设计,要么是基于物品设计。具体来说,就是关联规则1在协同过滤(collaborative filtering)中的应用。在向某个特定的用户A推荐物品时,都会找寻和A喜好度差不多的用户B(相似度高),通过用户B是否喜欢某个A未见过的物品来判定是否向A推荐此物品,这就是面向用户的协同过滤模型。面向物品的协同过滤模型同理。这里放一个解释比较详细的链接: 推荐系统之协同过滤算法
二、NGCF介绍
通过对背景的描述,相信很多人已经看出来了问题来源,在设计嵌入层时,我们通常都会将用户和物品分开处理,这就忽略了本质上用户-物品之间的联系,嵌入层显然不包含这一联系。NGCF的提出,正是解决了用户和物品交互信息的传播信号(collaborative signal in user-item interactions)无法在嵌入层中表现这一问题。
三、高阶连通性(high-order connectivity)在NGCF中的作用
问题:在日常生活中,用户和项目的交互通常是非常庞大的,这就使得提取协作信号变得非常复杂。高阶连通性作为一种在交互图结构中编码协作信号的自然方式非常适合表现这种关系。这也是NGCF中较为关键的思想。在后面还会有所提及。
四、原理
4.1 图像化解释
首先从图像上看出以
u
1
u_1
u1和
i
4
i_4
i4为例,NGCF分为三层,第一层就是由用户和物品共同组成的嵌入层记为
e
u
1
(
0
)
e_{u_1}^{(0)}
eu1(0)和
e
i
4
(
0
)
e_{i_4}^{(0)}
ei4(0),随后进入嵌入传播层(Embedding Propagation Layers)。嵌入传播层作为NGCF的核心,它的核心思想就是借助高阶连通性将用户和项目进行关联,并用GCN的思想提取每一层中的有用信息。最后一层为预测层,它用于给出最后预测结果。也就是将
u
1
u_1
u1和
i
4
i_4
i4每一层的预测结果整合得到
e
u
1
∗
e_{u_1}^{*}
eu1∗和
e
i
4
∗
e_{i_4}^{*}
ei4∗
4.2 激活函数和损失函数
4.2.1 消息构建和消息整合
在嵌入传播层中,对于原始数据
e
u
1
(
0
)
e_{u_1}^{(0)}
eu1(0)和
e
i
4
(
0
)
e_{i_4}^{(0)}
ei4(0),我们需要进行消息构建(Message Construction):对于每一对
u
−
>
i
u->i
u−>i 来说,定义从
u
u
u到
i
i
i的消息为:
m
u
←
i
=
f
(
e
i
,
e
u
,
p
u
i
)
m_{u\leftarrow i} = f(e_i,e_u,p_{ui})
mu←i=f(ei,eu,pui)
这里
P
u
i
P_{ui}
Pui为消息衰减因子,用于控制距离对消息的影响。在NGCF中
f
(
e
i
,
e
u
,
p
u
i
)
f(e_i,e_u,p_{ui})
f(ei,eu,pui)为
m
u
←
i
=
1
∣
N
u
∣
∣
N
i
∣
(
W
1
e
i
+
W
2
(
e
i
⊙
e
u
)
)
m_{u\leftarrow i} =\frac{1}{\sqrt{|N_u||N_i|}}(W_1e_i+W_2(e_i\odot e_u))
mu←i=∣Nu∣∣Ni∣1(W1ei+W2(ei⊙eu))
W
1
W_1
W1和
W
2
W_2
W2是可训练的矩阵,用于提取嵌入层中的有用信息而
p
u
i
p_{ui}
pui被设置为了图拉普拉斯范数(graph Laplacian norm).其中
∣
N
i
∣
|N_i|
∣Ni∣
∣
N
u
∣
|N_u|
∣Nu∣分别为i和u的子树个数
在对消息构建之后,需要进行消息聚合(Message Aggregation):
这里设置对于第一层
u
u
u到
i
i
i的消息来说,其激活函数为:
e
u
(
1
)
=
L
e
a
k
y
R
e
L
U
(
m
u
←
u
+
∑
i
∈
N
u
m
u
←
i
)
e_u^{(1)}=LeakyReLU(m_{u\leftarrow u}+\sum_{i\in N_u}^{}m_{u\leftarrow i})
eu(1)=LeakyReLU(mu←u+i∈Nu∑mu←i)
对于其他层来说,激活函数相似:
e
u
(
l
)
=
L
e
a
k
y
R
e
L
U
(
m
u
←
u
(
l
)
+
∑
i
∈
N
u
m
u
←
i
(
l
)
)
e_u^{(l)}=LeakyReLU(m_{u\leftarrow u}^{(l)}+\sum_{i\in N_u}^{}m_{u\leftarrow i}^{(l)})
eu(l)=LeakyReLU(mu←u(l)+i∈Nu∑mu←i(l))
这样行成了迭代的关系,层数越高,用户和项目交互所得的信息就越密集,包含之前层的信息。对于
m
u
←
u
m_{u\leftarrow u}
mu←u自连接来说
m
u
←
u
=
W
1
e
u
m_{u\leftarrow u}=W_1e_u
mu←u=W1eu
而对于高阶传播中有
{
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),
转化为矩阵形式就是
E
(
l
)
=
LeakyReLU
(
(
L
+
I
)
E
(
l
−
1
)
W
1
(
l
)
+
L
E
(
l
−
1
)
⊙
E
(
l
−
1
)
W
2
(
l
)
)
\mathbf{E}^{(l)}=\operatorname{LeakyReLU}\left((\mathcal{L}+\mathrm{I}) \mathbf{E}^{(l-1)} \mathbf{W}_{1}^{(l)}+\mathcal{L} \mathbf{E}^{(l-1)} \odot \mathbf{E}^{(l-1)} \mathbf{W}_{2}^{(l)}\right)
E(l)=LeakyReLU((L+I)E(l−1)W1(l)+LE(l−1)⊙E(l−1)W2(l))
其中
L
=
D
−
1
2
A
D
−
1
2
and
A
=
[
0
R
R
⊤
0
]
\mathcal{L}=\mathbf{D}^{-\frac{1}{2}} \mathrm{AD}^{-\frac{1}{2}} \text { and } \mathbf{A}=\left[\begin{array}{cc} \mathbf{0} & \mathbf{R} \\ \mathbf{R}^{\top} & \mathbf{0} \end{array}\right]
L=D−21AD−21 and A=[0R⊤R0]
L
\mathcal{L}
L表示拉普拉斯矩阵
4.2.2 损失函数
在NGCF这篇文章中,采取推荐系统中最为常见的BRP loss函数:
Loss
=
∑
(
u
,
i
,
j
)
∈
O
−
ln
σ
(
y
^
u
i
−
y
^
u
j
)
+
λ
∥
Θ
∥
2
2
\text { Loss }=\sum_{(u, i, j) \in O}-\ln \sigma\left(\hat{y}_{u i}-\hat{y}_{u j}\right)+\lambda\|\Theta\|_{2}^{2}
Loss =(u,i,j)∈O∑−lnσ(y^ui−y^uj)+λ∥Θ∥22
五、对照
论文中分别采用Gowalla、Yelp2018和Amazon-book三个数据,结果显示NGCF取得了不错的效果。
关联规则:规则 X ⇒ Y X\Rightarrow Y X⇒Y被称为最小支持度s和最小置信度c下的关联,如果下述两个条件被同时满足:
1. X ∪ Y X\cup Y X∪Y的支持度不小于s;
2. X ⇒ Y X\Rightarrow Y X⇒Y的置信度不小于c ↩︎