神经协同过滤NCF(一)之模型介绍篇

简介

本文是对Neural Collaborative Filtering这篇论文的一个简单概括,着重介绍一下文中提出的基于神经网络的协同过滤框架NCF,以及基于此框架的三种模型GMF、MLP、NeuMF的原理。
原文地址: https://arxiv.org/pdf/1708.05031.pdf

背景知识

由于Netflix Prize的普及,MF(Matrix Factorization)已经成为了潜在因子(latent factor)建模的默认方法。已经有大量的工作致力于增强MF的性能,例如将其与基于领域(相邻user或者item)的模型集成,与基于item内容的主题模型相结合,还有将其扩展到因式分解机(factorization machines),以实现特征的通用建模。尽管MF方法对于协同过滤有效,但是众所周知的是它的性能会被简单选择的交互函数(内积操作)阻碍。而且内积操作只是将潜在特征进行简单的线性组合,它不足以捕获用户交互数据中的复杂结构。
为此,作者提出了一种神经网络结构去对user和item之间的潜在特征进行建模,并设计了基于神经网络的协同过滤方法的通用框架NCF。

1. 准备工作

首先要明确什么是显性反馈和隐性反馈数据。

  • 显性反馈
    明确反映用户对物品喜好的行为,比如对物品进行点赞、评分、评论等。
  • 显性反馈
    不能明确反映用户喜好的行为,比如用户观看和浏览的历史记录。

1.1 从隐反馈数据中学习

MN分别代表user和item的数量。我们可以从用户的隐反馈数据中定义用户物品交互矩阵Y \in R^{M \times N}如下:

这里的y_{ui}代表用户u对物品i是否有过交互。

如果用户u和物品i发生过交互,则y_{ui}=1,但是这并不代表用户u喜欢物品i。同理y_{ui}=0也并不代表用户u不喜欢物品i,也许是因为该用户根本就没发现此物品,所以也谈不上喜不喜欢。
这对隐性反馈的学习提出了挑战,因为它提供了关于用户偏好的噪声信号。虽然观察到的条目至少反映了用户对物品的兴趣,但是未观察到的的条目可能只是丢失数据,并且这其中天然就缺乏负反馈数据。因为它只是记录了用户与某些物品之间的正反馈,而未记录用户与物品之间的负反馈。

1.2 矩阵分解(Matrix Factorization)

MF(Matrix Factorization)使用一个潜在特征向量将每个用户和物品之间联系起来。我们令p_uq_i分别代表用户u和物品i的潜在特征向量。MF算法使用p_uq_i的内积来估计y_{ui}


其中K代表隐式空间(latent space)的维度。可以看到,MF是对用户和物品之间的双向交互进行建模,它假设潜在特征空间中的每一维都是彼此独立的,并且使用相同的权重将他们线性组合起来。正因如此,MF可以看做是潜在因素(latent factor)的线性模型。

关于MF的原理和代码实现可以参见LFM(Latent factor model)隐语义模型算法原理以及代码实践

论文中举了一个例子来说明内积操作会束缚MF的表达效果,如下图。

上图中(a)代表的是user-item矩阵,(b)代表的是用户相似度在隐式空间中的分布。

论文使用Jaccard系数来计算两个用户之间的相似度,令s_{ij}代表用户ij之间的相似度,可由下式计算:


其中R_u代表的是与用户u有过交互的物品的数量。

