近几年来,神经网络已经在声音识别等领域取得了巨大的成功,然而关于推荐系统的神经网络研究却很少有人关注。在本文中,我们提出了一种新的基于神经网络的方法解决推荐系统中的关键问题--协同过滤(基于隐式反馈)。
即使近几年来已经有工作把神经网络用于推荐系统,但他们主要用神经网络来建模辅助信息,但是对于用户和物品的特征交互,仍然使用矩阵分解和内积。
我们提出了一个通用框架NCF,它可以从数据中学习任意函数的神经网络结构代替内积,同时利用多层感知机来学习用户-物品的交互方程。
协同过滤、神经网络、深度学习、矩阵分解、隐性反馈
一个个性化推荐系统的关键是对用户过去的交互喜好(评分或者点击)进行建模,称作协同过滤。在众多协同过滤方法中,矩阵分解(MF)是最出名的一个,它把用户和物品映射到共享的潜在空间,使用潜在特征向量表示用户或项目。因此用户对一个物品的交互关系可以表示为他们隐藏向量的内积。
但是尽管内积在协同过滤中很有用,由于他们的交互方程是简单的内积,所以模型的表现是受阻的。简单的内积不能很好的捕获获取用户-物品之间的复杂关系。
本文提出了一种基于神经网络的交互方程,而不是由人手工定义的。神经网络已经被证明可以逼近任意函数。
在本文中,我们的中心主题是如何使用DNNs对隐式反馈信号进行建模。
我们的主要贡献如下:
我们提出了一种神经网络结构来模拟用户和项目的潜在特征,并设计了一个基于神经网络的协同过滤网络控制框架。
我们证明了MF可以解释为NCF的一个特例,并利用多层感知器建模以赋予NCF高度的非线性。
我们在两个真实世界的数据集上进行了大量的实验,以证明我们的NCF方法的有效性和协作过滤的深度学习的前景。
我们首先对问题进行了形式化描述,并讨论了现有的隐式反馈协同过滤解决方案。然后概述MF的广泛应用和内积的局限性。
、分别为用户和物品的数量,定义交互矩阵
1表示用户u和物品i之间由交互关系,但是这不意味这用户u真的喜欢物品i,同样,0并不意味这u不喜欢i,还有可能是用户u根本不知道物品i。观测到的数据至少表示用户对物品的兴趣,没有观测到的是缺失数据。
隐式反馈推荐问题被定义为一个估计Y中未观察到的物品的分数的问题,它被用于对物品进行排序。它们可以表示为函数
为预测的和的交互分数,为交互方程,表示模型参数。
为了计算模型参数,可以通过方法优化目标函数。两种目标函数经常使用----点态损失与成对损失(pointwise loss and pairwise loss).
对于点态损失,常用的损失函数是计算预测评分和事实评分的平方差。为了应对负样本的确实,常常把所有未观测到的当作负面条目,或者从未观测到的中进行抽取。
对于成对损失,基本想法是观察到的条目应该比未观察到的条目排名更高。总之,以最小化预测的和事实不同,成对损失使观测到的和未观测到的差距最大化。
MF利用矩阵表示用户-物品交互关系
总之,MF可以看成隐藏向量的线性模型。
MF的局限性可以用下图表示:
两个前提条件:
1.MF将用户和物品映射到同一维度的向量空间,因此可以用内积来表示两个用户之间的相似度,等价的,也可以用两向量的余弦值来表示相似度
2.在不损失通用性的前提下,我们使用Jaccard系数作为MF需要恢复的两个用户的基本真实相似度。
从图中可以知道,.然而在向量空间,更靠近而不是,这将导致巨大的损失。
注意:使用相似度:
上面的例子展示了MF的局限性。一种解决方法是使用大量的潜在因素K,但是可能导致模型的泛化能力差(过拟合),尤其是在稀疏矩阵中。在这篇文章中,我们使用DNNs学习交互方程解决MF的局限性。
本文首先提出了NCF的一般框架,详细阐述了如何利用一个强调隐式数据二元性的概率模型来学习NCF。然后展示MF可以表示未NCF的一个特例。为了发展DNNs在协同过滤,我们使用多层感知机来学习用户-物品的交互方程。最后,我们提出了一种新的神经矩阵分解模型,它是NCF框架下的MF和MLP组合,它结合了MF的线性和MLP的非线性的优点来建模用户-项目的潜在结构。
模型的总体框架:
开始时使用one-hot编码来表示用户和物品,经过向量变换来表示成各自的隐藏向量,随后进入多层感知机,感知机的每一层都可以定制来发现用户-物品交互的某些潜在结构。最后一个隐藏层X的尺寸决定了模型的能力。
现在把NCF的预测模型定义为:
损失函数:
定义似然函数
取对数:
通过对NCF的概率处理,我们将带隐式反馈的推荐作为一个二元分类问题来处理。
现在说明MF可以表示为NCF的一个特例。
MF可以表示为:
若h为1,而a为恒等函数,那么NCF就和CF一样了
如果把h变成可以学习的参数,同时把a变成非线性激活函数。同时使用sigmoid作为激活函数,利用3.1.1中的log loss训练。我们可以把这个叫做广义矩阵分解(GMF),这样可以获得更强的表达能力。
因为NCF采用了两条路对用户和物品进行建模,把两条路结合串联结合是非常直观的。这个设计在多模深度学习任务是应用广泛的。然而,简单的串联并不意味着在用户和物品有任何的联系,这个不足之处。为了解决此问题,我们提出增加隐藏层来学习两者隐藏向量表示的交互关系。在这种情况下,我们使用大等级的复杂度和非线性学习u和i的相互关系,而不是像GMF一样只使用一个定元积。更准确的说,在NCF下的MLP模型可以定义为:
对于MLP层,可以自由选择激活函数。分析激活函数
1.sigmoid让每一个神经元都激活为(0,1),会限制模型的表现。(过饱和????)
2.即使tanh是一个更好的选择,但是这只是在一定程度上缓解问题所在。
3.我们使用relu作为激活函数,它是非饱和的。同时,它在稀疏数据上也有很好的表现并且不容易过拟合
我们的实证结果显示,ReLU的性能略好于tanh,而tanh又明显优于sigmoid。
对于网络结构的设计,一种常见的解决方案是采用塔式结构,最下面的一层是最宽的,然后每一层都逐渐变小。我们根据经验实现了塔式结构,每一个连续较高的层将层大小减半。
GMF使用线性拟合隐藏特征的交互,MLP使用非线性学习从数据中学习交互方程。问题是:怎么在NCF框架中使用GMF和MLP?它们可以相互加强使模型更好表示交互关系?
一个直接的解决方法使让GMF和MLP分享相同的embedding层,然后结合他们的交互输出。可以表示为:
但是,分享embeddings的权重可能会限制混合模型的表现。例如,它会限制GMF和MLP必须有相同大小的embeddings。
为了增加模型复杂度,我们让GMF和MLP学习各自的embeddings,并且串联他们的最终表示,如图,最后的方程和模型可以表示为:
这个模型结合了MF的线性特性和MLP的非线性特性,我们叫他NeuMF(Neural Matrix Factorizatio)
由于函数的非凸性,模型的初始化和收敛对性能起着重要的作用。应为它使MLP和GMF的融合,所以我们使用各自的预训练模型进行初始化操作。
是平衡两个模型的超参数
三个问题
1.NCF方法是协同过滤中最好的方法吗?
2.我们提出的优化框架(负采样和log损失)是如何用于推荐任务的?
3.更深的隐藏层对学习交互数据有好处吗?
两个数据集:MovieLens Pinterest
对于Pinterest,使用是少20个交互的用户做训练
这次知识提出了一个大致方向,是一个把深度学习方法应用在推荐系统的大致指南,希望未来能见到更多把深度学习应用到推荐系统的方法。