推荐系统架构

推荐系统架构

推荐系统常用lambda架构为三层,分别是:批处理层(batch layer), 服务层(serving layer), 实时处理层(speed layer):

1.批处理层:收集各维度的数据,生成画像,批量处理数据,生成离线推荐结果.
2.服务层:结合离线推荐结果、在线计算结果,推送上层.
3.实时处理层:实时处理在线数据,生成增量结果,讲结果输出.
 
下图提供了一个更为详细5层的架构:
从底层往上依次是:数据收集处理层(data collection and processing),
         离线推荐模型层(recommender model),
         推荐后处理层(recommender post-processing),
         在线实时模型层(online modules),
         面向用户层(user interface).
            

   

一.数据收集处理层(data collection and processing):

这一层主要是收集数据并将过滤需要的数据按格式存储,方便上层调用.收集数据主要是处理每天的日志,每天的日志量都会很大,需要对大量的日志进行过滤,日志可能存储在hdfs上,需要写mapreduce程序将日志过滤并将结果格式化存储到hbase 中或mongodb中.

 

二.离线推荐模型层(recommender model):

这一层是核心层,将计算出最原始的推荐结果集, 通过调用下一层格式化好的数据,结合关系型数据库,生成一些画像,如用户画像, 物品画像, 职位画像,店铺画像, 商圈画像等等. 之后可以在这些画像的基础上利用推荐算法(如协同过滤, 基于内容等,后面会详细介绍),计算相似度时,可以先用hash缩小计算需要相似度的数量,选出topk近邻, 而不用与集合中所有的元素一一计算,可以减少计算量,缩短计算时间. 基于多种模型计算的结果可以提高推荐结果的准确度和新颖性,计算推荐结果是最耗时的一层, 要做的优化工作也比较多的一层, 可以利用如分治法, 多线程等进行 并行计算, 节省时间.将计算好的结果存入hbase或mongodb中.

 

三.推荐后处理层(recommender post-processing):

这一层是将原始的推荐结果筛选给上一层提供更精准的召回结果, 一些活跃度较高的用户产生了大量的推荐结果,一些活跃度较低的用户产生的推荐结果较少, 这一层我们可以将上一层多重模型计算的结果按不同权重筛选结合, 或加一层排序优化策略如gbdt, 由于展示给用户的结果是很少的量, 可以做一些随机策略, 让用户看到不同的推荐结果, 提高用户体验, 最后要将用户已经看过的,屏蔽的或负反馈的结果过滤掉, 将一系列处理好的数据存储到hbase或mongodb中, 同时将数据写到redis或elasticsearch,供上一层能够快速实时的调用, 缩短结果响应时间, 提高用户体验.

 

四.在线实时模型层(online modules):

这一层是实时推荐层,将服务处理层的结果取出, 实时推荐给用户, 这一层需要结合用户一些实时的操作, 动态的处理结果, 如用户点击某些item, 那么给item会召回一些结果, 用户屏蔽,会屏蔽一些召回结果, 用户搜索, 根据关键词会召回一些结果等等, 需要实时的召回和屏蔽不同结果,达到推荐结果的准确性和用户良好的体验.

 

五.面向用户层(user interface):

面向用户层主要是将推荐的结果展现给用户,包括展示,推送信息,发邮件等.并收集用户的反馈结果,点击还是未点击,查看还是未查看,收集正反馈和负反馈,将数据结果存储, 为以后更为精准的推荐提供参考.

 

posted @ 2016-07-25 10:10  xmeo  阅读(291)  评论(0编辑  收藏  举报