个性化推荐系统,实现了新闻、二手信息等多种类型的信息的个性化推荐,每一个用户都会拥有属于自己的个性化推荐列表。下面简单介绍推荐架构及推荐流程。
  本推荐架构参照Lambda架构,分为三层:批处理层、实时处理层和服务层。
  (1)批处理层:主要组件是HDFS、Hbase和Spark MLlib。持久化的历史数据、静态数据保存于Hbase或HDFS;应用程序使用Spark
MLlib机器学习算法库,批处理历史数据,建立聚类或分类模型;新数据经过流处理后输入模型,从而获得分类标签。

  以新闻推荐为例:在腾讯、搜狐、新浪网等网站按类别(如体育、娱乐、教育等)爬取新闻,分词过滤,建立每篇新闻的词特征向量,并打上相应类别标签。将处理过的数据保存到Hbase中作为训练数据。编写Spark程序读取训练数据,调用MLlib的贝叶斯分类算法,训练新闻分类模型。
  根据用户历史浏览情况对用户进行协同过滤,对待推荐的新闻进行聚类,都在本层实现。

  (2)实时处理层:主要组件是Kafka和SparkStreaming。爬虫作为Kafka的producer,将数据推送到Kafka中暂存。持久化程序作为一个Kafka的consumer,将原始数据保存到HDFS或Hbase。需要实时流处理的程序作为另外的Kafka
consumer,对数据进行实时处理,结果输出到持久化存储或模型中进行进一步处理。
  以新闻推荐为例:爬虫定时爬取各个新闻网站的新文章,持久化程序从kafka中取出数据保存到Hbase;Spark
Streaming实现的流处理程序对新闻进行实时分词、过滤、建立特征向量,然后输入新闻分类模型进行新闻分类,同时将特征数据保存到Hbase中持久化。打上标签的新闻保存到Redis中供服务层使用。

该层还实现用户关联访问图的维护。关联访问即在一个时间段内,一个用户看了新闻A也看了新闻B。关联访问图以每个待推荐新闻作为顶点,关联访问了两个顶点的用户数作为两个顶点的边。图根据用户的浏览情况实时更新,保存在redis里。

  (3)服务层:主要组件是redis,web服务程序。redis保存各个策略得出的推荐列表,当用户从web服务界面登录时,根据redis中保存的用户偏好情况、用户聚类结果、新闻聚类结果、随机抽取结果、协同过滤结果以及关联访问结果按照组合策略给出该用户的推荐列表。


下一篇将对本文中提到的各种工具做简要介绍:推荐系统相关工具简介
<http://blog.csdn.net/fanyingkk/article/details/79465988>