实时计算可以及时捕获用户短时兴趣,同时可以快速反馈分发当前系统的用户兴趣内容。大量实践以及发表的文章都显示了推荐系统实时化,对推荐精准度的提高的有效性和必要性。算法
实时推荐相关工做很是多,腾讯和北大合做的两篇SIGMOD文章是比较实际和详细的实现,采用的计算框架可以支持大规模数据的实时推荐,如下将会分开简述如下两篇文章。编程
Huang发表了基于Storm和KV存储的大规模实时推荐系统 (TencentRec: Real-time Stream Recommendation in Practice)数据结构
实现了一系列经典推荐算法的实时版本
实现了数种实时算法提升推荐精度
普遍应用于业务有效提升
腾讯采用使用storm缘由,支持实时数据流式计算,良好的可扩展性、可容错性,采用简单编程模型。文章核心包括实时增量计算的ItemCF,以及用户隐式反馈计算、实时剪枝算法、基于用户画像的数据稀疏性策略。应用在多个业务上都有不一样程度的提高,最明显的是腾讯视频的全局表现提高高达30%。架构
全文核心应该是下图六道公式,阐述腾讯如何具体实现的增量itemcf。框架
文章中的co-rating,其实就是咱们常说的user bias. 公式3和4解决了用户隐式反馈问题,细节的计算能够参考2016的文章,实际是一个log函数融合了用户的浏览、点击、分享、购买等行为,转化成rating.ide
corating.png函数
请注意公式4,因为他们定义了corating,实际是将类似度的增量计算从L2范数的计算转化成了L1范数计算.(当Rup取x的时候,y=1/x)。测试
可扩展的增量计算ui
itemcf.pngspa
initemcf.png
腾讯视频的推荐应用(Real-time Video Recommendation Exploration)
实时处理、大规模数据下的准确率和可扩展性。
开发了一个基于矩阵分解的大规模在线协同过滤算法,以及一系列的自适应更新策略。
经过增长包括视频类别、时间因素影响、用户画像剪枝以及训练等方法,提升实时TopN推荐的精度。
在咱们看来,全文核心在于实时计算的数据流转,以下图所示:
tecvideo.png
![图片上传中...]
topo.png
糖豆总体推荐框架,从离线,近线,在线三套计算流程组合而成。在线流程基于Spark Streaming框架实现,部署在近线集群。 在线推荐框架实时根据用户行为,生成实时推荐列表,从而知足用户瞬时兴趣,提升推荐系统的推荐新鲜度。简单架构图以下:
糖豆实时架构.png
实时计算流程以下图所示:
实时计算流程图
分解步骤:
Spark Streaming 读取Kafka,原始日志ETL
提取用户隐式反馈,生成候选集tuple (uid,vid)
天天凌晨会将离线计算好的ItemCF模型结果集导入Redis。itemcf数据结构是一个similarity vid list。
实时维护看过视频set,对看过视频的处理候选集tuple过滤该用户看过的视频
实时更新推荐过视频set,候选集tuple过滤当天已经被推荐过的视频
候选集写入Redis推荐list
部署在集群Master节点的监控脚本会每30s扫描一次实时计算代码进程,若是发现进程被failed,会自动拉起实时计算Spark Steaming进程。若是进程拉起失败会触发邮件、短信报警
根据咱们的AB测试数据来看,总体CTR提高25%。用推荐系统的A版对比无推荐的B版,用户观看时长提高47%。
recabdata.png
较多代码逻辑集中在Redis。目前Redis无灾备措施,同时IO和负载也会出现Peak。Spark Streaming 目前实时级别在分钟级。须要升级成storm的秒、毫秒级别。须要用户点击等行为才会生产数据,容易召回不足。