基于物品的协同过滤(itemCF)
基于物品的协同过滤(itemCF)
ItemCF的原理
ItemCF的实现
用户对物品的兴趣分根据点击,评论,收藏,转发来打分
用户对后续物品的兴趣值 = ∑ j l i k e ( u s e r , i t e m j ) × s i m ( i t e m j , i t e m ) 用户对后续物品的兴趣值 = \sum_{j} like(user, item_j)×sim(item_j, item) 用户对后续物品的兴趣值=j∑like(user,itemj)×sim(itemj,item)
公式中的itemj
是用户真实访问到的历史物品,item
是潜在的想推荐给用户的物品
物品的相似度
两个物品相似原理:两个物品的受众重合度越高,两个物品越相似。
例如:喜欢《射雕英雄传》和《神雕侠侣》的读者重合度高,可以认为《射雕英雄传》和《神雕侠侣》相似
计算两个物品相似度
喜欢物品i1的用户记作集合W1
喜欢物品i2的用户记作集合W2
交集V = W1 ∩ W2
两个物品相似度sim(i1,i2) , sim(i1,i2)结果在0~1内,越大表示越相似。
注:上面该公式没有考虑用户对物品喜欢的程度,考虑喜欢程度的公式如下。
下面like(v,i1)
表示用户v对物品i1的喜欢程度(1,2,3,4)。只喜欢i1或只喜欢i2的用户必有一方like为0。
所以该表达式实际上就是W1和W2的并集v(即喜欢i1也喜欢i2的用户)分别对物品i1和i2的喜欢程度。
分母相应也是W1中用户算上对物品i1的喜欢程度,W2中用户算上对物品i2的喜欢程度。
小结
这里的itemj是用户真实访问到的历史记录,item是潜在相关的想推荐给用户的
ItemCF召回的完整流程
事先做离线计算构建索引
离线计算主要建立“用户—>物品”及“物品—>物品”的索引
用户-物品索引主要功能:找到用户最近交互过的物品
物品-物品索引主要功能:根据用户交互过的物品找到与交互物品最相似的物品
用户—>物品索引搭建
物品—>物品索引搭建
线上做召回
为什么要用索引呢?数据库中有上亿个物品,如果挨个用公式计算用户对所有物品的兴趣分数再排序,那计算量太大了做不到实时,索引的意义就在于能避免枚举所有物品。
用了索引,只需要给2000个物品打分不需要给上亿个物品打分。
ItemCF召回流程小结
总结
ItemCF原理
ItemCF召回通道是召回中最重要的召回通道之一