朱炳旭 葉傳奇 王君洋 李應(yīng)霆 李玉進(jìn)
摘 要:文章指出,該系統(tǒng)的開發(fā)設(shè)計(jì)是使用了互聯(lián)網(wǎng)著名且優(yōu)化過后的MovieLens數(shù)據(jù)集當(dāng)作基礎(chǔ),以網(wǎng)絡(luò)中某個(gè)電影評(píng)分網(wǎng)站的數(shù)據(jù)業(yè)務(wù)框架作為前提,其中包括離線推薦和實(shí)時(shí)推薦體系,總體采用了協(xié)同過濾算法和基于內(nèi)容的推薦算法實(shí)現(xiàn)混合推薦的目的。實(shí)現(xiàn)了前端可視化頁面、后臺(tái)業(yè)務(wù)處理、算法的設(shè)計(jì)與實(shí)現(xiàn)、環(huán)境的安裝與部署等多種操作方式。
關(guān)鍵詞:推薦系統(tǒng);混合推薦;協(xié)同過濾;Spark;ALS;機(jī)器學(xué)習(xí)
0?引言
隨著網(wǎng)絡(luò)碎片化管理視頻的時(shí)代到來,不斷產(chǎn)生的用戶數(shù)據(jù),促使基于用戶的智能推薦影片的系統(tǒng)的實(shí)現(xiàn)非常重要。一個(gè)完善的推薦系統(tǒng)能夠?yàn)橛脩籼峁?shí)時(shí)需要的信息,正是如此推薦系統(tǒng)面對(duì)海量產(chǎn)生的數(shù)據(jù)信息,從中快速推薦出滿足用戶喜好的物品,對(duì)于一些“選擇恐懼癥”和沒有明確需求的人是一道福音。
以電影網(wǎng)站作為業(yè)務(wù)應(yīng)用場(chǎng)景,實(shí)現(xiàn)基于統(tǒng)計(jì)的推薦、基于LFM的離線推薦、基于模型的實(shí)時(shí)推薦、基于內(nèi)容的推薦等多個(gè)模塊代碼實(shí)現(xiàn),并與各種工具進(jìn)行整合互接,構(gòu)成完整的項(xiàng)目,實(shí)現(xiàn)對(duì)大數(shù)據(jù)框架的整合以及典型機(jī)器學(xué)習(xí)前沿學(xué)習(xí)算法的應(yīng)用[1-3]。
1?推薦系統(tǒng)總體技術(shù)要求
1.1? 系統(tǒng)框架要求
該推薦系統(tǒng)是基于Web開發(fā)的B/S系統(tǒng),該前端架構(gòu)是通過AngularJS框架用戶可視化工具開發(fā)實(shí)現(xiàn),該后端是通過Spring框架進(jìn)行綜合業(yè)務(wù)服務(wù)的實(shí)現(xiàn)。
(1)系統(tǒng)采用的開發(fā)工具:IDEA;編程語言:Java、Scala。
(2)由于業(yè)務(wù)處理請(qǐng)求在數(shù)據(jù)的存儲(chǔ)模塊有著差異,進(jìn)行區(qū)別采用了不同的數(shù)據(jù)庫,采用MongoDB管理平臺(tái)內(nèi)業(yè)務(wù)數(shù)據(jù)庫并當(dāng)做主數(shù)據(jù)庫;采用Elasticsearch當(dāng)做模糊搜索服務(wù)器實(shí)現(xiàn)匹配查詢操作和基于內(nèi)容的推薦;采用Redis當(dāng)做緩存數(shù)據(jù)庫實(shí)現(xiàn)實(shí)時(shí)推薦模塊里對(duì)數(shù)據(jù)進(jìn)行提取。
(3)系統(tǒng)基于Spark平臺(tái),運(yùn)用到了Spark部分生態(tài)組件。實(shí)時(shí)推薦部分中實(shí)現(xiàn)基于模型的推薦算法,采用Flume進(jìn)行日志收集業(yè)務(wù)以及Kafka進(jìn)行消息緩沖操作,使用Spark Streaming當(dāng)做實(shí)時(shí)的推薦系統(tǒng),接受Kafka對(duì)緩存的數(shù)據(jù)處理后合并更新到MongoDB數(shù)據(jù)庫。
1.2? 系統(tǒng)架構(gòu)
該推薦系統(tǒng)的整體業(yè)務(wù)的實(shí)現(xiàn)將Web端由前端AngularJS用戶可視化框架和后臺(tái)響應(yīng)業(yè)務(wù)請(qǐng)求的Spring框架組成,并結(jié)合MongoDB數(shù)據(jù)庫和Spark生態(tài)服務(wù)部分組件完成[4-6]。系統(tǒng)架構(gòu)如圖1所示。
2?電影推薦系統(tǒng)的結(jié)構(gòu)設(shè)計(jì)
系統(tǒng)的結(jié)構(gòu)設(shè)計(jì)可以分為4個(gè)模塊:系統(tǒng)初始化、離線推薦、實(shí)時(shí)推薦、業(yè)務(wù)實(shí)現(xiàn)。
(1)系統(tǒng)初始化部分。在系統(tǒng)的初始化中主要任務(wù)是經(jīng)Spark SQL將初始化后產(chǎn)生的數(shù)據(jù)加載進(jìn)MongoDB和ElasticSearch里面。
(2)離線推薦部分。首先,經(jīng)Azkaban操作離線的統(tǒng)計(jì)請(qǐng)求對(duì)離線推薦服務(wù)進(jìn)行調(diào)度,然后在預(yù)先設(shè)好的運(yùn)行時(shí)間周期實(shí)現(xiàn)任務(wù)的觸發(fā)執(zhí)行操作。其次,實(shí)現(xiàn)離線統(tǒng)計(jì)服務(wù)在MongoDB業(yè)務(wù)數(shù)據(jù)庫,其進(jìn)行數(shù)據(jù)的加載,使電影的“平均評(píng)分統(tǒng)計(jì)”“評(píng)分個(gè)數(shù)統(tǒng)計(jì)”以及“最近評(píng)分個(gè)數(shù)的統(tǒng)計(jì)”的統(tǒng)計(jì)算法運(yùn)行處理得到結(jié)果,然后將計(jì)算結(jié)果回寫入MongoDB;實(shí)現(xiàn)離線推薦服務(wù)在MongoDB進(jìn)行數(shù)據(jù)的加載,然后利用基于ALS的協(xié)同過濾算法進(jìn)行處理,把“用戶推薦結(jié)果矩陣”“影片相似度矩陣”寫入MongoDB。
(3)實(shí)時(shí)推薦部分。通過Flume在總體的服務(wù)架構(gòu)下得到的運(yùn)行日志里面讀取信息,查看更新日志,然后讓更新后的信息實(shí)時(shí)轉(zhuǎn)發(fā)給Kafka;Kafka接收到日志信息后,經(jīng)KafkaStream對(duì)獲得的日志信息實(shí)現(xiàn)過濾處理操作,從而獲得產(chǎn)生用戶的評(píng)分?jǐn)?shù)據(jù)流“UID | SCORE | TIMESTAMP”,并轉(zhuǎn)入進(jìn)其他的已經(jīng)備好的Kafka隊(duì)列中;Spark Streaming通過實(shí)現(xiàn)對(duì)Kafka隊(duì)列的監(jiān)聽,可以及時(shí)接收到Kafka過濾后產(chǎn)生的有關(guān)用戶的評(píng)分?jǐn)?shù)據(jù)流,然后在Redis中的最近評(píng)分隊(duì)列中實(shí)現(xiàn)融合存儲(chǔ)操作,實(shí)時(shí)推薦算法接受并實(shí)現(xiàn)最新推薦結(jié)果的計(jì)算預(yù)測(cè);算法處理結(jié)束后,將新產(chǎn)生的推薦結(jié)果和之前MongoDB業(yè)務(wù)數(shù)據(jù)庫中原有的數(shù)據(jù)進(jìn)行合并。
(4)業(yè)務(wù)部分。第一,推薦系統(tǒng)的成果演示功能中在MongoDB和ElasticSearch里讓最終的離線推薦、實(shí)時(shí)推薦以及內(nèi)容推薦產(chǎn)生的所有結(jié)果實(shí)現(xiàn)混合,進(jìn)而總體得到對(duì)應(yīng)的數(shù)據(jù)。第二,信息查詢業(yè)務(wù)功能連接MongoD進(jìn)行電影信息的查詢功能處理。第三,在電影評(píng)分功能當(dāng)中,接收前臺(tái)UI響應(yīng)用戶進(jìn)行的評(píng)分操作,后端服務(wù)對(duì)數(shù)據(jù)庫日志進(jìn)行記錄之后,把數(shù)據(jù)推送到Redis群當(dāng)中,并且把之前設(shè)定好的日志框架輸出到Tomcat的日志當(dāng)中。第四,系統(tǒng)的檢索功能ElasticSearch搜索服務(wù)器進(jìn)行電影信息的模糊查詢操作。第五,電影標(biāo)簽功能中主要是用戶可以通過客戶端對(duì)電影的標(biāo)簽進(jìn)行手動(dòng)添加。推薦效果如圖2所示。
3 結(jié)語
通過設(shè)計(jì)并實(shí)現(xiàn)一個(gè)簡(jiǎn)單的個(gè)性化電影推薦系統(tǒng),對(duì)大數(shù)據(jù)平臺(tái)下Spark數(shù)據(jù)處理、機(jī)器學(xué)習(xí)基礎(chǔ)以及推薦算法的架構(gòu)有了進(jìn)一步的學(xué)習(xí),同時(shí)也初步了解了推薦算法的一些具體流程,本系統(tǒng)包含了電影的實(shí)時(shí)推薦離線推薦、熱門電影推薦、基于ALS算法的協(xié)同過濾推薦、基于模型的推薦、基于內(nèi)容的推薦、基于統(tǒng)計(jì)的推薦、用戶注冊(cè)登錄和電影展示等功能。未來的學(xué)習(xí)研究任務(wù)將kmeans和深度學(xué)習(xí)等模型結(jié)合進(jìn)行推薦,從而提高推薦的準(zhǔn)確率和多樣性。
[參考文獻(xiàn)]
[1]項(xiàng)亮.推薦系統(tǒng)實(shí)踐[M].北京:人民郵電出版社,2012.
[2]史愛武,李險(xiǎn)貴.基于Spark和微服務(wù)架構(gòu)的電影推薦系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].武漢:武漢紡織大學(xué),2021.
[3]雷暢.基于Spark的電影推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].武漢:華中科技大學(xué),2020.
[4]張志威.個(gè)性化推薦算法研究綜述[J].信息與電腦(理論版),2018(17):27-29.
[5]林子雨.大數(shù)據(jù)技術(shù)原理與應(yīng)用:概念、存儲(chǔ)、處理、分析與應(yīng)用[M].北京:人民郵電出版社,2017.
[6]劉祥,熊曉明,王藝航,等.一種基于Spark的電影推薦系統(tǒng)及方法,CN:110717093A[P].廣東:廣東工業(yè)大學(xué),2020.
(編輯 傅金睿)