神经协同过滤NCF(一)之模型介绍篇

2020-11-20  本文已影响0人  HaloZhang

简介

本文是对Neural Collaborative Filtering这篇论文的一个简单概括,着重介绍一下文中提出的基于神经网络的协同过滤框架NCF,以及基于此框架的三种模型GMF、MLP、NeuMF的原理。
原文地址: https://arxiv.org/pdf/1708.05031.pdf

背景知识

由于Netflix Prize的普及,MF(Matrix Factorization)已经成为了潜在因子(latent factor)建模的默认方法。已经有大量的工作致力于增强MF的性能,例如将其与基于领域(相邻user或者item)的模型集成,与基于item内容的主题模型相结合,还有将其扩展到因式分解机(factorization machines),以实现特征的通用建模。尽管MF方法对于协同过滤有效,但是众所周知的是它的性能会被简单选择的交互函数(内积操作)阻碍。而且内积操作只是将潜在特征进行简单的线性组合,它不足以捕获用户交互数据中的复杂结构。
为此,作者提出了一种神经网络结构去对user和item之间的潜在特征进行建模,并设计了基于神经网络的协同过滤方法的通用框架NCF。

1. 准备工作

首先要明确什么是显性反馈和隐性反馈数据。

1.1 从隐反馈数据中学习

MN分别代表user和item的数量。我们可以从用户的隐反馈数据中定义用户物品交互矩阵Y \in R^{M \times N}如下:

这里的y_{ui}代表用户u对物品i是否有过交互。

如果用户u和物品i发生过交互,则y_{ui}=1,但是这并不代表用户u喜欢物品i。同理y_{ui}=0也并不代表用户u不喜欢物品i,也许是因为该用户根本就没发现此物品,所以也谈不上喜不喜欢。
这对隐性反馈的学习提出了挑战,因为它提供了关于用户偏好的噪声信号。虽然观察到的条目至少反映了用户对物品的兴趣,但是未观察到的的条目可能只是丢失数据,并且这其中天然就缺乏负反馈数据。因为它只是记录了用户与某些物品之间的正反馈,而未记录用户与物品之间的负反馈。

1.2 矩阵分解(Matrix Factorization)

MF(Matrix Factorization)使用一个潜在特征向量将每个用户和物品之间联系起来。我们令p_uq_i分别代表用户u和物品i的潜在特征向量。MF算法使用p_uq_i的内积来估计y_{ui}


其中K代表隐式空间(latent space)的维度。可以看到,MF是对用户和物品之间的双向交互进行建模,它假设潜在特征空间中的每一维都是彼此独立的,并且使用相同的权重将他们线性组合起来。正因如此,MF可以看做是潜在因素(latent factor)的线性模型。

关于MF的原理和代码实现可以参见LFM(Latent factor model)隐语义模型算法原理以及代码实践

论文中举了一个例子来说明内积操作会束缚MF的表达效果,如下图。

上图中(a)代表的是user-item矩阵,(b)代表的是用户相似度在隐式空间中的分布。

论文使用Jaccard系数来计算两个用户之间的相似度,令s_{ij}代表用户ij之间的相似度,可由下式计算:


其中R_u代表的是与用户u有过交互的物品的数量。

先关注(a)中的前三行,很容易计算出s_{23}(0.66) > s_{12}(0.5) > s_{13}(0.4),即u_2u_3之间的相似度要大于u_1u_2u_1u_2的相似度大于u_1u_3。则u_1u_2u_3的潜在特征向量p_1p_2p_3在隐式空间中的几何关系可以被描述成(b)所示。如果此时增加了一个u_4,我们可以计算得出s_{41}(0.6) > s_{43}(0.4) > s_{42}(0.2),这意味着u_4u_1是最相似的,接着是u_3,然后是u_2。然而在隐式空间中,如果p4p1接近的话(图中给出了两个可能的位置,虚线所示),那就意味着p4更接近与p2而不是p3。然后根据图(a)可知,u_4明显与u_3更为相似,故这将会导致很大的排名误差(ranking loss)。
这个例子显示了由于使用简单且固定的内积操作,来在低维隐式空间中估计用户-物品之间复杂交互,而造成的可能的局限性。解决该问题的一个方法是使用很大的潜在因子K,即增大隐式空间的维度,然而这样的解决方法可能会对模型的泛化能力产生不利的影响,比如造成过拟合等。

2. 神经协同过滤(NCF)

2.1 通用框架

论文提出了一个通用的NCF框架,阐述了如何使用一个强调隐反馈数据二值性的概率模型来学习NCF模型参数,并且展示了MF可以是NCF的一个特例。NCF框架图如下: NCF框架图

最下面是输入层,分别包含了两个特征向量v_u^Uv_i^I,它们分别用来描述用户u和物品i。输入仅由一个用户向量和一个物品向量构成,它们分别是以one-hot编码的二值化稀疏向量。
输入层上面的是Embedding层,它是一个全连接层,用于将输入层的稀疏表示映射成一个稠密向量。它所获得的用户(物品)稠密向量可以看做就是MF算法中用来描述用户(物品)的潜在特征向量。接着用户和物品的embedding向量被送入多层神经网络架结构中,这一层叫做神经协同过滤层(Neural CF Layer),它用于将潜在特征向量映射成预测分数(Score)。神经协同过滤层中的每一层可以被认为是用来发掘用户-物品交互中的某些隐含结构。神经协同过滤层的输出层(Layer X)的维度决定了模型的能力。最终的输出是预测分数\hat y_{ui},我们可以通过最小化\hat y_{ui}和目标值y_{ui}之间的均方误差来训练模型。
NCF预测模型如下:

其中P \in R^{M \times K}Q \in R^{N \times K},它们分别代表用户和物品的潜在因子矩阵。Θ_f代表的是交互函数f的参数。f在上图中被定义为多层神经网络,故它可有如下表示:


其中P^Tv^U_uQ^Tv^I_i分别代表是输入用户向量v^U_u和输入物品向量v^U_u经过Embedding层之后得到的关于用户u和物品i的潜在特征向量。\phi_x代表的是神经协同过滤层中的第x层的映射函数,\phi_{out}代表的是输出层的映射函数,一共有X个神经协同过滤层。

2.2 损失函数

为了学习模型参数,现存的逐点学习方法主要是运用均方差误差进行回归:


其中y代表交互矩阵Y中观察到的条目,即用户对物品有评分的,y^-代表负样本,它们可以是交互矩阵中没有出现的全部条目,也可以是从这些条目中采样得到的。w_{ui}是一个超参数,用来代表训练实例(u,i)的权重。
尽管均方差误差可以通过假设观测值服从高斯分布来做出解释,但是它仍然不适合处理隐反馈数据。因为,对于隐反馈数据来说,目标值y_{ui}是二进制0或者1,代表u是否与i有交互。因此,针对隐反馈数据的二值性这一属性,论文提出了从概率的角度来学习NCF。
我们可以把y_{ui}当做一个标签,1代表物品i与用户u有关,0代表无关。预测目标\hat y_{ui}可以认为是代表这物品i有多大可能性与用户u有关。为了赋予NCF这样一个概率解释,我们需要限制y_{ui}的输出在[0,1]之间,为了达到这个目的,我们可以使用sigmoid函数作为输出层\phi_{out}的激活函数。
有了以上设定,我们可以定义似然函数如下:
对似然函数取负对数得到:
这就是NCF模型需要最小化的目标函数,可以使用SGD算法来进行训练优化。通过在NCF上进行概率处理,我们把隐反馈数据的推荐问题转变成了一个二值分类问题。

2.3 广义矩阵分解(GMF)

我们令用户p_u代表P^Tv^U_u,即用户u的潜在特征向量;令q_i代表Q^Tv^I_i,即物品i的潜在特征向量。我们可以定义神经协同过滤层第一层的映射函数为:


其中⊙代表的是向量的逐元素相乘。然后将此向量映射到输出层:

其中a_{out}代表的是激活函数,h代表的是输出层的权重。如果我们把a_{out}看成是恒等函数,令h是全为1的单位向量,那么这就变成了MF模型。
GMF模型的结构框图如下: GMF模型

2.4 多层感知器(MLP)

NCF框架用两条路线来对用户和物品进行建模,因而很自然地想到要将他们聚合起来,这种技术在多模态深度学习中被广泛采用。简单的结合是不足以说明用户和物品之间的潜在特征。为了解决这个问题,我们需要向量连接的基础上增加隐藏层,可以使用标准的MLP来学习用户和物品潜在特征之间的相互作用。在这个场景下,我们赋予了模型更高水平的灵活性和非线性。NCF框架下的MLP模型可以被精确定义为:


其中W_xb_xa_x代表第x层感知器的权重矩阵,偏置矩阵以及激活函数。对于感知器层的激活函数,我们可以在Sigmoid、tanh以及ReLu中选择,实验证明,ReLU激活函数是一个较好的选择,因为它更具有生物合理性,并且被证明不会导致过饱和。
MLP模型的结构框图如下: MLP模型结构

2.5 NeuMF

到目前为止,我们开发出了NCF的两个实例。GMF应用了线性内核来模拟潜在的特征交互;MLP使用了非线性内核从数据中学习潜在特征,那么自然而然地想到,我们可以将这两个模型融合在NCF框架下。
为了使得融合模型具有更大的灵活性,我们允许GMF和MLP学习独立的Embedding,并结合两种模型的最后的输出。NeuMF的结构图如下:

NeuMF框架图
关于上图的精确定义如下:
其中p_u^Gp_u^M分别代表GMF和MLP模型的用户embeding向量;同理,q_i^Gq_i^M分别代表GMF和MLP模型的物品embeding向量。正如上面讨论的,这个模型结合了GMF的线性度和MLP的非线性度来对用户-物品之间的潜在结构进行建模。
由于NeuMF目标函数的非凸性,使得基于梯度的优化方法只能找到局部最优解。论文建议使用GMF和MLP的预训练模型来初始化NeuMF。首先训练随机初始化的 GMF 和 MLP 直到模型收敛。然后,我们用它们的模型参数初始化 NeuMF 相应部分的参数。唯一的调整是在输出层,在那里我们将两者用权重连接起来:

这里的h^{GMF}h^{MLP}分别代表GMF和MLP模型预训练的h向量,\alpha是一个超参数,用来权衡两个预训练模型的权重。

3. 评测指标

为了评价项目推荐的性能,论文采用了leave-one-out方法评估,即:对于每个用户,将其最近的一次交互作为测试集(数据集一般都有时间戳),并利用余下的交互作为训练集。由于在评估过程中为每个用户排列所有item花费的时间太多,所以遵循一般的策略,随机抽取100个不与用户进行交互的item,将测试item排列在这100个item中。
排名列表的性能由命中率(HR)和归一化折扣累积增益(NDCG)来衡量。同时,论文将这两个指标的排名列表截断为10。如此一来,HR直观地衡量测试项目是否存在于前10名列表中,而NDCG通过将较高分数指定为顶级排名来计算命中的位置。

4. 代码实战(基于PyTorch)

见下一章。

参考

上一篇下一篇

猜你喜欢

热点阅读