董銀
摘要:隨著大數(shù)據(jù)和數(shù)據(jù)挖掘技術(shù)的不斷發(fā)展和成熟,個(gè)性化推薦越來(lái)越發(fā)揮著重要作用。為了能夠更有效地向用戶(hù)推薦其感興趣的產(chǎn)品,文章研究了在Spark平臺(tái)架構(gòu)基礎(chǔ)上使用ALS協(xié)同過(guò)濾算法在個(gè)性化推薦系統(tǒng)中的應(yīng)用,并對(duì)該系統(tǒng)作了性能和效果的評(píng)估。根據(jù)實(shí)驗(yàn)表明,基于Spark平臺(tái)的ALS算法能有效地為用戶(hù)推薦其所感興趣的產(chǎn)品,從而達(dá)到個(gè)性化推薦的目的。
關(guān)鍵詞:個(gè)性化推薦;協(xié)同過(guò)濾;Spark;ALS
隨著互聯(lián)網(wǎng)數(shù)據(jù)的不斷增加,如何快速而高效地從如此豐富而復(fù)雜的大量數(shù)據(jù)中為用戶(hù)挑選出自己真正感興趣和喜歡的信息變得越來(lái)越緊迫。近年來(lái)隨著個(gè)性化推薦系統(tǒng)的興起和發(fā)展,為解決這些問(wèn)題提供了重要手段。推薦系統(tǒng)通過(guò)記錄和分析用戶(hù)所產(chǎn)生的日志數(shù)據(jù)構(gòu)建用戶(hù)的興趣模型,再通過(guò)用戶(hù)的興趣模型為用戶(hù)推薦其喜歡和感興趣的產(chǎn)品。目前個(gè)性化推薦系統(tǒng)在購(gòu)物網(wǎng)站和新聞網(wǎng)站等領(lǐng)域得到了廣泛的應(yīng)用,比如Amazon購(gòu)物網(wǎng)站、豆瓣、今日頭條等。目前在推薦系統(tǒng)中應(yīng)用最為成功和廣泛的推薦技術(shù)是協(xié)同過(guò)濾。
協(xié)同過(guò)濾是指收集用戶(hù)過(guò)去的行為以獲得其對(duì)產(chǎn)品的顯式或隱式信息,即根據(jù)用戶(hù)對(duì)物品或者信息的偏好,發(fā)現(xiàn)用戶(hù)的相關(guān)性或者物品本身的相關(guān)性,然后再基于這些相關(guān)性進(jìn)行推薦。目前,基于協(xié)同過(guò)濾的推薦分為基于物品的協(xié)同過(guò)濾(ItemCF)、基于用戶(hù)的系統(tǒng)過(guò)濾(UserCF)和基于模型的協(xié)同過(guò)濾(ModelCF)。為了更加快速、有效和準(zhǔn)確地為用戶(hù)推薦其喜歡的產(chǎn)品,本文主要研究了基于Spark平臺(tái)上的ALS協(xié)同過(guò)濾算法的個(gè)性化推薦系統(tǒng)。
1 Spark簡(jiǎn)介
Spark是一個(gè)基于內(nèi)存計(jì)算的分布式框架,提高了在大數(shù)據(jù)環(huán)境下數(shù)據(jù)處理的實(shí)時(shí)性,同時(shí)保證了高可伸縮性和高容錯(cuò)性。Spark中的計(jì)算模型和Hadoop中的MapReduce類(lèi)似,不同于Hadoop的是,Spark的計(jì)算過(guò)程是在內(nèi)存中進(jìn)行的,從而減少了硬盤(pán)的讀寫(xiě)操作,可以將多個(gè)操作進(jìn)行合并后計(jì)算,因此提升了計(jì)算速度。
圖1為Spark架構(gòu)圖,其整體流程為:Client作為客戶(hù)端將應(yīng)用程序提交到Driver中,Driver則向Master(即ClusterManager)申請(qǐng)資源,然后將應(yīng)用程序轉(zhuǎn)換為RDD Graph,再由DAGScheduler將RDD Graph轉(zhuǎn)換為Stage的有向無(wú)環(huán)圖提交給TaskScheduler,由TaskScheduler將任務(wù)分發(fā)給Woker節(jié)點(diǎn)中的Exeutor執(zhí)行。
2 ALS算法研究
ALS是Alternating Least Squares的縮寫(xiě),意為交替最小二乘法。該方法常用于基于矩陣分解的推薦系統(tǒng)中。例如:將用戶(hù)(user)對(duì)商品(item)的評(píng)分矩陣分解為2個(gè)矩陣:一個(gè)為商品所包含的隱含特征矩陣,一個(gè)為用戶(hù)對(duì)商品隱含特征的偏好矩陣。在這個(gè)矩陣分解的過(guò)程中,評(píng)分缺失項(xiàng)得到了填充,因此可以基于這個(gè)填充的評(píng)分給用戶(hù)作商品推薦了。以下就ALS算法理論做一個(gè)介紹。
3 ALS算法在個(gè)性化推薦上的應(yīng)用
為了實(shí)現(xiàn)ALS算法在Spark平臺(tái)上的具體應(yīng)用。本文的系統(tǒng)結(jié)構(gòu)主要由3個(gè)模塊組成,分別為輸入模塊、推薦模塊和輸出模塊。輸入模塊主要將用戶(hù)的行為數(shù)據(jù)轉(zhuǎn)換成用戶(hù)偏好數(shù)據(jù),再運(yùn)用數(shù)字表示用戶(hù)對(duì)產(chǎn)品的偏好。推薦算法模塊主要是通過(guò)ALS模型的協(xié)同過(guò)濾算法生成推薦結(jié)果。輸出模塊是將通過(guò)推薦算法產(chǎn)生的推薦結(jié)果(去除掉一些用戶(hù)已購(gòu)買(mǎi)過(guò)的產(chǎn)品),生成最終的推薦列表從而為用戶(hù)進(jìn)行推薦。如圖2所示,為本文中個(gè)性化推薦系統(tǒng)的處理流程。
3.1 用戶(hù)偏好數(shù)據(jù)處理
通過(guò)解析用戶(hù)訪問(wèn)網(wǎng)站所產(chǎn)生的行為日志,對(duì)用戶(hù)行為數(shù)據(jù)進(jìn)行數(shù)據(jù)預(yù)處理操作(即ETL操作),得到用戶(hù)對(duì)某產(chǎn)品的瀏覽、購(gòu)買(mǎi)、評(píng)論、加入購(gòu)物車(chē)和加入心愿單行為數(shù)據(jù),作為用戶(hù)畫(huà)像模型的5組向量,再結(jié)合實(shí)際生活情況按5種不同行為分別賦予不同的權(quán)值。通過(guò)對(duì)用戶(hù)的行為進(jìn)行加權(quán)處理后得到用戶(hù)對(duì)某產(chǎn)品的偏好得分。其中,偏好得分計(jì)算公式為:S =購(gòu)買(mǎi)*0.4 +評(píng)論*0.15+購(gòu)物車(chē)*0.25+心愿單*0.15+瀏覽*0.05,依此方法,最終形成用戶(hù)對(duì)所有產(chǎn)品的偏好得分,從而生成用戶(hù)的偏好模型。
3.2 構(gòu)建ALS推薦模型
通過(guò)(1)中建立的用戶(hù)偏好模型是ALS的輸入樣本,其后的處理過(guò)程是:首先輸入用戶(hù)的偏好數(shù)據(jù)(偏好數(shù)據(jù)格式為:用戶(hù)ID、產(chǎn)品ID、偏好得分),然后初始化ALS權(quán)值,計(jì)算通過(guò)ALS預(yù)測(cè)的偏好得分和訓(xùn)練樣本中的偏好得分的均方差,使其RMSE小于預(yù)定值,若未小于預(yù)定值則繼續(xù)訓(xùn)練增加的模型,最后為用戶(hù)產(chǎn)生推薦列表。
3.3 Spark平臺(tái)上的實(shí)現(xiàn)
ALS算法在Spark平臺(tái)上的實(shí)現(xiàn)過(guò)程是:首先將用戶(hù)偏好數(shù)據(jù)從數(shù)據(jù)庫(kù)中導(dǎo)出上傳到HDFS(Hadoop Distribute File System)上,再使用SparkContext類(lèi)中的textFile函數(shù)加載HDFS上的偏好數(shù)據(jù)文件并創(chuàng)建RDD(Resilient Distributed Datasets),作為ALS訓(xùn)練的輸入數(shù)據(jù)。其次,輸入迭代次數(shù)向量I=(5,8,10,15,20)T和隱含因子向量R=(5,10,20,30,40,50,60,70)T,通過(guò)不斷初始化參數(shù)即循環(huán)選擇I和R的值,代入ALS類(lèi)中的train(ratings,rank,numIterations,lambda)(其中:ratings為用戶(hù)的偏好數(shù)據(jù),rank為R中的隱含因子,numIterations為I中的迭代次數(shù),lambda為正則化參數(shù)本文中取0.01)函數(shù)中,生成用戶(hù)偏好的預(yù)測(cè)結(jié)果,計(jì)算每次更新參數(shù)后模型的RMSE,最終通過(guò)獲取最小的RMSE來(lái)確定最優(yōu)參數(shù)的取值。最后使用最優(yōu)的ALS模型為用戶(hù)做推薦,使用MatrixFactorizationModel中的recommendProductsForUsers方法為每個(gè)用戶(hù)生成推薦結(jié)果,并使用RDD中的saveAsTextFile函數(shù)將結(jié)果保存到HDFS上。
4 實(shí)驗(yàn)和結(jié)論
4.1 實(shí)驗(yàn)環(huán)境
本實(shí)驗(yàn)組建的Spark集群由1臺(tái)Master主機(jī)、7臺(tái)Slaver主機(jī)組成。實(shí)驗(yàn)中使用的數(shù)據(jù)為用戶(hù)每天在網(wǎng)站中產(chǎn)生的行為數(shù)據(jù),通過(guò)分析用戶(hù)的行為日志和ETL操作將其轉(zhuǎn)換為用戶(hù)對(duì)產(chǎn)品的偏好得分。其中共有11924653行用戶(hù)對(duì)產(chǎn)品的偏好數(shù)據(jù)、662926個(gè)用戶(hù)和75288個(gè)產(chǎn)品構(gòu)成。
4.2 性能評(píng)估
為了驗(yàn)證基于Spark 平臺(tái)下ALS協(xié)同過(guò)濾算法對(duì)推薦性能的影響,本文使用不同數(shù)目的Spark集群節(jié)點(diǎn)來(lái)做實(shí)驗(yàn)以獲得較優(yōu)的效果。圖4為推薦模型訓(xùn)練時(shí)間隨工作節(jié)點(diǎn)數(shù)目變化的情況。
由圖3可以看出隨著集群節(jié)點(diǎn)的增多,Spark ALS模型訓(xùn)練時(shí)間不斷減少,但其處理速度并不是隨著節(jié)點(diǎn)增加而線性減少的。從圖4可知當(dāng)工作節(jié)點(diǎn)增加到4個(gè)時(shí),模型訓(xùn)練速度的變化開(kāi)始沒(méi)有那么明顯了,根據(jù)Amdahl定律,并行化的程序所獲得的加速比和程序中可并行執(zhí)行的代碼有直接關(guān)系,因此,處理時(shí)間并不是隨著節(jié)點(diǎn)線性變化的。
4.3 推薦效果評(píng)估
本文中通過(guò)調(diào)整隱含因子數(shù)量(rank)和計(jì)算的迭代次數(shù)(numIterations)來(lái)減小RMSE的值,從而達(dá)到最好的推薦效果。由圖4可以得出隨著隱含因子的增大,其模型均方差越小,表示其預(yù)測(cè)的模型越接近真實(shí)的偏好模型。
5 結(jié)語(yǔ)
本文首先對(duì)Spark和ALS協(xié)同過(guò)濾算法作了介紹和原理推導(dǎo),然后研究了基于Spark平臺(tái)下的ALS協(xié)同過(guò)濾算法在個(gè)性化推薦上的性能和效果,發(fā)現(xiàn)基于Spark平臺(tái)下的ALS推薦模型可以為用戶(hù)合理、有效地推薦其感興趣的產(chǎn)品,從而可以提高用戶(hù)的體驗(yàn)度和網(wǎng)站的轉(zhuǎn)換率等。
[參考文獻(xiàn)]
[1]李宇澄.協(xié)同過(guò)濾算法研究[D].上海:復(fù)旦大學(xué),2005.
[2] Koren Y,Bell R,Volinsky C.Maxtrix factorization techniques for recommender systems[J].Computer,2009(8):30-37.
[3]Apache Spark.[EB/OL].[2013-12-20].http://spark.apache.org/.
[4]Wbite T.Hadoop權(quán)威指南[M].3版.北京:清華大學(xué)出版,2010.
[5]Pilaszy I,Zibriczky D,Tikk D.Fast ALS-based Matrix Factorization for Explicit and Implicit Feedback Datasets[C]// Proceedings of the fourth ACM conference on Recommender systems.New York:ACM,2010.
[6]李改,李磊.,基于矩陣分解的協(xié)同過(guò)濾算法[J].計(jì)算機(jī)工程與應(yīng)用,2011(30):4-7.
[7]Hill M D,Mary M R.Amdahls law in the multicore era[J].Computer,2008(7):33-38.
Research and Application of Personalized Recommendation Based on ALS Collaborative Filtering Algorithm
Dong Yin
(School of Computer Science, Wuyi University, Jiangmen 529020, China)
Abstract: With the continuous development of big data and data mining technology, more personalized recommendation system has played an important role. In order to more effectively to recommend interesting products for user, this paper studies the application that using ALS collaborative filtering algorithm in personalized recommendation system on the spark paltform and evaluating the performance and effectiveness of the system. According to the experimental results show that the ALS algorithm based on Spark platform can effectively recommend the products they are interested in, so as to achieve the goal of personalized recommendation.
Key words: personalized recommendations; collaborative filtering; Spark; ALS