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


  1. 更新用户的行为记录HBase表:UAction
【分享协同过滤思想简介 什么是协同过滤?】基于(1)获取中的用户行为记录, 当(2)处理完之后, 将行为记录插入用户行为表UAction中 。 为了计算简单方便及保留用户最近的行为, 用户行为表中我们可以只保留最近N条(可以选择的参数, 比如20条)行为, 同时只保留最近一段时间内(比如5天)的行为 。
  1. 为用户生成个性化推荐
有了上面(1)、(2)、(3)步的基础, 最后一步是为用户做推荐了, 我们对计算过程简单说明如下:
用户U对标的物的评分

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

文章插图
可以采用如下公式计算 。

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

文章插图
其中t是用户操作过的标的物,

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

文章插图
是该用户对标的物t的得分(即图10中UAction数据结构中的评分r),

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

文章插图
是标的物t和标的物s之间的相似度, 可以采用如下公式计算, 这里

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

文章插图
就是标的物关联表CR中(t,s)对应的得分,

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

文章插图


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

文章插图
类似 。

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

文章插图
当我们计算完了用户U跟所有标的物的得分之后, 通过对得分降序排列取topN就可以作为U的推荐了 。 当标的物量很大(特别是新闻短视频类产品)时, 实时计算还是压力非常大的, 这时我们可以采用一个简单的技巧, 我们事先从CR表中过滤出跟用户行为表中至少有一个标的物t有交集的标的物s(即标的物对

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

文章插图
得分不为零), 只针对这部分标的物计算

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

文章插图
, 再从这些标的物中选择得分最大的topN推荐给用户 。 为什么可以这么做呢?因为如果某个标的物s与用户行为标的物集合无交集, 那么根据计算

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

文章插图
的公式,

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

文章插图
一定为0, 这时计算出的

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

文章插图
也一定为0 。
上面针对一个用户怎么实时计算协同过滤做了讲解, 那么在一个时间窗口W中有若干个用户都有操作行为, 这时可以将用户均匀分配到不同的Partition中, 每个Partition为一批用户计推荐 。 具体流程可以参考下面图11 。 为每个用户计算好推荐后, 可以插一份到HBase中作为一个副本, 另外还可以通过Kafka将推荐结果同步一份到CouchBase集群中, 供推荐Web服务为用户提供线上推荐服务 。

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

文章插图
图11:在同一时间窗口W中为多个用户生成个性化推荐
近实时的协同过滤主要用于对时效性要求比较高的产品形态, 比如新闻、短视频等应用 。 这些应用标的物更新快, 用户消耗一个标的物(读一篇文章、看一段短视频)所花的时间较短, 这类应用一般是用于填补用户的碎片化时间的 。 而对于电商、视频等产品, 近实时的协同过滤不是必须的 。
上面我们讲解的只是近实时协同过滤的一种实现方案, 其实近实时协同过滤有很多可行的实现方案, 我们的实现方案跟参考文献6中的covisitation counts方案思路本质上是一致的 。 读者也可以阅读参考文献5, 腾讯给出了另外一个利用Storm来实时实现协同过滤的方案, 思路是非常值得借鉴的 。 另外参考文献6中Google实现了一个新闻的协同过滤算法, 通过MinHash算法基于用户行为来近实时计算用户相似度, 最终通过类似基于用户的协同过滤的算法来为用户推荐 。 参考文献7、8也对怎么增量做协同过滤给出了独特的方法和思路 。
五、协同过滤算法的应用场景协同过滤是非常重要的一类推荐算法, 我们在第三、第四节介绍了批处理(离线)协同过滤和近实时协同过滤的工程实现方案, 相信大家对怎么基于Spark及HBase技术实现协同过滤有了比较清晰的认知 。 那么协同过滤算法可以用于哪些推荐业务场景呢?它主要的及延伸的应用场景有如下3类:

推荐阅读