大数据下电影推荐引擎的研究与实现_中国电影科技网 - 科技前沿
关于我们 | 联系我们   注册 中文|ENG
您现在的位置:首页 >> 科技前沿 >> 科技成果
科技前沿
科技动态
科技成果
科技论文
行业数据

大数据下电影推荐引擎的研究与实现
2016-07-28 | 访问次数: | 新闻来源:《现代电影技术》

  国家新闻出版广电总局电影数字节目管理中心 李海龙

  【摘要】伴随着电影行业的飞速发展,电影库变得越来越庞大,传统单机版的电影推荐引擎已经不能处理如今这样大规模的数据量了。在大数据下,为了提高电影推荐引擎的处理速度和增强电影推荐引擎可扩展性,推荐引擎架构方面应从单机部署向分布式集群部署转变。

  【关键词】  大数据 电影推荐引擎 Hadoop Mahout

  1背景

  伴随着电影行业的飞速发展,电影的产量一直保持着快速增长的态势,电影的观影人次也呈指数级增长,面对如此庞大的数据量,使用传统的单机版电影推荐引擎,整个推荐引擎就会崩溃掉。例如全球最大互联网电影资料库IMDB截止到2015年9月已经收录了345万部各类影片,676万人完成的6895万次评分。如果大规模采用商业化的解决方案,虽然短期内有效,但是成本昂贵且不便扩展。因此,在节省成本的情况下,研究并实现一个扩展性强的且有良好推荐效果的电影推荐引擎,具有重要的研究意义。

  GroupLens在1997年推出 MovieLens系统,这个系统被认为是世界上第一个电影推荐系统[1]。GroupLens研究组从MovieLens收集了多种评分数据集,这些数据集的规模也不同,

  可供研究者灵活选择,这为推荐系统领域的发展做出了巨大的贡献。GroupLens 研究组提出的推荐算法,就是如今被广泛应用的协同过滤和关联规则。

  在2005 年,G. Adomavicius和A. Tuzhilin发表了《Toward the Next Generation of Recommender Systems: A Survey of the State-of-the-Art and Possible Extensions》[2],这篇论文对推荐系统领域做了一个整体概述,描述了当时三大类推荐算法即基于内容、协同过滤、混合推荐。也指出了推荐算法的各种局限性,讨论了对推荐系统的扩展,这些扩展包括增强对 users和items的理解、在推荐过程中掺入语境信息、支持多标准的评分、规定更加灵活的并且更少侵入的推荐类型,提高推荐系统的潜在能力,以便使推荐系统应用到更广阔的领域。

  美国著名影片租赁公司Netflix于2006年开始了著名的电影推荐比赛 Netflix Prize,最后在2009年参赛队伍BellKor's Pragmatic Chaos 最终获得百万美元的奖金[1]。这个比赛极大地促进了推荐系统领域的发展,在将近三年的比赛中,参赛者提出了很多新颖且高效的推荐算法,并证明了基于潜藏因子的协同过滤算法的高效性,相对于基于邻域的协同过滤,该算法更加准确地描绘用户和电影的特征,从而达到了较好的推荐效果。

  豆瓣电影是内地非常优秀的电影推荐网站,也是比较有代表性的电影分享社区[3]。用户一登录豆瓣,就能看到“你可能感兴趣的电影”,这是通过用户的分享、评价等历史记录行为计算出的推荐列表;打开一部电影的详细介绍的页面,“喜欢这部电影的人也喜欢……”显示区就出现了,这是通过协同过滤算法计算而来。此外,用户还可以加入兴趣小组,添加好友,这些都可以作为为用户推荐电影的重要参考依据。

  经过多年的发展,电影推荐引擎已经广泛应用在各大电影网站中。但快速发展的背后,电影推荐引擎也面临着困难与挑战。数据规模越来越大,算法的执行时间不断加长,但用户需要实时响应并且较好的用户体验,这就产生了矛盾。针对这样的矛盾,本文研究采用离线和在线相结合的方式解决大数据处理与实时响应的矛盾问题,离线部分使用Hadoop集群,并行预处理算法时间复杂度高的运算规则,将离线的计算结果传递给在线部分,在线部分经过少量计算,即可向用户实时推荐。

  大数据下电影推荐引擎需要对用户的海量历史记录进行分析,并根据分析结果进行计算,最终获得给用户的推荐列表。因此该电影推荐引擎需要达到以下几个方面的要求:

  (a)可以存储用户的历史行为,并以行为为依据进行分析。根据分析的结果按照设计的算法进行计算,为每个用户得出不同的个性化推荐列表。

  (b)要能够满足用户的要求,把能令用户感兴趣的电影推荐给他们。

  (c)能够根据用户实时的点击查看行为更新推荐列表,以响应用户的实时需求。

  (d)不断收集关于用户的高质量的反馈,用这些反馈完善推荐结果的精度、提高推荐的质量等。

  (e)不仅要能够预测用户的行为方式,还要能够帮助用户扩展视野,使用户发现那些他们可能感兴趣但却容易忽略的电影。

  2电影推荐引擎的设计

  扩展性问题是指随着电影网站中电影数量和用户注册人数的日益增加,用于计算电影和用户相似关系的算法通常需要惊人的计算量,同时生成推荐结果的时间会随着用户量和电影数量的增加而呈指数级增加。然而,在线实时推荐引擎中,用户所能容忍的等待时间只有几秒钟,这对于在线推荐引擎而言是个致命问题。本文采用Hadoop集群来解决扩展性问题,随着计算规模的不断扩大,只需动态增加节点数,即可让推荐性能成倍提高,而且相对于商业解决方案,成本非常低廉。

  2.1 电影推荐引擎的架构设计

  在设计推荐引擎时,将数据进行多段组合的流水线式作业,这样可以大大提升推荐引擎的实时性和可扩展性。推荐引擎往往是基于海量数据进行推荐的,偏好的信息越多,产生推荐往往越准确,但同时也使得计算量越来越大。然而用户对于系统响应时间的要求越来越高,这就形成了一个矛盾。把整个推荐处理过程分为离线预处理部分和在线实时推荐部分,在离线预处理部分将需要大数据量计算的数据通过分布式计算系统首先进行数据预处理,将预处理后的数据进行保存。实时在线推荐部分,由于离线部分已经对数据进行了预处理,在线部分只需要很少的计算量就可以为用户返回推荐结果,这样通过离线加在线混合机制,就可以设计一个高性能的推荐引擎。

  通过分析用户浏览电影的历史记录、订购记录和电影评分发掘用户的兴趣,以查看或收藏推荐的电影表示用户对推荐引擎的反馈行为,这些行为记录被用于推荐引擎的离线分析部分作为原始记录使用,以便离线处理部分产生推荐结果。由于电影网站用户规模庞大且增长迅速,因此采用Hadoop集群处理后台的用户行为日志。由于用户行为不能事先确定好字段,而且经常发生变化,采用传统的关系型数据库就无法满足业务的需要,NOSQL数据库Hbase则适合这个应用场景,将用户的行为日志存储到HBase数据库中,以后根据需要定期取出一段指定的时间间隔内的日志数据,存储到HDFS以便后面的离线数据计算。

  离线推荐部分主要用于模型分析、对用户的兴趣建模,根据收集到的用户行为日志,利用Hive、Mahout、MapReduce等工具计算出用户和电影之间的评分矩阵和表示用户喜好的向量,并把它们存储在MySQL数据库中,可以为在线部分提供实时的查询和调用。

  在线推荐部分的功能是对用户的请求实时响应,依据离线的推荐结果分析在线用户的行为,得出用户的观看电影的倾向。在线推荐部分要有较快的响应速度和较高的并发性,因此在线推荐部分根据用户的观看电影的倾向,经过少量的计算,对离线的推荐结果进行过滤,并将过滤后的结果推荐给用户。

  电影推荐引擎的整体架构如图2-1所示。

