史愛武 李險貴
摘要:推薦系統(tǒng)廣泛應用于人們生活的多個領(lǐng)域,日常生活中常見的有電商、電影、音樂和新聞推薦等。推薦系統(tǒng)根據(jù)用戶的歷史偏好主動推送相關(guān)的信息,節(jié)約了用戶的時間,極大地提升了用戶的體驗。隨著大數(shù)據(jù)技術(shù)的發(fā)展成熟,數(shù)據(jù)處理的速度變得更快。該文選取MovieLens電影數(shù)據(jù)集,并基于大數(shù)據(jù)分布式處理框架Spark和交替最小二乘法ALS等算法搭建數(shù)據(jù)處理平臺,然后再結(jié)合Spring Boot和Spring Cloud等搭建電影后臺服務,實現(xiàn)一個基于微服務架構(gòu)的電影推薦系統(tǒng)。
關(guān)鍵詞:推薦系統(tǒng);Spark;ALS;微服務架構(gòu)
Abstract: Recommendation system is widely used in many fields of people's life, such as e-commerce, movies, music and news recommendation and so on. Recommendation system actively pushes relevant information according to the user's historical preference, which saves the user's time and greatly improves the user's experience. With the development and maturity of big data technology, the speed of data processing becomes faster. This paper selects movielens movie data set, builds a data processing platform based on big data distributed processing framework Spark and alternating least squares algorithm ALS, and then builds movie background service combined with Spring Boot and Spring Cloud to realize a movie recommendation system based on microservice architecture.
Key words: recommendation system; Spark; ALS; microservice architecture
1 背景
大數(shù)據(jù)時代用戶面臨信息過載的問題,為了從海量數(shù)據(jù)中找到用戶可能感興趣的信息,由此產(chǎn)生了推薦系統(tǒng)。日常生活中常見的有電商、電影、音樂和新聞推薦等[1]。隨著大數(shù)據(jù)技術(shù)如Spark、Flink等的發(fā)展成熟,其計算速度更快,可以更好地為廣大群眾服務。本文將基于Spark和微服務架構(gòu)設(shè)計并實現(xiàn)一個簡易的電影推薦系統(tǒng)。
2 相關(guān)技術(shù)
2.1 推薦策略
推薦系統(tǒng)的實質(zhì)是對用戶或者物品的本身屬性即基本信息,或者是對用戶的行為數(shù)據(jù)進行分析,通過特定的算法模型從海量數(shù)據(jù)中找到相關(guān)性,從而產(chǎn)生推薦的結(jié)果。常見的推薦策略有基于內(nèi)容的推薦、協(xié)同過濾推薦和混合推薦等[2]。
基于內(nèi)容的推薦,即根據(jù)物品自身的屬性特征計算物品間的相關(guān)性或相似性,再基于用戶的歷史偏好記錄為用戶推薦相似的物品?;趨f(xié)同過濾的推薦,即根據(jù)用戶評分矩陣,用戶和物品協(xié)同作戰(zhàn)。協(xié)同過濾推薦可分為基于內(nèi)存的協(xié)同過濾Memory-based CF和基于模型的協(xié)同過濾Model-based CF。Memory-based 可分為基于用戶的協(xié)同過濾User-based CF和基于物品的協(xié)同過濾Item-based CF[3]。混合推薦,即多種算法按照不同的策略進行混合后再推薦,常見的混合推薦有加權(quán)、切換、分區(qū)、分層、瀑布式混合、特征組合和特征增強等[4]。
2.2 Spark介紹
Spark作為大數(shù)據(jù)并行計算框架,由于支持內(nèi)存計算,減少了IO開銷,帶來了更高的迭代計算效率,同時Spark也支持批處理和實時流數(shù)據(jù)處理等。Spark包含的組件主要有Spark Core、Spark SQL、Spark Streaming、Structured Streaming、MLlib和GraphX等[5]。
2.3 微服務架構(gòu)
微服務架構(gòu)將單一應用細分為多個微服務,可以獨立開發(fā)和部署每個微服務,便于開發(fā)和維護。多個微服務之間互相協(xié)調(diào)、互相配合。常見的微服務架構(gòu)有Spring Cloud和Dubbo等等。微服務架構(gòu)體系包含服務注冊與發(fā)現(xiàn)、服務調(diào)用、服務降級、服務網(wǎng)關(guān)、服務配置和服務總線等[6],對應的組件如表1所示。
3 系統(tǒng)設(shè)計
3.1 架構(gòu)設(shè)計
本系統(tǒng)采用微服務架構(gòu),并基于前后端分離設(shè)計理念。系統(tǒng)架構(gòu)設(shè)計如下圖1,首先選取MovieLens電影數(shù)據(jù)集ml-1m,并基于Spark進行數(shù)據(jù)處理,將結(jié)果存入到MongoDB中;然后基于Spring Boot搭建電影后臺微服務,同時將服務注冊到Nacos中;前端基于Vue等進行開發(fā),通過服務網(wǎng)關(guān)Gateway訪問不同的服務,并由Feign調(diào)用具體的微服務[7]。
3.2 功能模塊
本系統(tǒng)主要分為數(shù)據(jù)處理部分和電影后臺微服務部分。如圖2其中數(shù)據(jù)處理主要包括離線統(tǒng)計模塊和離線推薦模塊,離線統(tǒng)計模塊包含最新電影推薦和熱門電影推薦功能;離線推薦模塊包含基于交替最小二乘法ALS的協(xié)同過濾推薦、基于物品的協(xié)同過濾推薦和基于內(nèi)容的推薦;電影后臺服務包含電影模塊和用戶模塊等。
4 系統(tǒng)實現(xiàn)
4.1 開發(fā)工具和開發(fā)環(huán)境
實現(xiàn)一個簡易的基于微服務架構(gòu)的電影推薦系統(tǒng),選取IntelliJ IDEA和Visual Studio Code為開發(fā)工具,開發(fā)環(huán)境如下表2。
4.2 熱門電影推薦實現(xiàn)
熱門電影推薦考慮最近每周內(nèi)每部電影的評分次數(shù),評分次數(shù)越多說明該電影的熱度越高。具體流程如下。
1)加載數(shù)據(jù)集。
2)統(tǒng)計最近每周電影的評分次數(shù)并進行降序排序。
3)將結(jié)果存入到MongoDB中。
4.3 基于ALS的協(xié)同過濾推薦實現(xiàn)
交替最小二乘法ALS其實是將一個稀疏的用戶評分矩陣通過降維得到用戶隱特征矩陣和電影隱特征矩陣的過程[8],推薦流程如下。
1)加載數(shù)據(jù)集并隨機切分為訓練集和測試集。
2)多次調(diào)整ALS的參數(shù)如迭代次數(shù)iteration、隱特征個數(shù)k和正則化系數(shù)lambda等對模型進行訓練。
3)計算每種參數(shù)組合下測試集預測評分與實際評分之間的均方根誤差RMSE。
4)選取RMSE最小時的參數(shù)組合作為ALS的最優(yōu)參數(shù)組合。
5)通過訓練ALS模型得到電影隱特征矩陣。
6)計算兩兩電影隱特征向量的余弦相似度并按照相似度進行降序排序。
7)將結(jié)果存入到MongoDB中。
4.4 基于物品的協(xié)同過濾推薦實現(xiàn)
基于物品的協(xié)同過濾是根據(jù)用戶的行為數(shù)據(jù)如評分、點擊、收藏等計算出兩物品間的相似度,即兩物品間有相同的受眾,表示兩物品間有相關(guān)性。以用戶評分記錄為例,具體流程如下。
1)加載數(shù)據(jù)集。
2)統(tǒng)計每部電影的評分個數(shù),并根據(jù)電影ID進行組合。
3)統(tǒng)計兩兩電影被同一用戶評過分的次數(shù)。
4)計算兩兩電影間的同現(xiàn)相似度并按相似度降序排序。
5)將結(jié)果存入到MongoDB中。
4.5 電影后臺服務實現(xiàn)
電影后臺服務基于Spring Boot和Spring Cloud等實現(xiàn),主要功能是讀取MongoDB中的數(shù)據(jù),并對外提供用戶模塊和電影模塊的訪問接口。為了讓每種算法推薦的效果更加明顯,基于Vue搭建前端項目,最終前端頁面的推薦效果如圖3,其中上半部分展示電影的詳細信息,中間部分展示各種推薦算法推薦的電影ID列表和是否有交集及交集個數(shù),下半部分展示不同算法推薦的電影列表及相似度。
5 結(jié)束語
通過設(shè)計并實現(xiàn)一個簡易的電影推薦系統(tǒng),對Spark進行數(shù)據(jù)處理和微服務架構(gòu)等有更深入的了解,同時也了解了不同推薦算法的具體流程,本系統(tǒng)暫時包含最新電影推薦、熱門電影推薦、基于ALS的協(xié)同過濾推薦、基于物品的協(xié)同過濾推薦、基于內(nèi)容的推薦、用戶注冊登錄和電影展示等功能。未來的研究工作將結(jié)合kmeans和深度學習等模型進行推薦,提高推薦的多樣性和準確率,同時也可考慮進行實時推薦。
參考文獻:
[1] 項亮.推薦系統(tǒng)實踐[M].北京:人民郵電出版社,2012.
[2] Zhang S,Yao L N,Sun A X,et al.Deep learning based recommender system:a survey and new perspectives[EB/OL].[2020-03-02].https://arxiv.org/abs/1707.07435.
[3] Zhang Y F,Chen X.Explainable recommendation:a survey and new perspectives[J].Foundations and Trends? in Information Retrieval,2020,14(1):1-101.
[4] 張志威.個性化推薦算法研究綜述[J].信息與電腦(理論版),2018(17):27-29.
[5] 林子雨.大數(shù)據(jù)技術(shù)原理與應用:概念、存儲、處理、分析與應用[M].2版.北京:人民郵電出版社,2017.
[6] 馮志勇,徐硯偉,薛霄,等.微服務技術(shù)發(fā)展的現(xiàn)狀與展望[J].計算機研究與發(fā)展,2020,57(5):1103-1122.
[7] 熊其昌.基于微服務架構(gòu)的學習系統(tǒng)設(shè)計與實現(xiàn)[D].武漢:華中師范大學,2020.
[8] 侯敬儒,吳晟,李英娜.基于Spark的并行ALS協(xié)同過濾算法研究[J].計算機與數(shù)字工程,2017,45(11):2197-2201.
【通聯(lián)編輯:謝媛媛】