基於DNN的推薦算法

本文爲《推薦系統與深度學習》第六章的複習筆記,只記錄了一些要點,希望能夠快速的進行復習,如果發現哪一個點不明白的話,可以自行展開學習或者加小編微信進行溝通。

深度學習在推薦中發揮的作用:

  • 能夠直接從內容中提取特徵,表徵能力強
  • 容易對噪聲數據進行處理,抗噪能力強
  • 可以使用循環神經網絡對動態或者序列數據進行建模
  • 可以更加準確的學習user和item的特徵

基於DNN的推薦算法

推薦系統和通用搜索排序問題共有的一大挑戰爲同時具備記憶能力和泛化能力。

  • 記憶能力可以解釋爲學習那些經常共同出現的特徵,發現歷史數據中存在的共現性(提升推薦的準確性)
  • 泛化能力則基於遷移相關性,探索之前幾乎沒有出現過的新特徵組合(提升推薦的多樣性)

比如 YouTube 2006年提出的Wide & Deep模型

Wide&Deep

整個推薦系統可分爲召回和排序兩個階段,召回階段一般通過i2i/u2i/u2u/user profile等方式“粗糙”地召回候選物品,召回階段的數量是百萬級別的,排序階段則是對召回階段的數據使用更精細的特徵進行計算user-item的排序分,作爲最終輸出推薦結果的依據。

召回階段

把推薦問題建模成一個“超大規模多分類”問題,即在時刻tt,爲用戶UU(上下文信息CC)在視頻庫VV中精準地預測出視頻ii的類別(每個具體的視頻視爲一個類別,ii即爲一個類別),用數學公式表達如下:
P(wt=iU,C)=evi,ujVevi,u P(w_t=i|U,C)=\frac{e^{v_i,u}}{\sum_{j \in V} e^{v_i,u}}
上式爲一個softmax多分類器,向量uRNu \in R^N<user,context><user, context>信息的高維embedding,而向量vjRNv_j \in R^N則是視頻jj的embedding向量。所以DNN的目標就是再用戶信息和上下文信息爲輸入條件下學習用戶的embedding向量uu

在這裏插入圖片描述

在這種超大規模分類問題上,至少要有幾百萬個類別,實際訓練採用的是Negative Sample(負採樣),或是word2vec方法中提到的SkipGram方法。

整個模型包含三個隱含的DNN結構,如下圖所示。輸入是用戶瀏覽歷史、搜索歷史、人口統計學信息和其餘上下文信息concat成的輸入向量,輸出分爲線上和離線訓練兩個部分。

在這裏插入圖片描述

離線訓練階段輸出層爲softmax層,輸出爲上述公式表達的概率。線上則是直接利用user向量查詢相關商品,最重要問題在性能方面,則利用類似局部敏感哈希的算法提供最相關的NN個視頻。

類似於word2vec算法,每個視頻都會被embedding到固定維度的向量中,用戶不同行爲下的視頻,通過加權平均等方式彙總得到固定維度的vector作爲DNN輸入。

特徵一般從下面幾個方面入手:

  • 用戶有行爲的物品(點擊、點贊、收藏、關注、分享、評論等,不同地方行爲定義可能會有不同),將其進行embedding
  • 人口統計學信息:性別、年齡、地域等
  • 其他上下文信息:設備、登陸狀態、時間等
  • 交叉信息:用戶xCate(cate可以是物品的類別、屬性等)

在有監督學習問題中,最重要的是選擇Label(目標變量),因爲label決定了模型的訓練目標,而模型和特徵是爲了逼近label。

訓練模型時的小trick:

  • 使用更廣的數據源,即不侷限於推薦場景的數據,也可以包括搜索等的數據
  • 爲每個用戶生成固定數量的訓練樣本,即平等的對待每一個用戶,避免loss被少數活躍用戶代表,能明顯提升線上效果
  • 拋棄序列信息,即對過去用戶有行爲的query的embedding向量進行加權平均
  • 不對稱的共同瀏覽(asymmetric cowatch)問題:所謂的asymmetric cowatch指的是用戶在瀏覽視頻時候,往往都是序列式的,開始看一些比較流行的,逐漸找到細分的領域

下圖(a)是heldout方式,利用上下文信息預估中間的一個視頻,圖(b)是predicting next watch的方式,則是利用上文信息,預估下一次瀏覽的視頻。實驗結果表示tu(b)的方式在線上A/B Test 中表現更佳,實際上,傳統的協同過濾算法,都是隱含地採用圖(a)的heldout方式,忽略了不對稱的瀏覽模型。

在這裏插入圖片描述

排序階段

在指定rank label的時候,單純的CTR是有迷惑性的,比如某些靠關鍵詞或者圖片吸引用戶進行高點擊的視頻、文章的跳出率是很高的,因此設定label的時候要與自己想要得到的期望KPI相一致(比如留存、時長等),同時通過線上的A/B Test進行調整。