先关注(a)中的前三行,很容易计算出s_{23}(0.66) > s_{12}(0.5) > s_{13}(0.4),即u_2u_3之间的相似度要大于u_1u_2u_1u_2的相似度大于u_1u_3。则u_1u_2u_3的潜在特征向量p_1p_2p_3在隐式空间中的几何关系可以被描述成(b)所示。如果此时增加了一个u_4,我们可以计算得出s_{41}(0.6) > s_{43}(0.4) > s_{42}(0.2),这意味着u_4u_1是最相似的,接着是u_3,然后是u_2。然而在隐式空间中,如果p4p1接近的话(图中给出了两个可能的位置,虚线所示),那就意味着p4更接近与p2而不是p3。然后根据图(a)可知,u_4明显与u_3更为相似,故这将会导致很大的排名误差(ranking loss)。
这个例子显示了由于使用简单且固定的内积操作,来在低维隐式空间中估计用户-物品之间复杂交互,而造成的可能的局限性。解决该问题的一个方法是使用很大的潜在因子K,即增大隐式空间的维度,然而这样的解决方法可能会对模型的泛化能力产生不利的影响,比如造成过拟合等。

2. 神经协同过滤(NCF)

2.1 通用框架

论文提出了一个通用的NCF框架,阐述了如何使用一个强调隐反馈数据二值性的概率模型来学习NCF模型参数,并且展示了MF可以是NCF的一个特例。NCF框架图如下:
NCF框架图

最下面是输入层,分别包含了两个特征向量v_u^Uv_i^I,它们分别用来描述用户u和物品i。输入仅由一个用户向量和一个物品向量构成,它们分别是以one-hot编码的二值化稀疏向量。
输入层上面的是Embedding层,它是一个全连接层,用于将输入层的稀疏表示映射成一个稠密向量。它所获得的用户(物品)稠密向量可以看做就是MF算法中用来描述用户(物品)的潜在特征向量。接着用户和物品的embedding向量被送入多层神经网络架结构中,这一层叫做神经协同过滤层(Neural CF Layer),它用于将潜在特征向量映射成预测分数(Score)。神经协同过滤层中的每一层可以被认为是用来发掘用户-物品交互中的某些隐含结构。神经协同过滤层的输出层(Layer X)的维度决定了模型的能力。最终的输出是预测分数\hat y_{ui},我们可以通过最小化\hat y_{ui}和目标值y_{ui}之间的均方误差来训练模型。
NCF预测模型如下:

其中P \in R^{M \times K}Q \in R^{N \times K},它们分别代表用户和物品的潜在因子矩阵。Θ_f代表的是交互函数f的参数。f在上图中被定义为多层神经网络,故它可有如下表示:


其中P^Tv^U_uQ^Tv^I_i分别代表是输入用户向量v^U_u和输入物品向量v^U_u经过Embedding层之后得到的关于用户u和物品i的潜在特征向量。\phi_x代表的是神经协同过滤层中的第x层的映射函数,\phi_{out}代表的是输出层的映射函数,一共有X个神经协同过滤层。

2.2 损失函数

为了学习模型参数,现存的逐点学习方法主要是运用均方差误差进行回归:


其中y代表交互矩阵Y中观察到的条目,即用户对物品有评分的,y^-代表负样本,它们可以是交互矩阵中没有出现的全部条目,也可以是从这些条目中采样得到的。w_{ui}是一个超参数,用来代表训练实例(u,i)的权重。
尽管均方差误差可以通过假设观测值服从高斯分布来做出解释,但是它仍然不适合处理隐反馈数据。因为,对于隐反馈数据来说,目标值y_{ui}是二进制0或者1,代表u是否与i有交互。因此,针对隐反馈数据的二值性这一属性,论文提出了从概率的角度来学习NCF。
我们可以把y_{ui}当做一个标签,1代表物品i与用户u有关,0代表无关。预测目标\hat y_{ui}可以认为是代表这物品i有多大可能性与用户u有关。为了赋予NCF这样一个概率解释,我们需要限制y_{ui}的输出在[0,1]之间,为了达到这个目的,我们可以使用sigmoid函数作为输出层\phi_{out}的激活函数。
有了以上设定,我们可以定义似然函数如下:

对似然函数取负对数得到:

这就是NCF模型需要最小化的目标函数,可以使用SGD算法来进行训练优化。通过在NCF上进行概率处理,我们把隐反馈数据的推荐问题转变成了一个二值分类问题。

