前言
目前深度學習已經運用在點選率預測上了,在這些方法中,首先將大規模稀疏輸入特徵對映到低維嵌入向量中,然後按照分組方式變換為定長向量,最後連線在一起饋入多層感知器(MLP)以學習非線性關係 特徵。 透過這種方式,無論候選廣告是什麼,使用者特徵都被壓縮成一個固定長度的表示向量。但是 使用定長的向量會帶來瓶頸,這將會使 Embedding&MLP方法從歷史資訊中捕獲使用者的多樣化的興趣帶來困難。
本文提出了DIN模型,可以
(1)使用興趣分佈代表使用者多樣化的興趣(不同使用者對不同商品有興趣)
(2)與attention機制一樣,根據ad區域性啟用使用者興趣相關的興趣(使用者有很多興趣,最後導致購買的是小部分興趣,僅僅取決於歷史行為資料中的一小部分,而不是全部。attention機制就是保留並啟用這部分興趣)。
在輸入層增加了啟用單元。
Introduction
隨著深度學習在CV、NLP等領域取得突破性進展,一些研究也開始嘗試將DNN應用於CTR預測。
一般做法:
在輸入上面加一層embedding層,把最原始高維度、稀疏的資料轉換為低維度的實值表示上(dense vector)。
增加多個全連線層,學習特徵之間的非線性關係。Sparse Features -> Embedding Vector -> MLPs -> Output
使用者的歷史行為資料由於存在一個使用者有多個興趣,僅僅透過embedding轉成成定長的特徵向量是有侷限性的,即diverse問題。
DEEP INTEREST NETWORK
本文提出DIN模型,同時對Diversity和Local Activation進行建模。
- Diversity:針對使用者廣泛的興趣,DIN用an interest distribution去表示。
- Local Activation:歷史行為中部分資料主導是否會點選候選廣告。DIN借鑑機器翻譯中的Attention機制,設計了一種attention-like network structure, 針對當前候選Ad,去區域性的啟用(Local Activate)相關的歷史興趣資訊。和當前候選Ad相關性越高的歷史行為,會獲得更高的attention score,從而會主導這一次預測。能夠很好的捕獲使用者興趣的多樣性特徵。
CTR中輸入普遍存在的特點:
- 高緯度
- 高度稀疏
- 多值離散特徵(涉及到使用者行為資料,例如訪問多個不同的商品id等)
使用者購買過的good_id有多個,購買過的shop_id也有多個,而這也直接導致了每個使用者的歷史行為id長度是不同的。針對多值離散特徵,為了得到一個固定長度的Embedding Vector表示,原來的做法是在Embedding Layer後面增加一個Pooling Layer。Pooling可以用sum或average。最終得到一個固定長度的Embedding Vector,是使用者興趣的一個抽象表示,常被稱作User Representation。缺點是會損失一些資訊。DIN使用Attention機制來解決這個問題。在DIN場景中,針對不同的候選廣告需要自適應地調整User Representation。也就是說:在Embedding Layer -> Pooling Layer得到使用者興趣表示的時候,賦予不同的歷史行為不同的權重,實現區域性啟用。
Feature Representation
把特徵分為四大類:
從圖中可以看出主要的特徵包括:使用者特徵、使用者行為特徵、廣告特徵、上下文特徵。其中使用者行為特徵為多值離散特徵,這就會導致每個使用者的樣本長度都是不同的,同時也需要對多樣化的興趣建模。解決方法:Embedding -> pooling + attention
Base Model(Embedding&MLP)
結構圖:
Embedding layer:輸入的是高維度的二值向量(one-hot),透過Embedding layer後轉化成低維dense vector。
Pooling layer and Concat layer:對於一個使用者,之前購買過的good_ids組成了一個user behavior sequence ids。針對不同的使用者,這個序列的長度是不同的(不同使用者購買的物品數量不同),所以在Embedding Layer後加入Pooling Layer,使用的是sum operation,把這些goods或shops的embedding vector相加,得到一個固定長度的向量作為MLPs的輸入。
MLP:全連線層
Loss:
L = - \frac{1}{N} \sum_{(x,y) \in S}(y logp(x)+(1-y)log(1-p(x)))
DIN
結構圖:
由於經過Pooling層後會損失一定的資訊,則提出了DIN模型,實際上是在Embedding層和Pooling層之間加入activation單元,這個思想來自attention機制,實際上也可以說在 Base Model上加入了attention機制,而這個與傳統的attention機制不同的是權重Wi的大小是針對使用者興趣的。舉個例子:假設使用者的歷史行為中包含90%的衣服和10%的電子產品,現在 給兩個候選廣告T-shirt和iPhone,那麼對應於T-shirt啟用單元的權重應該遠大於對應於iPhone的啟用單元。
本文嘗試用LSTM以序列的方式建模使用者歷史行為資料。但是並沒有提升。與NLP任務中受語法約束的文字不同,使用者歷史行為的序列可能包含多個同時存在的興趣。 快速跳躍和突然結束這些興趣會導致使用者行為的序列資料看起來是噪聲。
模型的目標:基於使用者歷史行為,充分挖掘使用者興趣和候選廣告之間的關係。使用者是否點選某個廣告往往是基於他之前的部分興趣,這是應用Attention機制的基礎。Attention機制簡單的理解就是對於不同的特徵有不同的權重,這樣某些特徵就會主導這一次的預測,就好像模型對某些特徵pay attention。但是,DIN中並不能直接用attention機制。因為對於不同的候選廣告,使用者興趣表示(embedding vector)應該是不同的。
在MLP中使用PReLu:
f(s) = \left\{\begin{matrix} s & if :s < 0 \\ \alpha s & if: s \leqslant 0 \end{matrix}\right. = p(s) \cdot s +(1-p(s)) \cdot \alpha s
無論是ReLU還是PReLU突變點都在0,論文裡認為,對於所有輸入不應該都選擇0點為突變點而是應該依賴於資料的。於是提出了一種data dependent的方法:Dice啟用函式:
f(s) = p(s) \cdot + (1-p(s)) \cdot \alpha s, p(s) = \frac{1}{1+e^{-\frac{s-E[s]}{\sqrt{Var[s]+\epsilon }}}}
pi的計算分兩步:
1、 首先,對x進行均值歸一化處理,這使得整流點是在資料的均值處,實現了data dependent的想法;
2、 其次,經過一個sigmoid函式的計算,得到了一個0到1的機率值。巧合的是最近google提出的Swish函式形式為x sigmoid(x) 在多個實驗上證明了比ReLU函式xMax(x,0)表現更優。
另外,期望和方差使用每次訓練的mini batch data直接計算,並類似於Momentum使用了指數加權平均:
{E[y_{i}]{t+1}}’ = {E[yi]}’ + \alpha E[y{i}]_{t+1}
{Var[y_{i}]{t+1}}’ = {Var[yi]}’ + \alpha Var[y{i}]_{t+1}
,\alpha是一個超引數,推薦值為0.99。
總結
- 使用者有多個興趣愛好,訪問了多個good_id,shop_id。為了降低維度並使得商品店鋪間的算術運算有意義,我們先對其進行Embedding嵌入。那麼我們如何對使用者多種多樣的興趣建模呢?使用Pooling對Embedding Vector求和或者求平均。同時這也解決了不同使用者輸入長度不同的問題,得到了一個固定長度的向量。這個向量就是使用者表示,是使用者興趣的代表。
- 但是,直接求sum或average損失了很多資訊。所以稍加改進,針對不同的behavior id賦予不同的權重,這個權重是由當前behavior id和候選廣告共同決定的。這就是Attention機制,實現了Local Activation。
- DIN使用activation unit來捕獲local activation的特徵,使用weighted sum pooling來捕獲diversity結構。
- 在模型學習最佳化上,DIN提出了Dice啟用函式、自適應正則 ,顯著的提升了模型效能與收斂速度。
本作品採用《CC 協議》,轉載必須註明作者和本文連結