图2-1 电影推荐引擎的整体架构

  由于Hadoop集群一般采用廉价的机器组成,单点故障率很高,如果只有一个NameNode或一个ResourceManager,一旦运行NameNode或ResourceManager的机器宕机,整个Hadoop集群就瘫痪了。为了整个Hadoop集群的高可用,部署两个NameNode节点,一个active状态,一个standby状态;部署两个ResourceManager节点,一个active节点,一个standby节点,active状态和standby状态由Zookeeper来自动化管理。

  3电影推荐引擎的实现

  3.1 电影推荐引擎架构实现

  本电影推荐引擎部署在Hadoop集群之上。系统的实现架构如图3-1所示,该图展示了本文实现的推荐引擎的物理结构。从图中可以看出,用户可以通过网络访问本系统,后台系统将用户的行为首先传递给在线推荐子系统,该子系统首先会通过Hadoop集群将用户的行为记录存储到用户行为日志子系统中,然后再分析用户的行为,并将分析的结果存储到数据库中,供用户访问[4]。离线分析子系统使用Hadoop平台来分析日志系统中用户的历史行为,该子系统并不是一直都在运行的,而是每隔一段时间运行一次以改变候选推荐电影。为了Hadoop 集群的高可靠性,NameNode节点配置为2个,一个active状态,一个standby状态,两个节点之间实时同步状态,以便发生单点故障时,快速切换。

