Neural Collaborative Filtering(2017年)

一.论文总结

在2017年左右,深度学习在计算机视觉、自然语言处理、语音识别等领域取得巨大成功。但在推荐系统这方面的研究比较少。作者在这样的背景下提出了神经协同过滤用以提高推荐性能,解决了基于隐式反馈中的关键问题,即协同过滤。

协同过滤是基于用户过去的交互得到用户的偏好,尽管MF技术在协同过滤是有效的,但是通过内积将用户和项目的特征线性组合在一起,没办法捕捉复杂的交互数据之间的关系,且造成排名损失。

作者提出了NCF(神经协同过滤),有输入层、嵌入层、神经协同过滤层和输出层构成的。NCF的两个实例化分别是广义矩阵分解(GMF)和多层感知机(MLP)。其中GMF是通过线性核建模用户和项目之间的交互,MLP是通过非线性核从数据中学习交互函数。两者的融合是在最后的隐藏层进行拼接。

最后在两个数据集上进行了实验,证明了该方法的有效性。

二.论文内容

摘要
近些年,深度神经网络在语音识别、计算机视觉和自然语言处理取得了巨大的成功。然而,深度神经网络在推荐系统中的应用却受到了相对较少的关注。在这项工作中,我们致力于开发一种基于神经网络的技术来解决在隐式反馈的基础上的推荐协同过滤的关键问题。

尽管最近已经有工作将深度学习应用于推荐,但是他们主要用它作为建模辅助信息,如项目的文本描述和音乐的声学特征。至于协同过滤中的关键因素——用户和项目特征之间的交互,他们依然采用矩阵因式分解并且在用户和项目的潜在特征上使用内积。

用能够从数据中学习抽象函数的神经结构来取代内积,我们提出了通用框架,即基于协同过滤的神经网络,简称NCF。NCF是通用的,能够在其框架下表达和推广矩阵分解。为了增强NCF模型的非线性,我们提出利用一个多层感知机来学习用户-项目的交互函数。在两个真实世界的数据上的大量实验表明我们提出的NCF框架与最先进的方法相比有显著的提高,经验证据表明使用更深层的神经网络能提供更好的推荐性能。

关键词: 协同过滤 神经网络 深度学习 矩阵分解 隐式反馈

1.简介(INTRODUCTION)

在信息爆炸的时代,推荐系统在缓解信息过载方面起着关键的作用,已经应用于大量的线上服务,如电子商务、线上新闻和社交媒体网站等。个性推荐系统的关键是根据用户过去的交互(例如评级和点击)来建模用户对项目的偏好,该方法称为协同过滤。 在各种协同过滤技术中,矩阵分解(M F)是最流行的一种,它将用户和项目投射到一个共享的潜在空间中, 使用潜在特征的向量来表示用户或项目。 此后,用户对某一项的交互被建模为其潜在向量的内积。

在Netflix奖的推广下,MF已经成为了基于潜在因素推荐模型的事实方法。 许多研究工作都致力于增强 MF,例如将其与基于邻居的模型集成, 将其与项目内容的主题模型相结合,并将其扩展到分解机器用于特征的通用建模。 尽管 MF在协同过滤方面是有效的,但众所周知,它的性能会被交互函数的简单选择——内积而阻碍。 例如,对于显式反馈的评级预测任务,众所周知,通过将用户和项目偏差项纳入交互函数,可以提高MF模型的性能。 虽然这似乎只是内积操作的一个微不足道的调整,但它却在设计一个更好更专用的交互函数,以用于建模用户与项目之间潜在特征的交互上起到了积极作用。内积只是简单地线性组合潜在特征的增加,可能不足以捕捉用户交互数据的复杂结构。

本文探讨了利用深层神经网络从数据中学习交互函数,而不是以前许多工作所做的人工设定。 神经网络已被证明能够逼近任何连续的函数 ,最近发现深度神经网络(DNNs)在从计算机视觉、语音识别到文本处理的几个领域都是有效的。 然而,与大量研究MF的文献相比,使用 DNN 进行推荐方面的工作相对较少。虽然最近的一些进展将 DNNs 应用于推荐任务并显示出较好的结果,但它们大多使用 DNNs 来建模辅助信息,例如项目的文本描述、音乐的音频特征和图像的视觉内容。 关于关键的协同过滤效果的建模, 他们仍然使用 MF,使用内积结合用户和项目潜在的特征。

本工作针对于协同过滤提出了神经网络建模方法来解决上述研究问题。我 们专注于隐式反馈,它通过观看视频、购买产品和点击项目等行为间接反映用户的偏好。 与显式反馈(即评级和评论)相比,隐式反馈可以自动跟踪, 因此更容易为内容提供者收集。 然而,利用隐式反馈更具挑战性,因为没有观察到用户的满意度,并且存在负面反馈的自然稀缺性。 本文探讨了如何利用 DNN 对声隐式反馈信号进行建模的中心主题。

