学习王树森老师的《推荐算法课程》,自用笔记,欢迎讨论
基于物品的协同过滤
ItemCF 的原理
ItemCF 的原理:如果用户喜欢物品1,而且物品1与物品2相似,那么用户很可能喜欢物品2。
物品的相似度:两个物品的受众重合度越高,两个物品相似。
上述公式未考虑用户对物品喜欢的程度,下述公式考虑用户喜欢的程度:
ItemCF 召回的完整流程
- 事先做离线计算,建立两个索引:
a. “用户->物品”索引:用户感兴趣的物品列表
b. “物品->物品”索引:每个物品最相似的k个物品列表 - 线上召回
a. 给定用户id,根据“用户->物品”索引,找到用户近期感兴趣的物品last-n
b. 根据“物品->物品”索引,找到topk相似物品
取回相似物品n*k, 用公式预估用户对物品的兴趣分数
c. 返回分数最高的100个物品做为该召回通道输出
索引的意义在于避免枚举所有的物品,离线计算量大,线上计算量小。
SWing召回通道
Swing召回的原理
期望两个物品重合的用户广泛且多样,因此需要降低小圈子用户群体的重合权重。小圈子用户同时交互两个物品不能说明物品相似。
Swing召回与ItemCF召回的区别
Swing 模型,它跟 ItemCF 非常类似,唯一的区别在于计算物品相似度的方式不同。
基于用户的协同过滤
UserCF原理
UserCF 的原理:如果用户1跟用户2相似,而且用户2喜欢某物品,那么用户1很可能喜欢该物品。
推荐系统如何找到兴趣相似的用户?
- 点击、点赞、收藏、转发等物品有很大重合
- 关注的作者有很大的重合
UserCF实现
一、计算用户相似度
上述公式结果是介于0和1之间的,数值越接近1表示两个用户越相似。上述公式同等对待热门和冷门的物品;越热门的物品越无法反应用户的兴趣,对计算相似度则没有用;考虑物品冷门和热门的影响相似度公式可以变换为
nl越大则表示物品越热门则权重越小,nl越小则表示物品越冷门则权重越大。
二、根据下图方式逐一计算用户对候选物品的兴趣分数,取topK物品进行召回
UserCF召回的完整流程
- 事先做离线计算:建立“用户—>物品”的索引,记录用户交互过的物品,给定用户id可以找到他近期感兴趣的物品列表
- 事先做离线计算:建立“用户—>用户”的索引,给定用户id,可以快速找到跟他最相似的k个用户
- 线上做召回:给定用户id,通过“用户—>用户”的索引找到topk相似用户,对于top-k相似用户,通过“用户—>用户”的索引找到用户近期感兴趣的物品列表;对于召回的nk个相似物品,用公式预估用户对每个物品的兴趣分数,返回分数最高的100个物品,作为召回结果