当协同过滤(Collaborative Filtering)遇上深度学习

栏目: 编程工具 · 发布时间: 5年前

内容简介:在实际场景中可以将用户对于这种场景就非常使用与推荐系统非常匹配了,并且可解释性但是传统的

介绍

协同过滤(Collaborative Filtering,简称 CF )是Amazon在2001年提出的应用于推荐领域的一个算法,至今各大家的推荐系统中都能见到协同过滤的影子,是推荐领域最经典的算法之一

当协同过滤(Collaborative Filtering)遇上深度学习

在实际场景中可以将用户对于 Item 的评分/购买/点击等行为 形成一张user-item的矩阵,单个的 User 或者 Item 可以通过对于有交互的 ItemUser 来表示(最简单的就是 One-Hot 向量),通过各种相似度算法可以计算到 User2UserItem2Item 以及 User2Item 的最近邻,先就假设按 User2Item 来说:

  1. 和你购买相似宝贝的用户,其实和你相近的,也同时认为你们的习惯是相似的,
  2. 因此他们买的其他的宝贝你也是可能会去够买的,这批宝贝就可以认为和你相似的

这种场景就非常使用与推荐系统非常匹配了,并且可解释性 极强

但是传统的 CF 会存在这两个问题:

  1. 往往这个矩阵会非常 稀疏 ,大部分稀疏程度在95%以上,甚至会超时99%,这样在计算相似度时就非常不准确了(置信度很低)
  2. 整个求最近邻过程中会引入很多 Trick ,比如平滑、各种阈值等,最终将 CF 拿到效果还是比较难的。
  3. 另外还有一个就是 冷启动 的问题,新用户或者新的item没法直接使用这种方式来计算

因此后来针对 CF 提出了不少的优化,主要是对于 User/Item 的表示从 one-Hot 的方式想办法转为稠密的方式,假设原生的矩阵我们称之为$R$,如果存在

$$\tilde{R} = UV^T$$

$R=[M,N],U=[M,K],V=[N,K]$,其中$M$为用户量,$N$为Item量

并且使得$\tilde{R} \approx R$,那么我们可以使用$U$来代表用户矩阵,$V$来代表item矩阵,此时每个用户或者item都可以使用一个$K$维来表示,也就是隐向量,他是一个稠密向量,对于one-hot有不少的优势,同时在整个模型中还可以加入其它特征信息,这就是景点的矩阵分解方式( Matrix Factorization ,简称 MF ),同时对于 MF 也有不少优化,比如 BPR 以及最新的MF算法 ELAS

一般来说, MF 模型得到 UserItem 的向量之后就可以对这两个向量计算相似度来得到最终的结果,比如我们使用内积的方式:

$$y = f(u,i|U_u,V_i) = U_uV_i^T = \sum_{k=1}^K U_{u,k}V_{i,k}$$

但是其实由于参数空间和隐向量长度$K$限制的问题,对于 MF 隐向量之间相似度的结果和原生 User-Item 具体的相似度可能会出现不一致的情况,因此现在的DL盛行的时代,都想在这两个向量上再做一波 猛如虎 的操作再计算最终的结果,就是本文接下来要说的那些个模型,权当对于 CF 的最新进展进行一个同步学习:

他们的Task都是可以简化为,给定一个 User-Item 交互矩阵:

当协同过滤(Collaborative Filtering)遇上深度学习

当特定的 UserItem 输入下计算他们的得分.

$$s = f(u,i|R,\theta) $$

NeuCF

针对MF算法最后通过内积聚合来得到算分的方式,这篇文章的作者认为 UserItem 的隐向量是相互独立的并且最后是等权重求和,因此他可以使用线性模型来表示,这样支持继续使用神经网络模型来进行加工,所以作者提出了基于神经网络的协同过滤(Neural Collaborative Filtering),说白了就是在隐向量上架MLP层和其他的聚合算子,其中隐向量是通过DL模型自己训练出来的:

当协同过滤(Collaborative Filtering)遇上深度学习

模型主要分两个子模块:GMF(左侧)和 NCF(右侧):

  1. GMFUserItem 的隐向量直接通过element-wise的相乘来进行聚合:$$h_{GMF} = \phi(p_u,q_i) = p_u \odot q_i$$
  2. NCF : UserItem 的隐向量先进行concat操作,然后过多层的MLP,得到聚合的向量:$$h_{NCF} = \text{mlp}([p_u,q_i],\theta)$$
  3. 最后使用concat的方式将两个子模块进行融合$$\hat{y} = \sigma(W^T[h_{GMF},h_{NCF}])$$

由于模型是有两部分组成,因此作者在先使用 GMFNCF 分别训练模型,作为pre-train,然后再合并起来将 NeuCF 模型一起训练,来提升模型的性能

当协同过滤(Collaborative Filtering)遇上深度学习

Factor 表示模型预测的数量

这里 GMFMLP (NCF)是他的两个子模型,实验结果也可以看到合并起来之后的模型效果要好于子模型,通过也要好于最新的 eALS 算法。同时作者还,对比了pre-train的效果,确实有不少的提升,具体细节尅看paper。

评一下:整个模型架构简单易懂,使用DL将隐向量做深度的交叉操作,可以继续压榨模型的性能,同时对于该模型用于线上也有很大的可行性。另外关于pre-train部分是否可以使用MF矩阵分解来作为初始化向量会不会更加来的直观一点。

DMF

DMF (Deep Matrix Factorization)的作者受到了DSSM模型的启发:

DSSM 中是通过Query对多个Item经过NN网络之间他们的Embedding来计算相似度,作为他们的语义相似,那么这推荐场景下可以迁移为User对于多个Item来计算行为相似度?

因此可以看图:

当协同过滤(Collaborative Filtering)遇上深度学习

