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

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

能夠直接從內容中提取特徵,表徵能力強

容易對噪聲資料進行處理,抗噪能力強

可以使用迴圈神經網路對動態或者序列資料進行建模

可以更加準確的學習user和item的特徵

基於DNN的推薦演算法

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

記憶能力可以解釋為學習那些經常共同出現的特徵,發現歷史資料中存在的共現性(提升推薦的準確性)

泛化能力則基於遷移相關性,探索之前幾乎沒有出現過的新特徵組合(提升推薦的多樣性)

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

基於DNN的推薦系統

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

召回階段

把推薦問題建模成一個“超大規模多分類”問題,即在時刻

t

,為使用者

U

(上下文資訊

C

)在影片庫

V

中精準地預測出影片

i

的類別(每個具體的影片視為一個類別,

i

即為一個類別),用數學公式表達如下:

P(w_t=i|U,C)=\frac{e^{v_i,u}}{\sum_{j \in V} e^{v_i,u}} \\

上式為一個softmax多分類器,向量

u\in R^N

資訊的高維embedding,而向量

v_j \in R^N

則是影片

j

的embedding向量。所以DNN的目標就是再使用者資訊和上下文資訊為輸入條件下學習使用者的embedding向量

u

基於DNN的推薦系統

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

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

基於DNN的推薦系統

離線訓練階段輸出層為softmax層,輸出為上述公式表達的機率。線上則是直接利用user向量查詢相關商品,最重要問題在效能方面,則利用類似

區域性敏感雜湊

的演算法提供最相關的

N

個影片。

類似於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方式,忽略了不對稱的瀏覽模型。

基於DNN的推薦系統

排序階段

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

排序階段使用者模型結構如下:

基於DNN的推薦系統

特徵工程中最難的是如何建模使用者時序行為(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演算法都是這樣,一般會對特徵進行歸一化處理,加速模型收斂過程,一種推薦的歸一化方法為:累計分位點,

\bar{x} = \int_{-\infty }^{x} df

特徵構造時會講歸一化後的

\bar{x}

的平方根

\sqrt{\bar{x}}

和平方

\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加上特徵交叉,模型中的

\theta(x)

表示為(公式-1):

\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 \\

其中

w_{ij}

feature \, pair

的交叉權重,相比LR模型,有如下問題:

引數空間大幅度增加,由線性增加至平方級

樣本比較稀疏

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

FM

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

FM演算法把公式-1中的

w_{ij}

拆分成兩個向量,其模型表示式如下:

\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認為當一個特徵

w_i

需要與其他特徵

w_j

考慮組合線性的時候,只需要一組

k

維向量

v_i

即可代表

x_i

,而不需針對所有特徵分別計算出不同的組合引數

w_{ij}

,這相當於將特徵對映到一個

k

維空間,用向量關係表示特徵關係。這與矩陣分解的思想是類似的。

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

基於DNN的推薦系統

所有的二次項引數

w_{ij}

可以組成一個對稱矩陣

W

,那麼這個矩陣可以分解為

W=V^T * V

V

的第

j

列便是第

j

維特徵的隱向量,換句話說就是每個引數$w_{ij}=

,這裡的

v_i

和

v_j

是分別是第

i,j$個特徵的隱向量,這就是FM的核心思想。

假設隱向量的長度為

K

,這樣公式-1中的模型引數就從

n^2

降到了

nk

,遠遠小於多項式模型的引數數量。

FM的優點:

降低了交叉項引數學習不充分的影響

提高模型的預估能力

提升引數的學習效率

一句話總結就是:

FM模型對稀疏資料有更好的學習能力,透過互動項可以學習特徵之間的關聯關係,並且保證了學習效率和預估能力

DeepFM

基於DNN的推薦系統

上圖為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。0424

7

https://www。

cnblogs。com/wkang/p/988

1921。html

https://

zhuanlan。zhihu。com/p/41

439552

基於矩陣分解和影象特徵的推薦演算法

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

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

假設有使用者和電影的偏好矩陣

X \in R^{m*n}

,其中

m

代表使用者的數量,

n

代表電影的數量,矩陣

X

裡的每個元素

x_{uv}

代表使用者

u

對物品

v

的偏好。如果加入影象特徵,則使用者

u

對電影

v

的偏好

\hat{x}_{uv}

可以表示為:

\hat{x}_{uv} = \mu + b_u + b_v + U^T_{*u}(V_{*v} + \eta ) \\

其中:

U_{*u}

表示使用者

u

的偏好向量

V_{*v}

是電影

v

的偏好向量

\mu

是總評分的偏置項

b_u

表示使用者

u

的偏置項

b_v

表示電影

v

的偏置項

\eta

表示電影的視覺特徵,可以寫為:

\eta = \frac { ||N(\theta,v)||^{-\frac{1}{2}} \sum_{s\in N(\theta,v)} \theta_{sv} \hat{\chi }_s }{ \phi (v) } \\

其中:

\theta_{sv}

表示電影

v

s

的相似度

N(\theta,v)

表示相似度大於

\theta

的電影集合

\phi (v)

是縮放因子,表示海報和靜止幀圖片的一致性

\hat{\chi }_s

表示海報和多張靜止圖片的集合

搜尋關注微信公眾號【搜尋與推薦Wiki】,信條【All In CTR、DL、ML、RL、NLP】

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