这项工作的主要贡献如下。

  1. 提出了一种对用户和项目的潜在特征进行建模的神经网络结构,并设计了一个基于神经网络用以协同过滤的通用框架 NCF。
  2. 我们证明 MF 可以被解释为 NCF 的特殊化,并利用多层感知器赋予 NCF 建模高水平的非线性。
  3. 我们在两个真实世界的数据集上进行了广泛的实验,以证明我们的 NCF 方法的有效性和深度学习对于协同过滤的承诺。

2.准备工作(Preliminaries)

我们首先定义了问题并讨论了现有的隐式反馈协同过滤的解决方案。 然后,我们简要地回顾了广泛使用的 MF 模型,强调了它由于使用内积而造成的限制。

2.1 从隐式数据中学习
M、N分别表示用户和物品的数目,从用户的隐式反馈中定义用户-物品交互矩阵为Y,则有:

在这里插入图片描述

当yui值为1时表明用户u和物品i之间有交互,但并意味着u实际上就喜欢i。相似的,当其值为0时并不意味u不喜欢i,可能是用户没有注意过这个物品。这给学习隐式数据带来了挑战,因为它只提供关于用户偏好的噪声信号。虽然观察到的条目至少反应了用户对物品有兴趣,但没有观察到的条目可能仅仅是缺少数据,而且在负反馈上有自然缺失性。

隐式反馈的推荐问题被转化为矩阵Y中未观察的项目的评分问题,该问题用来给物品排序。
基于模型的方法假设数据可以通过底层模型生成。一般地,它们可以抽象成y^ui =f(u,i| θ \theta θ),其中y^ui表示交互yui的预测分数, θ \theta θ表示参数,f表示参数到预测分数的映射函数。

为评估参数 θ \theta θ,现存在的方法通常使用机器学习范式来优化目标函数。文献中主要使用的是两种类型的目标函数——pointwise loss和pairwise loss。作为大量显示反馈工作的自然延伸,在pointwise 学习的大量方法通常遵循最小化预测值与真实值之间的平方损失这样的回归框架。为解决负采样数据的缺失,他们要么将所有未观察到的条目作为负反馈要么从未观察到的条目中进行采样。对于pairwise loss学习,其思想是观察到的条目应该比没有观察到的条目排名靠前。因此,pairwise loss不是最小化真实值和预测值之间的损失,而是最大化观测条目和未观测条目之间的差距。

向前一步,我们的NCF框架通过使用神经网络评估预测值y^ui参数化交互函数f。因此,它同时支持pointwise loss 和pairwise loss。

2.2矩阵分解

MF将每个用户和项目用潜在特征的真实值向量联系起来,用pu和qi分别表示用户u和项目i的潜在向量。MF将pu和qi内积值作为交互yui的评估。

在这里插入图片描述

K是潜在空间的维度。正如我们所看到的,MF对用户和项目潜在因素的双向交互进行建模,假设潜在空间的每个维度相互独立并用相同的权重进行线性组合。因此,MF可被认为是潜在因素的线性方法。

图1表明了内积函数如何限制MF的表现。在很好的理解例子之前有两个设置需要先称述清楚。首先,因为MF将用户和项目映射到相同的潜在空间,两个用户的相似度也可以通过内积测量得到,或者等价的,可以得到它们潜在向量之间的角度的余弦值。其次,不失一般性,我们使用Jaccard系数作为MF需要恢复的两个用户之间的真实相似度。


在这里插入图片描述

看图1a的前三行,很容易得到s23(0.66)>s12(0.5)>s13(0.4).因此,p1、p2、p3在潜在空间的几何关系应该如图1b所示。现在考虑一个新的用户u4,它的输入见图1a中的第四行。我们可以得到s41(0.6)>s43(0.4)>s42(0.2),意味着用户u4最接近u1,然后是u3,最后是u2.然而,如果MF模型将p4放置与p1最接近,就会导致p4和p2的距离要小于和p3的距离,这样会造成较大的排序损失。

上面的例子表明了MF使用简单而固定的内积在低维潜在空间评估复杂的用户项目交互所造成的可能限制。我们注意到一个解决办法是使用较大的潜在因素K值。然而,这可能会造成过拟合。在这份工作中,我们通过使用DNNs从数据中学习交互函数来解决这个问题。

3.神经协同过滤

