NCF论文研读笔记
NCF论文研读笔记
随着近些年来深度学习的发展,在推荐系统方面,越来越多的推荐模型是基于神经网络来解决推荐问题,但这些模型主要使用它来模拟辅助信息,例如项目的文本描述和音乐的声学特征。而在对协同过滤的关键因素——用户和项目特征之间的交互进行建模时,大部分工作仍然采用矩阵分解(matrix factorization),并对用户和项目的潜在特征应用内积(inner product)。 NCF模型与传统的矩阵分解的不同在于,NCF对分解之后获得的隐向量不再是简单地进行内积操作,而是考虑更为复杂的内积形式,并利用多层感知机,对用户-物品交互信息进行深入地学习,从而获取更好的结果。
1. MF模型
MF模型(矩阵分解模型)的实现思路是通过对由n个用户和m个物品组成的用户-物品评分矩阵进行分解,将整体评分矩阵分解为两个矩阵的乘积,其中一个矩阵的大小为nk,另一个矩阵的大小为km,这两个矩阵中的维度k表示潜在空间维度。接着对于第i个用户对第j个物品的喜爱程度评估问题,可以利用第一个矩阵中的第i个用户的k维向量与第二个矩阵中第j个物品的k维向量进行内积,计算得到具体的喜爱程度:
其中,向量pu表示用户u的隐向量,向量qi表示物品i的隐向量。然而这种方式由于仅仅是简单地进行线性内积操作,因此,存在着一定的问题,比如,现假设存在用户u1,u2,u3,其中u1与u2具有较高的相似度,在隐向量空间中表现为向量间夹角较小,而u1与u3的相似度比较低,在隐向量空间中表现维向量间夹角较大,这时,如果出现一位新的用户u4,且u4与其他三个用户的相似度从大到小排序为u1、u3、u2,那么就有可能存现如下图所示的情况:
(a)是user-item交互矩阵,1(b)是用户的隐式空间,论文中强调了两点来理解这张图片:
1)MF将user和item分布到同样的隐式空间中,那么两个用户之间的相似性也可以用二者在隐式空间中的向量夹角来确定。
2)使用Jaccard系数(用户交互项目集 交/并)来作为真实的用户相似性。
图中,p1、p2、p3向量是原先已 经确定的,而在考虑引入新用户u4时,无论u4对应的隐向量位于哪一根虚线,都无法满足u4和u3之间的相似度大于u4和u2之间的相似度。而一种解决的方案是将维度k增大,即利用更高维度的空间来表示隐向量,但是这种做法可能会对模型的泛化产生不利影响(例如,过度拟合数据),尤其是在稀疏设置中,因此,本篇论文针对这一缺点,对模型的MF部分进行了改进,提出一种基于NCF通用结构的GMF模型。
2.模型通用结构
NCF的通用设计结构。首先将用户和物品分别使用one-hot encoding进行表示,接着将经过one-hot encoding得到的稀疏向量进行embedding操作,表示成一个k维空间中的稠密矩阵,之后将用户隐向量和物品隐向量进行拼接并输入到DNN网络中,经过多层感知机后学习得到对应的得分
3.模型具体结构
针对这个通用框架,论文提出了三种不同的实现,三种实现可以用一张图来说明:
GMF(广义矩阵分解)
考虑到MF模型的一个缺点在于MF仅考虑了简单线性的内积操作,在低维表示空间中,容易出现前文论述的问题,因此,一种设计思路是在MF的基础上做出了一定的改进GMF对应的数学公式如下:
GMF将内积操作替换成原始逐位乘积,与内积不同,该操作是将两个向量的对应位置元素进行乘积,最终的结果仍然为一个k维向量,同时,GMF给予了逐位乘积对应的权重向量h。为了使模型更具表现力,GMF在模型中融入了非线性操作,利用Sigmoid函数(a_out)对赋权后的向量进行计算。
MLP(多层感知器)
由于 NCF 分别对用户和物品进行了隐表示的学习,因此一种比较直观的做法是通过将物品和用户的隐向量进行简单拼接,再直接进行交互估计。但是,简单的向量连接并没有考虑到用户和项目潜在特征之间的任何交互,这不足以模拟协作过滤效果。为了解决这个问题,本篇论文建议在concat上·添加隐藏层,使用标准 MLP 来学习用户和项目潜在特征之间的交互。从这个意义上说,这样做可以赋予模型很大程度的灵活性和非线性来学习隐向量之间的相互作用,而不是像 GMF 那样只对它们使用固定的元素乘积,具体表达式如下:
GMF与MLP组合-NeuMF(神经矩阵分解)
本篇论文认为GMF模型可以通过设置激活函数Sigmoid和权重向量来获得隐向量的线性表示,而MLP可以通过多层感知机来学习到隐向量的非线性表示,因此,本篇论文开始尝试对两种模型进行组合。
1)让两个模型共享embedding层获得的隐向量
优:一定程度降低模型复杂度
劣:影响模型表现(两个模型的需要设置相同的隐藏空间维度,这样会使得模型的灵活度下降且可能最佳隐藏空间维度可能不相等)
2)独立学习隐向量(两个模型分别设置单独的Embedding层)表达如下:
4 模型实验
论文通过三个角度进行了试验:
RQ1 我们提出的NCF方法是否胜过 state-of-the-art 的隐性协同过滤方法?
RQ2 我们提出的优化框架(消极样本抽样的logloss)怎样为推荐任务服务?
RQ3 更深的隐藏单元是不是有助于对用户项目交互数据的学习?
评估方案:论文采用了leave-one-out方法评估
论文将NCF方法与下列方法进行了比较:ItemPop,ItemKNN,BPR,eALS
RQ1试验结果
即NCF效果好于BaseLine模型
RQ2试验结果
Figure 6 表示将模型看作一个二分类任务并使用logloss作为损失函数时的训练效果。
Figure7 表示采样率对模型性能的影响(横轴是采样率,即负样本与正样本的比例)。
最佳采样比约为 3 到 6,过于激进地设置采样率可能会对性能产生不利影响
RQ3试验结果
上面的表格设置了两个变量,分别是Embedding的长度K和神经网络的层数,使用类似网格搜索的方式展示了在两个数据集上的结果。增加Embedding的长度和神经网络的层数是可以提升训练效果的。
TIPS思考:模型在辅助信息的使用方面以及信息特征抽取方面存在不足。神经协同过滤模型使用用户与项目历史行为信息,生成嵌入特征,通过多层感知机模拟用户与项目的交互,解决了一些传统的推荐算法的不足。尽管在性能上有所提升,但是该算法使用的特征信息较为单一,只使用了用户与项目的交互信息,而没有使用其他的辅助信息。辅助信息如用户与项目的属性标签信息对提高模型个性化推荐性能以及缓解系统冷启动具有重要作用,若能将这些信息引入至神经协同过滤模型中,则可以使神经协同过滤模型的推荐性能更好、推荐可解释性更强。
问题:模型的参数与收敛时间增加、模型无法很好地挖掘多种信息特征、模型对特征信息视为同等重要,消解部分有价值的信息。
NCF复现 pytorch版本