Neural Graph Collaborative Filtering
摘要
背景:学习用户和商品的向量表示是现代推荐系统的核心。
方法:从早期的矩阵分解到最近出现的基于深度学习的方法,现有的工作通常通过从描述用户(或商品)的已有特征(如ID和属性)映射来获取用户(或商品)的嵌入。
不足:协作信号,这是潜伏在用户-物品交互,没有编码的嵌入过程。因此,由此产生的嵌入可能不足以捕捉协同过滤效果。
目的:将用户-物品交互的二部图结构集成到嵌入过程中。
方法:神经图协同过滤
步骤:通过在user-item图结构上传播嵌入来利用用户项目图结构。将user-item图中高阶连接的表达建模,以显式的方式有效地将协作信号注入到嵌入过程中。
结论/效果:对比其他三个基本方法,优于state-of-the-art方法。
引言
领域中存在的问题
个性化推荐:核心是根据用户的购买和点击等历史互动情况来估计用户接受项目的可能性。
协同推荐:通过假设行为相似的用户会对商品表现出相似的偏好来解决这个问题。
Embedding 向量是现代推荐系统的核心,但是目前的方法无法捕捉到 user-item 交互中潜在的协作信号。因此,由此产生的 Embedding 向量可能不足以捕获到协同过滤的内容。
问题的解决方法
范例:参数化用户和项目以重建历史交互,并基于参数预测用户偏好。
协同过滤(CF)有两个关键组成部分:
(1)嵌入:将用户和物品转换为向量化的表示。比如说矩阵分解得到 Embedding,并建模了 user 和 item 之间的交互信息;
(2)交互建模:基于嵌入重建历史交互。比如说利用非线性神经网络代替 MF 中的内积或者利用欧几里得作为交互函数;
矩阵分解MF:直接嵌入用户/商品ID作为向量,并使用内积建模用户-商品交互;
协同深度学习:通过整合项目丰富边信息的深度表示,扩展了MF嵌入函数;
神经协同过滤模型:用非线性神经网络代替MF交互函数的内积;
基于平移的CF模型:使用欧几里得距离度量作为交互函数;
等。
先前方法有哪些挑战:缺陷
不足以为CF生成令人满意的嵌入。
关键原因是嵌入函数缺乏对关键协作信号的显式编码,这种信号潜伏在用户-物品交互中,揭示用户(或物品)之间的行为相似性。
在定义模型训练的目标函数时,有的大多数方法只使用描述性特征(如ID和属性)来构建嵌入函数,而没有考虑用户-物品之间的交互。
当嵌入量不足时,这些方法只能依靠交互函数来弥补次优嵌入的不足。
解决挑战:显式建模User-Item 之间的高阶连接性来提升 embedding
直观上,把user-item交互整合到嵌入功能中很有用。
但在实际应用中,交互规模易达数百万甚至更大,提取协作信号变困难。
利用用户项目交互的高阶连接。这是一种在交互图结构中编码协作信号的自然方式。
本文提出在嵌入函数中对高阶连接信息进行建模,设计了一种神经网络方法来递归地在图上传播嵌入,而不是将交互图扩展为一个复杂的实现树。具体来说,设计了一个嵌入传播层,它通过聚合交互项(或用户)的嵌入来细化用户(或项目)的嵌入。通过叠加多个嵌入传播层,可以加强嵌入来捕获高阶连通性的协作信号。
举例说明
上图说明了高阶连接性的概念。右边的子图显示了从u1展开的树结构。
高阶连通性表示从路径长度大于1的任何节点到达u1的路径。这种高阶连接包含了携带协作信号的丰富语义。
例如:
路径u1←i2←u2表示u1和u2之间的行为相似度,因为两个用户都与i2交互过;
较长的路径u1←i2←u2←i4表明u1可能会接受4,因为她的相似用户u2之前已经使用过4。
两层叠加获取fu1←i2←u2的行为相似性,三层叠加获取fu1←i2←u2←i4的潜在推荐,信息流的强度(由层间可训练权值估计)决定了i4和i5的推荐优先级。
贡献
- 强调在基于模型CF方法的嵌入函数中明确利用协作信号的关键重要性。
- 我们提出了一种新的基于图神经网络的推荐框架NGCF,该框架通过嵌入传播将协作信号以高阶连通性的形式显式编码。
- 300万大小的数据集上最先进性能,并能通过神经嵌入传播提高嵌入质量。
方法
NGCF模型架构:
该架构包含3个组件:
- 提供用户嵌入和项目嵌入的嵌入层和初始化;
- 多个嵌入传播层,通过注入高阶连通关系来细化嵌入;
- 预测层,该层聚合来自不同传播层的精细化嵌入并输出用户-项目对的亲和度评分,
1.嵌入层
用户
u
u
u(商品
i
i
i)嵌入向量:
e
u
∈
R
d
e_u\in\R^d
eu∈Rd(
e
i
∈
R
d
e_i\in\R^d
ei∈Rd),
d
d
d:嵌入大小。
嵌入查找表(参数矩阵):
E
=
[
e
u
1
,
.
.
.
,
e
u
N
,
e
i
1
,
.
.
.
,
e
u
N
]
,
(1)
E=[e_{u_1},...,e_{u_N},e_{i_1},...,e_{u_N}], \tag{1}
E=[eu1,...,euN,ei1,...,euN],(1)
传统方法:在MF和神经协同过滤等传统推荐模型中,嵌入送入交互层(或算子),获得预测得分。
NGCF:将
E
E
E输入到多层嵌入传播层,通过在二部图上进行嵌入的传播来对嵌入进行精炼。
2.嵌入传播层:将初始的user和item表示基于图神经网络来更新
构建gnn的消息传递架构,以便沿图结构捕获CF信号,并细化用户和项目的嵌入。
一阶传播:交互项提供了用户偏好的直接证据,利用其执行连接的用户和项之间的嵌入传播。例,消费某item的user可以被视为该item的特征,并用于衡量两件item的协同相似性。构造流程:
2.1一阶消息传播:GNN的单层卷积表示
2.2.1消息构造
对于每个user-item对 ( u , i ) (u,i) (u,i), 定义从 i i i到 u u u传递的message如下:
m u ← i = f ( e i , e u , p u i ) , (2) m_{u\gets{i}}=f(e_i,e_u,p_{ui}), \tag{2} mu←i=f(ei,eu,pui),(2)
其中
m
u
<
−
i
m_{u<-i}
mu<−i定义为消息嵌入,即要传播的信息。
f
(
⋅
)
f(\cdot)
f(⋅)是消息编码函数,将user和item的嵌入
e
u
,
e
i
e_u,e_i
eu,ei作为输入,并使用系数
p
u
i
p_{ui}
pui来控制每条边edge
(
u
,
i
)
(u,i)
(u,i)在每次传播中的衰减因子。
本文使用的 f f f函数:
m u ← i = 1 ∣ N u ∣ ∣ N i ∣ ( W 1 e i + W 2 ( e i ⊙ e u ) ) , (3) m_{u\gets{i}}=\frac{1}{\sqrt{\mid{N_u}\mid\mid{N_i}\mid}}(W_1e_i+W_2(e_i\odot{e_u})), \tag{3} mu←i=∣Nu∣∣Ni∣1(W1ei+W2(ei⊙eu)),(3)
其中
W
1
,
W
2
W_1,W_2
W1,W2位可训练权矩阵。
(1)
N
i
,
N
u
N_i,N_u
Ni,Nu为item或user的邻接点集合。
(2)
⊙
\odot
⊙表示了元素的乘积,使得信息依赖于
e
i
,
e
u
e_i,e_u
ei,eu的亲和力,从类似条目传递更多信息。
作者不仅考虑了message的来源
e
i
e_i
ei(传统图卷积方法只考虑这个),还考虑了信息来源和信息目的地之间的关系,即
e
i
⊙
e
u
e_i\odot{e_u}
ei⊙eu(实验证明了其导致性能的提升)。
(3)根据GCN,将
p
u
i
p_{ui}
pui设置为图拉普拉斯范数
1
∣
N
u
∣
∣
N
i
∣
\frac{1}{\sqrt{\mid{N_u}\mid\mid{N_i}\mid}}
∣Nu∣∣Ni∣1,
N
u
N_u
Nu和
N
i
N_i
Ni为用户u和项目i的第一跳邻居。
(5)从表征学习角度:
p
u
i
p_{ui}
pui反映了历史交互item对用户偏好的贡献程度。从信息传递角度,
p
u
i
p_{ui}
pui可以看做是折扣系数,消息会随着路径的增加而慢慢衰减(这个可以通过叠加多层,并代入到式子,会发现前面系数也是连乘在一起了,说明路径越长,衰减越大)。
2.2.2消息传播
将从用户 u u u的邻居传递过来的信息进行汇聚来提炼用户 u u u的嵌入表示。
e u ( 1 ) = L e a c k y R e l U ( m u < − u + ∑ i ∈ N u m u < − i ) , (4) e^{(1)}_u=LeackyRelU(m_{u<-u}+\displaystyle\sum_{i\in\N_u}m_{u<-i}), \tag{4} eu(1)=LeackyRelU(mu<−u+i∈Nu∑mu<−i),(4)
(1)
e
u
(
1
)
e^{(1)}_u
eu(1)是经过一层嵌入传播层得到的提炼后的用户
u
u
u嵌入表示。
(2)
L
e
a
c
k
y
R
e
l
U
LeackyRelU
LeackyRelU的激活功能允许对正反馈信息和少部分负反馈信息的编码。
(3)
m
u
<
−
u
=
W
1
e
i
m_{u<-u}=W_1e_i
mu<−u=W1ei 考虑了self-connection,此处的
W
1
W_1
W1与上面的消息传递公式中的
W
1
W_1
W1权值共享。
item的嵌入表示同理可得。
嵌入传播层的优势在于显示地挖掘first-order connectivity信息来联系user和item的表示。
2.2高阶传播
如下图,协同信号
u
1
←
i
2
←
u
2
←
i
4
u_1\gets{i_2}\gets{u_2}\gets{i_4}
u1←i2←u2←i4可以通过 Embedding 传播的过程进行捕捉。
i2,i4,i5首先进行一阶更新聚合,然后聚合二阶邻居(此时u1也完成了更新),此时用u1和u2更新i2,同样的其他的item也会相应的更新,最后再由i1,i2,i3来更新u1。
得到的 e u ( 1 ) e^{(1)}_u eu(1)可以作为下一个embedding propagation layer的输入,通过叠加多层,可以挖掘multi-hop的关联关系。递归迭代式如下:
e u ( l ) = L e a c k y R e l U ( m u ← u ( l ) + ∑ i ∈ N u m u ← i ( l ) ) , (5) e^{(l)}_u=LeackyRelU(m^{(l)}_{u\gets{u}}+\displaystyle\sum_{i\in\N_u}m^{(l)}_{u\gets{i}}), \tag{5} eu(l)=LeackyRelU(mu←u(l)+i∈Nu∑mu←i(l)),(5)
其中, 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 ) ) ) , (6) m^{(l)}_{u\gets{i}}=p_{ui}(W^{(l)}_1e^{(l-1)}_i+W^{(l)}_2(e^{(l-1)}_i\odot{e^{(l-1)}_u})), \tag{6} mu←i(l)=pui(W1(l)ei(l−1)+W2(l)(ei(l−1)⊙eu(l−1))),(6)
m u ← u ( l ) = W 1 ( l ) e u ( l − 1 ) , (7) m^{(l)}_{u\gets{u}}=W^{(l)}_1e^{(l-1)}_u, \tag{7} mu←u(l)=W1(l)eu(l−1),(7)
(1) W 1 ( l ) , W 2 ( l ) ∈ R d l × d l − 1 W^{(l)}_1,W^{(l)}_2\in\R^{d_l\times{d_{l-1}}} W1(l),W2(l)∈Rdl×dl−1 为可训练的变换矩阵
分层传播规则的矩阵形式(等价于式(5)和式(6)),矩阵形式的传播规则:
e
u
(
l
)
=
L
e
a
c
k
y
R
e
l
U
(
W
1
(
l
)
e
u
(
l
−
1
)
+
∑
i
∈
N
u
1
∣
N
u
∣
∣
N
i
∣
(
W
1
e
i
(
l
−
1
)
+
W
2
(
e
i
(
l
−
1
)
⊙
e
u
(
l
−
1
)
)
)
)
e^{(l)}_u=LeackyRelU(W^{(l)}_1e^{(l-1)}_u+\displaystyle\sum_{i\in\N_u}\frac{1}{\sqrt{\mid{N_u}\mid\mid{N_i}\mid}}(W_1e^{(l-1)}_i+W_2(e^{(l-1)}_i\odot{e^{(l-1)}_u})))
eu(l)=LeackyRelU(W1(l)eu(l−1)+i∈Nu∑∣Nu∣∣Ni∣1(W1ei(l−1)+W2(ei(l−1)⊙eu(l−1))))
E ( l ) ⏟ R ( N + M ) × d l = L e a c k y R e l U ( ( L + I ) ⏟ R ( N + M ) × ( N + M ) E l − 1 ⏞ R ( N + M ) × d l − 1 W 1 ( l ) ⏟ R ( d l − 1 ) × ( d l ) + L ⏞ R ( N + M ) × ( N + M ) E ( l − 1 ) ⏟ R ( N + M ) × d l − 1 ⊙ E ( l − 1 ) ⏞ R ( N + M ) × d l − 1 W 2 ( l ) ⏟ R ( d l − 1 ) × ( d l ) ) , (8) \underbrace{E^{(l)}}_{\R^{(N+M)\times{d_l}}}=LeackyRelU( \underbrace{(L+I)}_{\R^{(N+M)\times{(N+M)}}} \overbrace{E^{l-1}}^{\R^{(N+M)\times{d_{l-1}}}} \underbrace{W^{(l)}_1}_{\R^{(d_{l-1})\times{(d_l)}}}+ \overbrace{L}^{\R^{(N+M)\times{(N+M)}}} \underbrace{E^{(l-1)}}_{\R^{(N+M)\times{d_{l-1}}}} \odot{ \overbrace{E^{(l-1)}}^{\R^{(N+M)\times{d_{l-1}}}} \underbrace{W^{(l)}_2}_{\R^{(d_{l-1})\times{(d_l)}}}} ), \tag{8} R(N+M)×dl E(l)=LeackyRelU(R(N+M)×(N+M) (L+I)El−1 R(N+M)×dl−1R(dl−1)×(dl) W1(l)+L R(N+M)×(N+M)R(N+M)×dl−1 E(l−1)⊙E(l−1) R(N+M)×dl−1R(dl−1)×(dl) W2(l)),(8)
(1)
E
(
l
)
∈
R
(
N
+
M
)
×
d
l
E^{(l)}\in\R^{(N+M)\times{d_l}}
E(l)∈R(N+M)×dl,即:把user, item的embeddings矩阵concat在一起,一起进行传播。也就是说,上述是user,item共同进行传播的表示形式,因此所有的矩阵都是concat在一起的形式。
(2)
L
L
L表示user-item交互图的拉普拉斯矩阵,
L
=
D
−
1
/
2
A
D
−
1
/
2
L=D^{-1/2}AD^{-1/2}
L=D−1/2AD−1/2,其中,
A
∈
R
(
N
+
M
)
×
(
N
+
M
)
A\in\R^{(N+M)\times{(N+M)}}
A∈R(N+M)×(N+M)是邻接矩阵,是user-item交互矩阵和item-user交互矩阵构成的,即:
A
=
[
0
R
R
T
0
]
A=\begin{bmatrix} 0 & R \\ R^T & 0 \end{bmatrix}
A=[0RTR0]。
D
D
D为对角矩阵
(3)对于(2)的矩阵表示,前一项代表了关于
W
1
W_1
W1四个式子得集合(由于矩阵是concat的形式,综合考虑user->item和item->user),关于单位矩阵
I
I
I意味着self-connection的两项,关于
L
\mathcal{L}
L作者在文中表示相当于
p
u
i
p_{ui}
pui。
3.预测层
将每一层的user或者item的embedding拼接起来成为最终embedding。(所以
e
u
l
e^l_u
eul表示的是第
l
l
l层所有用户的嵌入,对吗?)
即:
e
u
∗
=
c
o
n
c
a
t
(
e
u
(
0
)
,
e
u
(
1
)
,
.
.
.
.
.
.
,
e
u
L
)
,
(9)
e^*_u=concat(e^{(0)}_u,e^{(1)}_u,......,e^L_u), \tag{9}
eu∗=concat(eu(0),eu(1),......,euL),(9)
除了 concat 外,max pooling、LSTM 之类的操作也是支持的。
最后预测user-item交互的时候使用点乘:
y
^
N
G
C
F
(
u
,
i
)
=
e
u
∗
T
e
i
∗
,
(10)
\hat{y}_{NGCF}(u,i)=e^{*T}_ue^*_i, \tag{10}
y^NGCF(u,i)=eu∗Tei∗,(10)
实际这里采用了类似 18ICML Representation Learning on Graphs with Jumping Knowledge Networks的做法来防止GNN中的过平滑问题。GNN的过平滑问题是指,随着GNN层数增加,GNN所学习的Embedding变得没有区分度。过平滑问题与本文要捕获的高阶连接性有一定的冲突,所以这里需要在克服过平滑问题。
4.模型优化
最后作者采用的是pairwise BPR loss进行优化。
L
o
s
s
=
∑
(
u
,
i
,
j
)
∈
O
−
l
n
σ
(
y
^
u
i
−
y
^
u
j
)
+
λ
∥
Θ
∥
2
2
,
(11)
Loss=\displaystyle\sum_{(u,i,j)\in{O}}-ln\sigma(\hat{y}_{ui}-\hat{y}_{uj})+\lambda\parallel{\Theta}\parallel^2_2, \tag{11}
Loss=(u,i,j)∈O∑−lnσ(y^ui−y^uj)+λ∥Θ∥22,(11)
(1) Model Size
1.虽然NGCF在每一个传播层包含一个嵌入矩阵
E
(
l
)
E^{(l)}
E(l),但是它仅仅引进了很少的参数(两个
d
l
∗
d
l
−
1
d_l*d_{l-1}
dl∗dl−1 维的权重矩阵),这些嵌入矩阵起源于
E
(
0
)
E^{(0)}
E(0),基于user-item图结构和权重矩阵进行变换。
2.比起MF,NGCF的参数仅仅多出
2
L
d
l
d
l
−
1
2Ld_ld_{l-1}
2Ldldl−1个,比起users和items的数目几乎可以忽略不计。
(2)Message and Node Dropout
1.深度学习虽然表示能力强大,但是经常过拟合,丢弃可以有效防止神经网络中的过拟合,我们提出了NGCF的两种丢弃策略:
(1)消息丢弃:以概率
p
1
p_1
p1随机丢弃产出的消息,
(2)节点丢弃:随即阻止一个特殊节点并丢弃他的全部输出消息,对于第
l
l
l个传播层,我们从拉普拉斯矩阵中随机丢弃
(
M
+
N
)
p
2
(M+N)p_2
(M+N)p2个节点,
p
2
p_2
p2是丢弃比率。
2.丢弃仅被用在训练阶段,禁止在测试阶段丢弃。
相关工作
1.基于模型的CF
MF
- 增强嵌入函数:整合边信息 增强交互函数:捕获非线性特征交互
- 但是我们认为嵌入函数不足以为CF产出最优嵌入,因为CF信号仅仅被隐式捕获。
- 嵌入函数将可描述性特征(ID和属性)转化为向量,交互函数作为向量的相似性度量。
- 理想状态下,当user-item交互被完整重构时,可以捕获行为相似性的传递性属性。
- 然而,这种传递效果不能被显式编码,因此不能保证间接连接的用户和物品在嵌入空间中是相近的。
- 不能显式的编码CF信号,就很难获得能达到理想状态的embedding。
2.基于图的CF
- HOP-Rec:将基于图的方法和基于嵌入的方法相结合,首先使用随机游走去丰富一个用户和其多跳连接的item之间的交互,然后使用BRP在已经丰富的交互数据上去训练MF。但没有充分使用高阶连接性,仅仅利用了丰富的训练数据,而不是直接改进模型的嵌入函数,HOP-Rec很大程度上依赖于随机游走,这需要仔细的调优工作,比如设置适当的衰减因子。
3.图卷积网络
- 通过在user-item交互图上设计一个图卷积操作,使得NGCF能够有效的利用高阶连接性的CF信号,这里我们讨论现存的也使用图卷积操作的推荐方法。
- GC-MC:使用了一个卷积层,不能表示高阶连接性的协同信号。
- PinSage:使用多个图卷积层,CF效果在商品级别上被捕获,而不是跟用户行为协同。
实验
- Q1:和state-of-the-art的方法相比,NGCF的效果如何?
- Q2:不同的超参数设置(例如,层的深度、嵌入传播层、层聚集机制,消息丢弃和结点丢弃)影响NGCF?
- Q3:高阶连接性对于模型的影响(表示如何从高阶连通性中受益)。
实验设置:把每个观察到的user-item交互看作一个正例,通过消极抽样策略把该交互和一个用户之前没有使用过的**消极item(负例)**进行配对。然后每个方法输出用户对所有item的喜好分数,除了训练集中使用的积极的item
问题
(1)什么是拉普拉斯?对模型有什么用呢?
【其实贼简单】拉普拉斯算子和拉普拉斯矩阵.
拉普拉斯矩阵/映射/聚类.
NGCF调参——拉普拉斯矩阵.
(2)为什么点乘可以计算相似性?内积和点乘一样吗?内积是怎么产生交互关系的?
(3)在传播过程中有u<-u,有u<-i,那
e
u
(
l
)
e^{(l)}_u
eu(l)和
e
u
(
l
−
1
)
e^{(l-1)}_u
eu(l−1)的u是不同层的同一个u还是不同层的不同u?
答:在我的理解中,是不同层的不同u,且每层的u都会实现self aggregate。
(4)折扣系数是否可以看作是一个attention,或者是否可以将折扣系数换成attention?
(5)在GNN中,怎么确定初始嵌入是哪些节点
结论/展望
本文提出了基于图神经网络的协同过滤算法NGCF,它可以显式的将User-Item的高阶交互编码进Embedding中来提升Embedding的表示能力进而提升整个推荐效果。关键是新提出的嵌入传播层,在该层的基础上,我们允许嵌入的用户和物品之间相互交互,以获取协同信号。
在未来,我们将进一步改进NGCF,引入注意机制,学习嵌入传播过程中邻居的变权以及不同阶数的连通性。这将有利于模型的泛化和可解释性。此外,我们还对用户/物品嵌入的对抗学习和增强NGCF鲁棒性的图结构进行了研究。
代码
NGCF等模型的推荐流程:
1)训练时,用户和物品的初始特征向量可以是随机生成的,也可以是预训练的属性特征,通过模型参数进行转换和学习后生成最终的特征表达,通过最终的特征表达的内积来表示用户u对项目i的评分预测。每个epoch里,设置一个batchsize,将训练集分为Iteration(n_batch= 训练集中用户个数除以batch_size)个batch,每个batch更新一次模型参数,每个epoch里计算一次loss函数,训练10个epoch的时候就是更新了10*Iteration次参数。每次Iteration(n_batch)从训练集里面随机取出一个batchsize的用户,对每个用户都从训练集中找一个positive的项目,找一个negtive的项目(就是不在训练集里的),根据取出的用户id、积极的项目id,和消极项目id从之前生成特征表示矩阵里面取出对应的embedding, 然后通过bpr loss函数计算他们内积之差,通过adam函数更新模型参数优化loss函数,
2)测试时,从测试集里取出所有的用户,用户数量太大,也分为若干batch,每个batch中的用户和数据集中所有的项目,他们的矩阵乘积则表示对应的预测评分,对于单个用户和物品的向量来说就是向量的内积。根据测试集所有用户的预测评分矩阵与测试集所有的用户对应的物品计算相应的召回率和准确率:从预测评分矩阵选取每个用户top_k的物品,查看这些物品是否在用户对应的交互物品中,从而计算召回率等指标。如果要看某一个用户的推荐物品,根据学习到的该用户的特征向量与所有物品的特征向量进行矩阵相乘,获得一个一维度的评分向量,对该向量进行排序后取出最优的物品。