我们首先展示了通用NCF框架,阐述了如何使用强调隐式数据的二进制性质的概率模型来学习 NCF。然后,我们证明了 MF 可以在NCF下表示和推广。 为了探索用于协同过滤的DNN,我们然后提出了 NCF 的实例化,使用多层感知器(MLP)来学习用户项交互功能。 最后,我们提出了一种新的神经矩阵分解模型,它将 MF 和 MLP 组合在 NCF 框架下,将 MF 的线性优势和 MLP 的非线性优势统一起来,用于模拟用户项潜在结构。

3.1通用框架
为了对协同过滤进行充分的神经处理,我们采用多层表示来建模用户和项目之间的交互yui,如图2所示。每一层的输出层作为下一层的输入层。最开始的输入层是由分别描述用户和项目的两个特征向量组成的。因为这份工作侧重于存协同过滤,所以我们就仅使用了而用户和项目的id作为输入特征,用独热编码将其转为二进制稀疏向量。有了这样一个输入的通用特征表示,我们的方法可以通过使用内容特征来表示用户和项目,从而轻松地解决冷启动问题。


在这里插入图片描述

输入层上面试嵌套层,它是全连接层,将稀疏表示投影到密集向量。得到的用户(项目)嵌入可以看作是潜在因素模型背景下用户(项目)的潜在向量。然后,用户嵌入和项目嵌入被馈送到多层神经架构,我们称之为神经协同过滤层,以将潜在向量映射到预测分数。神经CF层的每一层都可以定制,以发现用户-项目交互的某些潜在结构。最后一个隐藏层的维度决定了模型的性能。最终输出层是预测分数yui,通过最小化yui与其目标值yui之间的pointwise loss来执行训练。我们注意到,另一种训练模型的方法是通过执行成对学习,例如使用贝叶斯个性化排名[27]和基于边缘的损失[33]。由于本文的重点是神经网络建模部分,我们将NCF的成对学习作为未来的工作。

现在将NCF的预测模型表示为:

在这里插入图片描述

P、Q分别表示用户和项目的潜在因素矩阵,θf表示交互函数f的模型参数。因为函数f被定义为多层神经网络,所以它可以被公式化为:


在这里插入图片描述

其中φout和φx分别表示输出层和第X个神经协同过滤层的映射函数,总共有X个神经协同过滤层

3.1.1 学习NCF
为了学习模型参数,现有的逐点方法[14,39]主要执行带平方损失的回归:


在这里插入图片描述

y表示Y中观察到有交互的集合,y-表示负例集合,w是超参,表示训练样例(u,i)的权重。虽然平方损失可以通过假设观测值由高斯分布产生来解释[29],但我们指出它可能与隐式数据不太吻合。这是因为对于隐式数据,目标值是二进制的1或0,表示u是否与i相互作用。在下文中,我们提出了一种学习逐点NCF的概率方法,该方法特别关注隐式数据的二进制属性。

考虑到隐含反馈的单类性质,我们可以将yui的值视为一个标签——1表示项i与u相关,否则为0。预测分数表示u和i的关联性。为了赋予NCF这样的概率解释,我们需要将输出约束在[0,1]的范围内,这可以通过使用概率函数(例如,逻辑或概率单位函数)作为输出层φout的激活函数来容易地实现。过以上设置,我们将似然(概率)函数定义为:


在这里插入图片描述

对负对数,有:


在这里插入图片描述

这是NCF方法要最小化的目标函数,其优化可以通过执行随机梯度下降(SGD)来完成。细心的读者可能已经意识到,这与二进制交叉熵损失(也称为对数损失)是一样的。通过对NCF采用概率处理,我们将隐式反馈推荐作为二元分类问题来处理。由于分类感知对数损失在推荐文献中很少被研究,我们在这项工作中对其进行了探索,并在第4.3节中从经验上展示了其有效性。对于负实例,我们在每次迭代中从未观察到的相互作用中对它们进行统一采样,并控制采样比,即观察到的有相互作用的数量。虽然非均匀采样策略(例如,项目受欢迎程度偏向[14,12])可能会进一步提高性能,但我们将探索作为未来的工作。

3.2 广义矩阵分解
我们现在展示如何把MF解释为NCF框架的一个特例。MF是最受欢迎的推荐模型,并在文献中进行了广泛的研究。

由于输入层的用户(项)ID的独热编码,得到的嵌入向量可以看作是用户(项)的潜在向量。假设用户潜在向量pu为PTvU,项目潜在向量qi为QTvI。我们将第一个神经CF层的映射函数定义为:


在这里插入图片描述

表示向量的元素乘积(点乘)。然后,我们将向量投影到输出层:


在这里插入图片描述