其实这个模型已经很清楚了:

MLP

先来说说这个 Loss ,里面的$R$为评分的最大值(如果标准的1~5分中$R=5$),因为刚刚说了他其实是要预测分数,分数会有1~5,但同时会有0分,所以这个Loss下当$Y={1~5}$时,他其实是一个将回归问题归一化到0~1的分类问题,当$Y=0$时,他就是一个不折不扣的二分类问题,所以说这个任务下选择这个Loss其实是是挺合适的。

整个模型其实还是很好理解的,看下他的实验结果:

当协同过滤(Collaborative Filtering)遇上深度学习

主要对于 NeuMF 算法,还是有一些些提升的,但是从模型的架构来看, DMF 出来除了使用两个单独的MLP,其他与 NeuMF 的差异并没有很大,模型还是 NeuMF 更加复杂嘞,个人感觉如果 NeuMF 使用了pre-train, DMF 说不定还无法超过…,同时看了loss改进的提升并不是很多(不过比较符合正常情况-_-)

这里再对比一下DSSM:

  1. 一个比较大的区别是DSSM的query和title都是word,都是他的网络是共享的,但是DMF里面其实并不是共享的(我之前的经验,不共享的情况下效果大大折扣。。。)
  2. 我觉得DSSM里面最重要的一个点是 Pair-Wise 的loss学习,但是 DMF 里面作者也说了,本文用的是 PointWise 的Loss,对于 Pair-Wise 的Loss在feature work中使用-_-!!

CMN

传统的矩阵分解和基于DL-embedding的CF方法都是从全局的 User-Item 矩阵出发,都是只考虑的全局的矩阵。

而CMN( Collaborative Memory Network )的作者针对给定 UserItem 在算法时,根据 Item 得到 User 的最近邻出发,使用最近邻的Embedding来作为局部信息用于 CF 中,而这里求最近邻的Embedding使用了 Memory Network 来解。

模型结构还是挺漂亮的:

当协同过滤(Collaborative Filtering)遇上深度学习

模型主要是分为 Glolab 信息和 Local 信息, Glolab 和上面两篇文章说的大同小异,上面的结构图主要是通过 Memory Network 结构来说明 Local 信息的使用:

整个网络中有三个矩阵:

Memory Network

在给定用户$u$和item $i$的情况下,计算$u$和$i$发生交互的用户$v$的距离为:$$q_{uiv} = m_u^T m_v + e_i^T m_v \quad \quad \quad \forall v \in N(i)$$

$N(i)$表示和$i$发生过交互的用户

$q_{uiv}$是内积之后的结果,也就是一个值了,然后使用softmax可以求得各个近邻用户的权重

$$p_{uiv} = \frac{exp(q_{uiv})}{\sum_{k \in N(i)} exp(q_{uik})} \quad \quad \quad \forall v \in N(i)$$

该权重乘以对应的外部矩阵的向量就可以得到当前用户与item最近邻用户的向量了,作为$User$和$Item$的局部信息:

$$o_{ui} = \sum_{v \in N(i)} p_{uiv} c_v$$

最终在输出模型的时候与 Glolab 信息一起结合进去:

$$\hat{r}_{ui} = v^T \phi (U(m_u \cdot e_i) + W o_{ui} + b)$$

这里CF的距离使用点积的方式,也就是$NumMF$的其中一个子模型版本

刚刚描述的过程就是上图的 (a) 部分, Memory Network ( MN )最大的优势就是可以使用叠加的方式来进行 Attention ,这样可以使用在后面的 MN 时会重新调整前面基层的 MN ,也就是 (b) 图所示,

这里第一层时$m_u$和$e_i$整合到了一起:$$z^0_{ui} = m_u + e_i$$

邻居用户的算分就可以表示为:$$q_{uiv}^h = (z_{ui}^h)^Tm_v \forall v \in N(i)$$

而其他层的$z$计算为:$$z_{ui}^h = \phi(Wz_{ui}^{h-1} + o_{ui}^h)$$

这种迭代机制正好可以将 MN 层正好可以堆叠起来,而实验中也是证明了多层的堆叠效果要优于单层的

当协同过滤(Collaborative Filtering)遇上深度学习 实验结果中主要来对比一下 NeuMF ,有明显提升同时觉得他的提升比 DMF 更加合理哈哈,如果在 Gbobal 这块再做一些细节的处理应该能提升更多。

整个模型的复杂度为:$O(n(d|N(i)| + d^2)+d)$ 而$n$就是 MN 的层数,因此就模型的工业化而言可行性其实是非常高的,不过需要对$|N(i)|$进行一些剪枝之类的trick处理

DeepCF

这篇paper的作者从 CFRepresentationMatch 两个角度出发:

当协同过滤(Collaborative Filtering)遇上深度学习

我细看了每天和 NeuMF 架构没啥差别,除了在 GMF 那里多了几层 MLP -_-,因此细节就不说了。。。

参考

  1. Item-Based Collaborative Filtering Recommendation Algorithms
  2. BPR: Bayesian Personalized Ranking from Implicit Feedback
  3. Deep Matrix Factorization Models for Recommender Systems∗
  4. Neural Collaborative Filtering∗
  5. Collaborative Memory Network for Recommendation Systems
  6. DeepCF -A Unified Framework of Representation Learning and Matching Function Learning in Recommender System

以上所述就是小编给大家介绍的《当协同过滤(Collaborative Filtering)遇上深度学习》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Pro JavaScript Techniques

Pro JavaScript Techniques

John Resig / Apress / 2006-12-13 / USD 44.99

Pro JavaScript Techniques is the ultimate JavaScript book for the modern web developer. It provides everything you need to know about modern JavaScript, and shows what JavaScript can do for your web s......一起来看看 《Pro JavaScript Techniques》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具