亚马逊作为商业化推荐系统的祖师,推出的开山之作便是协同过滤(collaborative filtering)。即使到了以深度学习为主流召回算法的今天,协同过滤仍然是推荐系统召回策略中绕不开的经典算法。它的思路简洁易懂,效果却出奇地好。今天,我们便来深入聊聊协同过滤算法。
什么是协同过滤
所谓“协同”,是指用户之间或物品之间的相似性,“过滤”则是指根据相似性,从大量物品中进行筛选的过程。这里说的相似性,并不等同于我们上一章中所讲的内容在语义上的相似。这里的“相似”,是与用户行为相关的,通常是指用户对物品的行为,主要是指评分,也包含点击、点赞、收藏、评论等隐性行为,当一群用户都对某几个物品进行操作,则这些物品便被认为是相似的。协同过滤认为,同样一群人喜欢的物品是相似的,反过来,喜欢同样物品的人,也是彼此相似的,它所蕴含的哲学思想便是“物以类聚,人以群分”。
协同过滤有两种形式:基于物品的协同过滤(Item-based CF)和基于用户的协同过滤(User-based CF)。在亚马逊上线协同过滤系统之后,顾客选择一本自己感兴趣的书,就会在底下看到一行"Customer Who Bought This Item Also Bought",这是基于Item的协同过滤;知乎、小红书等社交媒体上推荐信息流中你所关注的人“也关注了这个问题”或”点赞了这个帖子”便是基于User的协同过滤。
协同过滤算法原理
协同过滤的中心思路是计算物品之间的相似度,从而根据相似度进行排序,挑选出与用户操作过的物品最相似的若干物品(Item CF),或者计算用户之间的相似度,找到与目标用户相似的若干用户,将这些用户喜好的物品推荐给目标用户(User CF)。

计算相似度之前,需要构建用户与物品的评分矩阵。假设一个推荐网站有M个用户和N个物品,则评分矩阵如下:
ItemUser(r11r12⋯r1Nr21r22⋯r2N⋮⋮⋯⋮r(M−1)1r(M−1)2⋯r(M−1)NrM1rM2⋯rMN) \begin{array}{c}Item\end{array}\\ User \left( \begin{array}{cccc} r_{11} & r_{12} & \cdots & r_{1N} \\ r_{21} & r_{22} & \cdots & r_{2N} \\ \vdots & \vdots & \cdots & \vdots \\ r_{(M-1)1} & r_{(M-1)2} & \cdots & r_{(M-1)N} \\ r_{M1} & r_{M2} & \cdots & r_{MN} \\ \end{array} \right) ItemUser⎝⎜⎜⎜⎜⎜⎛r11r21⋮r(M−1)1rM1r12r22⋮r(M−1)2rM2⋯⋯⋯⋯⋯r1Nr2N⋮r(M−1)NrMN⎠⎟⎟⎟⎟⎟⎞
矩阵中每一行表示该行对应的用户对各个物品的评分,每一列表示该列对应的物品所获得的各个用户的评分。此处的评分依据具体的业务场景而定,通常情况下,对于电商、图书/电影评论类网站,分数为0-5分(半分为一档),或缺失值;而对于如信息流的点击行为来说,评分可以设置为0/1和缺失值。这样,物品的相似度便可以使用列向量之间的余弦距离来表示,如下:

图中物品i和j的相似度表示如下:
sim(vi,vj)=cos(vi⃗,vj⃗)=vi⃗∗vj⃗∣∣vi⃗∣∣∗∣∣vj⃗∣∣ sim(v_i, v_j) = cos(\vec{v_i}, \vec{v_j}) = \frac{\vec{v_i} * \vec{v_j}}{||\vec{v_i}|| * ||\vec{v_j}||} sim(vi,vj)=cos(vi,vj)=∣∣vi

9489

被折叠的 条评论
为什么被折叠?



