1. 程式人生 > >阿里的CTR預測(一):Deep Interest Network

阿里的CTR預測(一):Deep Interest Network

今天我想介紹阿里的同一推薦團隊一脈相承的兩篇文章,Deep Interest Network for Click-Through Rate Prediction和,Deep Interest Evolution Network for Click-Through Rate Prediction。這是第一部分,主要介紹前一篇文章。

Deep Interest Network(DIN)

Deep Interest Network提出於2017年。它的思路非常值得借鑑。在電子商務系統或者說所有的推薦系統中,CTR預測都是一個值得注意的問題。而在今年了,深度學習方法被廣泛地應用於CTR預測中。 這篇文章認為,大部分目前使用的深度學習模型都可以認為是Embedding&MLP結構,即大規模的、稀疏的輸入資料首先被壓縮成低維的embedding,變成固定長度的輸入向量,被輸入到全連線網路中去。這些模型大大減少了特徵工程的工作量,因此廣為流行。

但這些方法仍然有缺點,最大的缺點就是固定維數的向量不能充分地表達使用者興趣的diversity。我們當然可以擴大向量的維數,但這會導致模型overfitting的可能性大大增加。在推薦系統中,興趣一般由過去的行為來表示。從另一個角度上說,我們也不一定非要用維數很高的向量。使用者的興趣也許很廣,但是在預測某些專案的時候我們並不需要知道使用者全部的interest。比如說,預測一個使用者是不是要買一雙鞋子時,我們關心她在買衣服鞋子時的興趣,而不關心她在買廚房用品時的興趣。文章把這類興趣稱為locally activated,這個文章都是試圖利用attention機制在diversity和locally activated之間尋找較優的平衡。

在淘寶系統中,廣告即是商品,也就是一般推薦系統中的item。推薦系統的邏輯如下:把一般的retriever階段稱為Matching,系統邏輯由matching和ranking組成。淘寶使用collaborative filtering來完成matching過程,選擇一些candidate,再用CTR prediction方法進行排序。

輸入排序演算法的feature大部分情況下是multi-group categorical form,它們被one-hot或者multi-hot形式表示出來,一個典型的輸入如下:

而整個輸入空間則如圖所示:

Base Model

淘寶本來使用的是一個Embedding&MLP模型,我們在這裡稱這個model為Base Model。這個model由如下幾部分構成:

Embedding Layer

Embedding Layer負責將一些上面提到的高維的binary vector轉變為稠密的低維向量。例如我們可以把約10^7維的goods id向量轉化為幾十維的embedding向量。Embedding layer使用字典查詢的方法,並遵循如下規則:

  • 如果t_i是one-hot vector,就把它轉化為簡單的embedding,e_i = w_i^j
  • 如果t_i是multi-hot vector,就把它轉化為embedding list,\{e_{i_1}, e_{i_2}, ..., e_{i_k}\} = \{w_{i_1}^j, w_{i_2}^j, ..., w_{i_k}^j\}

Pooling layer and Concat layer

但就像之前說的,不同的使用者有不同的行為,我們需要把不同數量的embedding向量組合成固定維數的輸入向量輸入到MLP中去,所以我們需要一個池化層來結合它們。sum-pooling和average pooling都很常用。經過pooling的不同種類的向量會在concat layer組合起來。

MLP

MLPlayer負責預測,Loss function是Log Loss。整個Model的結構如圖所示。

Deep Interest Network

池化層雖然能達到目的,但卻會損失很大一部分資訊。DIN的關鍵就是利用attention機制學習locally activated information,從而儘可能減少資訊損失。DIN引入了一個啟用結構,並使用瞭如下系統結構:

可以看到,最關鍵的區別就在啟用結構上。DIN借鑑了機器翻譯領域中常用的attention機制,但和原始的attention結構並不相同。這個attention結構會導致原本的sum pooling變成一個weighted sum pooling,從而學習到locally activated information。簡單地說,通過把ad的embedding和behavior的embedding相乘並輸入一個FNN網路,我們得到了一個 activation weight,利用這個weight,我們將behaviour的embedding結合起來。
文章作者嘗試了使用LSTM方法來學習behavior的序列化資訊,但結果沒什麼提升,所以最終的結構就像我們上面所看到的這樣。

Training Techniques

文章還提出了一些訓練技巧。

Mini-batch Aware Regularization

我們使用正則化方法來防止過擬合。但是L2正則化意味著在每一個mini-batch的訓練中國,都需要計算全部引數的更新,這會導致沉重的計算負擔,在大規模資料集中尤其不可接受。所以文章提出了Mini-batch Aware Regularization方法,這個方法能利用資料集的稀疏性減少計算量。這不是我們的重點,具體細節可以去看原文。

Data Adaptive Activation Function

PReLu是一種常用的啟用函式。它的表示式如下:

它固定在x = 0時出現轉折,但當每一層的輸入資料的分佈不同時,並不是很合適。阿里提出了一種新的啟用函式Dice,是PReLu的一種擴充套件。

Metrics

我們一般使用AUC進行結果評估,阿里使用了weighted AUC,還提出了另一種名叫RelaImpr的指標。

在A/B Test的結果如下: