简介
本文是对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 从隐反馈数据中学习
令和
分别代表user和item的数量。我们可以从用户的隐反馈数据中定义用户物品交互矩阵
如下:

这里的
代表用户
对物品
是否有过交互。
如果用户和物品
发生过交互,则
,但是这并不代表用户
喜欢物品
。同理
也并不代表用户
不喜欢物品
,也许是因为该用户根本就没发现此物品,所以也谈不上喜不喜欢。
这对隐性反馈的学习提出了挑战,因为它提供了关于用户偏好的噪声信号。虽然观察到的条目至少反映了用户对物品的兴趣,但是未观察到的的条目可能只是丢失数据,并且这其中天然就缺乏负反馈数据。因为它只是记录了用户与某些物品之间的正反馈,而未记录用户与物品之间的负反馈。
1.2 矩阵分解(Matrix Factorization)
MF(Matrix Factorization)使用一个潜在特征向量将每个用户和物品之间联系起来。我们令和
分别代表用户
和物品
的潜在特征向量。MF算法使用
和
的内积来估计
:

其中
论文中举了一个例子来说明内积操作会束缚MF的表达效果,如下图。关于MF的原理和代码实现可以参见LFM(Latent factor model)隐语义模型算法原理以及代码实践。

上图中(a)代表的是user-item矩阵,(b)代表的是用户相似度在隐式空间中的分布。
论文使用Jaccard系数来计算两个用户之间的相似度,令代表用户
和
之间的相似度,可由下式计算:

其中
先关注(a)中的前三行,很容易计算出,即
和
之间的相似度要大于
和
,
和
的相似度大于
和
。则
、
、
的潜在特征向量
、
、
在隐式空间中的几何关系可以被描述成(b)所示。如果此时增加了一个
,我们可以计算得出
,这意味着
与
是最相似的,接着是
,然后是
。然而在隐式空间中,如果
与
接近的话(图中给出了两个可能的位置,虚线所示),那就意味着
更接近与
而不是
。然后根据图(a)可知,
明显与
更为相似,故这将会导致很大的排名误差(ranking loss)。
这个例子显示了由于使用简单且固定的内积操作,来在低维隐式空间中估计用户-物品之间复杂交互,而造成的可能的局限性。解决该问题的一个方法是使用很大的潜在因子,即增大隐式空间的维度,然而这样的解决方法可能会对模型的泛化能力产生不利的影响,比如造成过拟合等。
2. 神经协同过滤(NCF)
2.1 通用框架
论文提出了一个通用的NCF框架,阐述了如何使用一个强调隐反馈数据二值性的概率模型来学习NCF模型参数,并且展示了MF可以是NCF的一个特例。NCF框架图如下:
最下面是输入层,分别包含了两个特征向量和
,它们分别用来描述用户
和物品
。输入仅由一个用户向量和一个物品向量构成,它们分别是以one-hot编码的二值化稀疏向量。
输入层上面的是Embedding层,它是一个全连接层,用于将输入层的稀疏表示映射成一个稠密向量。它所获得的用户(物品)稠密向量可以看做就是MF算法中用来描述用户(物品)的潜在特征向量。接着用户和物品的embedding向量被送入多层神经网络架结构中,这一层叫做神经协同过滤层(Neural CF Layer),它用于将潜在特征向量映射成预测分数(Score)。神经协同过滤层中的每一层可以被认为是用来发掘用户-物品交互中的某些隐含结构。神经协同过滤层的输出层(Layer X)的维度决定了模型的能力。最终的输出是预测分数,我们可以通过最小化
和目标值
之间的均方误差来训练模型。
NCF预测模型如下:

其中,
,它们分别代表用户和物品的潜在因子矩阵。
代表的是交互函数
的参数。
在上图中被定义为多层神经网络,故它可有如下表示:

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

其中
尽管均方差误差可以通过假设观测值服从高斯分布来做出解释,但是它仍然不适合处理隐反馈数据。因为,对于隐反馈数据来说,目标值
我们可以把
有了以上设定,我们可以定义似然函数如下:

对似然函数取负对数得到:

这就是NCF模型需要最小化的目标函数,可以使用SGD算法来进行训练优化。通过在NCF上进行概率处理,我们把隐反馈数据的推荐问题转变成了一个二值分类问题。
2.3 广义矩阵分解(GMF)
我们令用户代表
,即用户
的潜在特征向量;令
代表
,即物品
的潜在特征向量。我们可以定义神经协同过滤层第一层的映射函数为:

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

其中
GMF模型的结构框图如下:

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

其中
MLP模型的结构框图如下:

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

关于上图的精确定义如下:

其中
由于NeuMF目标函数的非凸性,使得基于梯度的优化方法只能找到局部最优解。论文建议使用GMF和MLP的预训练模型来初始化NeuMF。首先训练随机初始化的 GMF 和 MLP 直到模型收敛。然后,我们用它们的模型参数初始化 NeuMF 相应部分的参数。唯一的调整是在输出层,在那里我们将两者用权重连接起来:

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