牛路帥 彭龑
摘? 要:隨著互聯(lián)網(wǎng)數(shù)據(jù)量的不斷擴(kuò)大,數(shù)據(jù)的實(shí)時(shí)推薦需求已經(jīng)不能被傳統(tǒng)的推薦模型所滿足,協(xié)同過濾推薦算法的不足也越來越明顯。為此,通過大數(shù)據(jù)計(jì)算框架Spark平臺(tái)構(gòu)建基于模型的推薦算法來更好地應(yīng)對(duì)海量數(shù)據(jù)實(shí)時(shí)推薦的問題。首先,通過預(yù)先設(shè)定的計(jì)算方法進(jìn)行模型的構(gòu)建;同時(shí)將一種改進(jìn)的余弦相似度算法應(yīng)用到模型中,不僅可以縮短推薦實(shí)現(xiàn)的時(shí)間,而且可以提高推薦性能。實(shí)驗(yàn)結(jié)果表明,該算法和傳統(tǒng)協(xié)同過濾算法相比,提高了準(zhǔn)確率和時(shí)效性,驗(yàn)證了系統(tǒng)可較好地滿足用戶的實(shí)時(shí)需求。
關(guān)鍵詞:Spark;實(shí)時(shí);推薦算法;協(xié)同過濾
中圖分類號(hào):TP399? ? ?文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):2096-1472(2021)-09-13-04
Abstract: With the continuous expansion of the amount of Internet data, traditional recommendation model can no longer meet the demand for real-time recommendation. The deficiency of collaborative filtering recommendation algorithm is becoming more and more obvious. For this reason, this paper proposes to build a model-based recommendation algorithm based on the Spark platform of big data computing framework, in order to better deal with the problem of real-time recommendation of massive data. First of all, the model is constructed through the preset calculation method, and an improved cosine similarity algorithm is applied to the model, which can not only shorten the time of recommendation implementation, but also improve the performance of recommendation. Experimental results show that compared with the traditional collaborative filtering algorithm, the proposed algorithm improves the accuracy and timeliness, and verifies that the system can better meet the real-time needs of users.
Keywords: Spark; real time; recommendation algorithm; collaborative filtering
1? ?引言(Introduction)
在信息爆炸的今天,信息超載的問題[1]逐漸顯現(xiàn)出來,人們有許多種方式和途徑去獲取信息,但是很難從這些信息中找到自己所感興趣的東西。推薦系統(tǒng)則是解決這個(gè)問題的關(guān)鍵所在[2-4]。推薦系統(tǒng)能夠通過分析用戶的興趣和行為,智能地向用戶推薦所需信息,其既需要篩選出大量有用的數(shù)據(jù),又要實(shí)時(shí)地滿足用戶的個(gè)性化需求[5],所以大數(shù)據(jù)處理是推薦系統(tǒng)所要具有的能力[6-7]。Spark是一種具有大數(shù)據(jù)處理能力的內(nèi)存計(jì)算框架[8],運(yùn)行于Spark平臺(tái)的推薦系統(tǒng)可以發(fā)揮更高的處理能力。本文旨在利用Spark平臺(tái)對(duì)基于模型的推薦算法進(jìn)行優(yōu)化與并行化實(shí)現(xiàn),和傳統(tǒng)的推薦算法相比,實(shí)時(shí)性與準(zhǔn)確性也都有較大的提高。
2? Spark分布式計(jì)算框架(Spark distributed computing framework)
2.1? ?Spark運(yùn)行架構(gòu)原理
Apache Spark是一種基于內(nèi)存的快速、通用、可擴(kuò)展的大數(shù)據(jù)計(jì)算引擎[9]。當(dāng)執(zhí)行一個(gè)用戶編寫的Spark應(yīng)用程序時(shí)(SparkContext),Driver程序會(huì)創(chuàng)建SparkContext向集群申請(qǐng)資源,并在此階段中生成DAGScheduler和TaskScheduler兩個(gè)模塊,資源管理器啟動(dòng)Executor進(jìn)程。DAGScheduler將任務(wù)解析成Stage,之后把一個(gè)個(gè)TaskSet提供給底層調(diào)度器 TaskScheduler處理[10]。
Executor向應(yīng)用程序申請(qǐng)Task,TaskScheduler將Task發(fā)放給Executor運(yùn)行并提供應(yīng)用程序代碼。具體流程如圖1所示。
2.2? ?Spark平臺(tái)部署
本文搭建的Spark集群[11]采用3 臺(tái)普通的PC,其中包括1 個(gè)Master節(jié)點(diǎn)和2 個(gè)Slave節(jié)點(diǎn)。3 個(gè)節(jié)點(diǎn)均采用CentOS 6 Linux系統(tǒng),節(jié)點(diǎn)之間采用局域網(wǎng)連接,具體情況如表1所示。
Java JDK安裝包采用jdk-8u144-linux-x64.tar.gz,Scala安裝包采用scala-sdk-2.11.8.tar.gz,Hadoop安裝包采用hadoop-2.7.2.tar.gz。安裝過程中配置安全外殼協(xié)議(SSH)以便實(shí)現(xiàn)遠(yuǎn)程無(wú)密碼登錄與管理。完成Hadoop集群的配置安裝后進(jìn)行Spark的安裝,Spark安裝包采用Spark-2.1.1-bin-hadoop2.7.tgz,軟件開發(fā)環(huán)境采用IntelliJIDEA 2019.2.4。
3? 推薦系統(tǒng)與協(xié)同過濾推薦算法(Recommendation system and collaborative filtering recommendation algorithm)
推薦系統(tǒng)需要大量的數(shù)據(jù)作為支撐,和搜索引擎[12]一樣,它需要挖掘和解析用戶歷史的行為數(shù)據(jù),盡可能地知曉用戶的個(gè)性化需求,進(jìn)而主動(dòng)為用戶提供所需信息,給用戶的興趣建模[13-14]。
協(xié)同過濾推薦算法[15-17]是根據(jù)用戶行為數(shù)據(jù)設(shè)計(jì)的較早的著名推薦算法。協(xié)同過濾推薦算法可以分為基于用戶的協(xié)同過濾算法[18]和基于物品的協(xié)同過濾算法[19]兩類?;谟脩舻膮f(xié)同過濾算法的主要思路是首先確立目標(biāo)用戶并找出與他相似興趣的用戶,在不考慮他們皆感興趣部分的前提下,將相似用戶感興趣的內(nèi)容推薦給目標(biāo)用戶,適用于用戶較少的場(chǎng)合,比如新聞推薦。基于物品的協(xié)同過濾算法主要是通過分析用戶的歷史行為記錄找出與之相似的物品,將這一類物品推薦給用戶,適用于物品數(shù)遠(yuǎn)小于用戶數(shù)的場(chǎng)合,比如圖書、電子商務(wù)。
4? ?基于模型的實(shí)時(shí)推薦算法(Model-based real-time recommendation algorithm)
實(shí)時(shí)推薦結(jié)果反映了用戶最近一段時(shí)間的偏好[20-21],用協(xié)同過濾推薦算法已經(jīng)不足以滿足實(shí)時(shí)的需求,本文提出了基于模型的實(shí)時(shí)推薦算法,其主要思路是根據(jù)預(yù)先設(shè)定的模型來完成推薦。算法設(shè)計(jì)如下:
當(dāng)電影q被用戶u評(píng)分時(shí),將對(duì)u的推薦結(jié)果進(jìn)行實(shí)時(shí)更新。此時(shí),推薦結(jié)果會(huì)產(chǎn)生改變,把和電影q極為近似的K 個(gè)電影挑選出來,將它們標(biāo)記為備選電影。每個(gè)備選電影被推薦的先后順序取決于“推薦優(yōu)先級(jí)”的權(quán)重,它們會(huì)通過用戶u最近時(shí)間內(nèi)的評(píng)分,分別計(jì)算出各自的推薦優(yōu)先級(jí),根據(jù)計(jì)算出來的結(jié)果同上一次的推薦結(jié)果進(jìn)行歸并和更換,得出最終的實(shí)時(shí)推薦結(jié)果。詳細(xì)過程如下:
按照時(shí)間先后順序,得到用戶u最近的K 個(gè)評(píng)分,表示為RK;對(duì)于電影q,將S記為與其最為近似的K 個(gè)電影的集合;之后計(jì)算每個(gè)電影的推薦優(yōu)先級(jí),公式如式(1)所示。
電影q和電影r之間的相似度用來表示,為了計(jì)算簡(jiǎn)便,將最小相似度的閾值設(shè)置為0.7。兩個(gè)電影之間相似度如果低于0.7,則表示它們沒有關(guān)聯(lián),不予考慮;代表的是在RK中,不但與電影q相似,而且自身評(píng)分大于等于3的電影數(shù)量;RK中評(píng)分低于3,與電影q相似的電影數(shù)量則用來表示;是在RK中符合最小閾值條件的電影數(shù)量;其中在計(jì)算過程中用到了一種改進(jìn)的余弦相似度公式,計(jì)算公式如式(2)所示。
其中,表示電影的兩兩相似度,u代表用戶。由于存在熱門電影,很多用戶都很喜歡,這樣計(jì)算的相似度就會(huì)很大,因此會(huì)造成任何電影都會(huì)和熱門電影有很大的相似度。還有一種情況是,用戶看很多電影并不都是出于自身的興趣,雖然活躍,但是有可能是職業(yè)需要,而且這些電影覆蓋了很多領(lǐng)域,所以這個(gè)用戶對(duì)于他所看過的電影的兩兩相似度的貢獻(xiàn)應(yīng)該遠(yuǎn)遠(yuǎn)小于一個(gè)只看了幾部自己喜歡的電影但是不活躍的用戶。公式針對(duì)熱門電影和活躍用戶進(jìn)行了一定的懲罰。
在每個(gè)備選電影q中,從用戶u的最近K 個(gè)評(píng)分之中,發(fā)現(xiàn)和電影q相似度大于等于0.7的電影,將發(fā)現(xiàn)的每個(gè)電影r與備選電影q之間的相似度乘上r自身的評(píng)分,然后進(jìn)行加權(quán)求和,得出用戶u對(duì)電影q評(píng)分的預(yù)測(cè)值。在用戶u評(píng)分的K 個(gè)電影中,將與電影q相似并且評(píng)分值大于等于3的電影數(shù)量標(biāo)記為,而評(píng)分值小于3的電影數(shù)量標(biāo)記為。用作電影q的“強(qiáng)化因子”,其作用是表示在用戶u評(píng)分過的K 個(gè)電影當(dāng)中,評(píng)分值大于等于3且與電影q相似的個(gè)數(shù),那么需要根據(jù)相似的個(gè)數(shù)相應(yīng)地去增加電影q的推薦優(yōu)先級(jí),如果其中相似的高評(píng)分電影越多,那么電影q被推薦的可能性越大;反之其被推薦的可能性比較小。用作電影q的“弱化因子”,作用是表示在用戶u評(píng)分過的K 個(gè)電影當(dāng)中,評(píng)分值小于3且與電影q相似的個(gè)數(shù),則需要根據(jù)近似的個(gè)數(shù)相應(yīng)地去減少電影q的推薦優(yōu)先級(jí),如果其中相似的低評(píng)分電影有很多,那么不推薦電影q的可能性較大。
最終通過公式(1)計(jì)算出用戶u的每個(gè)備選電影q的推薦優(yōu)先級(jí),并且形成一個(gè)電影
在Spark上實(shí)現(xiàn)算法時(shí),首先計(jì)算電影相似度矩陣,會(huì)為用戶、電影分別生成最終的特征矩陣。用戶特征矩陣為矩陣,每個(gè)用戶由 個(gè)特征描述;物品特征矩陣為矩陣,每個(gè)物品由 個(gè)特征描述,將它們保存在MongDB中。再計(jì)算每一個(gè)用戶最近對(duì)電影的K 次評(píng)分,存儲(chǔ)在Redis中。接下來讀取數(shù)據(jù)庫(kù)的數(shù)據(jù),計(jì)算備選電影的推薦優(yōu)先級(jí),更新對(duì)userId的實(shí)時(shí)推薦結(jié)果。流程圖如圖2所示。
5? ?實(shí)驗(yàn)結(jié)果分析(Analysis of experimental results)
5.1? ?實(shí)驗(yàn)數(shù)據(jù)集
本文使用公開MovieLens數(shù)據(jù)集,在Spark平臺(tái)和單機(jī)系統(tǒng)分別對(duì)比實(shí)時(shí)推薦算法在相似度修改前和修改后(實(shí)時(shí)推薦算法-l),以及基于物品的協(xié)同過濾算法在相似度修改前(ItemCF)和修改后(ItemCF-l)的推薦效果。此處選擇的數(shù)據(jù)大小為10 MB,共10,000 部電影、72,000 名用戶及1,000萬(wàn)條評(píng)分?jǐn)?shù)據(jù)。評(píng)分取值為1—5,得分越高,用戶對(duì)電影的評(píng)價(jià)越高。
5.2? ?評(píng)測(cè)標(biāo)準(zhǔn)
實(shí)時(shí)推薦算法的評(píng)價(jià)標(biāo)準(zhǔn)一般包括推薦時(shí)間效率、推薦質(zhì)量和推薦多樣性,它們分別反映了推薦算法的實(shí)時(shí)響應(yīng)、推薦性能和推薦過程中用戶的個(gè)性化請(qǐng)求。其中,推薦時(shí)間效率通過執(zhí)行算法的時(shí)間來衡量,推薦的質(zhì)量可以通過準(zhǔn)確率和召回率來衡量[22-23]。
準(zhǔn)確率:推薦正確的電影數(shù)量占推薦電影總數(shù)的比例,公式如式(3)所示。
召回率:在推薦結(jié)果中滿足用戶要求的電影數(shù)量占所有滿足要求的電影數(shù)量之比,公式如式(4)所示。
其中,是基于用戶在訓(xùn)練集上的行為向用戶做出的推薦列表,是測(cè)試集上的用戶行為列表。
5.3? ?實(shí)驗(yàn)結(jié)果與分析
論文選擇Recall和算法執(zhí)行時(shí)間作為推薦算法的評(píng)測(cè)標(biāo)準(zhǔn)。實(shí)驗(yàn)隨機(jī)取數(shù)據(jù)集中的80%作為訓(xùn)練集,20%作為測(cè)試集。分別計(jì)算四種算法的Recall值和執(zhí)行時(shí)間,經(jīng)過八次計(jì)算,結(jié)果如圖3和圖4所示。
由此可以看出,本文提出的算法效果要比傳統(tǒng)的協(xié)同過濾算法在性能上有較大的提升。Spark平臺(tái)推薦算法并行化實(shí)現(xiàn),實(shí)時(shí)推薦算法的部分運(yùn)行結(jié)果如圖5所示。根據(jù)顯示的結(jié)果,推薦算法成功地將用戶的隱式行為與實(shí)際行為結(jié)合起來,可以根據(jù)用戶的當(dāng)前反應(yīng)進(jìn)行實(shí)時(shí)推薦,推薦結(jié)果更符合用戶的當(dāng)前意圖。
6? ?結(jié)論(Conclusion)
本文提出了實(shí)時(shí)推薦算法并且設(shè)置了一種改進(jìn)的余弦相似度公式,以減少活躍用戶對(duì)相似度的干擾。與傳統(tǒng)推薦算法相比,真實(shí)數(shù)據(jù)集的實(shí)驗(yàn)檢驗(yàn)了該算法在電影實(shí)時(shí)推薦中的準(zhǔn)確性與時(shí)效性。但是,模型在評(píng)價(jià)指標(biāo)的提升上沒有達(dá)到預(yù)期,這可能是模型的調(diào)參問題,或推薦模型的選擇問題,或特征工程不夠完善的問題,有待于進(jìn)一步研究。
參考文獻(xiàn)(References)
[1] 陳瑋瑜.互聯(lián)網(wǎng)時(shí)代信息超載問題研究[J].傳播力研究,2019,3(08):243.
[2] 李學(xué)超,張文德,曾金晶,等.推薦系統(tǒng)領(lǐng)域研究現(xiàn)狀分析[J].情報(bào)探索,2019,26(01):112-119.
[3] 劉君良,李曉光.個(gè)性化推薦系統(tǒng)技術(shù)進(jìn)展[J].計(jì)算機(jī)科學(xué),2020,47(07):47-55.
[4] 周萬(wàn)珍,曹迪,許云峰,等.推薦系統(tǒng)研究綜述[J].河北科技大學(xué)學(xué)報(bào),2020,41(01):76-87.
[5] 嚴(yán)磊,汪小可.基于Spark流式計(jì)算的實(shí)時(shí)電影推薦研究[J].軟件導(dǎo)刊,2019,18(05):44-48.
[6] CHEN M, MAO S W, LIU Y H. Big data: A survey[J]. Mobile Networks and Applications, 2014, 19(2):171-209.
[7] 蔡江輝,楊雨晴.大數(shù)據(jù)分析及處理綜述[J].太原科技大學(xué)學(xué)報(bào),2020,41(06):417-424.
[8] 孫麗.常見大數(shù)據(jù)處理框架比較研究[J].電腦知識(shí)與技術(shù),2020,16(12):3-5.
[9] 宋泊東,張立臣,江其洲.基于Spark的分布式大數(shù)據(jù)分析算法研究[J].計(jì)算機(jī)應(yīng)用與軟件,2019,36(01):39-44.
[10] 須成杰,肖喜榮,張敬誼.基于Spark的大數(shù)據(jù)分析平臺(tái)的設(shè)計(jì)和應(yīng)用[J].中國(guó)衛(wèi)生信息管理雜志,2019,16(05):633-637.
[11] 唐未香,吳學(xué)楊,劉科峰.Spark分布式集群的搭建[J].福建電腦,2020,36(02):102-104.
[12] GUEVARA S. Improve your search engine experience[J]. Information Today, 2020, 37(7):20.
[13] 周雪梅.用戶興趣建模支持下的行為推薦算法特性分析[J].現(xiàn)代信息科技,2019,3(09):11-13.
[14] 楊李婷,陳翰雄.用戶興趣建模綜述[J].軟件導(dǎo)刊,2015,14(10):20-23.
[15] 翁小蘭,王志堅(jiān).協(xié)同過濾推薦算法研究進(jìn)展[J].計(jì)算機(jī)工程與應(yīng)用,2018,54(01):25-31.
[16] ZHANG F, GONG T, LEE V E, et al. Fast algorithms to evaluate collaborative filtering recommender systems[J]. Knowledge-Based Systems, 2016, 96(15):96-103.
[17] TAO J H, GAN J H, WEN B. Collaborative filtering recommendation algorithm based on Spark[J]. International Journal of Performability Engineering, 2019, 15(3):930-938.
[18] 蔣宗禮,于莉.基于用戶特征的協(xié)同過濾推薦算法[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2019,28(08):190-196.
[19] 焦富森,李樹青.基于物品質(zhì)量和用戶評(píng)分修正的協(xié)同過濾推薦算法[J].數(shù)據(jù)分析與知識(shí)發(fā)現(xiàn),2019,3(08):62-67.
[20] 李亞欣,蔡永香,張根.結(jié)合實(shí)時(shí)推薦與離線推薦的推薦系統(tǒng)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2019,28(10):45-52.
[21] 劉宇,周虎.基于Spark Streaming實(shí)時(shí)推薦系統(tǒng)的研究與設(shè)計(jì)[J].計(jì)算機(jī)與數(shù)字工程,2020,48(05):1172-1175.
[22] 朱郁筱,呂琳媛.推薦系統(tǒng)評(píng)價(jià)指標(biāo)綜述[J].電子科技大學(xué)學(xué)報(bào),2012,41(02):163-175.
[23] DUBE K, KAVU T D, RAETH P E, et al. A characterisation and framework for user-centric factors in evaluation methods for recommender systems[J]. International Journal of ICT Research in Africa and the Middle East, 2017, 6(1):1-16.
作者簡(jiǎn)介:
牛路帥(1997-),男,碩士生.研究領(lǐng)域:大數(shù)據(jù),推薦系統(tǒng).
彭? ?龑(1967-),男,博士,教授.研究領(lǐng)域:計(jì)算機(jī)應(yīng)用.