其中a和h分别表示输出层的激活函数和边缘权重。直观地说,如果我们使用一个等式函数,并强制h为1的一致向量,我们就可以精确地恢复MF模型。

在NCF框架下,MF可以很容易地推广和扩展。例如,如果我们允许在没有统一约束的情况下从数据中学习h,这将导致MF的一个变体,该变体允许潜在维度的不同重要性。如果我们用一个非线性函数来表示一个输出,它将把MF推广到一个非线性环境,这个环境可能比线性MF模型更有表现力。在这项工作中,我们在NCF下实现了一个通用版本的MF,它使用sigmoid函数σ(x)= 1/(1+e-x)作为输出层的激活函数,从具有对数损失的数据中学习h(第3.1.1节)。我们称之为GMF,广义矩阵分解的简称。

3.3 多层感知器(MLP)
由于NCF采用两个路径对用户和物品进行建模,因此通过将这两种途径串联起来来组合它们的特征是很直观的。这种设计在多模态深度学习工作中已被广泛采用[47,34]。然而,简单的矢量连接不能说明用户和项目潜在特征之间的任何交互,这不足以模拟协同过滤效果。为了解决这个问题,我们建议在连接的向量上添加隐藏层,使用标准MLP学习用户和项目潜在特征之间的交互。从这个意义上说,我们可以赋予模型很大的灵活性和非线性来学习pu和qi之间的相互作用,而不是像GMF那样只使用一个固定的元素积。更准确地说,我们的NCF框架下的MLP模式被定义为:


在这里插入图片描述

其中Wx、bx和ax分别表示第x层感知器的权重矩阵、偏差向量和激活函数。对于MLP层的激活函数,可以自由选择sigmoid、双曲正切(tanh)和整流器(ReLU)等。我们想分析一下每个函数:sigmoid函数将每个神经元限制在(0,1)内,这可能会限制模型的性能;众所周知,它会受到饱和的影响,当输出接近0或1时,神经元会停止学习。2)尽管tanh是一个更好的选择,并已被广泛采用[6,44],但它只能在一定程度上缓解sigmoid的问题,因为它可以被视为sigmoid的重新缩放版本。3)因此,我们选择ReLU,它在生物学上更合理,并且被证明是不饱和的[9];此外,它鼓励稀疏激活,非常适合稀疏数据,并使模型不太可能过度拟合。我们的实证结果表明,ReLU的性能略好于tanh,后者又明显优于sigmoid。对于网络结构的设计,一个常见的解决方案是遵循塔式模式,其中底层最宽,每个连续层的神经元数量较少(如图2所示)。前提是通过对更高层使用少量的隐藏单元,他们可以学习到更多的数据抽象特征[10]。我们根据经验实现了塔式结构,将每一个连续的更高层的层大小减半。

3.4 GMF和MLP的融合
到目前为止,我们已经开发了NCF的两个实例——GMF使用线性核来建模潜在的特征交互,MLP使用非线性核来从数据中学习交互函数。于是问题来了:我们如何在NCF框架下融合GMF和MLP,这样他们就可以相互加强,更好地模拟复杂的用户-项目交互?

一个简单的解决方案是让GMF和MLP共享同一个嵌入层,然后组合他们交互功能的输出。这种方法与众所周知的神经张量网络(NTN) [33]具有相似的精神。具体而言,将GMF与单层MLP相结合的模型可以表述为:


在这里插入图片描述

然而,GMF和MLP的共享嵌入可能会限制融合模型的性能。例如,这意味着GMF和MLP必须使用相同大小的嵌入;对于两个模型的最佳嵌入大小变化很大的数据集,这种解决方案可能无法获得最佳的集成。为了给融合的模型提供更多的灵活性,我们允许GMF和MLP学习单独的嵌入,并通过连接它们最后的隐藏层来组合这两个模型。图3说明了我们的建议,其公式如下:


在这里插入图片描述
在这里插入图片描述

其中pG和pM分别表示GMF和MLP部分的用户嵌入;以及类似的qG和qM分别表示GMF和MLP部分的项目嵌入。如前所述,我们使用ReLU作为MLP层的激活函数。该模型结合了MF的线性和深度神经网络的非线性来模拟用户项目的潜在结构。我们称这个模型为“神经矩阵分解”。.每个模型参数都可以用标准反向传播来计算,由于空间限制,这里省略了标准反向传播。

3.4.1 预训练
由于神经网络目标函数的非凸性,基于梯度的优化方法只能找到局部最优解。据报道,初始化对深度学习模型的收敛和性能起着重要作用[7]。因为NeuMF是GMF和MLP的集合,我们建议使用GMF和MLP的预训练模型来初始化NeuMF。

