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