对于user-item矩阵Y
但是并不意味着用户u不喜欢物品i,也可能是用户并不知道它,或者是数据缺失
对于一般的user-item矩阵
用Jaccard系数来表示用户之间的相似度
显然s23(0.66) > s12(0.5) > s13(0.4)
对于u4,s41(0.6) > s43(0.4) > s42(0.2),所以u4与u1最相似其次是u3,u2
根据结果在向量空间中作图
发现无论p4在哪,都是比p3更靠近p2
这就是只使用内积信息降维导致信息损失
NCF(Neural collaborative filtering framework)框架
基于NCF的框架,作者提出NeuMF
对于输入层,将user和item转换为二进制稀疏向量和独热编码,再分别计算MLP、GMF的item和user的embedding层
GMF_user: user_num->factor_num
GMF_item: item_num->factor_num
MLP_user: user_num->factor_num
GMF_user: user_num->factor_num
这样在MLP_Layer 1里尺寸就是,在MLP_Layer X输出尺寸为factor_num,和GMF的输出尺寸一样
1.GMF(Generalized Matrix Factorization)广义矩阵分解
#即向量内积
和
分别表示输出层的激活函数和连接权重
2.MLP(Multi-Layer Perceptron)多层感知机
在向量连接上增加隐藏层,使用标准的MLP(多层感知机)学习用户和项目潜在特征之间的相互作用。可以赋予模型高水平的灵活性和非线性建模能力,而不是GMF(广义矩阵分解)那样的简单使用逐元素相乘的内积来描述用户和项目之间的潜在交互特征。
使用ReLU作为激活函数
3.NeuMF Layer
如何在NCF框架下融合GMF和MLP?
一个简单的解决方案是让GMF和MLP共享同一个嵌入层,然后组合它们的函数的输出如下公式(单层MLP)
然而,共享GMF和MLP的嵌入可能限制融合模型的性能。例如,它意味着GMF和MLP必须使用相同大小的嵌入;对于其中两个模型的最佳嵌入大小变化很大的数据集,该解决方案可能无法获得最佳解。
为了给融合模型提供更多的灵活性,允许GMF和MLP使用单独的嵌入,并通过连接它们的最后一个隐藏层来组合这两个模型
所以最终的公式如下
预训练
使用GMF和MLP的预训练模型来初始化NeuMF,首先用随机初始化训练GMF和MLP,直到收敛。然后,我们使用它们的模型参数作为NeuMF参数的相应部分的初始化。
在输出层上,将两个模型的权重连接起来
使用Adam优化GMF和MLP,使用SGD优化NeuMF
数据集
MovieLens
每个用户至少有20条评分,每个条目标记为0或1,表示用户是否对该项目进行了评级。
每个用户至少有20条交互
训练参数
对每个正实例采样四个负实例,其他参数略
实验结果
NeuMF的HR和NDCG在各项参数上都优于Baselines
对于预训练
有预训练的结果优于没有预训练的
负采样的对数损失
为了处理隐式反馈的单类性质,将推荐作为一个二元分类任务,将NCF视为概率模型,使用对数损失对其进行了优化
将的值视为标签1意味着项目i与u相关,否则为0。预测得分则表示i与u相关的可能性。为了赋予NCF这样的概率解释,我们需要将输出
约束在[0,1]的范围内,这可以通过使用概率函数(例如,Logistic或Probit函数)作为输出层Φout的激活函数。
在上述介绍的环境下,定义概率函数如下所示:
取负对数得
这是NCF方法最小化的目标函数,其优化可以通过使用随机梯度下降(SGD)来实现。通过对NCF的概率处理,将隐式反馈的推荐作为一个二分类问题来解决。
对于负样本采样率
设置采样率过于激进可能会对性能产生不利影响
对于MLP隐藏层的层数
堆叠更多的非线性层也有利于性能。表明使用深度模型进行协作推荐的有效性。