💡 本次解读的文章是 2018 年发表于 KDD 的一篇基于图卷积神经网络的用户物品协同过滤推荐算法论文,本篇论文从图链接预测的角度考虑推荐系统的矩阵填充问题,提出了一个基于二部交互图上可微消息传递的图自动编码器框架。
一、背景介绍
在推荐算法方面,基于协同过滤(CF)的算法模型主要通过填充用户-物品交互矩阵(评分矩阵或购买矩阵等表示用户和物品交互行为的矩阵),来预测用户对物品的评分或预测用户购买物品的可能。本文将这种矩阵填充的方式看作图上的链路预测问题,利用二分图代替矩阵,将用户-物品交互矩阵构建二分图(其中,二分图的节点表示用户或物品,二分图的连边表示观察到的评分或购买交互行为),在二分图的基础上,预测可能存在的连边,以此作为交互行为预测的结果。
二、本文贡献
(1)提出了基于图的矩阵填充自动编码器框架(GC-MC),在二分交互图上通过消息传递的形式产生用户和物品节点的潜在特征,利用潜在特征对用户-物品的交互行为进行预测。
三、推荐流程
本文对用户-物品交互行为的预测流程如上图所示,利用 N u × N v N_{u} \times N_{v} Nu×Nv 的评分矩阵 M M M(其中, N u N_{u} Nu 表示用户的数量, N v N_{v} Nv 物品的数量, M i j M_{ij} Mij 表示用户 i i i 对物品 j j j 的评分或未评分,0 表示未观察到的行为)建立二分图,将二分图输入图自编码器(GC-MC 模型),对二分图中的连边进行预测,基于预测得到的连边,为用户推荐物品。
具体而言,将用户-物品交互数据表示成无向图 G = ( W , E , R ) G=(\mathcal{W}, \mathcal{E}, \mathcal{R}) G=(W,E,R) ,图中用户节点集表示为 u i ∈ U , i ∈ { 1 , … , N u } u_i \in \mathcal{U}, i \in\left\{1, \ldots, N_u\right\} ui∈U,i∈{1,…,Nu},物品节点集表示为 v j ∈ V , j ∈ { 1 , … , N v } v_{j}\in\mathcal{V},j\in\left\{1,\ldots,N_{v}\right\} vj∈V,j∈{1,…,Nv},则 U ∪ V = W \mathcal{U} \cup \mathcal{V}=\mathcal{W} U∪V=W,图中边 ( u i , r , v j ) ∈ E (u_{i},r,v{j})\in\mathcal{E} (ui,r,vj)∈E 携带表示多评分值标签 r ∈ { 1 , … , R } = R r \in \left\{1, \ldots, R\right\}= \mathcal{R} r∈{1,…,R}=R。
四、GC-MC 框架
图自编码器(GAE)由两个部分组成:1)图编码器(Graph encoder);2)双线性解码器(Bilinear decoder)。在二分推荐图 G = ( W , E , R ) G=(\mathcal{W}, \mathcal{E}, \mathcal{R}) G=(W,E,R) 中,编码器表示为 [ U , V ] = f ( X , M 1 , … , M R ) [U,V]=f(X,M_{1},\ldots,M_{R}) [U,V]=f(X,M1,…,MR),解码器表示为 M ˇ = g ( U , V ) \check{M}=g(U,V) Mˇ=g(U,V),其中 X X X 为 N × D N \times D N×D 的特征矩阵, M r ∈ { 0 , 1 } N u × N v M_r \in\{0,1\}^{N_u \times N_v} Mr∈{0,1}Nu×Nv 表示多评分值矩阵(或多评分值邻接矩阵), U , V U,V U,V 分别表示学习到的用户嵌入表示和物品嵌入表示,大小分为 N u × E , N v × E N_{u} \times E,N_{v} \times E Nu×E,Nv×E, M ˇ \check{M} Mˇ 表示大小为 N u × N v N_{u} \times N_{v} Nu×Nv 的预测评分矩阵。
4.1 Graph encoder
(1)邻居聚合
在编码器部分,该模型有效地利用了图中不同位置的权重共享,并为每种边类型 r ∈ R r \in \mathcal{R} r∈R 分配了单独的处理通道,即每个评分类型分配一个特定的变换,从而产生从物品 j j j 到用户 i i i 的边特定消息传播 μ j → i , r \mu_{j \rightarrow i, r} μj→i,r,其形式如下:
μ
j
→
i
,
r
=
1
c
i
j
W
r
x
j
\mu_{j \rightarrow i, r}=\frac{1}{c_{i j}} W_r x_j
μj→i,r=cij1Wrxj
其中,
c
i
j
c_{ij}
cij 表示归一化常量,选择
∣
N
i
∣
|\mathcal{N}_{i}|
∣Ni∣ (left normalization)或
∣
N
i
∣
N
j
∣
\sqrt{|\mathcal{N}_{i}|\mathcal{N}_{j}|}
∣Ni∣Nj∣
(symmetric normalization)计算得到(
N
i
\mathcal{N}_{i}
Ni 表示节点
i
i
i 的邻居集),
W
r
W_{r}
Wr 表示特定边类型参数矩阵,
x
j
x_{j}
xj 表示节点
j
j
j 的初始特征向量。
(2)信息更新
通过对特定边类型 r r r 的所有邻居 N i , r \mathcal{N}_{i,r} Ni,r 求和,在每个节点积累传入的消息,随后将它们累加成单个向量表示:
h
i
=
σ
[
accum
(
∑
j
∈
N
i
,
1
μ
j
→
i
,
1
,
…
,
∑
j
∈
N
i
,
R
μ
j
→
i
,
R
)
]
h_i=\sigma\left[\operatorname{accum}\left(\sum_{j \in \mathcal{N}_{i, 1}} \mu_{j \rightarrow i, 1}, \ldots, \sum_{j \in \mathcal{N}_{i, R}} \mu_{j \rightarrow i, R}\right)\right]
hi=σ
accum
j∈Ni,1∑μj→i,1,…,j∈Ni,R∑μj→i,R
其中,
a
c
c
u
m
(
⋅
)
accum(\cdot)
accum(⋅) 表示累加操作,
σ
(
⋅
)
\sigma(\cdot)
σ(⋅) 表示元素级激活操作。
(3)节点最终表示
为了得到用户节点 i i i 的最终嵌入表示,这里对中间输出 h i h_{i} hi 进行如下变换:
u
i
=
σ
(
W
h
i
)
u_{i} = \sigma{(Wh_{i})}
ui=σ(Whi)
需要注意的是,物品最终嵌入表示
v
i
v_{i}
vi 用相同的参数矩阵
W
W
W 进行相似计算。另外,一般将信息更新部分称为图卷积层(graph convolution layer),节点最终表示部分称为稠密层(dense layer),论文的实验发现堆叠多个卷积层并没有提高性能,简单的卷积层和密集层的组合效果最好。综上,以 left normalization 为例,编码器编码过程的向量化表示为(
D
D
D 表示具有非零元素
D
i
i
=
∣
N
i
∣
D_{ii} = |N_{i}|
Dii=∣Ni∣ 的对角节点度矩阵):
[
U
V
]
=
f
(
X
,
M
1
,
…
,
M
R
)
=
σ
(
[
H
u
H
v
]
W
T
)
,
\left[\begin{array}{l}U \\ V\end{array}\right]=f\left(X, M_{1}, \ldots, M_{R}\right)=\sigma\left(\left[\begin{array}{c}H_{u} \\ H_{v}\end{array}\right] W^{T}\right),
[UV]=f(X,M1,…,MR)=σ([HuHv]WT),
w
i
t
h
[
H
u
H
v
]
=
σ
(
∑
r
=
1
R
D
−
1
M
r
X
W
r
T
)
,
with \left[\begin{array}{l}H_{u} \\ H_{v}\end{array}\right]=\sigma\left(\sum_{r=1}^{R} D^{-1} \mathcal{M}_{r} X W_{r}^{T}\right),
with[HuHv]=σ(r=1∑RD−1MrXWrT),
a
n
d
M
r
=
(
0
M
r
M
r
T
0
)
.
and \mathcal{M}_{r}=\left(\begin{array}{cc}0 & M_{r} \\ M_{r}^{T} & 0\end{array}\right).
andMr=(0MrTMr0).
4.2 Bilinear decoder
为了在二分交互图中重构链接,本文考虑使用双线性解码器,并将每个评分类型视为一个单独的类,
M
ˇ
i
j
\check{M}_{ij}
Mˇij 表示用户
i
i
i 和物品
j
j
j 之间的重构评分,通过双线性操作和使用 softmax
函数生成可能的评分类型概率分布:
p
(
M
ˇ
i
j
=
r
)
=
e
u
i
T
Q
r
v
j
∑
s
∈
R
e
u
i
T
Q
s
v
j
p\left(\check{M}_{i j}=r\right)=\frac{e^{u_i^T Q_r v_j}}{\sum_{s \in R} e^{u_i^T Q_s v_j}}
p(Mˇij=r)=∑s∈ReuiTQsvjeuiTQrvj
其中,
Q
r
Q_{r}
Qr 是一个大小为
E
×
E
E \times E
E×E 的可训练参数矩阵,
E
E
E 表示用户和物品的嵌入表示维度,最终预测分数计算为:
M
ˇ
i
j
=
g
(
u
i
,
v
j
)
=
E
p
(
M
ˇ
i
j
=
r
)
[
r
]
=
∑
r
∈
R
r
p
(
M
ˇ
i
j
=
r
)
\check{M}_{i j}=g\left(u_i, v_j\right)=\mathbb{E}_{p\left(\check{M}_{i j}=r\right)}[r]=\sum_{r \in R} r p\left(\check{M}_{i j}=r\right)
Mˇij=g(ui,vj)=Ep(Mˇij=r)[r]=r∈R∑rp(Mˇij=r)
4.3 模型训练
(1)损失函数
在模型训练过程中,本文最小化以下预测评分的负对数似然:
L
=
−
∑
i
,
j
;
Ω
i
j
=
1
∑
r
=
1
R
I
[
r
=
M
i
j
]
log
p
(
M
ˇ
i
j
=
r
)
\mathcal{L}=-\sum_{i, j ; \boldsymbol{\Omega}_{i j}=1} \sum_{r=1}^R I\left[r=M_{i j}\right] \log p\left(\check{M}_{i j}=r\right)
L=−i,j;Ωij=1∑r=1∑RI[r=Mij]logp(Mˇij=r)
其中,
I
[
k
=
l
]
=
1
I[k=l]=1
I[k=l]=1 当
k
=
1
k=1
k=1 时,否则等于 0,矩阵
Ω
∈
{
0
,
1
}
N
u
×
N
i
\boldsymbol{\Omega}\in\{0,1\}^{N_{u} \times N_{i}}
Ω∈{0,1}Nu×Ni 表示掩码,当取值为1时,表示该节点为标签节点。
(2)节点 dropout
为了使模型很好地泛化到未观测到的评分,在去噪设置中通过以概率为 p d r o p o u t p_{dropout} pdropout 随机丢弃特定节点的所有发送消息来训练模型,这一过程称为节点丢弃(node dropout)。在最初的实验中,论文发现节点丢弃比消息丢弃更有效,即单个传出消息被独立地丢弃,使得嵌入对单边的存在或不存在更加鲁棒。
(3)Mini-batching
在训练模型时,论文的方法只从用户物品对的总和中抽样固定数量的贡献,通过只考虑对损失函数的固定数量的贡献,可以删除 M 1 , … , M R M_{1},\ldots,M_{R} M1,…,MR 中当前批次没有出现的用户和物品行。这既是一种有效的正则化手段,又降低了训练模型的内存需求。
(4)权重共享
对于一个特定的评分值
r
r
r,权重矩阵
W
r
W_{r}
Wr 的列对每个单独的节点起到潜在因子的作用,这些潜在因子通过消息传递的方式传递给相连的用户或物品节点。然而,并不是所有的用户和物品对于每个评分等级都有相同数量的评分。这导致
W
r
W_{r}
Wr 的某些列被优化的频率明显低于其他列。因此,对于不同的
r
r
r,矩阵
W
r
W_{r}
Wr 之间的某种形式的权重共享可望缓解这个优化问题:
W
r
=
∑
s
=
1
r
T
s
W_{r} = \sum^{r}_{s=1}{T_{s}}
Wr=s=1∑rTs
这里将这种类型的权重共享称为序数权重共享(ordinal weight sharing),其中更高的评分级别所包含的权重矩阵的数量不断增加。另外,作为成对双线性解码器正则化的一种有效手段,这里采用一组基权重矩阵
P
s
P_{s}
Ps 的线性组合形式的权重共享:
Q
r
=
∑
s
=
1
n
b
a
r
s
P
s
Q_{r}=\sum^{n_{b}}_{s=1}{a_{rs}P_{s}}
Qr=s=1∑nbarsPs
其中
s
∈
(
1
,
…
,
n
b
)
s\in(1,\ldots,n_{b})
s∈(1,…,nb) 且
n
b
n_{b}
nb 为基权重矩阵的个数,
a
r
s
a_{rs}
ars 是确定解码器每个权重矩阵
Q
r
Q_{r}
Qr 的线性组合的可学习系数。需要注意的是,为了避免过拟合和减少参数个数,基权重矩阵的个数
n
b
n_{b}
nb 自然应该低于评分等级的个数。
4.4 辅助信息添加
将节点的特征信息(内容信息)直接作为模型的输入有时并不是一个好的选择,当内容信息中包含的信息不足以区分不同的用户(或物品)及其兴趣时,这种做法会导致严重的信息流瓶颈,在这种情况下,可以通过单独的处理通道将用户和物品特征向量
x
i
f
x^{f}_{i}
xif 作为辅助信息添加到稠密隐藏层中:
u
i
=
σ
(
W
h
i
+
W
2
f
f
i
)
w
i
t
h
f
i
=
σ
(
W
1
f
x
i
f
+
b
)
u_{i}=\sigma\left(W h_{i}+W_{2}^{f} f_{i}\right) \quad with \quad f_{i}=\sigma\left(W_{1}^{f} x_{i}^{f}+b\right)
ui=σ(Whi+W2ffi)withfi=σ(W1fxif+b)
其中,
W
1
f
,
W
2
f
W^{f}_{1},W^{f}_{2}
W1f,W2f 表示可训练的权重,
b
b
b 表示偏置,权重矩阵和偏置向量对于用户和物品是不同的。