推薦系統CTR實戰——Wide & Deep

Ref:https://fuhailin.github.io/Wide-Deep/

Wide and deep 模型是 TensorFlow 在 2016 年 6 月左右發佈的一類用於分類和迴歸的模型,並應用到了 Google Play 的應用推薦中。wide and deep 模型的核心思想是結合線性模型的記憶能力(memorization)和 DNN 模型的泛化能力(generalization),在訓練過程中同時優化 2 個模型的參數,從而達到整體模型的預測能力最優。

Wide & Deep模型結構如下:
Wide & Deep Network

Wide & Deep Network
最左邊的線性模型和最右邊的深度模型聯手結盟打造出中間的wide and deep。

Wide & Deep的主要特點:
本文提出Wide & Deep模型,旨在使得訓練得到的模型能夠同時獲得記憶(memorization)和泛化(generalization)能力:

  • 記憶(memorization)即從歷史數據中發現item或者特徵之間的相關性;哪些特徵更重要——Wide部分
  • 泛化(generalization)即相關性的傳遞,發現在歷史數據中很少或者沒有出現的新的特徵組合;——Deep部分
    在推薦系統中,記憶體現的準確性,而泛化體現的是新穎性。

Wide部分

wide部分就是一個廣義線性模型,輸入主要由兩部分,一部分是原始特徵,另一部分是交互特徵。我們可以通過cross-product transformation的形式來構造K組交互特徵:

Wide Models 可以簡單理解成一個邏輯迴歸,先將input的特徵通過Wx+b得到一個score,再通過sigmoid函數得到probablity。

線性模型的好處,是輸入信息能對最終結果產生直接影響,稱爲記憶能力。

宏觀上分析比如要預測一個店鋪下個月每一天的銷量,那麼之前每天的銷量均值(可以是按星期幾groupby之後的星期幾的銷量均值),可見這個均值是對要預估的值有強指代作用(強相關性的),會對最終結果產生直接影響的,因爲以往銷量比較高的店鋪,下個月的銷量大概率應該也不錯。

Deep部分

Deep部分就是一個DNN的模型,每一層計算如下:

Deep Models: 相比於wide models 有更強的表達能力,能對特徵與特徵之間做交叉,就是對不同特徵維度的做四則運算(樹模型中先按特徵a劃分成兩個子節點,再按特徵b劃分成四個孫子節點,這也是兩個特徵之間的交叉)。

深度學習模型的好處,是能挖掘更深層次的信息,有更好的表達能力,就是泛化能力。

Deep 部分對應的特徵並不直接作用於結果,而是以一種非線性的形態作用於結果。比如天氣狀況對銷量的影響,是非線性的,所以需要非線性模型來表達特徵。

聯合訓練

Wide & Deep模型採用的是聯合訓練的形式,而非集成。二者的區別就是聯合訓練公用一個損失函數,然後同時更新各個部分的參數,而集成方法是獨立訓練N個模型,然後進行融合。因此,模型的輸出爲:

使用Wide and Deep模型的App推薦系統架構

當一個用戶訪問app商店時,此時會產生一個請求,請求到達推薦系統後,推薦系統爲該用戶返回推薦的apps列表。


在實際的推薦系統中,通常將推薦的過程分爲兩個部分,即上圖中的Retrieval和Ranking,Retrieval負責從數據庫中檢索出與用戶相關的一些apps,Ranking負責對這些檢索出的apps打分,最終,按照分數的高低返回相應的列表給用戶。

模型的訓練之前,最重要的工作是訓練數據的準備以及特徵的選擇,在apps推薦中,可以使用到的數據包括用戶和曝光數據。
每一條樣本對應了一條曝光數據,同時,樣本的標籤爲1表示安裝,0則表示未安裝。

Continuous Feature:兩種處理方式:也可以兩種方式一起用。

  • (1) 先對連續型變量做scaling歸一化到區間[0,1],然後直接拼接上其他特徵;
  • (2) 對連續型特徵做離散化,變成類別性特徵(Categorical Features) 然後去做embedding,最後拼接起來。

Categorical Features:通過Embedding 映射成向量

Embedding:比如Device Class 手機類別可以是 蘋果、三星、華爲、小米, Embedding 就是將這個特徵的不同取值映射成一個稠密向量(通常是先隨機映射成一個稠密向量,然後通過訓練不斷更新這個稠密向量,使之能夠表達手機的不同類別蘋果、小米等)。更形象的理解比如手機類別共12種 那麼 其中一種比如小米的onehot 就是[0,0,0,1,0,0,0...]一個1*12維的輸入向量,然後通過一個12*100(這個矩陣也成爲Embeddng Matrix嵌入矩陣)的全連接得到輸出1*100維的稠密向量,就完成了小米的embedding。這個Embedding Matrix 通過訓練不斷更新矩陣參數。 

TensorFlow官方實現代碼

https://github.com/tensorflow/models/tree/master/official/wide_deep

References:

  1. Cheng H T, Koc L, Harmsen J, et al. Wide & Deep Learning for Recommender Systems[J]. 2016:7-10.
  2. Wide and Deep,雙劍合璧
  3. [Wide & Deep | Ryan_Fan’s Blog]http://blog.leanote.com/post/ryan_fan/wide-and-deep-Model

 

 

 

 

 

 

 

 

 

 

發佈了120 篇原創文章 · 獲贊 134 · 訪問量 60萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章