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