蒙德欽 張欽鋒


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