文章目录
Xiangnan He, Lizi Liao, Hanwang Zhang, Liqiang Nie, Xia Hu, and Tat-Seng
Chua. 2017. Neural Collaborative Filtering. In WWW. 173–182.
这篇文章将神经网络融入到RS里面,由DNNs来学习预测交互函数,并且指出了MF构建交互模型存在的弊端。文章一共提出了三种NCF模型,并且取得了很好的实验结果。
1 文章为了解决什么问题?
协同过滤(CF, Collaborative Filtering):个性化推荐系统根据用户过去的互动(如评分和点击),为用户对项目的爱好进行建模。
矩阵分解(MF,matrix factorization):利用潜在特征向量来表示用户或项目,将用户和项目投影到共享的潜在空间中。然后,将用户对项目的交互建模为其潜在向量的内积。
内积只是简单地将潜在特征的相乘线性组合起来,不足以捕获用户交互数据的复杂结构。在低维隐空间中,使用一个简单而固定的内积来估计复杂的用户-项目交互可能会导致MF的局限性。
2 文章提出了什么方法?
本文的工作通过形式化一种用于协同过滤的神经网络建模方法来解决上述研究问题。通过将内积运算替换为可以从数据中学习任意函数的神经体系结构,本文提出了一个名为NCF(Neural network based Collaborative Filtering)的通用框架。 NCF是通用的,可以在其框架下表示和推广矩阵分解。 为了使NCF建模具有非线性效果,提出利用多层感知器来学习用户与物品的交互函数。在这篇论文中,探讨的中心主题是如何利用DNNs对有噪声的隐式反馈信号进行建模。
3 模型架构以及原理?
3.1 推荐问题基本描述
隐式反馈的推荐问题被表述为估计用户-物品交互矩阵Y中未观察物品的分数的问题,该分数用于对物品进行排序。在形式上,他们可以抽象为 y ^ u i = f ( u , i ∣ Θ ) \widehat{y}_{ui}=f\left( u,i | \Theta \right) y ui=f(u,i∣Θ), y ^ u i \widehat{y}_{ui} y ui表示用户u和物品i的预测得分, Θ \Theta Θ表示模型的参数,f表示将模型参数映射到预测分数的函数(交互函数)。
3.2 矩阵分解(Matrix Factorization, MF)
MF将每个用户和物品与潜在特征的实值向量相关联。设
p
u
p_u
pu和
q
i
q_i
qi分别表示用户u和物品i的隐向量;MF估计
y
u
i
y_{ui}
yui是
p
u
p_u
pu和
q
i
q_i
qi的内积:
y
^
u
i
=
f
(
u
,
i
∣
p
u
,
q
i
)
=
p
u
T
q
i
=
∑
k
=
1
K
p
u
k
q
i
k
(1)
\widehat{y}_{ui}=f \left( u,i |p_u, q_i\right)=p_u^T q_i=\sum_{k=1}^K p_{uk}q_{ik} \tag{1}
y
ui=f(u,i∣pu,qi)=puTqi=k=1∑Kpukqik(1)
缺点:使用一个简单而固定的内积来估计复杂的用户-项目交互可能会导致MF的局限性。
3.3 NCF通用框架
1.NCF框架
为了允许对协同过滤进行完整的神经处理,采用多层表示对用户-物品交互
y
u
i
y_{ui}
yui进行建模,如图2所示,其中一层的输出作为下一层的输入。底层输入层由两个特征向量
v
u
U
v_u^U
vuU和
v
i
I
v_i^I
viI组成,分别描述用户u和物品i的特征,其为一个具有one-hot编码的二值化稀疏向量。
在输入层之上为Embedding层,它是一个全连接层,将稀疏表示投影到稠密向量上。现在将NCF的预测模型表示为
y
^
u
i
=
f
(
P
T
v
u
U
,
Q
T
v
i
I
∣
P
,
Q
,
Θ
f
)
(2)
\widehat{y}_{ui}=f\left( \mathbf{P}^T \mathbf{v}_u^U ,\mathbf{Q}^T\mathbf{v}_i^I|\mathbf{P},\mathbf{Q},\mathbf{\Theta}_f \right) \tag{2}
y
ui=f(PTvuU,QTviI∣P,Q,Θf)(2)
- 这里 P ∈ R M × K \mathbf{P}\in \mathbb{R}^{M\times K} P∈RM×K, Q ∈ R N × K \mathbf{Q}\in \mathbb{R}^{N\times K} Q∈RN×K分别表示用户和物品的隐含因子矩阵。
- Θ f \Theta_f Θf表示了交互函数 f f f的模型参数。
函数
f
f
f可以定义为多层神经网络,可以被表述为:
f
(
P
T
v
u
U
,
Q
T
v
i
I
)
=
ϕ
o
u
t
(
ϕ
X
(
…
ϕ
2
(
ϕ
1
(
P
T
v
u
U
,
Q
T
v
i
I
)
)
…
)
)
(3)
f\left( \mathbf{P}^T \mathbf{v}_u^U ,\mathbf{Q}^T\mathbf{v}_i^I \right)=\phi_{out}\left(\phi_X \left( \dots \phi_2 \left( \phi_1\left( \mathbf{P}^T \mathbf{v}_u^U ,\mathbf{Q}^T\mathbf{v}_i^I \right) \right)\dots \right) \right) \tag{3}
f(PTvuU,QTviI)=ϕout(ϕX(…ϕ2(ϕ1(PTvuU,QTviI))…))(3)
ϕ o u t \phi_{out} ϕout和 ϕ x \phi_x ϕx分别表示输出层和第x层神经协同过滤的映射函数(CF)层,总共有X个神经CF层。
2.NCF学习
为了学习模型参数,现有的pointwise方法大多使用了平方损失的回归:
L
s
q
r
=
∑
(
u
,
i
)
∈
y
∪
y
−
w
u
i
(
y
u
i
−
y
^
u
i
)
2
(4)
L_{sqr}=\sum_{(u,i)\in y \cup y^-} w_{ui}\left( y_{ui} - \widehat{y}_{ui} \right)^2 \tag{4}
Lsqr=(u,i)∈y∪y−∑wui(yui−y
ui)2(4)
- y表示了在Y中观察到的相互作用的集合;
- y − y^- y−表示负向实例的集合;
- w u i w_{ui} wui表示训练实例(u, i)权值的超参数。
但我们指出它可能与隐式数据不符。这是因为对于隐式数据,目标值
y
u
i
y_{ui}
yui是一个二值化的1或0,表示u是否与i交互。所以赋予NCF概率解释:预测得分
y
^
u
i
\widehat{y}_{ui}
y
ui表示了用户u和物品i之间相关的可能性。定义概率函数如下所示:
p
(
y
,
y
−
∣
P
,
Q
,
Θ
f
)
=
∏
(
u
,
i
)
∈
y
y
^
u
i
∏
(
u
,
j
)
∈
y
−
(
1
−
y
^
u
j
)
(5)
p\left( y, y^-|\mathbf{P}, \mathbf{Q}, \Theta_f \right)=\prod_{(u,i)\in y}\widehat{y}_{ui}\prod_{(u,j)\in y^-}(1-\widehat{y}_{uj}) \tag{5}
p(y,y−∣P,Q,Θf)=(u,i)∈y∏y
ui(u,j)∈y−∏(1−y
uj)(5)
取概率的负对数,得到:
L
=
−
∑
(
u
,
i
)
∈
y
log
y
^
u
i
−
∑
(
u
,
j
)
∈
y
−
log
(
1
−
y
^
u
j
)
=
−
∑
(
u
,
i
)
∈
y
∪
y
−
y
u
i
log
y
^
u
i
+
(
1
−
y
u
i
)
log
(
1
−
y
^
u
i
)
(6)
\begin{aligned} L &= - \sum_{(u,i)\in y}\log \widehat{y}_{ui}-\sum_{(u,j)\in y^-}\log(1-\widehat{y}_{uj}) \\ &= - \sum_{(u,i)\in y \cup y^-}y_{ui}\log \widehat{y}_{ui}+(1-y_{ui})\log(1-\widehat{y}_{ui}) \end{aligned} \tag{6}
L=−(u,i)∈y∑logy
ui−(u,j)∈y−∑log(1−y
uj)=−(u,i)∈y∪y−∑yuilogy
ui+(1−yui)log(1−y
ui)(6)
(6)式是NCF方法最小化的目标函数,其优化可以通过使用随机梯度下降(SGD)来实现。通过对NCF的概率处理,我们将隐式反馈的推荐作为一个二分类问题来解决。对于负实例y-,在每次迭代中我们从未观察到的交互进行一致的采样并且控制采样率,即观察到的相互作用的数量。
3.4广义矩阵分解(GMF)
由于对输入层的用户(项目)ID进行one-hot编码,得到的Embedding向量可视为用户(项目)的隐向量。设用户的隐向量
p
u
\mathbf{p}_u
pu为
P
T
v
u
U
\mathbf{P}^T \mathbf{v}_u^U
PTvuU,物品隐向量
q
i
\mathbf{q}_i
qi为
Q
T
v
i
I
\mathbf{Q}^T \mathbf{v}_i^I
QTviI。定义CF第一层的映射函数为:
ϕ
1
(
p
u
,
q
i
)
=
p
u
⊙
q
i
(7)
\phi_1(\mathbf{p}_u, \mathbf{q}_i)=\mathbf{p}_u \odot \mathbf{q}_i \tag{7}
ϕ1(pu,qi)=pu⊙qi(7)
⊙
\odot
⊙表示向量的元素乘积,然后我们将向量投影到输出层:
y
^
u
i
=
a
o
u
t
(
h
T
(
p
u
⊙
q
i
)
)
(8)
\widehat{y}_{ui}=a_{out}\left( \mathbf{h}^T \left( \mathbf{p}_u \odot \mathbf{q}_i \right) \right) \tag{8}
y
ui=aout(hT(pu⊙qi))(8)
- a o u t a_{out} aout和 h h h分别表示输出层的激活函数和权值。
- 对 a o u t a_{out} aout使用恒等函数并使h成为1的向量,就可以准确地将其恢复为MF模型。
- 在本文的工作中,实现了NCF下MF的一个通用版本,将 a o u t a_{out} aout定义为sigmoid函数 ( σ ( x ) = 1 / ( 1 + e − x ) ) (\sigma(x)=1/\left( 1 + e^{-x} \right)) (σ(x)=1/(1+e−x)),并且从数据中使用log损失函数学习 h h h。
3.5 多层感知器(MLP)
在连接的向量上添加隐藏层,使用一个标准的MLP来学习用户和物品潜在特征之间的交互。NCF框架下的MLP模型定义为:
z
1
=
ϕ
(
p
u
,
q
i
)
=
[
p
u
q
i
]
,
ϕ
2
(
z
1
)
=
a
2
(
W
2
T
z
1
+
b
2
)
,
…
…
ϕ
L
(
z
L
−
1
)
=
a
L
(
W
L
T
z
L
−
1
+
b
L
)
,
y
^
u
i
=
σ
(
h
T
ϕ
L
(
z
L
−
1
)
)
,
(9)
\begin{aligned} \mathbf{z}_1 &= \phi(\mathbf{p}_u , \mathbf{q}_i)= \begin{bmatrix} \mathbf{p}_u \\ \mathbf{q}_i \end{bmatrix},\\ \phi_2(\mathbf{z}_1) &= a_2\left( \mathbf{W}_2^T \mathbf{z}_1 + \mathbf{b}_2 \right),\\ & \dots\dots\\ \phi_L(\mathbf{z}_{L-1}) &= a_L\left( \mathbf{W}_L^T \mathbf{z}_{L-1}+\mathbf{b}_L \right),\\ \widehat{y}_{ui} &= \sigma\left(\mathbf{h}^T \phi_L(\mathbf{z}_{L-1}) \right), \end{aligned} \tag{9}
z1ϕ2(z1)ϕL(zL−1)y
ui=ϕ(pu,qi)=[puqi],=a2(W2Tz1+b2),……=aL(WLTzL−1+bL),=σ(hTϕL(zL−1)),(9)
W x W_x Wx, b x b_x bx和 a x a_x ax分别表示第x层感知器的权值矩阵,偏置向量和激活函数。对于MLP层的激活函数,可以自由选择sigmoid、tanh和ReLU等函数。实验结果表明,ReLU的性能略好于tanh,而tanh的性能又明显好于sigmoid。对于网络结构的设计,通常的解决方案是采用塔状结构,底层最宽,每一层的神经元数量逐级变少。本文根据经验实现了塔式结构,将每一层的尺寸减半。
3.6 GMF与MLP的融合
允许GMF和MLP学习独立的Embedding,并通过连接它们的最后一个隐藏层来组合这两个模型。下图展示了所提出的方案。
公式如下:
ϕ
G
M
F
=
p
u
G
⊙
q
i
G
,
ϕ
M
L
P
=
a
L
(
W
L
T
(
a
L
−
1
(
…
a
2
(
W
2
T
[
p
u
M
q
i
M
]
+
b
2
)
…
)
)
+
b
L
)
,
y
^
u
i
=
σ
(
h
T
[
ϕ
G
M
F
ϕ
M
L
P
]
)
,
(10)
\begin{aligned} \phi^{GMF}&=\mathbf{p}_u^G \odot \mathbf{q}_i^G, \\ \phi^{MLP}&=a_L\left( \mathbf{W}_L^T \left( a_{L-1} \left( \dots a_2 \left( \mathbf{W}_2^T \begin{bmatrix} \mathbf{p}_u^M \\ \mathbf{q}_i^M \end{bmatrix}+ \mathbf{b}_2 \right) \dots \right) \right) +\mathbf{b}_L \right),\\ \widehat{y}_{ui}&=\sigma(\mathbf{h}^T \begin{bmatrix} \phi^{GMF} \\ \phi^{MLP}\end{bmatrix}), \end{aligned} \tag{10}
ϕGMFϕMLPy
ui=puG⊙qiG,=aL(WLT(aL−1(…a2(W2T[puMqiM]+b2)…))+bL),=σ(hT[ϕGMFϕMLP]),(10)
- p u G p_u^G puG和 p u M p_u^M puM 分别表示GMF部分和MLP部分的用户Embedding;
- q i G q_i^G qiG和 q i M q_i^M qiM分别表示GMF和MLP的物品Embedding。
我们使用ReLU作为MLP层的激活函数。该模型结合了MF的线性和DNNs的非线性,作用于用户-项目隐含结构的建模。称这个模型为“NeuMF”,是神经矩阵分解的简称,每一个模型参数都可以用标准的反向传播来计算。
3.7 预训练
首先用随机初始化训练GMF和MLP,直到收敛。然后,使用它们的模型参数作为NeuMF参数的相应部分的初始化。唯一的调整是在输出层,将两个模型的权值连接在一起:
h
←
[
α
h
G
M
F
(
1
−
α
)
h
M
L
P
]
,
(11)
\mathbf{h}\leftarrow \left[ \begin{matrix} \alpha \mathbf{h}^{GMF}\\ (1-\alpha)\mathbf{h}^{MLP} \end{matrix} \right], \tag{11}
h←[αhGMF(1−α)hMLP],(11)
- 这里 h G M F \mathbf{h}^{GMF} hGMF和 h M L P \mathbf{h}^{MLP} hMLP分别表示GMF模型和MLP模型的预训练h向量。
- α \alpha α是一个超参数确定两个预训练的模型之间的权衡。
4 改进的效果如何以及比较的对象?
对提出的NCF方法(GMF,MLP和NeuMF)与以下基准进行对比:
baseline:-ItemPop、-ItemKNN、-BPR、-eALS
NeuMF在两个数据集上(MovieLens和Pinterest)都取得了最好的性能,显著地超出了最先进的eALS和BPR方法(平均而言,相对于eALS和BPR的相对改进是分别是4.5%和4.9%)。
5 future work
NeuralCF模型也存在局限性。由于是基于协同过滤的思想进行改造的,所以NeuralCF模型并没有引入更多其他类型的特征,这在实际应用中无疑浪费了其他有价值的信息。此外,对于模型中互操作的种类并没有做进一步的探究和说明。这都需要后来者进行更深入的探索。