史愛(ài)武 李險(xiǎn)貴
摘要:推薦系統(tǒng)廣泛應(yīng)用于人們生活的多個(gè)領(lǐng)域,日常生活中常見(jiàn)的有電商、電影、音樂(lè)和新聞推薦等。推薦系統(tǒng)根據(jù)用戶的歷史偏好主動(dòng)推送相關(guān)的信息,節(jié)約了用戶的時(shí)間,極大地提升了用戶的體驗(yàn)。隨著大數(shù)據(jù)技術(shù)的發(fā)展成熟,數(shù)據(jù)處理的速度變得更快。該文選取MovieLens電影數(shù)據(jù)集,并基于大數(shù)據(jù)分布式處理框架Spark和交替最小二乘法ALS等算法搭建數(shù)據(jù)處理平臺(tái),然后再結(jié)合Spring Boot和Spring Cloud等搭建電影后臺(tái)服務(wù),實(shí)現(xiàn)一個(gè)基于微服務(wù)架構(gòu)的電影推薦系統(tǒng)。
關(guān)鍵詞:推薦系統(tǒng);Spark;ALS;微服務(wù)架構(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í)代用戶面臨信息過(guò)載的問(wèn)題,為了從海量數(shù)據(jù)中找到用戶可能感興趣的信息,由此產(chǎn)生了推薦系統(tǒng)。日常生活中常見(jiàn)的有電商、電影、音樂(lè)和新聞推薦等[1]。隨著大數(shù)據(jù)技術(shù)如Spark、Flink等的發(fā)展成熟,其計(jì)算速度更快,可以更好地為廣大群眾服務(wù)。本文將基于Spark和微服務(wù)架構(gòu)設(shè)計(jì)并實(shí)現(xiàn)一個(gè)簡(jiǎn)易的電影推薦系統(tǒng)。
2 相關(guān)技術(shù)
2.1 推薦策略
推薦系統(tǒng)的實(shí)質(zhì)是對(duì)用戶或者物品的本身屬性即基本信息,或者是對(duì)用戶的行為數(shù)據(jù)進(jìn)行分析,通過(guò)特定的算法模型從海量數(shù)據(jù)中找到相關(guān)性,從而產(chǎn)生推薦的結(jié)果。常見(jiàn)的推薦策略有基于內(nèi)容的推薦、協(xié)同過(guò)濾推薦和混合推薦等[2]。
基于內(nèi)容的推薦,即根據(jù)物品自身的屬性特征計(jì)算物品間的相關(guān)性或相似性,再基于用戶的歷史偏好記錄為用戶推薦相似的物品。基于協(xié)同過(guò)濾的推薦,即根據(jù)用戶評(píng)分矩陣,用戶和物品協(xié)同作戰(zhàn)。協(xié)同過(guò)濾推薦可分為基于內(nèi)存的協(xié)同過(guò)濾Memory-based CF和基于模型的協(xié)同過(guò)濾Model-based CF。Memory-based 可分為基于用戶的協(xié)同過(guò)濾User-based CF和基于物品的協(xié)同過(guò)濾Item-based CF[3]?;旌贤扑],即多種算法按照不同的策略進(jìn)行混合后再推薦,常見(jiàn)的混合推薦有加權(quán)、切換、分區(qū)、分層、瀑布式混合、特征組合和特征增強(qiáng)等[4]。
2.2 Spark介紹
Spark作為大數(shù)據(jù)并行計(jì)算框架,由于支持內(nèi)存計(jì)算,減少了IO開(kāi)銷,帶來(lái)了更高的迭代計(jì)算效率,同時(shí)Spark也支持批處理和實(shí)時(shí)流數(shù)據(jù)處理等。Spark包含的組件主要有Spark Core、Spark SQL、Spark Streaming、Structured Streaming、MLlib和GraphX等[5]。
2.3 微服務(wù)架構(gòu)
微服務(wù)架構(gòu)將單一應(yīng)用細(xì)分為多個(gè)微服務(wù),可以獨(dú)立開(kāi)發(fā)和部署每個(gè)微服務(wù),便于開(kāi)發(fā)和維護(hù)。多個(gè)微服務(wù)之間互相協(xié)調(diào)、互相配合。常見(jiàn)的微服務(wù)架構(gòu)有Spring Cloud和Dubbo等等。微服務(wù)架構(gòu)體系包含服務(wù)注冊(cè)與發(fā)現(xiàn)、服務(wù)調(diào)用、服務(wù)降級(jí)、服務(wù)網(wǎng)關(guān)、服務(wù)配置和服務(wù)總線等[6],對(duì)應(yīng)的組件如表1所示。
3 系統(tǒng)設(shè)計(jì)
3.1 架構(gòu)設(shè)計(jì)
本系統(tǒng)采用微服務(wù)架構(gòu),并基于前后端分離設(shè)計(jì)理念。系統(tǒng)架構(gòu)設(shè)計(jì)如下圖1,首先選取MovieLens電影數(shù)據(jù)集ml-1m,并基于Spark進(jìn)行數(shù)據(jù)處理,將結(jié)果存入到MongoDB中;然后基于Spring Boot搭建電影后臺(tái)微服務(wù),同時(shí)將服務(wù)注冊(cè)到Nacos中;前端基于Vue等進(jìn)行開(kāi)發(fā),通過(guò)服務(wù)網(wǎng)關(guān)Gateway訪問(wèn)不同的服務(wù),并由Feign調(diào)用具體的微服務(wù)[7]。
3.2 功能模塊
本系統(tǒng)主要分為數(shù)據(jù)處理部分和電影后臺(tái)微服務(wù)部分。如圖2其中數(shù)據(jù)處理主要包括離線統(tǒng)計(jì)模塊和離線推薦模塊,離線統(tǒng)計(jì)模塊包含最新電影推薦和熱門電影推薦功能;離線推薦模塊包含基于交替最小二乘法ALS的協(xié)同過(guò)濾推薦、基于物品的協(xié)同過(guò)濾推薦和基于內(nèi)容的推薦;電影后臺(tái)服務(wù)包含電影模塊和用戶模塊等。
4 系統(tǒng)實(shí)現(xiàn)
4.1 開(kāi)發(fā)工具和開(kāi)發(fā)環(huán)境
實(shí)現(xiàn)一個(gè)簡(jiǎn)易的基于微服務(wù)架構(gòu)的電影推薦系統(tǒng),選取IntelliJ IDEA和Visual Studio Code為開(kāi)發(fā)工具,開(kāi)發(fā)環(huán)境如下表2。
4.2 熱門電影推薦實(shí)現(xiàn)
熱門電影推薦考慮最近每周內(nèi)每部電影的評(píng)分次數(shù),評(píng)分次數(shù)越多說(shuō)明該電影的熱度越高。具體流程如下。
1)加載數(shù)據(jù)集。
2)統(tǒng)計(jì)最近每周電影的評(píng)分次數(shù)并進(jìn)行降序排序。
3)將結(jié)果存入到MongoDB中。
4.3 基于ALS的協(xié)同過(guò)濾推薦實(shí)現(xiàn)
交替最小二乘法ALS其實(shí)是將一個(gè)稀疏的用戶評(píng)分矩陣通過(guò)降維得到用戶隱特征矩陣和電影隱特征矩陣的過(guò)程[8],推薦流程如下。
1)加載數(shù)據(jù)集并隨機(jī)切分為訓(xùn)練集和測(cè)試集。
2)多次調(diào)整ALS的參數(shù)如迭代次數(shù)iteration、隱特征個(gè)數(shù)k和正則化系數(shù)lambda等對(duì)模型進(jìn)行訓(xùn)練。
3)計(jì)算每種參數(shù)組合下測(cè)試集預(yù)測(cè)評(píng)分與實(shí)際評(píng)分之間的均方根誤差RMSE。
4)選取RMSE最小時(shí)的參數(shù)組合作為ALS的最優(yōu)參數(shù)組合。
5)通過(guò)訓(xùn)練ALS模型得到電影隱特征矩陣。
6)計(jì)算兩兩電影隱特征向量的余弦相似度并按照相似度進(jìn)行降序排序。
7)將結(jié)果存入到MongoDB中。
4.4 基于物品的協(xié)同過(guò)濾推薦實(shí)現(xiàn)
基于物品的協(xié)同過(guò)濾是根據(jù)用戶的行為數(shù)據(jù)如評(píng)分、點(diǎn)擊、收藏等計(jì)算出兩物品間的相似度,即兩物品間有相同的受眾,表示兩物品間有相關(guān)性。以用戶評(píng)分記錄為例,具體流程如下。
1)加載數(shù)據(jù)集。
2)統(tǒng)計(jì)每部電影的評(píng)分個(gè)數(shù),并根據(jù)電影ID進(jìn)行組合。
3)統(tǒng)計(jì)兩兩電影被同一用戶評(píng)過(guò)分的次數(shù)。
4)計(jì)算兩兩電影間的同現(xiàn)相似度并按相似度降序排序。
5)將結(jié)果存入到MongoDB中。
4.5 電影后臺(tái)服務(wù)實(shí)現(xiàn)
電影后臺(tái)服務(wù)基于Spring Boot和Spring Cloud等實(shí)現(xiàn),主要功能是讀取MongoDB中的數(shù)據(jù),并對(duì)外提供用戶模塊和電影模塊的訪問(wèn)接口。為了讓每種算法推薦的效果更加明顯,基于Vue搭建前端項(xiàng)目,最終前端頁(yè)面的推薦效果如圖3,其中上半部分展示電影的詳細(xì)信息,中間部分展示各種推薦算法推薦的電影ID列表和是否有交集及交集個(gè)數(shù),下半部分展示不同算法推薦的電影列表及相似度。
5 結(jié)束語(yǔ)
通過(guò)設(shè)計(jì)并實(shí)現(xiàn)一個(gè)簡(jiǎn)易的電影推薦系統(tǒng),對(duì)Spark進(jìn)行數(shù)據(jù)處理和微服務(wù)架構(gòu)等有更深入的了解,同時(shí)也了解了不同推薦算法的具體流程,本系統(tǒng)暫時(shí)包含最新電影推薦、熱門電影推薦、基于ALS的協(xié)同過(guò)濾推薦、基于物品的協(xié)同過(guò)濾推薦、基于內(nèi)容的推薦、用戶注冊(cè)登錄和電影展示等功能。未來(lái)的研究工作將結(jié)合kmeans和深度學(xué)習(xí)等模型進(jìn)行推薦,提高推薦的多樣性和準(zhǔn)確率,同時(shí)也可考慮進(jìn)行實(shí)時(shí)推薦。
參考文獻(xiàn):
[1] 項(xiàng)亮.推薦系統(tǒng)實(shí)踐[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] 張志威.個(gè)性化推薦算法研究綜述[J].信息與電腦(理論版),2018(17):27-29.
[5] 林子雨.大數(shù)據(jù)技術(shù)原理與應(yīng)用:概念、存儲(chǔ)、處理、分析與應(yīng)用[M].2版.北京:人民郵電出版社,2017.
[6] 馮志勇,徐硯偉,薛霄,等.微服務(wù)技術(shù)發(fā)展的現(xiàn)狀與展望[J].計(jì)算機(jī)研究與發(fā)展,2020,57(5):1103-1122.
[7] 熊其昌.基于微服務(wù)架構(gòu)的學(xué)習(xí)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].武漢:華中師范大學(xué),2020.
[8] 侯敬儒,吳晟,李英娜.基于Spark的并行ALS協(xié)同過(guò)濾算法研究[J].計(jì)算機(jī)與數(shù)字工程,2017,45(11):2197-2201.
【通聯(lián)編輯:謝媛媛】