本文主要介紹兩篇CTR預估的文章,分別是發表在KDD 2018上的Deep Interest Network for Click-Through Rate Prediction以及該方法的進化版本Deep Interest Evolution Network for Click-Through Rate Prediction。

CTR預估是在線廣告以及電商的非常重要的業務,除了傳統的方法之外,目前以embedding和MLP為主的深度學習方法也廣為應用。在這些方法中,用戶特徵用固定長度的向量來表示,而已有的方法往往忽視獲取用戶歷史行為中的興趣多樣性,即在電商網站的廣告展示中,用戶可能會同時對不同的廣告有興趣。一種暴力的對用戶興趣多樣性建模的方法是讓特徵向量足夠的大,當然這會帶來計算和存儲上的困難,並且在線系統也不會允許這種方法。除此之外,當為某個廣告進行預測時,並不是歷史行為中的所有用於興趣都是有用的,用戶買書的時候是不會考慮已經買過的衣服的。很自然的,attention可以很好的解決以上問題,論文作者提出的Deep Interest Network從歷史行為中學習user interest,其核心思想就是attention。除了DIN網路之外,作者還提出了mini-batch的正則化以及PReLU的更泛化的方法,Dice。下面首先介紹Base model,如下圖所示

簡單來說就是用戶特徵,用戶行為特徵以及候選廣告等embedding feature進行concat,然後輸入到MLP中。可以看出,Base model將用戶行為的特徵進行一個簡單的sum pooling,而並沒有考慮候選廣告與每個用戶行為之間的相關性。DIN結構如下

與Base model 不同的是,在進行sum pooling的時候,利用attention提供一個權重,用 v_U(A) 表示用戶行為特徵, e_i 為每個商品, v_A 為候選廣告,那麼有

v_U(A)=f(v_A,e_1,e_2,...,e_H)=sum_{j=1}^{H}a(e_j,v_A)e_j=sum_{j=1}^{H}w_je_j

需要注意的是與attention不同,上式中的係數並不需要保證和為1,也就是不需要在 a() 外加入softmax函數,這樣可以保持係數數值上的大小。

除了該網路,文中還提出mini-batch的正則化。傳統的 l_2 正則化需要計算所有參數,而在文中只計算出現在每個batch中的參數,核心思想是出現的頻率越大,正則化的強度越大,具體公式如下

L_2(W)approxsum_{j=1}^{K}sum_{m=1}^{ B}frac{alpha_{mj}}{n_j}||w_j||_2^2\

alpha_{mj} 表示是否至少有一個樣本的id為j的特徵出現在mini-batch中。

文中的最後一個改進是對PReLU,PReLU公式如下

作者認為通過0作為激活函數的分解對於不同層不同分佈的輸出並不合適,因此提出自適應的激活函數 Dice

以上就是第一篇論文DIN的內容。在文中作者也指出曾經嘗試過使用LSTM來建模用戶歷史行為,但是並沒有提升。與NLP中有語法限制的文本不同,用戶歷史行為的序列可能同時會有多個興趣,通過LSTM可能會使得用戶行為變得有雜訊。

Rapid jumping and sudden ending over these interests causes the sequence data of user behaviors to seem to be noisy.

在第二篇文章中,作者提出了Deep Interest Evolution Network來對興趣的改變進行建模。很多工作包括DIN都把用戶行為直接作為用戶興趣,這是不太合適的,因為用戶興趣有時並不能通過用戶行為很好的表現,並且,能夠動態的對於用戶興趣進行建模也是非常重要的。DIEN首先利用interest extractor layer來進行用戶時序興趣抽取,通過在GRU上加入每個狀態的一個額外的損失,使得GRU的隱藏層輸出對於用戶興趣表達更具針對性。然後利用interest evolving layer來建模對於特定item用戶興趣的變化,後者的核心方法是將attention嵌入到序列結構中。整體模型如下

首先介紹Interest Extractor Layer。在電商系統中,用戶行為是用戶興趣的載體,興趣也會隨著用戶採取某個行動之後改變。在這一層,模型先從用戶行為中抽取用戶興趣序列,很自然的可以使用RNN。為了權衡效率和性能,作者使用GRU進行建模,GRU的輸入是按照時間的有序用戶行為,GRU的公式如下

然而GRU的隱藏層 h_t 只能建模用戶行為之間的依賴,對於興趣還是不能很好的建模,因為GRU還是隻和用戶行為有關係。並且目標商品是否點擊更多的只和最終輸出的狀態有關,監督信息只是關於最終狀態的,對於中間狀態並沒有合適的監督信息。因此,為了使 h_t 更好的表示用戶興趣,作者提出輔助loss,對於中間層的輸出,使用真實的下一個用戶行為作為正樣本,從未被點擊的商品中隨機採樣作為負樣本,計算一個二分類的損失,然後將這個損失加入最終損失中。

L=L_{target}+alpha*L_{aux}\

除了減輕GRU的優化困難外,這個輔助損失可以使得中間輸出更好表示用戶興趣。在得到用戶興趣序列 [h_1,h_2,...,h_T] 之後,interest evolving layer可以更好的建模用戶興趣改變。

Interest Evolving Layer 用來為最終用戶興趣提供更多的歷史信息,同時利用用戶興趣趨勢可以更好的與目標商品進行預測。首先用Interest Extractor Layer提取的用戶興趣和目標item進行一個attention計算,得到相似度係數 a_t ,下式中 e_a 表示目標item

a_t = frac{exp(h_tWe_a)}{sum_{j=1}^{T}exp(h_j We_a)}

有了相似度係數之後,可以將這個係數嵌入第二個GRU中,文中介紹了三種方法

GRU with attentional input(AIGRU)

這種方法直接將第二個GRU的輸入與attention係數相乘,即 i_t^{}=h_t*a_t 。但是這種方法效果不好,因為即使係數為0,目標item與該興趣完全無關,這個interest也可以影響到興趣改變的學習。

Attention based GRU(AGRU)

在問答領域,AGRU可以有效的提取query中的關鍵信息。具體的,AGRU利用attention係數來代替GRU的update gate,通過attention係數來改變隱藏層的輸出如下

h_t^{}=(1-a_t)*h_{t-1}^{}+a_t*	ilde{h}_t^{}

GRU with attention update gate(AUGRU)

雖然AGRU可以控制隱藏層的輸出,但是它使用了一個標量來代替原來公式中的向量,忽視了不同維度之間的差異。因此作者結合以上兩種,提出了AUGRU

	ilde{u}_t^{}=a_t*u_t^{}\ h_t^{}=(1-	ilde{u}_t^{})circ h_{t-1}^{}+	ilde{u}_t^{}circ 	ilde{h}_t^{}

以上就是對於DIN和DIEN的介紹,兩篇文論中的實驗部分都沒有在上文體現,有興趣的讀者可以去看原始論文。總體來說DIN相對簡單,DIEN乾貨更多,對於隱藏層的輔助loss以及在GRU中引入attention score能夠有很好的效果。關於隱藏層的輔助loss,可以讓我們有更多的思考,也可以用在其他場景下。


推薦閱讀:
相關文章