基于物品的协同过滤ItemCF

上一篇笔记讲到了推荐系统的链路,其中讲到了召回,那么这篇文章就来讲讲召回中会用到的算法,今天介绍基于物品的协同过滤(Item Based Collaborative Filtering,缩写 ItemCF)。

 

这篇文章的三个要点:
1. 如何计算两个物品之间的相似度。
2. 如何预估用户对候选物品的兴趣。
3. 如何利用索引在线上快速做召回。

ItemCF的原理:

我喜欢看CBA,CBA与NBA相似,我又没看过NBA,推荐系统就会给我推荐NBA。

问题来了 ,推荐系统是怎么知道CBA 与NBA相似的呢?

其实它是根据用户的行为来做出判断的:看过CBA的用户也看过NBA,给CBA点赞的用户也给NBA点赞,推荐系统通过挖掘用户的行为来找到两样东西之间的相似性。

ItemCF的实现:

基于物品的协同过滤ItemCF_第1张图片

用户对这个黄色的候选物品感兴趣的概率为:2*0.1+1*0.4+4*0.2+3*0.6=3.1

假如有200个候选物品,推荐系统就可以计算出用户交互过的这些东西分别与这200个候选物品的相似度 ,从而预估这200个候选物品的兴趣分数,最后返回TOP100来推荐给用户既可。

那问题又来了,怎么计算两样东西的相似度呢?

其实本质上来讲,两样东西的受众重合度越高,就证明两样东西越相似。

基于物品的协同过滤ItemCF_第2张图片从这幅图可以看出6个人里面有4个人都是同时喜欢这两样东西的,所以这两样东西的相似度为4/6

不过也不能这么说,因为其实不同的企业会有自己的计算两样东西的相似度的方法,这里仅仅是其中一种,要清楚的是,这是有明显缺点的,比如这种做法没有考虑到这群人是不是一个圈子的,你想想啊,如果中间这四个人都是一个微信群的,有一个人刚好同时转发了这两个东西,事实上这两个东西(比如球鞋,口红),这四个人都点进去看了这两样东西,推荐系统就会有记录,认为这两样东西相似,实际上这两样东西并不相似。

ItemCF召回的完整流程:

1)建立“用户-->物品”的索引:记录每个用户点击,交互过的物品,这样一来,对每一个用户都可以找到他近期感兴趣的物品列表。

2)建立“物品-->物品”的索引:计算物品之间两两的相似度(这个过程计算量挺大的)

     对于每个用户感兴趣(近期浏览过)的物品,索引出与这个物品最相似的k个物品

3)给定用户ID,通过“用户-->物品”的索引找到用户感兴趣(近期浏览过)的物品列表(last-n)

4)对于last-n中的每个物品,通过“物品-->物品”的索引,找到Top-k个相似物品,这样一来,候选物品总共有nk个

5)对于这nk个物品,用公式预估用户对物品的兴趣分数,返回分数最高的100个作为推荐的结果,即ItemCF这个通道的输出

最后思考一下,索引的好处在哪儿呢?事实上,我们只需要维护这两个索引,实时更新用户最近交互的n个物品,以及n个物品中每个物品相似度最高的k个既可,这是一种很方便快捷的方法。

下篇文章,我将会讲讲与ItemCF很像的另一个算法,UserCF。

你可能感兴趣的:(推荐系统,推荐算法,深度学习,数据结构)