淺析Attention在推薦系統中的應用(2)阿里Deep Interest Network模型

歡迎關注本人公衆號: petertalks

目錄:

淺析Attention在推薦系統中的應用(1)Attention簡介

淺析Attention在推薦系統中的應用(2)阿里Deep Interest Network模型

淺析Attention在推薦系統中的應用(3)AutoInt模型

淺析Attention在推薦系統中的應用(4)Transformer與阿里BST模型

 

阿里媽媽算法團隊2018年時在KDD上發表了《Deep Interest Network for ClickThrough Rate Prediction》。該文一經發表便被業界讚不絕口,仔細閱讀更是讓人眼前一亮。這篇文章首先是創新性的將NLP領域的Attention技術應用到了推薦領域中(雖然據說當時原團隊並不是從nlp中得到的啓發),其次這是一篇工程性特別強的文章,文章中提到的很多優化方法如gauc、dice等更是在實踐中摸索出來的。除此之外這篇文章更是反映除了算法團隊對業務的深刻理解和對用戶行爲的深入觀察。

 

背景與動機

阿里每天有着大量的用戶,更是積累着海量的用戶行爲數據包括點擊、下單、加入購物車等等。本文中的場景主要是利用阿里海量的用戶數據爲用戶提供合適的廣告,是個典型的廣告場景其實也是個推薦場景。

文中提到了用戶的興趣有着兩個特點:

  • Diverse 指的是用戶的行爲往往體現出多種興趣,例如一個年輕的母親她可能會對羊毛衫、包、童裝、耳環、奶粉等感興趣。

  • Locally activated 指的是用戶是否會點擊某個推薦的商品,往往取決於他之前的部分興趣而不是全部興趣。例如給一個用戶推薦泳衣,他是否會買,往往取決於他之前是否購買過泳鏡等游泳用品有關,而跟他是否買過某個牌子的耳機等行爲沒有關係。

按照之前的深度學習模型如Wide&Deep、DeepFm等的套路,應對此類行爲特徵,往往是將用戶的行爲序列離散後過一個embedding層,得到一個embedding vector,例如用戶購買了(泳衣A,零食B, 耳機C),那麼 購買序列embedding vector = [embedding(泳衣A), embedding(零食B), embedding(耳機C)],爲了將該多值特徵轉變爲定長,往往會使用一些簡單的pooling方法例如average pooling、sum pooling等,結果是對於不同的推薦商品將歷史行爲的權重看成是相等的。然而實際來講,我們明白他們的重要性應該是不一樣的。如果我的推薦item是個泳鏡,那麼行爲序列中泳衣A的權重就應該大些,如果待推薦的是零食A那麼零食B的權重應該更大。於是DIN模型變孕育而生。

 

模型

 

特徵層面

阿里廣告系統跟工業界CTR預估常用做法一樣,用了大量稀疏特徵,例如大量的id類特徵、categorial特徵等,並且沒有進行任何的特徵交叉和組合。

 

 

網絡結構

一般模型的結構如上圖所示呈現出一個(feature->embedding->sum pooling->concat & flatten -> MLP)的結構。

再看看DIN模型

通過對比兩張圖我們可以發現DIN跟其他Base Model的主要不同是在我們對類別特徵做完embedding之後,並沒有直接直接做sum pooling的方式,而是先過了Activation Unit,也就是注意力模塊。通過注意力模塊,我們可以得到對於待推薦商品A,我們每個歷史行爲偏好所佔的權重w, 通過加權求和,我們便可以做到針對不同的商品對歷史行爲有所偏重,也就是文章開頭提到的Locally activated。

接下來的關鍵便是Activation Unit(AU)該如何設計。說到attention我們便應該想起上篇文章中所提到的attention經典公式。

很容易想到這邊的Q便是待推薦的item的embedding或者embedding * W,而K便是用戶行爲序列的embedding或者embedding * W,V便是行爲序列的embedding。這樣我們便得到了attention值。

不過論文中針對推薦場景對上面的計算方法做了些細節性的改動。

包括幾個方面:

  1. 將原來的點積替換成了Out Product(外積),這塊可能更多是作者通過不同的實驗和對比得到的選擇。

  2. 去除掉了傳統attention最後一層的softmax歸一化,不再保證權重w的和一定爲1。按照作者的看法,去除softmax之後的權重w的和從某些程度上反映出了用戶興趣的強烈程度,相比傳統的attention能給保留更多的信息。

作者也曾經採用lstm之類的序列模型來刻畫用戶行爲序列的時序,但沒有取得提升,可能的原因是相比語法嚴格的NLP任務,埋藏在用戶行爲序列中的用戶興趣具有多發性、跳躍性和突然性會給序列引入噪聲。

 

訓練技巧

作者在文中出了模型本身之外更是提到了幾個訓練技巧。

 

Mini-batch Aware Regularization(MAR)

在阿里實際進行深度學習訓練時,作者發現很容易發生過擬合,尤其在大規模稀疏的id特徵上。在下圖可以看出沒有加正則化的din在第一個epoch後train loss就發生斷崖式下降,而test loss卻急劇上升,test auc也是急劇下降。

但是論文使用的數據具有很強的稀疏性,然而傳統的正則化方法例如L2正則化,需要在所有參數上進行正則化計算,會帶來很大的計算成本。

於是文中提出了自適應正則化,在每個mini-batch中,只對非0特徵對應參數計算L2正則化,並且強度與特徵出現頻次有關,頻次越高強度越低,反之越高。對於第m個batch,第j個特徵的embedding權重wj的更新可用下面公式表示

B_{m}B_{m}表示第m次mini-batch的數據集,n_jn_j 表示特徵 j 在整個訓練集S中出現頻次,{\alpha}_{mj} \in \{0,1\}{\alpha}_{mj} \in \{0,1\}表示B_{m}B_{m}中是否至少有一個樣本的特徵 j 取值爲1,正則參數\lambda \lambda文中取0.01。

 

Data Adaptive Activation Function(Dice)

prelu是一種特別常見的激活函數,可用以下公式表示:

其中p(s)是控制f(s)在f(s)=s和f(s)=as,切換的函數。作者改進了p(s)函數,使得p(s)-s曲線變得更加光滑,並且能夠適應每一層輸入數據的分佈變化。當E(s)=0且Var(s)=0時,便退化成爲了prelu。

 

實驗評估指標

 

Gauc

對於ctr預估場景,之前業界往往採用auc來衡量離線效果,這邊作者提出了gauc的概念,也就是每個用戶的平均auc,經過實驗gauc與線上模型的表現更加的接近。

 

RelaImpr

作者提出了RelaImpr,來衡量模型的相對提升情況。對於隨機的情況auc爲0.5,所以可以得到RelaImpr的公式:

 

實驗結果

作者總共用了Amazon Dataset、MovieLens以及阿里自己的實際數據進行評測,結果如下圖所示。

 

 

最後,像阿里這樣流量巨大的場景,要做好Din的serving也並不是什麼容易的事情,作者在最後也提出了在serving這邊的幾點建議,包括batch合併、gpu內存優化和並行計算等。大家可以直接看下下面原文。

 

 

參考資料

https://arxiv.org/pdf/1706.06978.pdf

https://arxiv.org/abs/1706.03762

https://zhuanlan.zhihu.com/p/54085498

https://zhuanlan.zhihu.com/p/51623339

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