系統設計:使用Scala、Spark和Hadoop構建推薦系統
推薦系統是一種廣泛使用的機器學習技術,在電子商務(亞馬遜、阿里巴巴)、影片流(Netflix、Disney+)、社交網路(Facebook、Linkedin)和許多其他領域都有很多應用。由於這些服務中的資料量很大,現在大多數行業級推薦系統都是建立在 Spark 和 Hadoop 等大資料框架中的。因此,在這篇部落格中,我想向您展示我是如何使用 Scala、Spark 和 Hadoop 構建電影推薦系統的。
目錄
推薦系統介紹
推薦系統演算法可以分為兩大類:基於內容的推薦和協同過濾。
- 基於內容的推薦
利用產品特徵向使用者推薦與之前喜歡的產品相似的產品。
如果人 P1 和人 P2 對產品 D1 有相同的看法,那麼 P1 對產品 D2 的看法與 P2 的看法相同的可能性比與隨機選擇的人 Px 的看法相同。
適合新聞/文章推薦
好處:
- - 該模型不需要任何使用者資料輸入,因此更容易擴充套件。- 能夠透過特徵工程捕捉小眾物品。
缺點:
- - 需要領域知識。
- - 擴充套件使用者興趣的能力有限。
- 協同過濾
透過收集許多其他使用者的偏好資訊來預測使用者的興趣。
如果一個人喜歡具有一系列屬性的產品D1,他/她更有可能喜歡具有這些屬性的產品D2,而不是沒有這些屬性的產品D3。
應用:電影推薦,亞馬遜產品推薦
優點:
- - 不需要領域知識,高度可轉移的模式。
- - 能夠幫助使用者發現新的興趣。
缺點:
- - 冷啟動問題:需要用現有的資料工作,不能處理新的專案/使用者。
- - 難以擴充套件專案的功能。
協同過濾和Spark ALS
在這篇文章中,我們將使用協同過濾作為推薦演算法。
協同過濾的工作原理是這樣的。
首先,我們把所有使用者對所有物品的評分看作是一個矩陣,
這個矩陣可以被因子化為兩個獨立的矩陣,一個是使用者矩陣,行代表使用者,列代表潛在因素;
另一個是物品矩陣,行是潛在因素,列代表物品。
在這個因式分解過程中,評分矩陣中的缺失值可以被填補,作為使用者對物品評分的預測,然後我們可以用它們來給使用者推薦。
ALS(交替最小二乘法)是協同過濾的數學最佳化實現,它使用帶有加權拉姆達正則化 (ALS-WR) 的交替最小二乘法 (ALS) 來找到最小二乘預測和實際評級之間的最小二乘的最佳因子權重。Spark 的 MLLib 包有一個內建的 ALS 功能,我們將在這篇文章中使用它。
系統設定
- Ubuntu 20.04.3
- JDK 11.0.13
- Scala 2.12.11
- Spark 3.2.0
- Hadoop 3.2.2
- IntelliJ IDEA (2021.3.1)
資料集
在這個專案中,我們將使用來自明尼蘇達大學雙城分校的MovieLens 資料集。您可以透過執行以下命令下載ml-100k (4.7M):
wget https://files.grouplens.org/datasets/movielens/ml-100k.zip
執行以下命令解壓縮 zip 檔案:
unzip ml-100k.zip
您將看到解壓縮ml-100k的資料夾包含多個檔案。
我們主要使用兩個資料檔案:
- u.data:使用者評分資料,包括使用者id、物品id、評分、時間戳。
- u.item:電影資料,包括專案id、電影名稱、上映日期、imdb url等。
在 Spark 中執行
在 Spark 中執行之前,請使用以下命令將程式碼從我的Github 儲存庫克隆到您的本地目錄:
git clone https://github.com/haocai1992/MovieRecommender.git
準備HDFS中的資料
在我們開始之前,我們需要在終端中啟動 hadoop HDFS 和 YARN 服務)。
$ hadoop namenode -format $ start-all.sh
然後我們需要將 ml-100k 資料集上傳到 Hadoop HDFS:
$ hadoop fs -put ~/Downloads/ml-100k /user/caihao/movie
Spark中訓練推薦模型
使用以下方法在 Spark 中訓練推薦模型:
$ spark-submit --driver-memory 512m --executor-cores 2 --class RecommenderTrain --master yarn --deploy-mode client ~/Desktop/spark_test/MovieRecommender/out/artifacts/MovieRecommender_jar/MovieRecommender.jar |
使用以下命令檢查您在 HDFS 中訓練的模型:
$ hadoop fs -ls -h /user/caihao/movie
在 Spark 中生成推薦
使用以下方法在 Spark 中推薦電影:
$ spark-submit --driver-memory 512m --executor-cores 2 --class Recommend --master yarn --deploy-mode client ~/Desktop/spark_test/MovieRecommender/out/artifacts/MovieRecommender_jar2/MovieRecommender.jar --U 100 |
在 Databricks 中執行 PySpark 版本
如果你不瞭解 Scala,我還建立了一個 Python 版本的推薦系統!它使用 PySpark 並在 Databricks 上執行。
在此處檢查我的程式碼:我的 Databricks 筆記本。
推薦系統設計
我們的系統設計如下。
有兩個 Scala 物件:
- RecommenderTrain.scala:讀取評級檔案(u.data),準備資料,訓練 ALS 模型並儲存模型。
- Recommender.scala:讀取電影檔案(u.item),載入 ALS 模型,生成電影推薦。
更詳細點選標題
相關文章
- Hadoop高階資料分析 使用Hadoop生態系統設計和構建大資料系統Hadoop大資料
- 如何構建推薦系統
- Spark推薦系統實踐Spark
- 【推薦系統篇】--推薦系統介紹和基本架構流程架構
- 【推薦系統篇】--推薦系統之之特徵工程部分---構建訓練集流程特徵工程
- Netflix推薦系統(Part two)-系統架構架構
- 推薦系統工程架構架構
- Netflix 推薦系統(Part Eight)-Spark+AI 2018SparkAI
- 【推薦系統篇】--推薦系統之訓練模型模型
- IBM 使用 react 構建的開源設計系統IBMReact
- 史上最簡單的推薦系統設計
- 如何構建設計語言系統
- 基於使用者的協同過濾來構建推薦系統
- 【推薦系統篇】--推薦系統之測試資料
- python 推薦系統Python
- 推薦系統概述
- 今日頭條推薦系統架構設計實踐(附下載)架構
- 《推薦系統實踐》筆記 01 推薦系統簡介筆記
- 基於指標管理系統建設的BI工具推薦指標
- 《Kettle構建Hadoop ETL系統實踐》簡介Hadoop
- 構建高效系統:必備熱門API介面集合的推薦API
- 推薦系統一——深入理解YouTube推薦系統演算法演算法
- 推薦系統概念篇
- 《推薦系統》-DIN模型模型
- 《推薦系統》-PNN模型模型
- 如何設計一個最簡化的推薦系統
- 推薦系統--完整的架構設計和演算法(協同過濾、隱語義)架構演算法
- 雲音樂推薦系統(二):推薦系統的核心演算法演算法
- [譯] 使用 Go 和 ReactJS 構建聊天系統 (四)GoReactJS
- [譯] 使用 Go 和 ReactJS 構建聊天系統 (三)GoReactJS
- [譯] 使用 Go 和 ReactJS 構建聊天系統 (二)GoReactJS
- [譯] 使用 Go 和 ReactJS 構建聊天系統 (一)GoReactJS
- [譯] 使用 Go 和 ReactJS 構建聊天系統 (五)GoReactJS
- [譯] 使用 Go 和 ReactJS 構建聊天系統 (六)GoReactJS
- 問題解決:構建基於深度學習架構的推薦系統!深度學習架構
- php多使用者商城系統推薦PHP
- 使用MaxCompute搭建社交好友推薦系統
- 推薦系統之業務架構總覽架構