2.3 广义矩阵分解(GMF)

我们令用户p_u代表P^Tv^U_u,即用户u的潜在特征向量;令q_i代表Q^Tv^I_i,即物品i的潜在特征向量。我们可以定义神经协同过滤层第一层的映射函数为:


其中⊙代表的是向量的逐元素相乘。然后将此向量映射到输出层:

其中a_{out}代表的是激活函数,h代表的是输出层的权重。如果我们把a_{out}看成是恒等函数,令h是全为1的单位向量,那么这就变成了MF模型。
GMF模型的结构框图如下:
GMF模型

2.4 多层感知器(MLP)

NCF框架用两条路线来对用户和物品进行建模,因而很自然地想到要将他们聚合起来,这种技术在多模态深度学习中被广泛采用。简单的结合是不足以说明用户和物品之间的潜在特征。为了解决这个问题,我们需要向量连接的基础上增加隐藏层,可以使用标准的MLP来学习用户和物品潜在特征之间的相互作用。在这个场景下,我们赋予了模型更高水平的灵活性和非线性。NCF框架下的MLP模型可以被精确定义为:


其中W_xb_xa_x代表第x层感知器的权重矩阵,偏置矩阵以及激活函数。对于感知器层的激活函数,我们可以在Sigmoid、tanh以及ReLu中选择,实验证明,ReLU激活函数是一个较好的选择,因为它更具有生物合理性,并且被证明不会导致过饱和。
MLP模型的结构框图如下:
MLP模型结构

2.5 NeuMF

到目前为止,我们开发出了NCF的两个实例。GMF应用了线性内核来模拟潜在的特征交互;MLP使用了非线性内核从数据中学习潜在特征,那么自然而然地想到,我们可以将这两个模型融合在NCF框架下。
为了使得融合模型具有更大的灵活性,我们允许GMF和MLP学习独立的Embedding,并结合两种模型的最后的输出。NeuMF的结构图如下:

NeuMF框架图

关于上图的精确定义如下:

其中p_u^Gp_u^M分别代表GMF和MLP模型的用户embeding向量;同理,q_i^Gq_i^M分别代表GMF和MLP模型的物品embeding向量。正如上面讨论的,这个模型结合了GMF的线性度和MLP的非线性度来对用户-物品之间的潜在结构进行建模。
由于NeuMF目标函数的非凸性,使得基于梯度的优化方法只能找到局部最优解。论文建议使用GMF和MLP的预训练模型来初始化NeuMF。首先训练随机初始化的 GMF 和 MLP 直到模型收敛。然后,我们用它们的模型参数初始化 NeuMF 相应部分的参数。唯一的调整是在输出层,在那里我们将两者用权重连接起来:

这里的h^{GMF}h^{MLP}分别代表GMF和MLP模型预训练的h向量,\alpha是一个超参数,用来权衡两个预训练模型的权重。

3. 评测指标

为了评价项目推荐的性能,论文采用了leave-one-out方法评估,即:对于每个用户,将其最近的一次交互作为测试集(数据集一般都有时间戳),并利用余下的交互作为训练集。由于在评估过程中为每个用户排列所有item花费的时间太多,所以遵循一般的策略,随机抽取100个不与用户进行交互的item,将测试item排列在这100个item中。
排名列表的性能由命中率(HR)和归一化折扣累积增益(NDCG)来衡量。同时,论文将这两个指标的排名列表截断为10。如此一来,HR直观地衡量测试项目是否存在于前10名列表中,而NDCG通过将较高分数指定为顶级排名来计算命中的位置。

4. 代码实战(基于PyTorch)

见下一章。

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,198评论 6 514
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,334评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,643评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,495评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,502评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,156评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,743评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,659评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,200评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,282评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,424评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,107评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,789评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,264评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,390评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,798评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,435评论 2 359

推荐阅读更多精彩内容