分享协同过滤思想简介 什么是协同过滤?( 二 )


为了避免误解, 这里简单解释一下隐式反馈, 只要不是用户直接评分的操作行为都算隐式反馈, 包括浏览、点击、播放、收藏、评论、点赞、转发等等 。 有很多隐式反馈是可以间接获得评分的, 后面会讲解 。 如果不间接获得评分, 就用0、1表示是否操作过 。
在真实业务场景中用户数和标的物数一般都是很大的(用户数可能是百万、千万、亿级, 标的物可能是十万、百万、千万级), 而每个用户只会操作过有限个标的物, 所以用户行为矩阵是稀疏矩阵 。 正因为矩阵是稀疏的, 会方便我们进行相似度计算及为用户做推荐 。
图2:用户对标的物的操作行为矩阵
相似度的计算可以采用cosine余弦相似度算法来计算两个向量

分享协同过滤思想简介 什么是协同过滤?

文章插图
(可以是上图的中行向量或者列向量)之间的相似度:

分享协同过滤思想简介 什么是协同过滤?

文章插图
计算完了用户(行向量)或者标的物(列向量)之间的相似度, 那么下面说说怎么为用户做个性化推荐 。
1.基于用户的协同过滤
根据上面算法思想的介绍, 我们可以将与该用户最相似的用户喜欢的标的物推荐给该用户 。 这就是基于用户的协同过滤的核心思想 。
用户u对标的物s的喜好度sim(u,s)可以采用如下公式计算, 其中U是与该用户最相似的用户集合(我们可以基于用户相似度找到与某用户最相似的K个用户),

分享协同过滤思想简介 什么是协同过滤?

文章插图
是用户

分享协同过滤思想简介 什么是协同过滤?

文章插图
对标的物s的喜好度(对于隐式反馈为1, 而对于非隐式反馈, 该值为用户对标的物的评分),

分享协同过滤思想简介 什么是协同过滤?

文章插图
是用户

分享协同过滤思想简介 什么是协同过滤?

文章插图
与用户u的相似度 。

分享协同过滤思想简介 什么是协同过滤?

文章插图
有了用户对每个标的物的评分, 基于评分降序排列, 就可以取topN推荐给用户了 。
2.基于标的物的协同过滤
类似地, 通过将用户操作过的标的物最相似的标的物推荐给用户, 这就是基于标的物的协同过滤的核心思想 。
用户u对标的物s的喜好度sim(u,s)可以采用如下公式计算, 其中S是所有用户操作过的标的物的列表,
是用户u对标的物

分享协同过滤思想简介 什么是协同过滤?

文章插图
的喜好度,

分享协同过滤思想简介 什么是协同过滤?

文章插图
是标的物

分享协同过滤思想简介 什么是协同过滤?

文章插图
与s的相似度 。

分享协同过滤思想简介 什么是协同过滤?

文章插图
有了用户对每个标的物的评分, 基于评分降序排列, 就可以取topN推荐给用户了 。
从上面的介绍中我们可以看到协同过滤算法思路非常直观易懂, 计算公式也相对简单, 并且后面两节我们也会说明它易于分布式实现, 同时该算法也不依赖于用户及标的物的其他metadata信息 。 协同过滤算法被Netflix、Amazon等大的互联网公司证明效果也非常好, 也能够为用户推荐新颖性内容, 所以一直以来都在工业界得到非常广泛的应用 。
三、离线协同过滤算法的工程实现虽然协同过滤算法原理非常简单, 但是在大规模用户及海量标的物的场景下, 单机是难以解决计算问题的, 我们必须借助分布式技术来实现, 让整个算法可以应对大规模数据的挑战 。 在本节, 我们基于主流的Spark分布式计算平台相关的技术来详细讲解协同过滤算法的离线(批处理)实现思路, 供大家参考(读者可以阅读参考文献1、2、3、4了解协同过滤算法原理及工业应用), 同时会在下一节讲解在近实时场景下怎么在工程上实现协同过滤算法 。
在这里我们只讲解基于标的物的协同过滤算法的工程实现方案, 基于用户的协同过滤思路完全一样, 不再赘述 。
为了简单起见, 我们可以将推荐过程拆解为2个阶段, 先计算相似度, 再为用户推荐 。 下面分别介绍这两个步骤怎么工程实现 。
1.计算topK相似度
本步骤我们计算出任意两个标的物之间的相似度, 有了任意两个标的物之间的相似度, 那么我们就可以为每个标的物计算出与它最相似的K个标的物了 。

推荐阅读