推薦系統架構及流程說明

這裡寫圖片描述
  個性化推薦系統,實現了新聞、二手資訊等多種型別的資訊的個性化推薦,每一個使用者都會擁有屬於自己的個性化推薦列表。下面簡單介紹推薦架構及推薦流程。
  本推薦架構參照Lambda架構,分為三層:批處理層、實時處理層和服務層。
  (1)批處理層:主要元件是HDFS、Hbase和Spark MLlib。持久化的歷史資料、靜態資料儲存於Hbase或HDFS;應用程式使用Spark MLlib機器學習演算法庫,批處理歷史資料,建立聚類或分類模型;新資料經過流處理後輸入模型,從而獲得分類標籤。
  以新聞推薦為例:在騰訊、搜狐、新浪網等網站按類別(如體育、娛樂、教育等)爬取新聞,分詞過濾,建立每篇新聞的詞特徵向量,並打上相應類別標籤。將處理過的資料儲存到Hbase中作為訓練資料。編寫Spark程式讀取訓練資料,呼叫MLlib的貝葉斯分類演算法,訓練新聞分類模型。
  根據使用者歷史瀏覽情況對使用者進行協同過濾,對待推薦的新聞進行聚類,都在本層實現。
  (2)實時處理層:主要元件是Kafka和SparkStreaming。爬蟲作為Kafka的producer,將資料推送到Kafka中暫存。持久化程式作為一個Kafka的consumer,將原始資料儲存到HDFS或Hbase。需要實時流處理的程式作為另外的Kafka consumer,對資料進行實時處理,結果輸出到持久化儲存或模型中進行進一步處理。
  以新聞推薦為例:爬蟲定時爬取各個新聞網站的新文章,持久化程式從kafka中取出資料儲存到Hbase;Spark Streaming實現的流處理程式對新聞進行實時分詞、過濾、建立特徵向量,然後輸入新聞分類模型進行新聞分類,同時將特徵資料儲存到Hbase中持久化。打上標籤的新聞儲存到Redis中供服務層使用。
該層還實現使用者關聯訪問圖的維護。關聯訪問即在一個時間段內,一個使用者看了新聞A也看了新聞B。關聯訪問圖以每個待推薦新聞作為頂點,關聯訪問了兩個頂點的使用者數作為兩個頂點的邊。圖根據使用者的瀏覽情況實時更新,儲存在redis裡。
  (3)服務層:主要元件是redis,web服務程式。redis儲存各個策略得出的推薦列表,當使用者從web服務介面登入時,根據redis中儲存的使用者偏好情況、使用者聚類結果、新聞聚類結果、隨機抽取結果、協同過濾結果以及關聯訪問結果按照組合策略給出該使用者的推薦列表。

下一篇將對本文中提到的各種工具做簡要介紹:推薦系統相關工具簡介