[推薦系統]推薦系統相關概念梳理

推薦概念

  • 信息過濾系統 解決 信息過載 用戶需求不明確的問題
    • 利用必定的規則將物品排序 展現給需求不明確的用戶
  • 推薦 搜索區別
    • 推薦個性化較強,用戶被動的接受,但願可以提供持續的服務
    • 搜索個性化弱,用戶主動搜索,快速知足用戶的需求
  • 推薦和 web項目區別
    • 構建穩定的信息流統統道
    • 推薦 信息過濾系統
    • web 對結果有明確預期
    • 推薦 結果是機率問題

Lambda 架構介紹

  • 離線計算和實時計算共同提供服務的問題
  • 離線計算優缺點
    • 優勢 可以處理的數據量能夠很大 好比pb級別
    • 缺點 速度比較慢 分鐘級別的延遲
  • 實時計算
    • 優勢 響應快 來一條數據處理一條 ms級別響應
    • 缺點 處理的數據量小一些
  • 離線計算的框架
    • hadoop hdfs mapreduce
    • spark core , spark sql
    • hive
  • 實時計算框架
    • spark streaming
    • storm
    • flink
  • 消息中間件
    • flume 日誌採集系統
    • kafka 消息隊列
  • 存儲相關
    • hbase nosql數據庫
    • hive sql操做hdfs數據

推薦算法架構

  • 召回python

    • 協同過濾 算類似度 memory baseweb

      ​ 基於模型的 model base 矩陣分解算法

    • 基於內容sql

      • 分詞
      • 詞權重(提取關鍵詞) tf-idf
      • word2Vec 詞向量
      • 物品向量
  • 排序數據庫

    • 邏輯迴歸
  • 策略調整架構

推薦模型構建流程

  • 數據收集框架

    • 顯性評分
    • 隱性數據
  • 特徵工程nosql

    • 協同過濾:用戶-物品 評分矩陣
    • 基於內容:分詞 tf-idf word2Vec
  • 訓練模型oop

    • 協同過濾
      • kNN
      • 矩陣分解 梯度降低 ALS
  • 評估、模型上線測試

協同過濾思路介紹

  • CF 物以類聚人以羣分
  • 作協同過濾的話 首先特徵工程把 用戶-物品的評分矩陣建立出來
  • 基於用戶的協同過濾
    • 給用戶A 找到最類似的N個用戶
    • N個用戶消費過哪些物品
    • N個用戶消費過的物品中-A用戶消費過的就是推薦結果
  • 基於物品的協同過濾
    • 給物品A 找到最類似的N個物品
    • A用戶消費記錄 找到這些物品的類似物品
    • 從這些類似物品先去重-A用戶消費過的就是推薦結果

類似度計算

  • 餘弦類似度、皮爾遜相關係數
    • 向量的夾角餘弦值
    • 皮爾遜會對向量的每個份量作中心化
    • 餘弦只考慮方向 不考慮向量長度
    • 若是評分數據是連續的數值比較適合中餘弦、皮爾遜計算類似度
  • 傑卡德類似度
    • 交集/並集
    • 計算評分是0 1 布爾值的類似度

使用不一樣類似度計算方式實現協同過濾

  • 若是 買/沒買 點/沒點數據 0/1 適合使用傑卡德類似度
    • from sklearn.metrics import jaccard_similarity_score
    • jaccard_similarity_score(df['Item A'],df['Item B'])
    • from sklearn.metrics.pairwise import pairwise_distances
    • user_similar = 1-pairwise_distances(df,metric='jaccard')
  • 通常用評分去作協同過濾 推薦使用皮爾遜相關係數

    • 評分預測

    • $$
      pred(u,i)=\hat{r}{ui}=\cfrac{\sum{v\in U}sim(u,v)*r_{vi}}{\sum_{v\in U}|sim(u,v)|}
      $$

  • 基於用戶和基於物品的協同過濾 嚴格上說,屬於兩種算法,實踐中能夠都作出來,對比效果,選擇最靠譜的

協同過濾 基於模型的算法

  • 用戶-物品矩陣比較稀疏的時候 直接去取物品向量 用戶向量計算類似度 不太適合
  • 基於模型的方法能夠解決用戶-物品矩陣比較稀疏的問題
  • 矩陣分解
    • 把大的矩陣拆成兩個小的 用戶矩陣 物品矩陣 MXN 大矩陣 M X K K X N K<<M k<<N
    • 大矩陣 約等於 用戶矩陣 乘 物品矩陣
    • 使用als 交替最小二乘法來優化損失 spark ML recommandation 包封裝了als
    • 優化以後的用戶矩陣 取出用戶向量
    • 優化以後的物品矩陣 取出物品向量
    • 用戶向量點乘物品向量 獲得最終評分的預測

推薦系統的評價

  • 準確率 覆蓋率
    • 準確率
      • 學術 rmse mas 點擊率預估 精準率
      • 工程 A/B test 對比不一樣的算法 在線上運行對關鍵指標的影響
        • baseline 基準線 熱門排行
        • 灰度發佈
  • EE
    • Exploitation & Exploration 探索與利用問題
    • Exploitation 利用用戶的歷史行爲 只給他曾經看過的/消費過的類似物品
    • Exploration(探測 搜索) 發現用戶的新興趣
    • ee問題 其實是矛盾
  • 評估手段
    • 離線評估和在線評估結合, 按期作問卷調查
      • 在線評估
        • 灰度發佈 & A/B測試

推薦系統的冷啓動

  • 用戶冷啓動
    • 儘量收集用戶信息 構建用戶畫像(打標籤)
    • 根據用戶的標籤能夠作人羣聚類 用以有用戶的行爲作推薦
    • 更多的使用流行度推薦
  • 物品冷啓動
    • 物品打標籤 構建物品畫像
    • 基於內容的推薦
  • 系統冷啓動
    • 若是應用缺乏用戶行爲數據->基於內容的推薦
    • 隨着用戶行爲積累的愈來愈多->協同過濾
    • 基於內容和協同過濾共同工做

基於內容的推薦

  • 給物品打標籤
    • 系統本身提取從業務數據庫中提取
    • 用戶填寫
    • 中文分詞 利用算法計算詞的權重
      • tf-idf tf term frequency 詞頻 5/100 *2
        • idf 逆文檔頻率 log 10 文本庫篇數/出現關鍵詞的文章篇數
        • 1000 10python 1000/10 100 2
        • 1000/1000 log(1) = 0
      • textrank
  • 利用標籤的文字 轉換成詞向量
    • word2Vec 詞->向量
    • 用向量來表示語義
    • 若是兩個詞的詞向量類似度比較高 認爲這兩個詞的語義相近
  • 利用詞向量 構建物品的向量
    • 一個物品有N個關鍵詞 每個關鍵詞對應一個詞向量
    • 求和(權重*詞向量)/N
    • 利用N個關鍵詞的詞向量獲取物品向量
  • 經過物品向量計算類似度
    • 皮爾遜 相關係數 計算物品向量的類似度

基於內容的推薦 基於物品的協同過濾 區別

  • content_base :詞向量->物品向量->計算類似度
  • item_based cf :user-item matrix->物品向量->類似度
  • content_base item_based cf 不同
    • 物品向量構建過程有區別
    • 基於內容的推薦
      • 物品向量 文本(物品描述信息,系統填標籤,用戶填標籤)
    • 基於物品的協同過濾
      • 用戶對物品的評分矩陣 用戶的行爲數據中來
相關文章
相關標籤/搜索