基于物品的协同过滤ItemCF
思想
- 如果用户喜欢一个物品,那么很有可能也喜欢和它相似的物品
- 两个物品的受众重合度越高,两个物品就越相似
- 在推荐时,以用户历史交互物品和目标物品的相似度为权重,对用户对历史交互物品的评分进行加权,得到用户对目标物品的打分预测,排序筛选出top-k个物品
核心
物品相似度计算:余弦相似度
部署
- 离线计算
- user->item索引,记录每个用户交互的item
- item->item索引,计算item两两相似度取top-k作为索引
- 线上召回
- user-id通过user->item索引找到last-n个物品
- 对每个last-n物品使用item->item索引查找top-k相似物品
- 计算用户对物品的兴趣分数,排序、截断
Swing
思想
- 假如用户来自一个小圈子,由于小圈子内消息流通,所以小圈子用户同时交互两个物品,不能说明交互物品的受众重合度高
- 反之,如果多个不相干用户同时交互两个物品,说明交互物品的受众重合度高,物品越相似
- 对用户设置权重解决小圈子问题
核心
定义用户的重合度,如果重合度高则需要降低权重 overlap(u1, u2) = |J1 ∩ J2|, J1, J2分别代表用户u1, u2喜欢物品的集合 物品相似度计算 $$ sim(i_{1}, i_{2}) = \sum_{u_{1} \in V}{\sum_{u_{2} \in V}{\frac{1}{\alpha + overlap(u_{1}, u_{2})}}}, \; V是i_{1}, i_{2}受众交集 $$
基于用户的协同过滤UserCF
思想
- 用户应该会喜欢相似用户的交互物品
- 用户交互物品的重合度越高,用户之间越相似
核心
用户相似度计算——余弦相似度
流行度偏差
如果物品流行,那么它对用户的相似度贡献应该小,反之则大;避免流行物品增大实际不大相似用户的相似度
在计算用户相似度时,对每个物品引入一个流行抑制权重
部署
与ItemCF类似,都需要离线计算索引,区别是要计算的是user->item和user->user索引