基于HBase的实时消息推荐系统*
2014-02-16郭若男王晶沈奇威
郭若男,王晶,沈奇威
(1 北京邮电大学网络与交换技术国家重点实验室,北京 100876; 2 东信北邮信息技术有限公司,北京 100191)
基于HBase的实时消息推荐系统*
郭若男1,2,王晶1,2,沈奇威1,2
(1 北京邮电大学网络与交换技术国家重点实验室,北京 100876; 2 东信北邮信息技术有限公司,北京 100191)
在现有的推荐系统中,基于用户兴趣模型都能够表达出用户的兴趣,但在用户兴趣发生变化时却不能够及时更新模型。提出基于用户反馈内容来实时更新用户兴趣的消息推荐系统,通过实时更新模型和特征向量进而得到用户当前最匹配的推荐结果。并使用HBase(Hadoop Database)作为存储,能更好地适应数据规模的增长。
用户兴趣; 实时推荐系统; HBase
1 引言
随着互联网的飞速发展和计算机的日益普及,信息也正在呈爆炸式增长,WWW已经发展成为包含多种信息资源、站点遍布全球的巨大信息服务网络。与此同时,新社交媒体越来越流行,可以从中获得大量丰富多彩的信息同时,也带来了严重的“信息过载”问题。推荐系统作为缓解信息过载最有效的方法之一,在社交媒体中的作用也日趋重要。现有的推荐系统虽然能够给用户进行个性化的推荐,但是在用户行为发生变化时却不能很好的更新推荐结果。
本文针对实时个性化推荐提出了一种解决方案,其特色主要体现在实时消息处理、实时用户反馈处理、推荐结果实时更新等3个方面。此外,本文融合了多达20种信息来源,例如技术博客、新浪微博、科技网站以及各大BBS等,使用户不仅可以灵活订阅不同的消息源,并且能够通过不同的平台入口阅读个性化消息并进行评分、收藏等多种反馈。本文提出两种平台入口分别是微信应用、网站两种,能够更好的适应手机端用户和PC端用户的需求。
2 设计目标
提供实时个性化消息推荐服务,需要解决以下几个关键问题:(1)信息有一定时效性,系统需要获取较新的优质消息;(2)系统能够处理并存储爬虫获取的实时消息;(3)不同用户偏好的消息源不一样,系统需要提供不同的消息源并允许用户选择订阅;(4)系统能够检测用户的反馈信息,并据此在线更新算法模型及推荐结果;(5)系统应能够支持不同的应用入口,并保证同一个用户从不同入口阅读的消息是一致的。
随着各种社交媒体的兴起,用户随时随地都能获取到信息。本文有效地整合了不同渠道的消息,包括技术博客、新浪微博、科技网站和一些大型论坛,并从中给用户推荐最匹配的消息,具有一定的实践意义。
3 系统设计
3.1 系统设计图
系统设计如图1所示。系统根据功能的不同划分为5层,分别是消息源获取层、特征工程层、推荐层、服务层和应用层。图1中的箭头方向表示数据的流向。在消息源获取层和特征工程层之间的通信是通过操作KeyValue数据库HBase[1]以及调用模块提供的API实现,而在其他层次之间是通过调用API来进行通信的。本推荐系统有两个应用入口,分别是微信端公众号以及网站应用。
3.1.1 消息源获取层
本文设计的推荐系统包含多种数据源,如技术博客、新浪微博、科技网站以及各大BBS论坛等。首先由多个爬虫通过爬取不同的网站获取数据,其次将获取的数据实时地传送到推荐系统中,并根据一定的过滤策略最终作为带推荐的消息存储到HBase中。
3.1.2 特征工程层
特征工程一直是推荐系统中比较重要的一部分。在推荐系统中,按照种类划分特征分为用户特征和推荐的消息特征。本系统是根据用户的兴趣进行消息推荐的,因此用户特征选择是采用用户发表的所有新浪微博数据作为特征集[2~4]。同样的,消息的特征是基于消息内容来构造能够表达消息类型的向量。
基于文本内容构造特征向量的流程是分词、过滤、通过一定的算法构造词典向量。常用的分词模型有Lucene开源的IK分词器以及中科院的Ansj分词器[5]。之后过滤分词结果,忽略不重要的词及敏感词,得到干净的分词结果。最后,使用TF-IDF或Google开源的Word2Vec工具训练得到词典向量[6,7]。由根据词典得到词的向量并累加向量将得到代表文本内容的向量。由于新媒体及网络热点的影响,词典向量需要定时更新,可以将最近的几个月所获取的所有消息数据作为训练集,每个月离线训练来更新词典向量。
3.1.3 推荐层
推荐层提供了不同的推荐算法模型,并根据不同的向量类型来选择具体模型进行推荐和在线训练。此外,推荐层为每个用户维护一个候选消息列表,并且只能从候选消息列表中生成推荐结果。每当系统检测到一条新的消息,倘若用户订阅了该类型的消息源,则更新该用户的候选消息列表,并按照相似度从高到低存储。因此候选消息列表是实时更新的并且有序,保证了推荐的速度及质量。
图1 系统设计图
3.1.4 服务层
服务层为应用层提供统一服务,方便整个系统的扩展与融合,其服务包括用户管理服务和消息管理服务。用户管理包括用户的注册、绑定微博、激活与禁用; 消息管理包括接收实时爬取的消息、查看新的消息、查看历史消息、评分与收藏。
3.1.5 应用层
在服务层和应用层之间采用Thrift通信协议,实现了C/S模式[8]。应用层作为服务层的客户端,包含两个应用分别是微信公众号和网站应用。本推荐系统具有良好的独立性和扩展性,能够非常方便的增添和删除一个应用而不影响核心的推荐服务。
3.2 平台各功能模块功能具体分析
3.2.1 消息存储模块
本系统融合多种消息源,并支持用户订阅。考虑到快速的数据增长速率以及庞大的数据规模,因此采用HBase作为存储。HBase能够支持海量数据的分布式实时存储,查询速度较快;并且HBase是面向列的KeyValue数据库,可以存储异构数据并且方便范围查询。这些特性刚好解决了消息存储模块存在的问题。
HBase表是根据key从小到大有序排列的[9]。本文中,所有消息源的数据都存储在同一张HBase表中。表的Rowkey是由3部分组成,分别是消息类型、Long的最大值减去消息创建时间、消息ID。这样可以保证纳入到系统中的消息ID是唯一的,并使得最新的消息在前面,以及同一个类型的消息源集中在某一个区域块(即Region),能够有效的减少扫描数据源的时间,提高效率。
3.2.2 用户特征模块
UserFeatureProvider是用户特征模块,负责维护所有用户的特征向量,并对外部事件提供实时响应。相关的外部事件包括新注册用户、查询用户的特征向量以及根据用户的反馈信息相应的更新特征向量。
3.2.3 消息特征模块
MessageFeatureProvider是消息特征模块,负责过滤、存储以及查询实时消息的特征向量。采用HBase作为存储以解决消息的高速增长速度所带来的影响。为了提供高质量的消息,将会对消息的字长、敏感词等多个维度进行限制并过滤。持久化消息的特征向量时,使用批量提交的方式以提高存储速度。
3.2.4 算法模型
ModelProvider是算法模型模块,负责维护多个算法模型。本模块启动时,将会读取对应配置文件进行初始化指定的算法模型。不同的模型有不同参数及计算方法,并支持在线训练与离线计算。
3.2.5 候选消息队列模块
MessageCandidateIndex是候选消息队列模块,负责维护每个用户对应的候选消息集合。其中候选消息集合是根据推荐结果从高到低排序后的结果。该模块能够实时更新并查询每个用户的候选集。
3.2.6 推荐引擎模块
RecommendationEngine是推荐引擎模块,作为整个推荐系统的控制中心,负责对外提供推荐服务。先获取用户的特征向量以及该用户的候选消息队列,其次获取对应的模型列表并进行计算推荐结果。最终根据过滤规则再次对等待推荐的消息进行过滤。其中过滤规则包括两方面,一是已经推荐过的消息不再推荐,一是对内容相似度很高的消息去重。最终生成推荐结果提供给请求方。
3.2.7 服务与应用模块
服务层采用Thrift技术作为通信协议,实现了C/ S模式。其中服务模块作为Server端向外部应用提供服务;应用模块最为Client端来使用服务包括用户的注册、绑定微博、激活与禁用、接收实时爬取的消息、查看新的消息、查看历史消息、评分与收藏。应用模块包含两个应用,分别是微信公众号和网站应用。应用模块具有很强的扩展性,极大的方便开发人员增添或移除一个应用。
4 结束语
本文提出了一个实时消息推荐系统的设计与实现方案,使用HBase数据库作为存储以便能更好地应对快速增长的数据并保证读取速度尽量不受影响。为了提高推荐结果的准确性,本系统充分利用用户的反馈数据,及时更新推荐模型、特征向量和推荐结果。基于该实现方案,用户能够从多个平台入口来阅读个性化消息并支持评分、收藏等功能,具有良好的扩展性。然而,本系统中特征向量主要基于内容生成,并没有充分利用用户的个人信息及社交网络信息,导致特征向量类型单一,从而降低了推荐结果的新颖度,未来工作中将对此加以改进。
[1] 罗燕新. 基于HBase的列存储压缩算法的研究与实现[D]. 华南理工大学,2011.
[2] 林霜梅. 个性化推荐系统中的用户建模及特征选择[D]. 上海交通大学,2007.
[3] 赵岩露, 等. 基于特征分析的微博用户兴趣发现算法[J]. 电信工程技术与标准化,2012(11).
[4] 李峰. 基于隐式反馈的自适应用户兴趣模型[J]. 计算机工程与应用,2008(9).
[5] 向晖. 基于Lucene的中文字典分词模块的设计与实现[J]. 华中科技大学,2006,8.
[6] 修驰. 适应与不同领域的中文分词方法研究与实现[J]. 北京工业大学,2013,6.
[7] 郑文超. 利用word2vec对中文词进行聚类的研究[J]. 北京邮电大学,2013,12.
[8] 刘书楠. Thrift的入门简介[J],上海东华大学,2013,1.
[9] 卓海艺. 基于HBase的海量数据实时查询系统设计与实现[J].北京邮电大学,2013,2.
Real-time recommendation system based on HBase
GUO Ruo-nan1,2, WANG Jing1,2, SHEN Qi-wei1,2
(1 Beijing University of Posts and Telecommunications Networking and Switching Technology, State Key Laboratory, Beijing 100876, China; 2 EBUPT Information Technology Co., Ltd., Beijing 100191, China)
The user interests models in the existing recommendation systems can express the user's interests effectively, but they can't update the user interests models in time while the user interests change. This paper proposes a recommendation system of messages depending on user’s feedback to modify user interests. It can update model and the feature vector in time, and then the most matching recommendation results for every user. In addition, the system can better adapt to the growth of the scale of data by using HBase (Hadoop Database) as storage.
user interests; real-time recommendation system; HBase
TN929.5
A
1008-5599(2014)11-0078-04
2014-10-08
国家973计划项目(编号:2013CB329102);国家自然科学基金资助项目(No. 61471063, 61372120, 61271019, 61101119, 61121001);长江学者和创新团队发展计划资助(编号:IRT1049);教育部科学技术研究重点(重大)项目资助(编号:MCM20130310);北京高等学校青年英才计划项目(编号:YETP0473)。