feed流推荐系统设计

xiaoxiao2021-07-05  239

本文主要分享个人经历中关于推荐系统的应用理解,包括整体推荐系统架构设计、推荐后台服务设计。

推荐系统架构设计 1.0

推荐系统根据数据使用划分为在线和离线两部分。APP服务日志通过flume采集,然后传给离线和在线业务使用。离线数据主要用来离线训练模型,如gbdt、lr、xgboost等,在线数据特征用来让模型进行在线预测。如下图所示:

在线部分

实时数据从kafka获取到后直接进入spark streaming(这里也可以用其他实时计算技术,如storm,flink)进行处理,计算出实时特征存入redis,供线上模型预测服务使用。

离线部分

离线部分数据主要分为两部分,一部分是mysql定时拉取过去,另一部分是从flume实时拉数据到hive数据仓库。mysql主要存储用户相关变动频率小的属性特征,flume采集计算的主要是帖子(feed)相关变化频率大的特征。

推荐系统后台设计 1.0

推荐主要方法分为召回和排序过程,召回过程是粗步选取数据,排序过程是对筛选后的数据精确排序,结果返回给用户。

推荐后台架构图

过程如下:
用户请求接口,传入uid作为参数。先看用户uid对应在缓存中有没有推荐结果,如果有则直接获取返回,如果没有则重新获取。根据用户uid,去不同召回源获取对应候选帖子。选取的帖子需要进行去重,过滤状态异常帖子。对不同召回源获取的帖子先合并,然后随机取1000条。排序环节,对1000条帖子进行打分排序,取top 200条。根据用户历史推荐信息,对获取到的200条数据进行过滤,保证推荐结果不重复。对过滤结果取25条返回用户,剩下帖子放在缓存,等待下次请求使用。

备注: 上面的帖子取的条数都是根据实际经验选择,具体可以调整。

(完)

关注公众号我们可以更方便沟通交流:水木之椿

转载请注明原文地址: https://www.6miu.com/read-4821348.html

最新回复(0)