图3-1 电影推荐引擎的架构实现

  3.2 电影推荐引擎算法实现

  Mahout是Apache的顶级项目,它实现了目前大部分的推荐系统领域和数据挖掘的经典分布式算法,使得开发人员开发分布式应用更加方便。本文的电影推荐引擎的实现采用Mahout已经实现的分布式算法作为推荐引擎架构的基础。Mahout0.9的编程模型如图3-2所示。

图3-2 Mahout的编程模型

  DataModel:DataModel是用户偏好信息的抽象接口,支持从多种数据源抽取用户的偏好信息。在Mahout0.9中,JDBCDataModel支持从数据库读取用户偏好信息,FileDataModel支持文件系统获取用户的偏好信息。Mahout0.9支持PostgreSQL数据库和MySQL数据库,存放在其他数据库的数据,需要转换导入到这两种数据库中。

  ItemSimilarity和UserSimilarit:ItemSimilarity用于计算两部电影之间的相似度,UserSimilarit用于计算两个用户间的相似度。Mahout0.9提供了基于距离计算相似度、基于相关系数计算相似度、基于夹角余弦计算相似度、基于Tanimoto系数计算相似度等相似度计算算法。

  UserNeighborhood:UserNeighborhood用于计算目标用户的“邻居用户”,通过设置阈值,可以找到若干个与目标用户最相似的“邻居用户”,以便推荐。

  Recommender:Recommender也是一个抽象接口,Mahout0.9中的核心模块。通过设置不同算法的实现子类,获得用户的推荐列表。

  4实验与分析

  4.1数据集

  表4-1 MovieLens 数据集评分的数据格式[5]

  表4-2 软硬件配置信息表

  本文的实验数据集来自美国电影网站MovieLens(http://movielens.org)真实的数据,使用了较新发布的稳定的数据集(2015年4月发布),该数据集记录了13.8万用户对2.7万部电影的2000万次评分和46.5万次标记,评分范围从0.5到5。数据集 MovieLens 评分的数据格式如表 4-1 所示,表中第一条数据表示userId为7116的用户对movieId为2953的电影评分值rating为1.5,该评分的时间戳timestamp为1139177959。

  4.2实验环境搭建

  本实验使用10台廉价的PC组成Hadoop集群,10台PC使用相同的软硬件配置,具体软硬件配置如表4-2所示。

  Hadoop集群规划如表4-3 所示。

  表4-3 Hadoop集群规划

  为了HDFS的高可用,配置了2个NameNode节点(即dmcc01、dmcc02),一个NameNode处于active状态,另一个NameNode处于standby状态。active的 NameNode对外提供服务,而standby的NameNode则不对外提供服务,仅同步active NameNode的状态,以便在dmcc01发生单点故障时快速进行切换。为了ResourceManager的高可用,配置了两个ResourceManager节点(即dmcc03、dmcc04),一个ResourceManager处于active状态,一个ResourceManager处于standby状态,状态由Zookeeper进行协调。

  4.3评价指标

  4.3.1 集群的高可用

  由于Hadoop集群一般使用廉价的机器,再加上集群规模的不断攀升,单个机器发生故障的概率会比较高,如果这个机器恰好运行着NameNode或ResourceManager,整个集群就陷入瘫痪。因此,集群的高可用就变得越来越重要了。

  4.3.2 推荐引擎的性能

  电影推荐引擎对推荐时延要求越来越短,要求尽可能早地产生推荐结果给用户。否则,用户一旦退出电影网站,电影推荐就变得没有意义了。由于本电影推荐引擎的大量耗时的算法在离线状态下计算,而且离线计算时间每隔一段时间就要计算一次,离线计算的性能影响到整个推荐的响应时间和精准度。

  4.4实验结果及分析

  实验1验证电影推荐引擎的高可用。在实验中,为了模拟单点故障,验证集群的高可用,将active状态的NameNode机器的dmcc01突然断电,原来standby状态的NameNode机器dmcc02马上就变成了active状态,验证了集群的HDFS的高可用。将active状态的ResourceManager机器的dmcc03突然断电,原来standby状态的ResourceManager机器dmcc04就变成了active状态,验证了集群的ResourceManager的高可用。以上验证了整个电影推荐引擎的高可用。

  实验2验证电影推荐引擎的可扩展性,如图4-4所示,其中纵轴表示推荐时延,横轴表示节点数目。在同样的数据规模且同样的计算量下,随着节点数目的增加,单机部署性能基本一致,但分布式部署,性能则提高很快。从图4-4中可以看出,随着节点数目的增加, 推荐时延不断减少,由此可以说明性能在不断提升。然而也发现时间的递减幅度也在不断地减小,这是因为节点增加的同时Hadoop集群进行MapReduce计算需要的额外耗时也在不断增加。

图4-4 单机部署和分布式集群部署的性能对比

  5结束语

  电影推荐引擎在目前的各类电影网站上被广泛使用,但是推荐的精准度并不高。通过对推荐引擎的研究,发现虽然推荐算法在推荐引擎中非常重要,但对于一个推荐引擎的最终推荐效果而言,更重要的其实是大量且完整的数据,要使用更多的办法引导用户对电影进行评价,同时应该建立良好的反馈机制,及时更新推荐算法,使得推荐的精准度越来越高。

  参考文献

  [1]郭珈辰.电影推荐算法的研究与实现[D].长春: 吉林大学,2015

  [2] Gediminas Adomavicius, Alexander Tuzhilin. Toward the Next Generation of Recommender Systems: A Survey of the State-of-the-Art and Possible Extensions[EB/OL].(2005-6)[2015-10].http://www.computer.org/csdl/trans/tk/2005/06/k0734-abs.html

  [3]陈天昊.互联网电影推荐方法的研究与实现[D].合肥: 中国科技大学,2014

  [4]李龙飞.基于Hadoop+Mahout的智能终端云应用推荐引擎的研究与实现[D].成都: 电子科技大学,2013

  [5]GroupLens.MovieLens 20M Dataset[EB/OL].(2015-4)[2015-10].http://grouplens.org/datasets/movielens/

 下载专区 -  会员注册 -  关于我们 -  联系我们 
 
京ICP备05029147号-1
京公网安备11010802012615号
中国电影科学技术研究所 国家广电总局电影技术质量检测所
版权所有,未经许可不得转载