我们首先用随机初始化训练GMF和MLP,直到收敛。然后我们使用它们的模型参数作为NeuMF参数相应部分的初始化。唯一的调整是在输出层,在这里我们用:


在这里插入图片描述

其中h^GM F^and hMLP分别表示预处理的GMF和MLP模型的h向量;α是一个超参数,决定了两个预训练模型之间的权衡。

为了从头开始训练GMF和MLP,我们采用了自适应矩估计(Adam) [20],它通过对频繁参数执行较小的更新和对不频繁参数执行较大的更新来调整每个参数的学习速率。与普通的SGD相比,Adam方法对两种模型都产生了更快的收敛,并减轻了调整学习速率的痛苦。在将预先训练好的参数输入NeuMF后,我们用普通的SGD而不是Adam来优化它。这是因为Adam需要保存动量信息,以便正确更新参数。由于我们只使用预先训练好的模型参数来初始化神经网络模型,而放弃保存动量信息,因此用基于动量的方法进一步优化神经网络模型是不合适的。

4.实验

在这一部分,我们进行实验,旨在回答以下研究问题:
RQ1我们提出的NCF方法是否优于最先进的隐式协同过滤方法?
RQ2我们提出的优化框架(负采样的日志丢失)如何用于推荐任务?
RQ3更深层的隐藏单元有助于从用户-项目交互数据中学习吗?
在接下来的内容中,我们首先介绍实验设置,然后回答上述三个研究问题。

4.1实验设置
数据集。我们实验了两个可公开访问的数据集:MovieLens和Pinterest。表1总结了这两个数据集的特征。


在这里插入图片描述

1.MovieLens。该电影分级数据集已被广泛用于评估协同过滤算法。我们使用了包含一百万个等级的版本,其中每个用户至少有20个等级。虽然这是一个显性反馈数据,但我们有意选择它来研究从显性反馈的隐性信号[21]中学习的表现。为此,我们将其转换为隐式数据,其中每个条目都标记为0或1,表示用户是否对该项目进行了评级。
2.Pinterest。该隐式反馈数据由[8]构建,用于评估基于内容的图像推荐。原始数据非常大,但非常稀疏。例如,超过20%的用户只有一个pin,这使得评估协同过滤算法变得困难。因此,我们以与电影数据相同的方式过滤数据集,只保留至少有20个交互(个人识别码)的用户。这导致数据的子集包含55,187个用户和1,500,809个交互。每次交互都表示用户是否已经将图像钉在了自己的板上。

评估协议
为了评估项目推荐的性能,我们采用了文献[1,14,27]中广泛使用的留一法。对于每个用户,我们将她的最新交互作为测试集,并利用剩余的数据进行训练。由于在评估过程中对每个用户的所有项目进行排名过于耗时,我们遵循了常见的策略[6,21],即随机抽取100个与用户没有交互的项目,在100个项目中对测试项目进行排名。排名列表的表现由命中率(HR)和归一化贴现累计收益(NDCG)来判断[11]。在没有特别提及的情况下,我们将这两个指标的排名都缩短到了第10位。因此,HR直观地测量测试项目是否出现在前10名列表中,而NDCG通过给排名靠前的点击分配较高的分数来说明点击的位置。我们计算了每个测试用户的两个指标,并报告了平均分数。


在这里插入图片描述

基本方法(Baseline)
我们将我们提出的NCF方法(GMF、MLP和NeuMF)与以下方法进行了比较:
ItemPop。根据交互次数来判断项目的受欢迎程度。这是一个非个性化的方法来衡量推荐性能[27]。
ItemKNN [31]。这是标准的基于项目的协同过滤方法。我们遵循[19]的设置,使其适用于隐式数据。
BPR [27]。该方法优化了等式2的具有成对排序损失的MF模型,该模型是为从隐式反馈中学习而定制的。这是一个极具竞争力的项目推荐基准。我们使用固定的学习率,改变它并报告最佳表现。
eALS [14]。这是一种最先进的项目推荐方法。它优化了等式5的平方损失,将所有未观察到的交互视为负实例,并根据项目流行度对它们进行非均匀加权。由于eALS显示出优于WMF [19]的均匀加权法的性能,我们不再报告WMF的性能。

由于我们提出的方法旨在建模用户和项目之间的关系,我们主要比较用户-项目模型。我们忽略了与物品-物品模型的比较,如SLIM [25]和CDAE [44],因为性能差异可能是由个性化的用户模型(因为它们是物品-物品模型)引起的。

