【推荐系统】电影推荐系统(一)
文章目錄
- 前言
- 一、電影推薦架構(gòu)
- 1.1、系統(tǒng)架構(gòu)
- 1.2、項目數(shù)據(jù)流程
- 二、電影推薦思路
- 2.1、特征提取
- 2.2、實時推薦
- 2.3、電影內(nèi)容推薦
- 總結(jié)
前言
??隨著互聯(lián)網(wǎng)的發(fā)展,推薦系統(tǒng)在各種互聯(lián)網(wǎng)項目中占據(jù)了不可缺少的一部分,商品的推薦,抖音小視頻推薦,音樂推薦,交友推薦等等。電影系統(tǒng)相對來說是一種簡單的推薦,因此筆者也從電影系統(tǒng)入手,進軍推薦系統(tǒng)的學(xué)習(xí),請大家參考。
一、電影推薦架構(gòu)
1.1、系統(tǒng)架構(gòu)
- 用戶可視化:主要負責(zé)實現(xiàn)和用戶的交互以及業(yè)務(wù)數(shù)據(jù)的展示,主體采用AngularJS2 進行實現(xiàn),部署在 Apache 服務(wù)上。
- 綜合業(yè)務(wù)服務(wù):主要實現(xiàn) JavaEE 層面整體的業(yè)務(wù)邏輯,通過 Spring 進行構(gòu)建,對接業(yè)務(wù)需求。部署在 Tomcat 上。
【 數(shù)據(jù)存儲部分】
- 業(yè)務(wù)數(shù)據(jù)庫:項目采用廣泛應(yīng)用的文檔數(shù)據(jù)庫 MongDB 作為主數(shù)據(jù)庫,主要負責(zé)平臺業(yè)務(wù)邏輯數(shù)據(jù)的存儲。
- 搜索服務(wù)器:項目愛用 ElasticSearch 作為模糊檢索服務(wù)器,通過利用 ES 強大的匹配查詢能力實現(xiàn)基于內(nèi)容的推薦服務(wù)。
- 緩存數(shù)據(jù)庫:項目采用 Redis 作為緩存數(shù)據(jù)庫,主要用來支撐實時推薦系統(tǒng)部分對于數(shù)據(jù)的高速獲取需求。
【離線推薦部分】
- 離線統(tǒng)計服務(wù):批處理統(tǒng)計性業(yè)務(wù)采用 Spark Core + Spark SQL 進行實現(xiàn),實現(xiàn)對指標類數(shù)據(jù)的統(tǒng)計任務(wù)。
- 離線推薦服務(wù):離線推薦業(yè)務(wù)采用 Spark Core + Spark MLlib 進行實現(xiàn),采用ALS 算法進行實現(xiàn)。
- 工作調(diào)度服務(wù) :對于離線推薦部分需要以一定的時間頻率對算法進行調(diào)度,采用 Azkaban 進行任務(wù)的調(diào)度。
【實時推薦部分】
- 日志采集服務(wù):通過利用 Flume-ng 對業(yè)務(wù)平臺中用戶對于電影的一次評分行為進行采集,實時發(fā)送到 Kafka 集群。
- 消息緩沖服務(wù):項目采用 Kafka 作為流式數(shù)據(jù)的緩存組件,接受來自 Flume 的數(shù)據(jù)采集請求。并將數(shù)據(jù)推送到項目的實時推薦系統(tǒng)部分。
- 實時推薦服務(wù):項目采用 Spark Streaming 作為實時推薦系統(tǒng),通過接收 Kafka中緩存的數(shù)據(jù),通過設(shè)計的推薦算法實現(xiàn)對實時推薦的數(shù)據(jù)處理,并將結(jié)構(gòu)合并更新到 MongoDB 數(shù)據(jù)庫。
1.2、項目數(shù)據(jù)流程
【系統(tǒng)初始化部分】
- 通過 Spark SQL 將系統(tǒng)初始化數(shù)據(jù)加載到 MongoDB 和 ElasticSearch 中。
【離線推薦部分】
- 通過 Azkaban 實現(xiàn)對于離線統(tǒng)計服務(wù)以離線推薦服務(wù)的調(diào)度,通過設(shè)定的運行時間完成對任務(wù)的觸發(fā)執(zhí)行。
- 離線統(tǒng)計服務(wù)從 MongoDB 中加載數(shù)據(jù),將【電影平均評分統(tǒng)計】、【電影評分個數(shù)統(tǒng)計】、【最近電影評分個數(shù)統(tǒng)計】三個統(tǒng)計算法進行運行實現(xiàn),并將計算結(jié)果回寫到 MongoDB 中;離線推薦服務(wù)從 MongoDB 中加載數(shù)據(jù),通過 ALS 算法分別將【用戶推薦結(jié)果矩陣】、【影片相似度矩陣】回寫到 MongoDB 中。
【實時推薦部分】
- Flume 從綜合業(yè)務(wù)服務(wù)的運行日志中讀取日志更新,并將更新的日志實時推送到Kafka 中;Kafka 在收到這些日志之后,通過 kafkaStream 程序?qū)Λ@取的日志信息進行過濾處理,獲取用戶評分數(shù)據(jù)流【UID|MID|SCORE|TIMESTAMP】,并發(fā)送到另外一
個 Kafka 隊列;Spark Streaming 監(jiān)聽 Kafka 隊列,實時獲取 Kafka 過濾出來的用戶評分數(shù)據(jù)流,融合存儲在 Redis 中的用戶最近評分隊列數(shù)據(jù),提交給實時推薦算法,完成對用戶新的推薦結(jié)果計算;計算完成之后,將新的推薦結(jié)構(gòu)和 MongDB 數(shù)據(jù)庫中的推薦結(jié)果進行合并。
【業(yè)務(wù)系統(tǒng)部分】
- 推薦結(jié)果展示部分,從 MongoDB、ElasticSearch 中將離線推薦結(jié)果、實時推薦結(jié)果、內(nèi)容推薦結(jié)果進行混合,綜合給出相對應(yīng)的數(shù)據(jù)。
- 電影信息查詢服務(wù)通過對接 MongoDB 實現(xiàn)對電影信息的查詢操作。
- 電影評分部分,獲取用戶通過 UI 給出的評分動作,后臺服務(wù)進行數(shù)據(jù)庫記錄后,一方面將數(shù)據(jù)推動到 Redis 群中,另一方面,通過預(yù)設(shè)的日志框架輸出到 Tomcat 中的日志中。
- 項目通過 ElasticSearch 實現(xiàn)對電影的模糊檢索。
- 電影標簽部分,項目提供用戶對電影打標簽服務(wù)。
二、電影推薦思路
??首先電影推薦相對于其它推薦來說比較簡單。相對于短視頻推薦來說,電影推薦不會每天更新大量的新數(shù)據(jù),電影可能每個月就幾個新電影的上映。相對于新聞推薦來說,實時性可能就沒那么重要,很多老的電影也會有很多用戶喜歡觀看。因此電影推薦或者音樂推薦最適合新手入門。
2.1、特征提取
??用戶電影特征提取時,必須要有對應(yīng)的數(shù)據(jù),電影表,用戶表,用戶評價表。通過als算法對評價表進行計算,計算出電影的特征矩陣。通過電影特征的矩陣計算得出每個電影最相似的幾個電影,并且保存。保存數(shù)據(jù)如下:
{"_id":"600a2decbf19ae00fc6e2f18","mid":1669,"recs":[{"mid":2776,"score":0.9999999999999994},{"mid":2820,"score":0.9996844527170483}] }??MongoDB 是一個面向文檔存儲的數(shù)據(jù)庫,操作起來比較簡單和容易。對這種數(shù)據(jù)結(jié)構(gòu)有良好的支持,所以在此選擇MongoDB。
詳細到:ALS進行離線推薦
2.2、實時推薦
??在此實時推薦采用一個比較簡單的思路,便于理解。
??當用戶 u 對電影 p 進行了評分,將觸發(fā)一次對 用戶u 的推薦結(jié)果的更新。由于用
戶 u 對電影 p 評分,對于用戶 u 來說,他與 電影p 最相似的電影們之間的推薦強度將
發(fā)生變化,所以選取與電影 p 最相似的 K 個電影作為候選電影。
詳細到:實時推薦
2.3、電影內(nèi)容推薦
總結(jié)
??此為最簡單的電影推薦實現(xiàn)思路,當然還有很多需要完善的地方。而且在實際場景中也要根據(jù)實際情況去靈活的運用。
參考地址:
ALS算法詳解
尚硅谷電影推薦實戰(zhàn)
總結(jié)
以上是生活随笔為你收集整理的【推荐系统】电影推荐系统(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 修电脑
- 下一篇: 【数据结构与算法】【算法思想】【推荐系统