蒙德欽 張欽鋒
摘 要:大數(shù)據(jù)時(shí)代已來(lái)臨,基于大數(shù)據(jù)技術(shù)的推薦系統(tǒng)為我們生活帶來(lái)了極大的便利,根據(jù)手機(jī)APP用戶的訪問(wèn)日志信息可以為用戶推薦相對(duì)應(yīng)的功能、產(chǎn)品和服務(wù),使得手機(jī)APP運(yùn)營(yíng)商能夠更高效、精準(zhǔn)地推薦產(chǎn)品、服務(wù)給用戶,從而達(dá)到提升用戶黏性、提高營(yíng)銷的目的。本文以大數(shù)據(jù)推薦系統(tǒng)在觀影APP的應(yīng)用為研究基礎(chǔ),總結(jié)凝練出一套適合應(yīng)用在電商、旅游、醫(yī)療、教育等行業(yè)的構(gòu)建大數(shù)據(jù)推薦系統(tǒng)的經(jīng)驗(yàn)方法,并淺析開(kāi)展大數(shù)據(jù)推薦系統(tǒng)研究的意義,最后對(duì)優(yōu)化大數(shù)據(jù)推薦系統(tǒng)的措施進(jìn)行分析,旨在為大數(shù)據(jù)推薦系統(tǒng)開(kāi)發(fā)者提供一些優(yōu)化算法參考。
關(guān)鍵詞:大數(shù)據(jù),電影推薦系統(tǒng),算法設(shè)計(jì)
1.前言
隨著5G時(shí)代的來(lái)臨,網(wǎng)絡(luò)信息數(shù)據(jù)量大幅增長(zhǎng),用戶在面對(duì)海量信息時(shí)無(wú)法從中獲得對(duì)自己真正有用的那部分有價(jià)值的信息,使得用戶對(duì)信息的使用效率反而降低了。針對(duì)上述問(wèn)題,推薦系統(tǒng)被稱為當(dāng)前最具潛力的解決辦法,它是根據(jù)用戶的信息需求、興趣等,將用戶感興趣的服務(wù)、產(chǎn)品等推薦給用戶的個(gè)性化推薦系統(tǒng)。和搜索引擎相比推薦系統(tǒng)通過(guò)分析用戶的興趣偏好,進(jìn)行個(gè)性化計(jì)算,由系統(tǒng)發(fā)現(xiàn)用戶的興趣點(diǎn),從而引導(dǎo)用戶發(fā)現(xiàn)自己的信息需求。一個(gè)好的推薦系統(tǒng)不僅能為用戶提供個(gè)性化的服務(wù),還能和用戶之間建立密切關(guān)系,從而達(dá)到提升用戶黏性、提高營(yíng)銷的目的。
基于大數(shù)據(jù)的推薦系統(tǒng)現(xiàn)已廣泛應(yīng)用于電商、旅游、交通、醫(yī)療等領(lǐng)域,其中最典型并具有良好的發(fā)展和應(yīng)用前景的領(lǐng)域就是電子商務(wù)領(lǐng)域。同時(shí)學(xué)術(shù)界對(duì)大數(shù)據(jù)推薦系統(tǒng)的研究熱度持續(xù)升高,現(xiàn)階段已形成了一門獨(dú)立的學(xué)科。
2.電影推薦系統(tǒng)的體系架構(gòu)設(shè)計(jì)
項(xiàng)目以推薦系統(tǒng)建設(shè)領(lǐng)域知名的經(jīng)過(guò)修改過(guò)的 MovieLens 數(shù)據(jù)集作為依托,以某科技公司電影網(wǎng)站真實(shí)業(yè)務(wù)數(shù)據(jù)架構(gòu)為基礎(chǔ),構(gòu)建了符合教學(xué)體系的一體化的電影推薦系統(tǒng),包含了離線推薦與實(shí)時(shí)推薦體系,綜合利用了協(xié)同過(guò)濾算法以及基于內(nèi)容的推薦方法來(lái)提供混合推薦。提供了從前端應(yīng)用、后臺(tái)服務(wù)、算法設(shè)計(jì)實(shí)現(xiàn)、平臺(tái)部署等多方位的閉環(huán)的業(yè)務(wù)實(shí)現(xiàn)。
2.1系統(tǒng)架構(gòu)設(shè)計(jì)
2.2 數(shù)據(jù)流設(shè)計(jì)
3.電影推薦系統(tǒng)的體系架構(gòu)介紹
本系統(tǒng)的實(shí)現(xiàn)過(guò)程中用到了多種工具進(jìn)行數(shù)據(jù)的存儲(chǔ)、計(jì)算、采集和傳輸,本章主要介紹設(shè)計(jì)的工具環(huán)境。
3.1數(shù)據(jù)存儲(chǔ)部分架構(gòu)介紹
業(yè)務(wù)數(shù)據(jù)庫(kù):項(xiàng)目采用廣泛應(yīng)用的文檔數(shù)據(jù)庫(kù) MongDB 作為主數(shù)據(jù)庫(kù),主要負(fù)責(zé)平臺(tái)業(yè)務(wù)邏輯數(shù)據(jù)的存儲(chǔ)。
搜索服務(wù)器:項(xiàng)目使用 ElasticSearch 作為模糊檢索服務(wù)器,通過(guò)利用 ES 強(qiáng)大的匹配查詢能力實(shí)現(xiàn)基于內(nèi)容的推薦服務(wù)。
緩存數(shù)據(jù)庫(kù):項(xiàng)目采用 Redis 作為緩存數(shù)據(jù)庫(kù),主要用來(lái)支撐實(shí)時(shí)推薦系統(tǒng)部分對(duì)于數(shù)據(jù)的高速獲取需求
3.2離線推薦部分部分架構(gòu)介紹
離線統(tǒng)計(jì)服務(wù):批處理統(tǒng)計(jì)性業(yè)務(wù)采用 Spark Core + Spark SQL 進(jìn)行實(shí)現(xiàn),實(shí)現(xiàn)對(duì)指標(biāo)類數(shù)據(jù)的統(tǒng)計(jì)任務(wù)。
離線推薦服務(wù):離線推薦業(yè)務(wù)采用 Spark Core + Spark MLlib 進(jìn)行實(shí)現(xiàn),采用ALS 算法進(jìn)行實(shí)現(xiàn)。
工作調(diào)度服務(wù):對(duì)于離線推薦部分需要以一定的時(shí)間頻率對(duì)算法進(jìn)行調(diào)度,采 用 Azkaban 進(jìn)行任務(wù)的調(diào)度。
3.3實(shí)時(shí)推薦部分架構(gòu)介紹
日志采集服務(wù):通過(guò)利用 Flume-ng 對(duì)業(yè)務(wù)平臺(tái)中用戶對(duì)于電影的一次評(píng)分行為進(jìn)行采集,實(shí)時(shí)發(fā)送到 Kafka 集群。
消息緩沖服務(wù):項(xiàng)目采用 Kafka 作為流式數(shù)據(jù)的緩存組件,接受來(lái)自 Flume 的數(shù)據(jù)采集請(qǐng)求。并將數(shù)據(jù)推送到項(xiàng)目的實(shí)時(shí)推薦系統(tǒng)部分。[1]
實(shí)時(shí)推薦服務(wù):項(xiàng)目采用 Spark Streaming 作為實(shí)時(shí)推薦系統(tǒng),通過(guò)接收 Kafka中緩存的數(shù)據(jù),通過(guò)設(shè)計(jì)的推薦算法實(shí)現(xiàn)對(duì)實(shí)時(shí)推薦的數(shù)據(jù)處理,并將結(jié)構(gòu)合并更新到 MongoDB 數(shù)據(jù)庫(kù)。[2]
4.電影推薦系統(tǒng)實(shí)現(xiàn)前準(zhǔn)備
系統(tǒng)使用 Scala語(yǔ)言編寫(xiě),采用 IDEA工具作為開(kāi)發(fā)環(huán)境進(jìn)行項(xiàng)目編寫(xiě),采用maven 作為項(xiàng)目構(gòu)建和管理工具。在項(xiàng)目的src/main/目錄下,將經(jīng)過(guò)修改過(guò)的 MovieLens 數(shù)據(jù)集movies.csv,ratings.csv,tags.csv 復(fù)制到資源文件目錄src/main/resources 下,我們將從這里讀取數(shù)據(jù)并加載到 mongodb 和elasticsearch 中。從而完成電影數(shù)據(jù)的加載準(zhǔn)備。
5.離線推薦服務(wù)建設(shè)
離線推薦服務(wù)是綜合用戶所有的歷史數(shù)據(jù),利用設(shè)定的離線統(tǒng)計(jì)算法和離線推薦算法周期性的進(jìn)行結(jié)果統(tǒng)計(jì)與保存,計(jì)算的結(jié)果在一定時(shí)間周期內(nèi)是固定不變的,變更的頻率取決于算法調(diào)度的頻率。離線推薦服務(wù)主要計(jì)算一些可以預(yù)先進(jìn)行統(tǒng)計(jì)和計(jì)算的指標(biāo),為實(shí)時(shí)計(jì)算和前端業(yè)務(wù)相應(yīng)提供數(shù)據(jù)支撐。[3]離線推薦服務(wù)主要分為統(tǒng)計(jì)性算法、基于 ALS 的協(xié)同過(guò)濾推薦算法以及基于ElasticSearch 的內(nèi)容推薦算法。
在 resources 文件夾下引入 log4j.properties,然后在 src/main/scala 下新建 scala 單例對(duì)象StatisticsRecommender。
5.1 實(shí)現(xiàn)歷史熱門電影統(tǒng)計(jì)
根據(jù)所有歷史評(píng)分?jǐn)?shù)據(jù),計(jì)算歷史評(píng)分次數(shù)最多的電影。通過(guò) Spark SQL 讀取評(píng)分?jǐn)?shù)據(jù)集,統(tǒng)計(jì)所有評(píng)分中評(píng)分?jǐn)?shù)最多的電影,然后按照從大到小排序,將最終結(jié)果寫(xiě)入MongoDB 的RateMoreMovies 數(shù)據(jù)集中。
5.2 實(shí)現(xiàn)最近熱門電影統(tǒng)計(jì)
根據(jù)評(píng)分,按月為單位計(jì)算最近時(shí)間的月份里面評(píng)分?jǐn)?shù)最多的電影集合。通過(guò) Spark SQL 讀取評(píng)分?jǐn)?shù)據(jù)集,通過(guò) UDF 函數(shù)將評(píng)分的數(shù)據(jù)時(shí)間修改為月,然后統(tǒng)計(jì)每月電影的評(píng)分?jǐn)?shù) 。 統(tǒng)計(jì)完成之后將數(shù)據(jù)寫(xiě)入到 MongoDB 的RateMoreRecentlyMovies 數(shù)據(jù)集中。
5.3 實(shí)現(xiàn)電影平均得分統(tǒng)計(jì)
根據(jù)歷史數(shù)據(jù)中所有用戶對(duì)電影的評(píng)分,周期性的計(jì)算每個(gè)電影的平均得分。通過(guò) Spark SQL 讀取保存在 MongDB 中的 Rating 數(shù)據(jù)集,通過(guò)執(zhí)行以下 SQL 語(yǔ)句實(shí)現(xiàn)對(duì)于電影的平均分統(tǒng)計(jì):
統(tǒng)計(jì)完成之后將生成的新的 DataFrame 寫(xiě)出到 MongoDB 的 AverageMoviesScore 集合中。
5.4基于隱語(yǔ)義模型的協(xié)同過(guò)濾推薦
采用 ALS 作為協(xié)同過(guò)濾算法,分別根據(jù) MongoDB 中的用戶評(píng)分表和電影 數(shù)據(jù)集計(jì)算用戶電影推薦矩陣以及電影相似度矩陣。
通過(guò) ALS 訓(xùn)練出來(lái)的 Model 來(lái)計(jì)算所有當(dāng)前用戶電影的推薦矩陣,主要思路如下:
1. UserId 和 MovieID 做笛卡爾積,產(chǎn)生(uid,mid)的元組
2. 通過(guò)模型預(yù)測(cè)(uid,mid)的元組。
3. 將預(yù)測(cè)結(jié)果通過(guò)預(yù)測(cè)分值進(jìn)行排序。
4. 返回分值最大的 K 個(gè)電影,作為當(dāng)前用戶的推薦。
最后生成的數(shù)據(jù)結(jié)構(gòu)如下:將數(shù)據(jù)保存到 MongoDB 的 UserRecs 表中。
5.5電影相似度矩陣
通過(guò) ALS 計(jì)算電影見(jiàn)相似度矩陣,該矩陣用于查詢當(dāng)前電影的相似電影并為實(shí)時(shí)推薦系統(tǒng)服務(wù)。
離線計(jì)算的 ALS 算法,算法最終會(huì)為用戶、電影分別生成最終的特征矩陣,分別是表示用戶特征矩陣的 U(m x k)矩陣,每個(gè)用戶由 k 個(gè)特征描述;表示物品特征矩陣的 V(n x k)矩陣,每個(gè)物品也由 k 個(gè)特征描述。[4]V(n x k)表示物品特征矩陣,每一行是一個(gè) k 維向量,雖然我們并不知道每一個(gè)維度的特征意義是什么,但是 k 個(gè)維度的數(shù)學(xué)向量表示了該行對(duì)應(yīng)電影的特征。 所以,每個(gè)電影用 V(n x k)每一行的
數(shù)據(jù)集中任意兩個(gè)電影間相似度都可以由公式計(jì)算得到,電影與電影之間的相 度在一段時(shí)間內(nèi)基本是固定值。[5]最后生成的數(shù)據(jù)保存到 MongoDB 的MovieRecs 表中。
6.實(shí)時(shí)推薦服務(wù)建設(shè)
實(shí)時(shí)計(jì)算與離線計(jì)算應(yīng)用于推薦系統(tǒng)上最大的不同在于實(shí)時(shí)計(jì)算推薦結(jié)果應(yīng)該反映最近一段時(shí)間用戶近期的偏好,而離線計(jì)算推薦結(jié)果則是根據(jù)用戶從第一次評(píng)分起的所有評(píng)分記錄來(lái)計(jì)算用戶總體的偏好。[6]
用戶對(duì)物品的偏好隨著時(shí)間的推移總是會(huì)改變的。比如一個(gè)用戶 u 在某時(shí)刻對(duì)電影 p 給予了極高的評(píng)分,那么在近期一段時(shí)候,u 極有可能很喜歡與電影 p 類似的其他電影;而如果用戶 u 在某時(shí)刻對(duì)電影 q 給予了極低的評(píng)分,那么在近期一段時(shí)候,u 極有可能不喜歡與電影 q 類似的其他電影。所以對(duì)于實(shí)時(shí)推薦,當(dāng)用戶對(duì)一個(gè)電影進(jìn)行了評(píng)價(jià)后,用戶會(huì)希望推薦結(jié)果基于最近這幾次評(píng)分進(jìn)行一定的更新,使得推薦結(jié)果匹配用戶近期的偏好,滿足用戶近期的口味。[7]
如果實(shí)時(shí)推薦繼續(xù)采用離線推薦中的 ALS 算法,由于算法運(yùn)行時(shí)間巨大,不具有實(shí)時(shí)得到新的推薦結(jié)果的能力;并且由于算法本身的使用的是評(píng)分表,用戶本次評(píng)分后只更新了總評(píng)分表中的一項(xiàng),使得算法運(yùn)行后的推薦結(jié)果與用戶本次評(píng)分之前的推薦結(jié)果基本沒(méi)有多少差別,從而給用戶一種推薦結(jié)果一直沒(méi)變化的感覺(jué),很影響用戶體驗(yàn)。
另外,在實(shí)時(shí)推薦中由于時(shí)間性能上要滿足實(shí)時(shí)或者準(zhǔn)實(shí)時(shí)的要求,所以算法的計(jì)算量不能太大,避免復(fù)雜、過(guò)多的計(jì)算造成用戶體驗(yàn)的下降。[8]鑒于此,推薦精度往往不會(huì)很高。實(shí)時(shí)推薦系統(tǒng)更關(guān)心推薦結(jié)果的動(dòng)態(tài)變化能力,只要更新推薦結(jié)果的理由合理即可,至于推薦的精度要求則可以適當(dāng)放寬。
6.冷啟動(dòng)問(wèn)題處理
整個(gè)推薦系統(tǒng)更多的是依賴于用于的偏好信息進(jìn)行電影的推薦,那么就會(huì)存在一個(gè)問(wèn)題,對(duì)于新注冊(cè)的用戶是沒(méi)有任何偏好信息記錄的,那這個(gè)時(shí)候推薦就會(huì)出現(xiàn)問(wèn)題,導(dǎo)致沒(méi)有任何推薦的項(xiàng)目出現(xiàn)。
處理這個(gè)問(wèn)題一般是通過(guò)當(dāng)用戶首次登陸時(shí),為用戶提供交互式的窗口來(lái)獲取用戶對(duì)于物品的偏好。
在本項(xiàng)目中,當(dāng)用戶第一次登陸的時(shí)候,系統(tǒng)會(huì)詢問(wèn)用戶對(duì)于影片類別的偏好。
7.基于內(nèi)容的推薦服務(wù)
原始數(shù)據(jù)中的 tag 文件,是用戶給電影打上的標(biāo)簽,這部分內(nèi)容想要直接轉(zhuǎn)成評(píng)分并不容易,不過(guò)我們可以將標(biāo)簽內(nèi)容進(jìn)行提取,得到電影的內(nèi)容特征向量,進(jìn)而可以通過(guò)求取相似度矩陣。這部分可以與實(shí)時(shí)推薦系統(tǒng)直接對(duì)接,計(jì)算出與用戶當(dāng)前評(píng)分電影的相似電影,實(shí)現(xiàn)基于內(nèi)容的實(shí)時(shí)推薦。[9]為了避免熱門標(biāo)簽對(duì)特征提取的影響,我們還可以通過(guò) TF-IDF 算法對(duì)標(biāo)簽的權(quán)重進(jìn)行調(diào)整,從而盡可能地接近用戶偏好。
8.總結(jié)
本文通過(guò)整合當(dāng)前主流的大數(shù)據(jù)架構(gòu),構(gòu)建了一個(gè)智能的電影推薦系統(tǒng),針對(duì)不同用戶,通過(guò)使用基于內(nèi)容的推薦、基于協(xié)同過(guò)濾等經(jīng)典數(shù)據(jù)挖掘算法,剖析數(shù)據(jù)間的關(guān)系,從而完成電影推薦系統(tǒng)的相關(guān)功能。用戶為系統(tǒng)提供一個(gè)電影的名稱,系統(tǒng)做出與這部電影在電影所屬類別、電影演員、受歡迎程度、電影發(fā)布時(shí)間等綜合程度相似度最高的若干影片推薦。最后通過(guò)對(duì)電影推薦系統(tǒng)的研究,總結(jié)凝練出一套適合應(yīng)用在電商、旅游、醫(yī)療、教育等其他行業(yè)的構(gòu)建大數(shù)據(jù)推薦系統(tǒng)的經(jīng)驗(yàn)方法,旨在為大數(shù)據(jù)推薦系統(tǒng)開(kāi)發(fā)者提供一些優(yōu)化算法、架構(gòu)技術(shù)等方面參考。
參考文獻(xiàn):
[1]溫向慧,基于流計(jì)算的實(shí)時(shí)推薦系統(tǒng)的研究[D] :西北師范大學(xué)碩士論文,2018
[2]周虎,基于Spark Streaming實(shí)時(shí)推薦系統(tǒng)的研究與實(shí)現(xiàn) [D]武漢郵電科學(xué)研究院碩士論文,2019
[3]劉忠寶,李花,宋文愛(ài),孔祥艷,李宏艷,張靜,基于二部圖的學(xué)習(xí)資源混合推薦方法研究[J] 電化教育研究,2018
[4]李琛軒,面向推薦的大數(shù)據(jù)計(jì)算與存儲(chǔ)平臺(tái)設(shè)計(jì)與實(shí)現(xiàn) [D]哈爾濱工業(yè)大學(xué)碩士論文,2016
[5]孫遠(yuǎn)帥,基于大數(shù)據(jù)的推薦算法研究[D],廈門大學(xué)碩士論文
[6]王發(fā)旺,結(jié)合屬性特征的混合推薦系統(tǒng)研究與實(shí)現(xiàn) [D],浙江工商大學(xué)碩士論文,2019
[7]柴華,基于協(xié)同過(guò)濾和內(nèi)容過(guò)濾的混合廣告推薦技術(shù)的研究,北京郵電大學(xué)碩士論文,2015
[8]姜鵬,許峰,周文歡,大規(guī)?;ヂ?lián)網(wǎng)推薦系統(tǒng)優(yōu)化算法[D]計(jì)算機(jī)工程與科學(xué),2013
[9]劉仲民,基于圖論的圖像分割算法的研究[D],蘭州理工大學(xué)博士論文,2018
作者簡(jiǎn)介:
蒙德欽(1997.08-),男,漢族,廣西貴港人,畢業(yè)于玉林師范學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)專業(yè),本科學(xué)士,廣西城市職業(yè)大學(xué),研究方向:大數(shù)據(jù)系統(tǒng)開(kāi)發(fā)、算法設(shè)計(jì)
張欽鋒(1980.03-),男, 漢族, 廣西北海市,畢業(yè)與貴州大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)專業(yè),本科學(xué)士,廣西城市職業(yè)大學(xué),講師,研究方向:軟件開(kāi)發(fā)、算法設(shè)計(jì)、計(jì)算機(jī)網(wǎng)絡(luò)
基金項(xiàng)目:本文系2020年度廣西高校中青年教師基礎(chǔ)能力提升項(xiàng)目(基于大數(shù)據(jù)技術(shù)的推薦系統(tǒng)研究)(編號(hào):2020KY66013)
(廣西城市職業(yè)大學(xué)信息工程學(xué)院 ?廣西壯族自治區(qū)崇左市 ?532200)