参数设置
我们基于Keras6实现了我们提出的方法。为了确定NCF方法的超参数,我们随机抽样每个用户的一个交互作为验证数据,并在其上调整超参数。所有NCF模型都是通过优化等式7的对数损失来学习的,在等式7中,我们对每个正实例采样四个负实例。对于从头开始训练的NCF模型,我们用高斯分布随机初始化模型参数(均值为0,标准差为0.01),用小批量Adam优化模型[20]。我们测试的批量为[128,256,512,1024],学习率为[0.0001,0.0005,0.001,0.005]。由于NCF的最后一个隐藏层决定了模型的能力,我们称之为预测因子,并评估了[8,16,32,64]的因子。值得注意的是,大的因素可能会导致过拟合并降低性能。没有特别提到,我们为MLP使用了三个隐藏层;例如,如果预测因子的大小是8,那么神经CF层的架构是32 → 16 → 8,并且嵌入大小是16。对于有预训练的NeuMF,α被设置为0.5,允许预训练的GMF和MLP对NeuMF的初始化做出同等的贡献。

4.2 性能比较

图4显示了HR@10和NDCG@10在预测因子数量方面的表现。对于MF方法BPR和eALS,预测因子的个数等于潜在因子的个数。对于ItemKNN,我们测试了不同的邻居大小,并报告了最佳性能。由于ItemPop的性能较弱,图4中省略了它,以便更好地突出个性化方法的性能差异。

首先,我们可以看到NeuMF在这两个数据集上实现了最佳性能,显著优于最先进的方法eALS和BPR(平均而言,相对于eALS和BPR的改进分别为4.5%和4.9%)。对Pinterest而言,即使预测因子很小,为8,NeuMF的表现也大大优于预测因子很大,为64的eALS和BPR。这表明NeuMF通过融合线性MF和非线性MLP模型具有很高的表达能力。其次,另外两种NCF方法——GMF和MLP——也表现出相当强劲的表现。其中,MLP的表现略逊于GMF。请注意,MLP可以通过添加更多的隐藏层来进一步改进(参见第4.4节),这里我们只显示三层的性能。对于小的预测因子,GMF在两个数据集上的表现都优于eALS;尽管GMF在很大程度上存在过度适应的问题,但它的最佳表现优于(或相当于)eALS。最后,GMF展示了相对于BPR的持续改进,承认了分类感知对数损失对于推荐任务的有效性,因为GMF和业务流程重组学习相同的MF模型,但目标函数不同。

在这里插入图片描述

图5显示了排名位置从1到10的前K个推荐列表的性能。为了使图更清晰,我们显示了NeuMF的性能,而不是所有三种NCF方法。可以看出,NeuMF在不同位置显示出与其他方法相比的一致改善,我们进一步进行了单样本配对t检验,验证了所有改善在统计学上具有显著性(p < 0.01)。就基线方法而言,就NDCG而言,eALS在MovieLens上的表现优于BPR,相对改善约为5.1%,而在Pinterest上的表现低于BPR。基于邻居的ItemKNN的性能不如基于模型的方法。而ItemPop表现最差,说明有必要对用户的个性化偏好进行建模,而不仅仅是向用户推荐热门项目。

在这里插入图片描述

4.2.1 预训练的效用

为了证明NerMF预训练的效用,我们比较了神经营养因子两个版本的性能——有无预训练。对于没有预处理的NeuMF,我们使用Adam通过随机初始化来学习它。如表2所示,在大多数情况下,带有预处理的NeuMF实现了更好的性能;仅对于预测因子为8的电影,预处理方法的性能稍差。NeuMF与预培训的相对改进分别为2.2%和1.1%。这一结果证明了我们的预训练方法在初始化NerMF的有效性。


在这里插入图片描述

4.3负采样的对数损失(RQ2)

为了处理隐式反馈的单类性质,我们将推荐作为二元分类任务。通过将NCF看作一个概率模型,我们用对数损失对其进行了优化。图6显示了训练损失(所有实例的平均值)和NCF方法在移动设备上每次迭代的推荐性能。Pinterest上的结果显示了相同的趋势,因此由于空间限制,它们被忽略。首先,我们可以看到,随着迭代次数的增加,NCF模型的训练损失逐渐减小,推荐性能得到提高。最有效的更新发生在前10次迭代中,更多的迭代可能会过度拟合一个模型(例如,虽然NeuMF的训练损失在10次迭代后不断减少,但其推荐性能实际上降低了)。第二,在三种NCF方法中,NeuMF的训练损失最低,其次是MLP,然后是GMF。推荐性能也呈现NeuMF> MLP > GMF的趋势。上述发现为优化对数损失以从隐含数据中学习的合理性和有效性提供了经验证据。


在这里插入图片描述

