文章简介
该文由何向南教授团队于17年发表在IW3C2,其核心思想在于结合了传统矩阵分解的易用性与神经网络对用户项目交互的高维感知力来提高最终推荐的性能表现。
Keywords: 协同过滤//神经网络//深度学习//矩阵分解//隐式反馈
一.摘要解析
研究背景是当年深度学习在语音识别,计算机视觉和NLP方面已经取得了巨大成功。而在推荐系统的研究上,深度学习主要被用于模拟辅助信息,如项目的文本描述和音乐的声学特征等。在对协同过滤的关键因素——用户和项目特征之间的交互建模时,仍然采用矩阵分解的方式。
具体做法是通过可以从数据中学习任意函数的神经架构来替换内积,基于此提出了NCF的通用框架。在NCF的框架下泛化了矩阵分解GMF来建模线性表达,加入了多层感知机MLP来增强非线性建模。
二.技术要点
-
Learning from Implicit Data:从隐式反馈数据中学习用户和项目的交互,其交互矩阵Y=RM×N的构建如下图所示。
编码方式:one-hot -
GMF:在众多协同过滤技术中,矩阵分解是最受欢迎的一种,它将用户和项目投影到共享的Latent space,使用潜在特征向量来表示用户或项目,而用户与项目的交互则被建模为其潜在向量的内积。而NCF解释了如何将MF作为其框架下的案例之一,并泛化为GMF。核心参数:number_factors即向量表示的因子数
-
MLP:标准的多层感知机,对于网络结构其采用的常见的塔式结构(底层最宽,往上递减),在这里我们可自定义网络的层数以应对不同场景的需求。由于神经网络的特性,MLP在建模非线性表达时具体显著优势,可作为GMF很好的补充。核心参数:number_layers即网络层数与因子数
-
NCF(GMF&MLP):在基础模型构建完成之后,如何融合此二者则变成一个非常重要的问题,这将直接影响模型的性能。在这个问题的处理上,作者同样做了多种尝试,最终考虑到共享GMF和MLP的嵌入可能会限制融合模型的性能(即两个模型对某个数据集的最佳batch_size变化很大),于是采用二者分别学习嵌入,并通过连接二者最后一个隐藏层来组合这两个模型。详见下图:
三.实验部分
实验部分主要回答三个问题:
- NCF与最新的基于隐式反馈的协同过滤方法相比表现如何?
of cause better - 所提出的优化框架(log loss with negative sampling)如何作用于推荐任务?
3~6左右的采样率可以很好的提升方法性能 - 更深层的隐藏单元是否有助于更好的学习用户-项目交互?
实验数据表明在0-4层中,4层的结果最优
实验设置
数据集:MovieLens & Pinterest
预训练:通过两个模型单独学习得到的参数作为NCF初始化参数
评估方法: 该模型采用leave-1-out评估,其中评价指标为HitRate & NDCG //可以理解为命中率和排名靠前率//
基准方法:ItemPop & ItemKNN & BPR & eALS
通过实验验证,表明了进行个性化推荐的必要性以及同时结合线性与非线性模型的先进性。
代码解析
源代码:Neural Collabrative Filtering
该模型基于Pyhon2 & Theano/Keras构建,部分包可能无法从官网获取,需要从Github or Google下载。而且,其中部分代码可能因环境差异导致无法解析,进而影响程序运行。下面我将以伪代码展示出来,并以框架的形式将模型复现,包括对部分源代码的修改。
一.模型构建
Load data
# Series of loaddata functions
def load_negative_file(self