阿里DIN模型(深度兴趣网络)详解及理解
這里寫目錄標題
- 目標:
- 模型產生原因:
- 核心思想:
- 模型介紹:
- Base model
- 改進模型
- 模型算法設計
- 論文的算法改進
- 參考資料
目標:
掌握2017年阿里提出的深度興趣網絡(Deep Interest Network for Click-Through Rate Prediction)以及后續的DIEN。
本篇介紹DIN
原文:
Deep Interest Network for Click-Through Rate Prediction
21 Jun 2017
Deep Interest Evolution Network for Click-Through Rate Prediction
11 Sep 2018
模型產生原因:
為什么會產生DIN,個人覺得和阿里的廣告業務息息相關。
前面幾篇文章,主要介紹的推薦算法,主要用于提高點擊率,或者說增加用戶黏度,就是對所有物品一視同仁,然后推薦給用戶最關心的N個商品。
但是有些平臺,比如淘寶、京東、百度等,這些平臺靠廣告費用支持公司收入,對于某個物品,支付的廣告費用越多,理應讓他以更高的權重暴露給用戶,這里就不僅是推薦用戶最關心的物品,而是判斷付了廣告費的商品,是否需要推薦給指定用戶?
因此,我們的先決條件變成了:
1、 待推薦的物品(candidate Ad 付了廣告費的物品)
2、 用戶信息
3、 用戶的購買歷史物品序列
4、 場景信息(當前用戶所處的頁面、狀態、時間等信息)
核心思想:
DIN核心思想可以歸納為:
1、 基于物品的推薦,也就是判斷購物購買過的物品,進而判斷是否和本廣告物品相關
2、 用戶購買過的物品,權重不一樣。比如,推薦物品為奶粉,用戶購買過筆記本電腦,購買過尿不濕,顯然,尿不濕的奶粉的相關性高。因此需要提高尿不濕的權重。
**順著DIN模型的思想,我們也可以進一步提出我們的優化方案:
1、加e?te^{-t}e?t的時間衰減系數
- 購買過的物品是時間序列,因此可以在加上和上次購買時間間隔的衰減因子。比如1年前購買過筆記本電腦,1個月前購買過尿不濕,現在要推薦鼠標,你覺得1年前購買過筆記本電腦的權重還很高嗎?顯然不是,可以加個e?te^{-t}e?t的時間衰減系數,ttt為上次購買時間和今天的時間間隔,時間間隔越大,權重越小。
模型介紹:
CTR預估是在線廣告以及電商的非常重要的業務,除了傳統的方法之外,目前以embedding+MLP為主的深度學習方法也廣為應用。
在這些方法中,用戶特征用固定長度的向量來表示,而已有的方法往往忽視獲取用戶歷史行為中的興趣多樣性,即:
-
在電商網站的廣告展示中,用戶可能會同時對不同的廣告有興趣。
-
一種暴力的對用戶興趣多樣性建模的方法是讓特征向量足夠的大,把所有購買過的物品embeding拼接成一個長向量。當然這會帶來計算和存儲上的困難,并且在線系統也不會允許這種方法。
-
除此之外,當為某個廣告進行預測時,并不是歷史行為中的所有用于興趣都是有用的,用戶買書的時候是不會考慮已經買過的衣服的。很自然的,attention可以很好的解決以上問題,論文作者提出的Deep Interest Network從歷史行為中學習user interest,其核心思想就是attention。除了DIN網絡之外,作者還提出了mini-batch的正則化以及PReLU的更泛化的方法:Dice。下面首先介紹Base model。
Base model
剛才說了,把所有購買過的物品embeding拼接成一個長向量不可取,那結合現有的pooling技術,比如CNN卷積神經網絡中的pooling(maxpooling,avgpooling),我們也能想到pooling,就是sum pooling,就是把候選物品embeding一股腦全部加起來,得到一個向量,該向量表示了用戶的興趣方向。
于是得到了如下圖的模型:
存在問題: -
以阿里巴巴的廣告推薦系統為例,假設某個用戶之前的歷史記錄中瀏覽了背包,杯子等商品。假設上圖中的candidate ad是一個關于手提包的廣告,如果照這種方式構建模型的話,背包,杯子所在特征對應的embedding特征就會被pooling成一個固定長度的特征,帶來的效果就是我們認為背包,杯子這兩類商品的特征對于手提包這個商品是否被推薦是同等重要的。但是很顯然買過背包這個特征對于手提包這個商品是否被推薦具有更重要的價值,所以這就啟發作者為給定的candidate ad和不同的(瀏覽歷史中的)商品特征之間設置不同的權重,即論文的核心組件local activation unit,這個其實就是attention的思想。
改進模型
- 既然要設置不同的權重,自然想到物品和待推薦物品的相關性,相關性計算自然就想到了兩個物品embeding向量的內積,這在經典協同過濾算法中太常用了。不只是內積,向量外積、向量減法等,都可以衡量兩個向量間的夾角。比如兩個物品向量相減之后,得到的結果很小,也能說明兩個物品相似。
- 原作者用得是外積,得到一個向量,然后和原來的物品向量、廣告向量。三個向量拼接在一起,送進MLP,最終得到一個預測權重。結構如下:
因此,每個歷史購買物品都經過這樣的激活單元處理,就能得到歷史物品的權重。
所以,最終就誕生了DIN模型。
正如前文說所,既然DIN可以得到一個物品相關性權重,也可以人為加入一個時間相關性權重,就是在最后,再乘以一層時間間隔的衰減系數。
所以理解模型產生原因和優化本質很關鍵。
進一步的,除了加入時間衰減系數,還能有其他優化點嗎?
-
這就可以進一步挖掘時間序列的處理方法。時間差分,也就是相同時間段,用戶的行為變化趨勢,window操作。比如這個月比上個月,用戶的購買行為增多,表示用戶的活躍度提升,因此這個用戶的權重又可以增大,說明用戶喜歡在平臺購物。
-
反之,用戶購買行為在減小,說明用戶因為某些原因,興趣在流失,推薦給他的物品,轉化率可能也不會太高。
模型算法設計
- 輸入xxx : 模型的輸入是個KKK 維高維稀疏二值型向量,通常是多個group的特征進行拼接而成(group可以理解為一個方面的特征)。假設有 MMM 個group,每個group的特征tit_iti? 向量的維度為 KiK_iKi? , 特征向量tit_iti?每個元素取值為0或1,取值為1的個數大于1(廢話,全0怎么訓練?)。
輸入類別示意圖:
這樣就搞清楚了模型的結構。
Loss損失函數,還是采用常規的二分類交叉熵損失函數。
DIN的模型結構圖,與base model的主要區別就在于在用戶行為特征上引入了局部激活單元(Activation Unit):
e1e_1e1?, e2e_2e2?, …, eHe_HeH?是用戶UUU的行為物品對應的embedding向量列表,HHH是行為物品個數。 vAv_AvA? 是廣告A的embedding。a(?)a(*)a(?)是一個前向神經網絡,它的輸出作為激活權重a(ej,vA)a(e_j,v_A)a(ej?,vA?),最后作用在eje_jej?上。除了兩個輸入嵌入向量外,a(?)a(*)a(?)還增加了兩個映射后的向量的外積輸入到子網絡中,就是激活單元的結構。
模型也可以這樣表示:
論文的算法改進
- 論文的算法改進主要朝著
- 降低模型復雜度
- 降低計算或者存儲
- 通過變形、改寫公式,找到相近似的表達式。進而找到模型的簡化版本。
這個其實做工程已經不是特別關心了。
這里貼出別人解釋的照片即可。
參考資料
https://blog.csdn.net/cqlboat/article/details/103940661
https://zhuanlan.zhihu.com/p/420211688
https://zhuanlan.zhihu.com/p/49263704
總結
以上是生活随笔為你收集整理的阿里DIN模型(深度兴趣网络)详解及理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XGBoost对比RandomFores
- 下一篇: tensorflow2 神经网络模型构建