中国科技论文在线
http://www.paper.edu.cn
基于 Spark 的 Web 推荐系统的设计与实现
黄成,阮军**
(武汉理工大学信息工程学院)
5 摘要:随着 Web 技术的高速发展,网络用户的数量的持续增长,网络资源的不断丰富,如何
为用户快速、准确的推荐高质量的结果变得十分重要。针对这个问题,本文设计并实现了一
个基于 Spark 的 web 推荐系统,该方案通过交替最小二乘法(ALS)的矩阵分解技术,对用
户-商品的评分模型进行分解,实现了对用户的推荐。实验结果表明通过 Spark 的并行化设
计能显著的提升推荐速度,通过 ALS 矩阵分解技术,相比基于内容的推荐,也有较大的准确
度的提高。
关键词:推荐系统;Spark;矩阵分解;交替最小二乘法
中图分类号::TP319
10
15
The design and implementation of a web recommendation
20
25
30
35
system based on Spark
Huang Cheng, Ruan Jun
(Information Engineering, Wuhan University of Technology)
Abstract: With the rapid development of Web technology, the number of Internet users continues
to grow, network resources continuously enriched, how users quickly and accurately recommend
high-quality results become very important. To address this problem, we designed and
implemented a web-based Spark's recommendation system, the program decomposition technique
by alternating least squares (ALS) of the matrix, the user - commodities scoring model is
decomposed to achieve recommended to the user. The results show that significant improvements
can be via a parallel design of Spark recommended speed by ALS matrix decomposition technique,
compared to content-based recommendation, but also a large increase accuracy.
Key words: Recommended System; Spark; Matrix Decomposition; ALS
0 引言
随着互联网的迅猛发展,为了满足人们在繁多的信息中获取自己需要内容的需求,个性
化推荐应用而生。根据实现方式的不同,推荐系统可分为基于内容的推荐算法[1](Content
Base,简称 CB)和协同过滤推荐算法[2](Collaborative Filtering,简称 CF),其中协同过滤
推荐是推荐系统研究领域最为著名和关注度最高的算法之一。基于不同的实现方式,协同过
滤算法可以分为两类:第一类是基于邻域的方法,比较典型的是基于用户的协同过滤[3]
(User-base)和基于项目的协同过滤[4] (Item-base)。第二类是基于矩阵分解[5]的方法,比较
典型的有基于奇异值分解[6] ( Singular Value Decomposition,简称 SVD),隐语义模型[7](Latent
Factor Model,简称 LFM)。
由于基于邻域的方法,需要计算用户(项目)之间的相似度,存在冷启动和数据稀疏性
的问题,同时基于邻域的方法,计算都是在内存中完成,需要消耗大量的系统内存,因此本
40
系统的设计采用矩阵分解的方法作为推荐算法核心。基于矩阵分解的算法提供了另一种协同
过滤的思路,它假设了用户对某一物品的评分是受到若干隐因子的影响,将用户和物品映射
到一个共同的隐因子空间,从而实现对用户的推荐。
作者简介:黄成(1993-),男,研究生,模式识别、机器学习
通信联系人:阮军(1978-),男,副教授,模式识别、机器学习. E-mail: justinruan@qq.com
- 1 -
中国科技论文在线
http://www.paper.edu.cn
在矩阵分解推荐算法中,每项评分预测都需要整合现有评分集的信息。随着用户数与项
目数的增长,算法的计算量也会随着增长,单机模式的推荐算法逐渐难以满足算法的计算以
45
及推送的即时性需求,因此分布式推荐算法成为推荐算法中研究的一个新的方向。
本文旨在设计并实现一个 Web 推荐系统,结合 Spark 并行计算框架,采用交替最小二
乘法[8](Alternating Least Squares,简称 ALS)的矩阵分解技术,解决大数据情况下为用户
快速、准确的产生推荐结果。
1 矩阵分解推荐算法与 Spark 平台
50
1.1 矩阵分解推荐算法
矩阵分解的核心思想认为用户的兴趣只受少数几个因素的影响,因此将稀疏且高维的
User-Item 评分矩阵分解为两个低维矩阵,即通过 User、Item 评分信息来学习到的用户特征
矩阵 和项目特征矩阵 ,通过重构的低维矩阵预测用户对产品的评分。通过所有用户对
所有项目的评分数据,构建一个
的用户-项目的评分矩阵,其中 表示用户数, 表
55
示项目数,矩阵中每一个元素的值为用户对商品的评分值。基于矩阵分解的算法将原始的高
维度的评分矩阵
分解成两个低维度的矩阵的乘积
。
其中
是隐因子的数量,
可以看作是用户特征矩阵,
可以看
60
作是项目特征矩阵。矩阵分解的目的,就是然后通过迭代训练使得
不断的逼近原
始评分矩阵
。
在实际情况下,User-Item 评分矩阵维度较高且极为稀疏,传统的奇异值分解方法只能
对稠密矩阵进行分解,即不允许所分解矩阵有空值。因而,若采用奇异值分解,需要首先填
充 User-Item 评分矩阵,这样一方面将导致数据量的急剧增加,影响算法的复杂度;另一方
65
面,增加的数据填充,很容易造成真实数据失真,影响推荐结果。因此当前很多研究直接通
过训练集中的观察值,利用最小化 RMSE 学习用户特征矩阵 和物品特征 ,并用通过一
个正则化项来避免过拟合。定义损失函数为:
其中 为已有评分记录的
对集合 为用户 对物品 的真实评分,
70
为防止过拟合的正则化项, 为正则化系数。通过优化以上的损失函数,得到用户特征矩阵
和物品特征矩阵
。常用的优化方法有随机梯度下降法[9]( Stochastic Gradient
Descent,简称 SGD)、交替最小二乘迭代法。
利用交替最小二乘法求解
时,首先随机初始化用户特征矩阵
,将损失函数
对 求偏导,并令偏导数导数等于 0,得到项目特征矩阵
,
- 2 -
UVMNMNMNRTMDNDUV11121111111212222122121211.........................................................TNDDNDDMMMNNNDMMDRRRRRRRRRRRRRRRRRRRRR()TMNMDNDRUVmin(M,N)DMDUNDVTMDNDUVMNRUV222,,(U,V)min(r)()TuiuiuiUVuiTLUVUVT(,)uiuirui22uiUVMDUNDV()TMNMDNDRUVMDU(U,V)LiVNDV
中国科技论文在线
http://www.paper.edu.cn
75
然后再固定矩阵
,用同样方法求得矩阵
,如此交替往复直到收敛或者达到最大
迭代次数。最终通过计算用户 和项目 的特征向量的内集,得到用户 对项目 的预测评
分
。
1.2 Spark 并行计算框架
Spark[10]是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的基于内存计算的大数
据并行计算框架。Spark 基于 map reduce 算法实现的分布式计算,拥有 Hadoop MapReduce
80
所具有的优点;但不同于 MapReduce,Spark 基于内存计算,中间输出和结果可以保存在内
存中,从而不再需要读写 HDFS,提高了在大数据环境下数据处理的实时性,同时保证了高
容错性和高可伸缩性。
Spark 数据存储的核心是弹性分布式数据集( Resilient Distributed Dataset,简称 RDD)。
85
RDD 是 Spark 的核心数据结构,可以被抽象地理解为一个大的数组(Array),但是这个数
组是分布在集群上的。通过 RDD 的依赖关系形成 Spark 的调度顺序。通过对 RDD 的操作形
成整个 Spark 程序。同时 R DD 可以被缓存在内存中,在之后的计算过程中可以直接从内存
中读入,省去了大量的磁盘存取开销,适合需要迭代计算的矩阵分解算法。
Spark 架构采用了分布式计算中的 Master-Slave 模型。Master 是对应集群中的含有 Master
90
进程的节点,Slave 是集群中含有 Worker 进程的节点。Master 作为整个集群的控制器,负责
整个集群的正常运行;Worker 相当于是计算节点,接收主节点命令与进行状态汇报;Executor
负责任务的执行;Client 作为用户的客户端负责提交应用,Driver 负责控制一个应用的执行,
如图 1 所示。
95
图 1 Spark 架构图
Fig. 1 Spark charts figure
2 Web 推荐系统的设计与实现
2.1 Web 推荐应用
本文采用 Flask 框架结合 MongoDB 数据库搭建 Web 应用。Flask 是 Python 的一个微型
100
Web 框架,具有极强的可扩展性,它包含一个基本服务的强健核心,其他功能则可通过扩
展实现。用户完全可以通过系统的实际需求,挑选所需的扩展包,组成一个没有附加功能的
精益组合。MongoDB 是一个基于分布式文件存储的数据库,介于关系数据库和非关系数据
库之间。它支持的数据结构非常松散,是类似 json 的 bjson 格式,因此可以存储比较复杂
的数据类型。作为一个适用于敏捷开发的数据库,MongoDB 具有可扩展性,高性能和高可
105
用性等特点,利用内存计算的优势,MongoDB 能够提供高性能的数据读写操作。
整个 Web 平台的功能可分为三部分:用户管理模块、电影管理模块、用户推荐模块。
其中用户管理模块,包括用户的注册、登录、个人信息中心管理;电影管理模块,包含电影
- 3 -
NDVMDUuiuiˆTuiuirUVClientClusterManagerDriverSparkContextRDD DAGDAGSchedulerTaskSchedulerSparkEnvWorkerExecutorTaskTaskWorkerExecutorTaskTask
中国科技论文在线
http://www.paper.edu.cn
资源的新建、编辑、删除;用户推荐模块,包含用户对电影的评分、用户的 topk 推荐。整
个系统结构如图 2 所示。
110
图 2 系统结构图
Fig. 2 System struct figure
用户可以通过 web 页面操作系统,数据通过 Control 层存储在 MongoDB 中,推荐的结
果将条用 Recommend 模块中的推荐引擎,反馈在前端页面中,如图 3 所示。
115
图 3 用户推荐结果
Fig. 3 User recommend result
2.2 Spark 并行化计算平台
Spark 并行化平台作为本系统的核心功能模块,为本系统提供后台的算法支持及推荐结
120
果的生成。
在本系统中,考虑到相比梯度下降的算法,交替最小二乘法具有:1)更容易并行化;2)
更方便的处理隐式数据等优点,因此采用 ALS 作为核心算法。在 Spark 平台下,通过对“用
户-电影-评分”数据按照指定的要求封装在不同的 RDD 分区,然后对 RDD 进行 map,filter
等并行化操作,实现数据的并行化处理。
125
并行化 ALS 矩阵分解算法:
输入:用户-电影-评分数据
输出:用户-电影矩阵分解模型。
1.初始化参数设置,numBlocks 是用于并行化计算的分块个数 (设置为-1,为自动配
置);rank 是模型中隐语义因子的个数;iterations 是迭代的次数;lambda 是 ALS 的正则化
130
参数;seed :随机种子,随机初始化用户/电影矩阵。
2.创建 sparkContext 对象。
3.加载用户数据,生成 User-Item 评分 RDD 模型,Ratings:(user,item,ratings)。
4.根据初始化的 numBlocks、rank、seed 参数,通过交替迭代,并行化生成所有用户
的 RatingsOfUserBlock 和所有电影的 RatingsOfItemBlock 的 RDD。 RatingOfUserBlock:
135
;RatingsOfItemBlock
。
- 4 -
Web PageUser ModuleMovie ModuleRecommend ModuleMongoDBCreate/Edit/delete/...RecommendRegister/Edit/…ControlStore(,,ratings)userfactors(,,ratings)itemsfactors
中国科技论文在线
http://www.paper.edu.cn
5.根据迭代次数 iterations,while iter
中国科技论文在线
http://www.paper.edu.cn
选 20%作为测试数据集作为验证集。选取不同的 rank(隐因子)、lamdba(正则化参数)、
iterations(迭代次数),计算算法所需时间与 RMSE 值。
表 3 ALS 不同参数 RMSE 值
160
Tab.3 The RMSE value with different ALS parameters
Rank
Lambda
Iterations
Time_cost/s
3
3
3
3
3
3
5
5
5
7
7
7
0.01
0.05
0.10
0.10
0.20
0.50
0.01
0.05
0.10
0.01
0.05
0.10
20
20
15
20
20
20
20
20
20
20
20
20
14.871
7.008.
6.571
6.482
7.176
7.273
7.259
7.616
6.256
6.853
6.384
6.132
RMSE
0.985546
0.950778
0.951385
0.935269
0.950340
1.075650
1.062528
0.972250
0.941061
1.131561
0.993058
0.946950
表 3 的结果表明,通常情况下,iterations 值越大,所需时间越长,RMSE 越小,但最终
会收敛;lambda 值越小,RMSE 越小,但是 lambda 达到一定值之后,继续减小,反而影响
RMSE 的值。综合考虑 RMSE 值,时间消耗,本系统确定了最终的参数,rank = 3,lambda=0.10,
165
iterations=20。通过加入验证集之后,相比测试集的 RMSE 值,提高了 16.39%。
同时为了模拟用户的评分行为,通过将数据集的 30%作为训练集,30%作为验证集,剩
下的 40%作为用户新的评分行为,每次添加 10%至训练集中,重新训练 ALS 模型,计算
RMSE,通过 RMSE 的收敛情况判断算法的训练效果。通过表 3 得到的数据,设置系统参数,
得到表 4 的实验结果。
170
表 4 模拟用户训练结果
Tab. 4 The result of simulate user behavior
TrainSet
Validation
Time_cost/s
29730
39865
49769
60024
70087
29913
29913
29913
29913
29913
15.422832
6.474496
4.768522
4.552269
4.165985
RMSE
1.002580
0.989700
0.964058
0.944258
0.934768
表 4 的结果表明,随着用户训练数据的逐渐增加,模型训练的结果更加准确,RMSE 值
逐渐减小,并收敛于表 3 的最佳模型。另一方面,通过对计算时间的分析,由于最初第一步
的计算结果保存可以保存在内存中,因此后续的计算时间消耗极大地较少了,同时,可以看
175
出,由于并行化的计算,随着数据的增加,系统消耗的时间并没有增大太多,这些正是 Spark
并行化框架具有的优点。
4 结论
本文首先介绍了传统的矩阵分解算法和 Spark 并行化计算框架的概括,并结合 ALS 矩
阵分解计算、Spark 平台、Flask Web 框架,设计并实现了一个 Web 推荐系统。文章还对 ALS
180
算法中不同参数对推荐结果的影响进行了实验分析,得到了本系统的最佳实验模型。当然,
- 6 -
中国科技论文在线
http://www.paper.edu.cn
由于水平有限、以及实验环境的限制,本文还有很多问题没有解决,比如:如何解决在线实
时训练的问题,而不是重新训练整个模型;如果构建集群化的推荐系统;如何采集更多的用
户其他行为,类似浏览、收藏、分享等作为隐因子丰富 User-Item 矩阵等。
[参考文献] (References)
185
190
195
200
205
[1] Musto C. Enhanced vector space models for content-based recommender systems[A].Musto C. Proceedings of
the fourth ACM conference on Recommender systems[C]. New York:ACM,2010.361-364.
[2] Greg Linden, Brent Smith, Jeremy York. Amazon.com Recommendations: Item-to-item Collaborative
Filtering[J]. IEEE Internet Computing, 2003,7(1):76-80.
[3] Wang J,Vries A P,Reinders M J T. 2006. Unifying user-based and item-based collaborative Filtering
approaches by similarity fusion[A].Wang J.Proceedings of the 29th annual international ACM SIGIR conference
on Research and development in information retrieval[C].New York:ACM,2006.501-508
[4] B Sarwar, G Karypis, J Konstan, et al. Item-based collaborative filtering ecommendation algorithms[A].B
Sarwar.Proceedings of the 10th International Conference on World Wide Web[C]. NewYork:ACM,2001.285-295
[5] Koren Y, Bell R, Volinsky C. Matrix
systems[J].Computer,2009,42(8): 30-37.
[6] Billsus D, Pazzani M J. Learning Collaborative Information Filters[A].Billsus D.Proceedings of the 15th
International Conference on Machine Learning[C].San Fruncisco: ICML, 1998. 46-54.
[7] Koren Y. Factorization meets the neighborhood: a muitifaceted collaborative filtering model[A].Koren
Y.Proceedings of the 14th ACM SIGKDD international conference on Knowledge discoveiy and data
mining[C].New York:ACM,2008.426-434.
[8] Yehuda Koren,Robert Bell,Chris Volinsky. Matrix Factorization Techniques
Systems[J].Journal Computer archive, 2009,42(8): 30-37
[9] Jenny Rose Finkel, Alex Kleeman, Christopher D.Efficient, Feature-based, Conditional Random Field
Parsing[A]. Jenny Rose Finkel.Proc. Annual Meeting of the ACL[C].Columbus, Ohio:Association for
Computational Linguistics,2008.959-967
[10] 高彦杰.Spark 大数据处理[M].北京:机器工业出版社,2015.
for Recommender
recommender
factorization
techniques
for
- 7 -