排序階段用戶模型結構如下:
在這裏插入圖片描述

特徵工程中最難的是如何建模用戶時序行爲(temporal sequence of user actions),並且將這些行爲和要排序的item進行關聯。

下面列出來一些特徵工程的小trick:

  • 考慮用戶在類別下的行爲彙總,比如度量用戶對視頻的喜歡程度,可以考慮用戶與視頻在所在頻道間的關係
  • 數量特徵(瀏覽某個類別的次數)和時間特徵(最近一次瀏覽某個類別距今時間),這兩類特徵具有很強的泛化能力。除了這兩類正向的特徵,用戶在某些類別的PV但不點擊的行爲,即負反饋sigmal同樣非常重要
  • 把召回階段的信息(比如推薦的來源和所在的來源分數),傳播到排序階段也同樣能夠取得很好的提升效果
  • 用NN處理連續特徵,將稀疏的高基數空間的離散特徵embedding到稠密的向量中(維度的選定一般遵循log法,假設有100維的無重複特徵,可以embedding到10維)
  • ID編碼類特徵並不需要對全部的id進行embedding編碼,只需要對top N的物品進行embedding編碼即可,其餘置爲0
  • 同維度不同特徵採用的相同ID的embedding是共享的(比如過去瀏覽的物品ID,點擊的物品ID),這樣可以大大加速訓練過程,但要注意的是輸入層要進行分別填充
  • NN對輸入特徵的尺度和分佈都是非常敏感的,基本除了樹模型,大多數ML算法都是這樣,一般會對特徵進行歸一化處理,加速模型收斂過程,一種推薦的歸一化方法爲:累計分位點,xˉ=xdf\bar{x} = \int_{-\infty }^{x} df
  • 特徵構造時會講歸一化後的xˉ\bar{x}的平方根xˉ\sqrt{\bar{x}}和平方xˉ2\bar{x}^2作爲網絡輸入,以期望網絡更容易的學到特徵的次線性(sub-linear)和超線性(super-linear)函數

基於DeepFM的推薦算法

DeepFm的設計思路來自於哈工大&華爲諾亞方舟實驗室,主要關注如何學習user behavior背後的組合特徵(feature interactions),從而最大化推薦系統的CTR,論文提出構建一個端到端的可以同時突出低階和高階feature interactions的學習模型DeepFM

DeepFM由FM和NN組成,和Wide & Deep的結構類似,但彌補了W&D的一些不足,LR是TR中最常用的算法,但LR的前提是假設特徵之間是相互獨立的,沒有考慮特徵之間的相互關係,即忽略了feature pair等高階信息。比如在某個場景下,男性和女性的點擊率是不一樣的,如果是LR這回分別考慮性別和點擊次數兩個特徵,這顯然是不合適的,當然也可以通過特徵交叉解決這種情況,但是依賴強大的特徵工程工作。

LR加上特徵交叉,模型中的θ(x)\theta(x)表示爲(公式-1):
θ(x)=w0=i=1nwixi+i=1n1j=i+1nwijxixj \theta(x) = w_0 = \sum_{i=1}^{n}w_ix_i + \sum_{i=1}^{n-1} \sum_{j=i+1}^{n} w_{ij}x_ix_j

其中wijw_{ij}featurepair<xi,yj>feature \,pair<x_i, y_j>的交叉權重,相比LR模型,有如下問題:

  • 參數空間大幅度增加,由線性增加至平方級
  • 樣本比較稀疏

因此需要尋找一種方法將其進行分解,即FM算法

FM

FM(Factorization Machine)主要是爲了解決數據稀疏的情況下特徵怎樣組合的問題,另外我們通常所說的FM算法爲二元的FM。

FM算法把公式-1中的wijw_{ij}拆分成兩個向量<vi,vj><v_i, v_j>,其模型表達式如下:
θ(x)=w0=i=1nwixi+i=1n1j=i+1n<vi,vj>xixj \theta(x) = w_0 = \sum_{i=1}^{n}w_ix_i + \sum_{i=1}^{n-1} \sum_{j=i+1}^{n} <v_i, v_j> x_ix_j

直觀來看,FM認爲當一個特徵wiw_i需要與其他特徵wjw_j考慮組合線性的時候,只需要一組kk維向量viv_i即可代表xix_i,而不需針對所有特徵分別計算出不同的組合參數wijw_{ij},這相當於將特徵映射到一個kk維空間,用向量關係表示特徵關係。這與矩陣分解的思想是類似的。

比如在協同過濾中,一個rating矩陣,可以分解爲user矩陣和item矩陣,每個user和item都可以採用一個隱向量表示。比如在下圖中的例子中,我們把每個user表示成一個二維向量,同時把每個item表示成一個二維向量,兩個向量的點積就是矩陣中user對item的打分。

user-item rating

