欢迎光临散文网 会员登陆 & 注册

Deep Matrix Factorization Models for Recommender System

2022-11-22 21:22 作者:021usc  | 我要投稿

这篇论文作者提出了一种基于神经网络结构的矩阵分解模型。主要受到Deep Structured Semantic Models(DSSM,2013年提出主要用于web search)的启发。模型同时考虑了用户对物品的显式评分和非偏好隐式反馈,然后通过两组神经网络将用户和物品的特征映射到一个低维空间;并通过设计的新的损失函数进行BP。

论文代码:https://gitee.com/youryouth/mc/tree/master/dmf

DL与推荐

深度学习现在已经是各大厂推荐算法的标配了,在深度学习领域主要分成两大类:

  1. representation learning:主要是由神经网络获取user和item的latent vector,并使用较为简单的matching function(比如inner product,cosine similarity)计算相似度。

  2. matching function learning:使用较为复杂的matching function来做feature interaction,而不是直接基于user和item的latent vector进行相似度计算。

模型结构

论文主要贡献的点有:

  1. 提出基于深度学习的matrix factorization方法,同时使用explicit rating(显式)和non-preference implicit feedback(隐式反馈)将user和item的信息non-linear地映射到低维空间。

  2. 提出了新的loss function,同时考虑显式和隐式的信息。

论文结构

作者直接将用户和物品的交互矩阵作为神经网络的输入,对于用户u_i,找到该用户对应的所有电影评分或者是否评分,即

输入评分公式

其中第一种方案是推荐系统中用的最多的方案。但是这种方案默认用户与项目之间的偏爱程度一致没有任何区别(都为1或者0)。这篇文章认为公式2中的显式评分对于推荐来说是更好的,因为它们表明了用户对某一商品的偏好程度。同时,如果评分未知,则标记为0,本文将其称为非偏好隐式反馈。

接着通过两组神经网络将用户和物品的特征提取到一个低维空间,并通过设计的新的损失函数进行反向学习,得到用户和物品在低维空间的表示,再用余弦相似度来计算相似度,从而进行推荐。对于网络的输出有

网络预测输出

式中,%5Cwidehat%7BY%7D_%7Bi%20j%7D为用户u_i和项目v_j交互Y_%7Bij%7D的得分,%5Ctheta为网络的参数,F为将模型参数映射到预测得分的函数。基于此功能,可以实现为单个用户推荐一组商品的目标,以最大限度地提高用户的满意度。

现在,下一个问题是如何定义这样的函数F。比如在潜在因素模型(LFM)就是简单地应用p_iq_j的点积来预测Y_%7Bij%7D,这里p_iq_j分别表示用户和项目的潜在表示。

%5Cwidehat%7BY%7D_%7Bi%20j%7D%3DF%5E%7BL%20F%20M%7D%5Cleft(u_%7Bi%7D%2C%20v_%7Bj%7D%20%5Cmid%20%5CTheta%5Cright)%3Dp_%7Bi%7D%5E%7BT%7D%20q_%7Bj%7D

损失函数

针对这类问题常用的误差函数有以下两种:

L%3D%5Csum_%7Bi%2C%20j%7D%20w_%7Bi%20j%7D%5Cleft(Y_%7Bi%20j%7D-%5Chat%7By%7D_%7Bi%20j%7D%5Cright)%5E%7B2%7D

L%3D%5Csum_%7Bi%20j%7D%20Y_%7Bi%20j%7D%20%5Clog%20%5Cwidehat%7BY%7D_%7Bi%20j%7D%2B%5Cleft(1-Y_%7Bi%20j%7D%5Cright)%20%5Clog%20%5Cleft(1-%5Cwidehat%7BY%7D_%7Bi%20j%7D%5Cright)

由于平方损失关注显性评级,而交叉熵损失关注隐性评级。因此这篇文章设计了一种新的损失函数,将显式评分纳入交叉熵损失中,使显式和隐式信息可以同时用于优化。最终新损失命名为标准化交叉熵损失(简称为nce),如下式所示:

%5Cbegin%7Baligned%7D%0AL%3D-%26%20%5Csum_%7B(i%2C%20j)%20%5Cin%20Y%5E%7B%2B%7D%20%5Ccup%20Y%5E%7B-%7D%7D%5Cleft(%5Cfrac%7BY_%7Bi%20j%7D%7D%7B%5Cmax%20(R)%7D%20%5Clog%20%5Chat%7BY%7D_%7Bi%20j%7D%5Cright.%5C%5C%0A%26%5Cleft.%2B%5Cleft(1-%5Cfrac%7BY_%7Bi%20j%7D%7D%7B%5Cmax%20(R)%7D%5Cright)%20%5Clog%20%5Cleft(1-%5Chat%7BY%7D_%7Bi%20j%7D%5Cright)%5Cright)%0A%5Cend%7Baligned%7D

实验结果

我们在四个推荐系统中广泛使用的数据集上评估我们的模型:MovieLens 100K(ML100k)、MovieLens 10M(ML1m)、Amazon music(Amusic)、Amazon movies(Amovie)。它们可以在网站上公开访问。对于MovieLens数据集,我们不处理它,因为它已经被过滤,而对于Amazon数据集,我们过滤了数据集,因此与MovieLens数据类似,只有那些至少有20个交互的用户和至少有5个交互的条目被保留。


