一种基于Spark的实时推荐系统及方法与流程

文档序号:11864797阅读:1401来源:国知局
本发明涉及一种实时推荐系统及方法,具体地涉及一种基于Spark的实时推荐系统及方法。
背景技术
::实时推荐系统是指能够实时感知用户兴趣变化,并根据用户兴趣变化实时调整为用户推荐的内容。传统推荐系统一般通过集群使用HadoopMapReduce对用户行为数据每间隔一天进行一次离线训练,然后使用训练得到的用户特征模型为用户生成推荐列表。这显然无法达到实时推荐需求,无法实时感知用户偏好的变化,从而造成推荐准确度下降。目前,现有的实时推荐系统框架主要有Netflix公司的实时推荐系统框架。Netflix实时推荐系统框架是一个能高效处理海量用户行为数据,响应用户交互,且推荐方法可配置的推荐系统架构。推荐系统框架分为离线计算、接近在线计算和在线计算三个模块。离线计算模块以HadoopMapReduce批处理的方式对用户历史行为数据进行训练,得到用户特征模型,对实时性要求较弱。在线计算模块对实时性要求较高,主要用于快速响应用户交互。接近在线计算模块主要用于支持推荐准确度较高,但实时性要求略低于在线推荐的应用场景。Netflix实时推荐系统存在的问题是:(1)在线计算模块主要用户相应用户交互,缺乏利用最新的用户行为数据对用户特征模型进行更新,故不能实时感知用户兴趣的变化(2)各模块采用不同类型的系统分别对数据进行处理,处理结果无法在各模块之间实现无缝共享;(3)同一个集群中对各系统所需资源的协调与分配比较困难。技术实现要素:针对上述存在的技术问题,本发明目的是:提供了一种基于Spark的实时推荐系统及方法,本发明采用计算框架Spark加速用户特征模型的训练过程,并将推荐系统框架划分为离线批处理模块、接近在线推荐模块和在线推荐模块,各模块之间的数据流通过SparkRDD的转换来实现,能有效提高推荐结果的准确性和实时性。本发明的技术方案是:一种基于Spark的实时推荐系统,其特征在于,通过Spark软件分析栈构建基于Spark的一栈式推荐系统框架,包括数据采集模块、离线推荐模块、在线推荐模块和推荐模块,各模块之间的数据共享通过SparkRDD转换;数据采集模块,用于采集用户行为数据;所述离线推荐模块,包含离线推荐算法库,根据用户配置参数从离线推荐算法库中选择相应推荐算法对用户行为数据进行训练,得到用户特征模型;所述在线推荐模块,接收来自Kafka的用户行为数据,并发送给在线推荐算法库中的相应算法进行训练,得到增量用户特征模型;在线模型训练引擎将训练得到的用户特征模型作为基础模型,使用流式增量推荐算法利用最新接收到的用户行为数据对基础模型进行增量更新,得到最新用户特征模型;所述推荐模块,根据用户特征模型,并结合惰性更新机制更新用户推荐列表。优选的,所述在线推荐模块还包括接近在线推荐模块,将最新接收到的用户行为数据与在此之前接收到的所有用户行为数据进行融合,将融合之后的用户行为数据发送给接近在线模型训练引擎,选择在线推荐算法库中的接近在线推荐算法进行训练,得到精确用户特征模型。优选的,还包括模型融合模块,用于将离线模型训练引擎、接近在线模型训练引擎和在线模型训练引擎训练得到的用户特征模型进行融合,得到最终用户特征模型。优选的,所述离线算法库中包含的算法至少有:基于用户的协同过滤算法(User-CF)、基于物品的协同过滤算法(Item-CF)、考虑时间上下文因素的基于用户的协同过滤算法(time-User-CF)、考虑时间上下文因素的基于物品的协同过滤算法(time-Item-CF)、ALS算法;在线推荐算法库中包含的算法至少有:流式基于用户的协同过滤算法(Streaming-User-CF)、流式基于物品的协同过滤算法(Streaming-Item-CF)。优选的,所述惰性更新机制包括如下步骤:(1)分析用户活跃频率统计表,获取活跃用户集合;(2)将得到的最终用户特征模型与活跃用户相结合,为活跃用户生成推荐列表;(3)将推荐列表保存在SparkRDD中,供SparkSQL进行查询。优选的,通过惰性更新机制获取推荐列表包括如下步骤:(a)SparkSQL获取与用户对应的推荐列表,并提取该推荐列表最后一次更新的时间戳timeStamp1;(b)从用户访问系统时间表中获取用户最后一次通过系统选择物品的时间戳timeStamp2;(c)对比时间戳timeStamp1和timeStamp2,如果timeStamp1>timeStamp2,将SparkSQL查询得到的推荐列表返回给该用户;(d)否则,重新通过训练得到的用户特征模型更新该用户的推荐列表,并将更新后的推荐列表写入推荐列表集合进行存储,并将其返回给用户。本发明又公开了一种基于Spark的实时推荐方法,其特征在于,包括以下步骤:S01:统计用户访问的时间和频率,并将相关数据写入用户活跃频率统计表和用户访问系统时间表;S02:记录用户对系统操作的所有行为,并将用户行为日志数据实时发送给Kafka分布式集群;S03:根据用户配置参数从离线推荐算法库中选择相应推荐算法对用户行为数据进行训练,得到用户特征模型;S04:通过SparkStreaming实时接收来自Kafka的最新用户行为数据,并发送给在线推荐算法库中的相应算法进行增量用户特征模型训练;在线模型训练引擎将训练得到的用户特征模型作为基础模型,然后使用流式增量推荐算法利用最新接收到的用户行为数据对基础模型进行增量更新,得到最新用户特征模型;当用户在配置参数中选择了接近在线推荐模块时,接近在线推荐模块将最新接收到的用户行为数据与在此之前接收到的所有用户行为数据进行融合,将融合之后的用户行为数据发送给接近在线模型训练引擎,选择在线推荐算法库中的接近在线推荐算法进行训练,得到精确用户特征模型;S06:模型整合模块将离线模型训练引擎、接近在线模型训练引擎和在线模型训练引擎训练得到的用户特征模型进行融合,得到最终用户特征模型;S07:推荐模块根据得到的最终用户特征模型,并结合惰性更新机制更新用户的推荐列表。优选的,所述惰性更新机制包括如下步骤:(1)分析用户活跃频率统计表,获取活跃用户集合;(2)将得到的最终用户特征模型与活跃用户相结合,为活跃用户生成推荐列表;(3)将推荐列表保存在SparkRDD中,供SparkSQL进行查询。优选的,通过惰性更新机制获取推荐列表包括如下步骤:(a)SparkSQL获取与用户对应的推荐列表,并提取该推荐列表最后一次更新的时间戳timeStamp1;(b)从用户访问系统时间表中获取用户最后一次通过系统选择物品的时间戳timeStamp2;(c)对比时间戳timeStamp1和timeStamp2,如果timeStamp1>timeStamp2,将SparkSQL查询得到的推荐列表返回给该用户;(d)否则,重新通过训练得到的用户特征模型更新该用户的推荐列表,并将更新后的推荐列表写入推荐列表集合进行存储,并将其返回给用户。与现有技术相比,本发明的优点是:1、基于Spark软件分析栈设计的一栈式推荐系统框架利用Spark生态系统中的各组件进行无缝对接,各模块之间的数据通过SparkRDD进行共享,极大降低了各模块间数据共享开销和系统研发与维护成本。离线推荐理模块中,使用目前最高效的内存计算框架Spark取代HadoopMapReduce进行离线用户特征模型训练,经实验发现,模型训练效率比传统的HadoopMapReduce方案提高了近3倍。在线推荐模块中,本系统设计并实现的基于增量更新的流式推荐算法比传统离线算法的模型更新效率提高了60%以上,ALS算法的推荐准确度提高了3.7%。此外,本系统设计的惰性更新策略以及将推荐结果以RDDTable的形式存储在内存中,并通过SparkSQL进行查询等优化方案极大提高了推荐系统的实时性。附图说明下面结合附图及实施例对本发明作进一步描述:图1是基于Spark的实时推荐系统的结构框架示意图;图2是推荐列表惰性更新策略示意图;图3是用户访问推荐列表集合获取推荐列表流程示意图;图4本发明基于Spark的实时推荐系统框架与传统推荐系统的模型训练时间对比图;图5本发明基于Spark的实时推荐系统框架与传统推荐系统的推荐准确度对比图;图6本发明基于Spark的实时推荐系统框架与传统推荐系统的性能提升对比图。具体实施方式以下结合具体实施例对上述方案做进一步说明。应理解,这些实施例是用于说明本发明而不限于限制本发明的范围。实施例中采用的实施条件可以根据具体厂家的条件做进一步调整,未注明的实施条件通常为常规实验中的条件。实施例:如图1所示为基于Spark的实时推荐系统框架示意图,主要包括数据采集模块、离线推荐模块、在线推荐模块、模型融合模块、推荐模块等。它借助Spark软件分析栈(BDAS)构建基于Spark的一栈式推荐系统框架。该系统将推荐系统框架划分为离线批处理模块、接近在线推荐模块和在线推荐模块,离线批处理模块采用目前最高效的内存计算框架Spark取代传统批处理框架HadoopMapReduce,对用户行为数据进行训练,接近在线推荐模块和在线推荐模块利用SparkStreaming实时接收来自Kafka集群的用户行为数据,并使用基于用户的协同过滤和基于物品的协同过滤等增量算法进行对用户特征模型进行增量更新,各模块之间的数据共享通过SparkRDD的转换来实现。为了进一步提高用户特征模型更新效率,本发明根据各模块对用户特征模型训练时间的实时性要求,分别实现了基于Spark的离线推荐算法库和在线推荐算法库。离线算法库中包含的算法有:基于用户的协同过滤算法(User-CF)、基于物品的协同过滤算法(Item-CF)、考虑时间上下文因素的基于用户的协同过滤算法(time-User-CF)、考虑时间上下文因素的基于物品的协同过滤算法(time-Item-CF)、ALS算法等;在线推荐算法库中包含的算法有:流式基于用户的协同过滤算法(Streaming-User-CF)、流式基于物品的协同过滤算法(Streaming-Item-CF)等。其中,在线推荐算法库中的流式在线推荐算法主要用于用户特征模型的增量更新,并为用户进行实时推荐。为了进一步提高推荐实时性,本发明引入了推荐列表的惰性更新机制和使用SparkSQL对推荐列表进行查询。所述基于Spark的实时推荐系统为用户进行推荐包括如下步骤:(a)当实时推荐系统启动时,首先从配置文件中读取相应配置参数,并启动WebServer为用户提供访问服务;(b)当用户访问系统时,WebServer统计用户对系统访问的时间和频率,并将相关数据写入用户活跃频率统计表和用户访问系统时间表,这两张表分别用户指导步骤(i)中的用户推荐列表惰性更新;(c)WebServer记录用户对系统操作的所有行为,并将用户行为日志数据实时发送给Kafka分布式集群;(d)Kafka集群接收到数据之后,一方面会将数据发送给HBase数据库进行分布式存储,用于离线模块的用户特征模型训练,另一方面会实时发送给在线推荐模块;(e)离线批处理模块中包含离线推荐算法库,系统会根据用户配置参数从离线推荐算法库中选择相应推荐算法对存储在HBase数据库中的用户行为数据进行训练,得到用户特征模型;(f)在线推荐模块通过SparkStreaming实时接收来自Kafka的最新用户行为数据,并发送给在线推荐算法库中的相应算法进行增量用户特征模型训练。在线模型训练引擎会将步骤(e)训练得到的用户特征模型作为基础模型,然后使用流式增量推荐算法利用最新接收到的用户行为数据对基础模型进行增量更新,得到最新用户特征模型;(g)当用户对推荐结果的实时性要求不高,但对推荐结果的精确度要求极高时,可以在配置参数中选择使用在线推荐算法库中的接近在线推荐算法(ALS-Extend算法)进行用户特征模型训练。此时,在线推荐模块会通过SparkStreaming实时接收最新的用户特征数据,并将最新接收到的用户行为数据与在此之前接收到的所有用户行为数据进行融合,将融合之后的用户行为数据发送给接近在线模型训练引擎,选择在线推荐算法库中的接近在线推荐算法进行训练,得到精确用户特征模型;(h)模型整合模块会将离线模型训练引擎、接近在线模型训练引擎和在线模型训练引擎训练得到的用户特征模型进行融合,得到最终用户特征模型;(i)推荐模块会利用最终得到的用户特征模型,并结合惰性更新机制更新用户的推荐列表。惰性更新机制请参考图2,该机制包括如下步骤:(1)分析用户活跃频率统计表,获取活跃用户集合;(2)将步骤(h)得到的最终用户特征模型与活跃用户相结合,为活跃用户生成推荐列表;(3)将推荐列表保存在SparkRDD中,供SparkSQL进行查询。图3表示用户通过推荐列表集合获取推荐列表流程示意图,用户通过惰性更新机制获取推荐列表包括如下步骤:(a)用户通过SparkSQL从推荐列表集合RDDtable中查询系统为该用户生成的推荐列表;(b)SparkSQL获取与该用户对应的推荐列表,并提取该推荐列表最后一次更新的时间戳timeStamp1;(c)从用户访问系统时间表中获取用户最后一次通过系统选择物品的时间戳timeStamp2;(d)对比时间戳timeStamp1和timeStamp2,如果timeStamp1>timeStamp2,表示用户推荐列表的更新发生在用户通过系统选择物品之后,也就是说该推荐列表是最新的,那么直接将SparkSQL查询得到的推荐列表返回给该用户;(e)否则,表示惰性机制导致该用户的推荐列表没有及时更新,所以需要重新通过训练得到的用户特征模型更新该用户的推荐列表,并将更新后的推荐列表写入RDDtable进行存储,与此同时,将其返回给用户。图4是利用内存计算框架Spark和HadoopMapReduce框架对MovieLens100K(1,000Users,1,700Items,100,000Ratings)数据集分别使用User-CF算法和Item-CF算法进行用户特征模型训练的时间对比图。从图中可以看出,Spark平台的模型训练效率比HadoopMapReduce平台高3倍左右,这是因为:(1)Spark平台采用了基于内存的计算方式,避免将中间结果写出到磁盘中;(2)采用基于RDD的血统(Lineage)容错机制,节省容错开销;(3)将执行流程生成有向无环图,对任务采用多级调度机制。图5是利用本发明设计的接近在线推荐算法和原始推荐算法对MovieLens100K、MovieLens1M、MovieLens10M、BookCrossing等公开数据集进行评分预测类型推荐所得到的预测误差对比图。从图中可以看出,本发明设计的接近在线推荐算法ALS-Extend在每一个数据集下的预测误差RMSE均小于原始推荐算法的预测误差。经对比可知,ALS-Extend推荐算法的推荐准确度比ALS算法高3%。图6是对推荐列表使用SparkSQL从缓存于内存中的RDDTable进行查询的方案与直接将推荐列表写入MySQL,然后使用SQL从MySQL中进行查询的方案性能对比图。从图中可以看出,SparkSQL查询方案的数据查询时间受数据规模变化影响较小,并且查询时间明显小于MySQL方案。这是因为:(1)SparkSQL方案中,推荐列表缓存在内存中,无需访问磁盘,而MySQL方案需要从磁盘中对数据进行查询;(2)SparkSQL利用分布式集群优势,将查询任务分发到各机器上进行并行执行,而MySQL方案直接使用单节点进行查询,所以对数据规模的变化比SparkSQL方案敏感。综上所述,基于Spark的实时推荐系统框架对推荐系统的实时性具有明显的性能提升。上述实例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人是能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所做的等效变换或修饰,都应涵盖在本发明的保护范围之内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1