所有的二次項參數 wijw_{ij}可以組成一個對稱矩陣WW,那麼這個矩陣可以分解爲W=VTVW=V^T * VVV的第jj列便是第jj維特徵的隱向量,換句話說就是每個參數wij=<vi,vj>w_{ij}=<v_i,v_j>,這裏的viv_ivjv_j是分別是第i,ji,j個特徵的隱向量,這就是FM的核心思想。

假設隱向量的長度爲KK,這樣公式-1中的模型參數就從n2n^2降到了nknk,遠遠小於多項式模型的參數數量。

FM的優點:

  • 降低了交叉項參數學習不充分的影響
  • 提高模型的預估能力
  • 提升參數的學習效率

一句話總結就是:FM模型對稀疏數據有更好的學習能力,通過交互項可以學習特徵之間的關聯關係,並且保證了學習效率和預估能力

DeepFM

DeepFM

上圖爲DeepFM的網絡結構圖,從圖中可以看出,左側部分是一個FM算法,右側則是NN,他具有以下特點:

  • 結合了廣度和深度模型的優點,聯合訓練FM模型和DNN模型,同時學習低階特徵組合和高階特徵組合
  • 端到端模型,無需特徵工程
  • DeepFM 共享相同的輸入和 embedding vector,訓練更高效
  • 評估模型時,用到了一個新的指標“Gini Normalization”

上圖中在FM和DNN之前引入了一層Dense Embedding層,其目的是對輸入向量進行“壓縮”,降低模型訓練的特徵維度。

有幾點需要注意的:

  • Sparse Featurs表示原始的經過onehot處理的特徵
  • Dense Embeddings爲FM算法中的特徵交叉項的隱向量矩陣鋪平,Dense Embeddings的維度由field的個數和隱向量的長度相乘決定
  • Sparse Features層和Dense Embeddings層進行特徵交叉計算即爲FM算法的特徵交叉計算項
  • 特徵交叉項的隱向量矩陣鋪平之後在FM和DNN之間是共享的
  • Field i表示的是i特徵,但是i特徵經過編碼之後可能會有多維,比如性別特徵,onehot編碼後爲男、女、未知

更多關於DeepFM可以參考:

  • 原始論文:https://arxiv.org/abs/1703.04247
  • https://www.cnblogs.com/wkang/p/9881921.html
  • https://zhuanlan.zhihu.com/p/41439552

基於矩陣分解和圖像特徵的推薦算法

近些年基於上下文環境的推薦系統引起了大家的廣泛關注,這些上下文環境包括物品的屬性、用戶畫像特徵、物品的評論等。研究人員希望通過這些附加信息來緩解評分數據稀疏等問題,對於那些沒有評分數據的物品,可以基於上下文環境來推薦,從而進一步提升推薦系統的質量。

圖像在一定程度上也能表達物品的內容屬性信息,比如兩部電影的色調、佈局等,因此如果將電影的圖像信息也加到推薦系統中,必定能提升推薦系統的效果。爲此,作者們提出了一種基於矩陣分解和圖像特徵的推薦算法(Matrix Factorization+,縮寫爲MF+)。

假設有用戶和電影的偏好矩陣XRmnX \in R^{m*n},其中mm代表用戶的數量,nn代表電影的數量,矩陣XX裏的每個元素xuvx_{uv}代表用戶uu對物品vv的偏好。如果加入圖像特徵,則用戶uu對電影vv的偏好x^uv\hat{x}_{uv}可以表示爲:
x^uv=μ+bu+bv+UuT(Vv+η) \hat{x}_{uv} = \mu + b_u + b_v + U^T_{*u}(V_{*v} + \eta )
其中:

  • UuU_{*u}表示用戶uu的偏好向量
  • VvV_{*v}是電影vv的偏好向量
  • μ\mu是總評分的偏置項
  • bub_u 表示用戶uu的偏置項
  • bvb_v 表示電影vv的偏置項
  • η\eta 表示電影的視覺特徵,可以寫爲:

η=N(θ,v)12sN(θ,v)θsvχ^sϕ(v) \eta = \frac { ||N(\theta,v)||^{-\frac{1}{2}} \sum_{s\in N(\theta,v)} \theta_{sv} \hat{\chi }_s }{ \phi (v) }
其中:

  • θsv\theta_{sv} 表示電影vvss的相似度
  • N(θ,v)N(\theta,v) 表示相似度大於θ\theta的電影集合
  • ϕ(v)\phi (v) 是縮放因子,表示海報和靜止幀圖片的一致性
  • $\hat{\chi }_s $ 表示海報和多張靜止圖片的集合

【技術服務】,詳情點擊查看: https://mp.weixin.qq.com/s/PtX9ukKRBmazAWARprGIAg

掃一掃 關注微信公衆號!號主 專注於搜索和推薦系統,嘗試使用算法去更好的服務於用戶,包括但不侷限於機器學習,深度學習,強化學習,自然語言理解,知識圖譜,還不定時分享技術,資料,思考等文章!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章