实验结果

后续试验测试了输入矩阵、负采样率、网络深度、最终潜在空间因子等参数对实验结果的影响。


代码说明

代码在 https://gitee.com/youryouth/mc/tree/master/dmf中。将源码下载下来,配置好环境,直接运行DMF.py文件即可,实验的截图如下。

实验结果

总结

论文提出了一种基于神经网络结构的矩阵因子分解模型。通过神经网络结构,将用户和项目投射到低维向量空间中。在我们的模型中,我们充分利用了显性评分和隐性反馈。我们提出的模型的输入矩阵包括显式评分和非偏好反馈。

实际上DMF网络输出的p和q就可以认为是MF中矩阵分解得到的用户、物品隐变量,其实是在用一种深度学习的方法来完成以往通过SVD来完成的矩阵分解过程。

拓展

关于Point wise和Pair wise,参考如下

Point wise:Pointwise排序是将训练集中的每个item看作一个样本获取rank函数,主要解决方法是把分类问题转换为单个item的分类或回归问题。有基于回归,基于分类,基于有序回归的算法。缺点:ranking 追求的是排序结果,并不要求精确打分,只要有相对打分即可。pointwise 类方法并没有考虑同一个 query 对应的 docs 间的内部依赖性。一方面,导致输入空间内的样本不是 IID 的,违反了 ML 的基本假设,另一方面,没有充分利用这种样本间的结构性。其次,当不同 query 对应不同数量的 docs 时,整体 loss 将会被对应 docs 数量大的 query 组所支配,前面说过应该每组 query 都是等价的。损失函数也没有 model 到预测排序中的位置信息。因此,损失函数可能无意的过多强调那些不重要的 docs,即那些排序在后面对用户体验影响小的 doc。

代表算法:

基于神经网络的排序算法 RankProp、基于感知机的在线排序算法 Prank(Perception Rank)/OAP-BPM 和基于 SVM 的排序算法。推荐中使用较多的 Pointwise 方法是 LR、GBDT、SVM、FM 以及结合 DNN 的各种排序算法。

工作场景:

如果在推荐场景中,一般会选择下单或者点击为正样本,曝光未点击为负样本。样本构造简单,天然标注,并且优化时,也是单点优化,训练模型速度快。

Pairwise:Pairwise排序是将同一个查询中两个不同的item作为一个样本,主要思想是把rank问题转换为二值分类问题。基于二分类的算法。缺点:如果人工标注包含多有序类别,那么转化成 pairwise preference 时必定会损失掉一些更细粒度的相关度标注信息。2、doc pair 的数量将是 doc 数量的二次,从而 pointwise 类方法就存在的 query 间 doc 数量的不平衡性将在 pairwise 类方法中进一步放大。3、pairwise 类方法相对 pointwise 类方法对噪声标注更敏感,即一个错误标注会引起多个 doc pair 标注错误。4、pairwise 类方法仅考虑了 doc pair 的相对位置,损失函数还是没有 model 到预测排序中的位置信息。5、pairwise 类方法也没有考虑同一个 query 对应的 doc pair 间的内部依赖性,即输入空间内的样本并不是 IID 的,违反了 ML 的基本假设,并且也没有充分利用这种样本间的结构性。

基于 SVM 的 Ranking SVM 算法、基于神经网络的 RankNet 算法和基于 Boosting 的 RankBoost 算法。

Anime 数据集

Anime 是一个公开的推荐数据集,包含 73 516 名用户对 12 294 部动漫的 7 813 738 条评分数据.该数据 集包含 3 个分类:用户 id、动漫 id 和用户对动漫的评分,其中,评分范围为 1~10.为了缓解数据集稀疏问 题,对数据集进行过滤处理,过滤后的数据集包含 8 289 个用户对 6 335 部动漫的 2 964 160 个评分。

这里,我们采用隐式反馈的数据,所以需要把显式评分数据转化为隐式数据.即:对于 MovieLens 数据来说, 将评分矩阵中有评分记录的 1~5 的值记为 1,没有评分记录的记为 0.同时选取每个用户最近一次的交互记录作为测试样本,并和随机抽样的 99 个未交互的样本组合成测试数据集,其余的数据作为训练样本组成训练集.对 Anime 数据集做同样处理。


参考田震,潘腊梅,尹朴,王睿.深度矩阵分解推荐算法[J].软件学报,2021,32(12):3917-3928.DOI:10.13328/j.cnki.jos.006141.

Hong-Jian Xue, Xin-Yu Dai, Jianbing Zhang, Shujian Huang, and Jiajun Chen. 2017. Deep matrix factorization models for recommender systems. In Proceedings of the 26th International Joint Conference on Artificial Intelligence (IJCAI’17), Carles Sierra (Ed.). AAAI Press 3203-3209.


Deep Matrix Factorization Models for Recommender System的评论 (共 条)

分享到微博请遵守国家法律