1. 项目简介
无线短视频推荐项目,负责无线端用户的短视频推荐,也就是给手机端用户推荐短视频。主要用到了item-based协同过滤的思想,为用户提供候选短视频推荐集合,然后再利用预训练的LR模型返回候选推荐集合的最终排序,推给用户。
2. 推荐系统分类
感谢@奔波的梦想 的总结。推荐算法大致可以分为三类:基于内容的推荐算法、协同过滤推荐算法和基于知识的推荐算法。
基于内容的推荐算法,原理是用户喜欢和自己关注过的Item在内容上类似的Item,比如你看了哈利波特I,基于内容的推荐算法发现哈利波特II-VI,与你以前观看的在内容上面(共有很多关键词)有很大关联性,就把后者推荐给你,这种方法可以避免Item的冷启动问题(冷启动:如果一个Item从没有被关注过,其他推荐算法则很少会去推荐,但是基于内容的推荐算法可以分析Item之间的关系,实现推荐),弊端在于推荐的Item可能会重复,典型的就是新闻推荐,如果你看了一则关于MH370的新闻,很可能推荐的新闻和你浏览过的,内容一致;另外一个弊端则是对于一些多媒体的推荐(比如音乐、电影、图片等)由于很难提内容特征,则很难进行推荐,一种解决方式则是人工给这些Item打标签。
协同过滤算法,原理是用户喜欢那些具有相似兴趣的用户喜欢过的商品,比如你的朋友喜欢电影哈利波特I,那么就会推荐给你,这是最简单的基于用户的协同过滤算法(user-based collaboratIve filtering),还有一种是基于Item的协同过滤算法(item-based collaborative filtering),这两种方法都是将用户的所有数据读入到内存中进行运算的,因此成为Memory-based Collaborative Filtering,另一种则是Model-based collaborative filtering,包括Aspect Model,pLSA,LDA,聚类,SVD,Matrix Factorization等,这种方法训练过程比较长,但是训练完成后,推荐过程比较快。
最后一种方法是基于知识的推荐算法,也有人将这种方法归为基于内容的推荐,这种方法比较典型的是构建领域本体,或者是建立一定的规则,进行推荐。
item-based 和 user-based 协同过滤的比较:
我们再来回顾一下item-base CF算法的特点:
- 物品数明显小于用户数的场合,否则物品相似度矩阵计算代价很大
- 适合长尾物品丰富,用户个性化需求强的领域
- 对新用户友好,对新物品不友好,因为物品相似度矩阵不需要很强的实时性
- 利用用户历史行为做推荐解释,比较令用户信服
所以item-base挺适合做电影的推荐。当用户浏览某个电影的时候,我们可以推荐给他类似的电影,或者根据用户以前的观影记录,推荐他感兴趣的电影。
3. 项目流程
- 根据集群中7天用户-视频score数据,计算视频两两之间的余弦相似度
- 为每个视频选取与之相似度>0.5且最接近的top40个视频
- 根据用户7天之内看过的视频,将相似视频merge进来,根据看过视频的score和相似视频的余弦相似度乘积,对看过的所有视频的所有相似视频打分,取top50作为用户的推荐视频候选集(去掉已经看过的视频)
- 根据线上抽取的特征和用户、视频15天线下特征输入预训练的LR得到候选集合的点击率排序,作为最终的推荐顺序。
4. CF核心思路
* user1 user2
* item1 score11 score21 (X)
* item2 score12 score22 (Y)
* --------------------------------
* sim(item1,item2) = XY / math.sqrt(XX) * math.sqrt(YY)
* XY= score11 * score12 + score21 * score22
* XX = score11 * score11 + score21 * score21
* YY = score12 * score12 + score22 * score22
已知一周内,用户观看视频的数据,形式为RDD[(uid,(aid,score))]
按照uid做一次join操作,就可以得到RDD[((aid1,aid2),(score11,score22))],即用户对以及同时看过两者的用户对其的score
接下来就可以计算出aid对的余弦相似度了
然后根据余弦相似度为每个aid选出最相近的top40相似ad
5. 优化方向
暂时就想到了一个:
将用户对电影的score做时间衰减
之后继续补充
6. 核心代码
|