逐点对数损失优于成对目标函数[27,33]的一个优点是负实例的灵活采样比。虽然成对目标函数只能将一个采样的负实例与一个正实例配对,但我们可以灵活地控制逐点损失的采样率。为了说明负抽样对NCF方法的影响,我们在图7中显示了NCF方法在不同负抽样率下的性能。可以清楚地看到,每个正实例只有一个负样本不足以实现最佳性能,对更多负实例进行采样是有益的。将GMF与BPR相比较,我们可以看到GMF在1倍抽样率下的表现与BPR相当,而GMF在更大的抽样率下显著优于BPR。这显示了逐点对数损失相对于成对BPR损失的优势。对于这两个数据集,最佳采样比率约为3比6。NCF方法的性能开始下降。它揭示了过于激进地设置采样率可能会对性能产生不利影响。

在这里插入图片描述

4.4 深度学习有用么?

由于用神经网络学习用户-项目交互功能的工作很少,所以很想知道使用深层网络结构是否有利于推荐任务。为此,我们进一步研究了MLP与不同数量的隐藏层。结果总结在表3和表4中。MLP-3表示具有三个隐藏层(除嵌入层之外)的MLP方法,以及其他类似的符号。正如我们所看到的,即使对于具有相同能力的模型,堆叠更多的层也有利于性能。这一结果非常令人鼓舞,表明了使用深度模型进行协作推荐的有效性。我们将这种改善归因于通过堆叠更多非线性层带来的高度非线性。为了验证这一点,我们进一步尝试堆叠线性层,使用身份函数作为激活函数。性能比使用ReLU单元差很多。

对于没有隐藏层(即嵌入层直接投影到预测上)的MLP-0来说,性能非常弱,并不比非个性化的ItemPop好。这验证了我们在第3.3节中的论点,即简单地连接用户和项目潜在向量不足以模拟它们的特征交互,因此有必要用隐藏层对其进行转换。


在这里插入图片描述

5.相关工作

虽然早期关于推荐的文献主要集中于明确的反馈[30,31],近期注意力逐渐转向隐式反馈。隐含反馈的协同过滤任务通常被表述为一个项目推荐问题,其目的是向用户推荐一个简短的项目列表。与已被显性反馈研究广泛解决的评分预测相反,解决项目推荐问题更实际,但更具挑战性[1,11]。一个关键的见解是对缺失的数据建模,这些数据总是被显性反馈的工作所忽略[21,48]。为了利用隐式反馈为项目推荐定制潜在因素模型,早期的工作[19,27]应用了统一的权重,其中提出了两种策略——要么将所有缺失数据视为负实例[19],要么从缺失数据中采样负实例[27]。最近,何等人[14]和梁等人[23]提出了用于加权缺失数据的专用模型,达到了最好性能。下面,我们讨论使用神经网络的推荐工作。

Salakhutdinov等人的早期开创性工作[30]提出了一个两层限制玻尔兹曼机器(RBMs)来模拟用户对项目的明确评级。这项工作后来被扩展到模拟评级的有序性质[36]。最近,自动编码器已经成为构建推荐系统的流行选择[32,22,35]。基于用户的自动评估[32]的思想是学习隐藏的结构,这些结构可以根据用户的历史评分作为输入来重建用户的评分。就用户个性化而言,这种方法与项目-项目模型[31,25]具有相似的精神,该模型将用户表示为她的评级项目。为了避免自动编码器学习一个恒等式函数和不能推广到看不见的数据,去噪自动编码器(DAEs)已被应用于学习故意损坏的输入[22,35]。最近,郑等人[48]提出了一种针对慢性疲劳的神经自回归方法。虽然以前的研究已经支持了神经网络用于解决慢性疲劳的有效性,但大多数研究都集中在明确的评级上,并且只对观察到的数据进行建模。因此,他们很容易无法从只包含正面信息的隐性数据中了解用户的偏好。

虽然最近的一些工作[6,37,38,43,45]已经探索了基于隐式反馈的推荐深度学习模型,但是它们主要使用DNNs来建模辅助信息,例如项目的文本描述[38],音乐的声学特征[37,43],用户的跨域行为[6],以及知识库中的丰富信息[45]。DNNs学习的特征然后与CF的MF集成。与我们的工作最相关的工作是[44],它为CF提供了一个具有隐式反馈的协同去噪自动编码器(CDAE)。与基于DAE的CF [35]相比,CDAE还在自动编码器的输入端插入了一个用户节点,用于重建用户的评级。如作者所示,当应用恒等式函数激活CDAE的隐藏层时,CDAE等价于SVD++模型[21]。这意味着,尽管CDAE是CF的神经建模方法,但它仍然应用线性核(即内积)来建模用户-项目交互。这可以部分解释为什么对CDAE使用深层不会提高性能(参见[44]第6节)。与CDAE不同,我们的NCF采用双路径架构,用多层前馈神经网络模拟用户-项目交互。这使得NCF能够从数据中学习一个任意的函数,比固定的内积函数更强大、更有表现力。

沿着类似的路线,学习两个实体的关系已经在知识图的文献[2,33]中被深入研究。已经设计了许多相关的机器学习方法[24]。与我们这份工作最相近的是NTN,使用神经网络来学习两个实体的相互作用,并且表现出很强的性能。在这里,我们关注CF的一个不同的问题设置。虽然把MF和MLP结合起来的NeuMF的想法部分是受NTN的启发,但我们的NeuMF比NTN更灵活和通用,允许MF和MLP学习不同的嵌入集。最近,谷歌公布了他们对应用推荐的深度和广度学习方法[4]。深度组件类似地在特征嵌入上使用MLP,据报道该特征嵌入具有很强的泛化能力。虽然他们的工作重点是整合用户和项目的各种功能,但我们的目标是探索纯协作过滤系统的域名系统。我们表明,dnn是一个很有前途的建模用户-项目交互的选择,据我们所知,以前还没有研究过。

6.结论和未来工作

在这项工作中,我们探索了用于协同过滤的神经网络体系结构。我们设计了一个通用的框架NCF,并提出了三个实例NeuMF、MLP和NeuMF——它们以不同的方式模拟用户-项目的交互。我们的框架简单而通用;它并不局限于本文中介绍的模型,而是旨在作为开发深度学习推荐方法的指南。这项工作补充了主流的浅层协同过滤模型,为基于深度学习的推荐研究开辟了一条新的途径。

未来,我们将针对NCF模型研究成对学习者,并将NCF模型扩展到辅助信息,如用户评论[11]、知识库[45]和时间信号[1]。虽然现有的个性化模型主要关注个人,但为用户组开发模型很有意思,这有助于社会群体的决策[15,42]。此外,我们对为多媒体项目构建推荐系统特别感兴趣,这是一项有趣的任务,但在推荐社区中受到的审查相对较少[3]。多媒体项目,如图像和视频,包含更丰富的视觉语义[16,41],可以反映用户的兴趣。为了构建一个多媒体推荐系统,我们需要开发有效的方法来从多视图和多模态数据中学习[13,40]。另一个新兴的方向是探索递归神经网络和散列方法的潜力[46],以提供有效的在线推荐[14]。

致谢
作者感谢匿名审稿人的宝贵意见,这些意见有助于作者对推荐系统的思考和论文的修改。

三、复现

首先根据Githup上的说明配置好环境,下载keras框架等。
4.5.1运行程序
1.GMF.py的实验运行
在命令台中输入以下命令:

python GMF.py --dataset ml-1m --epochs 10 --batch_size 256 --num_factors 8 --regs [0,0] --num_neg 4 --lr 0.001 --learner adam --verbose 1 --out 1

2.MLP.py的实验运行
在命令台中输入以下命令:

python MLP.py --dataset ml-1m --epochs 10 --batch_size 256 --layers [64,32,16,8] --reg_layers [0,0,0,0] --num_neg 4 --lr 0.001 --learner adam --verbose 1 --out 1

3.NeuMF.py的实验运行
在命令台中输入以下命令:

python NeuMF.py --dataset ml-1m --epochs 10 --batch_size 256 --num_factors 8 --layers [64,32,16,8] --reg_mf 0 --reg_layers [0,0,0,0] --num_neg 4 --lr 0.001 --learner adam --verbose 1 --out 1

4.NeuMF.py(有预训练)的实验运行
在命令台中输入以下命令:

python NeuMF.py --dataset ml-1m --epochs 10 --batch_size 256 --num_factors 8 --layers [64,32,16,8] --num_neg 4 --lr 0.001 --learner adam --verbose 1 --out 1 --mf_pretrain Pretrain/ml-1m_GMF_8_1501651698.h5 --mlp_pretrain Pretrain/ml-1m_MLP_[64,32,16,8]_1501652038.h5

4.5.2结果整理
改变参数运行程序,将结果保存在表格中并整理。部分截图如图所示.


在这里插入图片描述
根据整理的表格,GMF、MLP和NeuMF的HR、NDCG、Traning Loss的比较分别如图所示。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

改变参数K(1-10)的HR和NDCG如图所示。


在这里插入图片描述
在这里插入图片描述

改变参数Number of Negatives(1-7)的HR和NDCG如图所示。


在这里插入图片描述
在这里插入图片描述

改变参数factors(4/8/16/32)的HR和NDCG的结果如图所示。


在这里插入图片描述
在这里插入图片描述

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