推薦系統(tǒng)排序算法--DIN模型

1、背景

深度學(xué)習(xí)在CTR預(yù)估領(lǐng)域已經(jīng)有了廣泛的應(yīng)用,常見的算法比如Wide&Deep,DeepFM等。這些方法一般的思路是:通過Embedding層,將高維離散特征轉(zhuǎn)換為固定長(zhǎng)度的連續(xù)特征,然后通過多個(gè)全聯(lián)接層,最后通過一個(gè)sigmoid函數(shù)轉(zhuǎn)化為0-1值,代表點(diǎn)擊的概率。即Sparse Features -> Embedding Vector -> MLPs -> Sigmoid -> Output.

這種方法的優(yōu)點(diǎn)在于:通過神經(jīng)網(wǎng)絡(luò)可以擬合高階的非線性關(guān)系,同時(shí)減少了人工特征的工作量。

不過,阿里的研究者們通過觀察收集到的線上數(shù)據(jù),發(fā)現(xiàn)了用戶行為數(shù)據(jù)中有兩個(gè)很重要的特性:

Diversity:用戶在瀏覽電商網(wǎng)站的過程中顯示出的興趣是十分多樣性的。

Local activation: 由于用戶興趣的多樣性,只有部分歷史數(shù)據(jù)會(huì)影響到當(dāng)次推薦的物品是否被點(diǎn)擊,而不是所有的歷史記錄。

這兩種特性是密不可分的。

舉個(gè)簡(jiǎn)單的例子:

Diversity體現(xiàn)在年輕的母親的歷史記錄中體現(xiàn)的興趣十分廣泛,涵蓋羊毛衫、手提袋、耳環(huán)、童裝、運(yùn)動(dòng)裝等等。而愛好游泳的人同樣興趣廣泛,歷史記錄涉及浴裝、旅游手冊(cè)、踏水板、馬鈴薯、冰激凌、堅(jiān)果等等。

Local activation體現(xiàn)在,當(dāng)我們給愛好游泳的人推薦goggle(護(hù)目鏡)時(shí),跟他之前是否購(gòu)買過薯片、書籍、冰激凌的關(guān)系就不大了,而跟他游泳相關(guān)的歷史記錄如游泳帽的關(guān)系就比較密切。

針對(duì)上面提到的用戶行為中存在的兩種特性,阿里將其運(yùn)用于自身的推薦系統(tǒng)中,推出了深度興趣網(wǎng)路DIN,接下來,我們就一起來看一下模型的一些實(shí)現(xiàn)細(xì)節(jié),然后我們會(huì)給出一個(gè)簡(jiǎn)化版的tensorflow實(shí)現(xiàn)。

2、模型設(shè)計(jì)

整體框架

我們先來看一下推薦系統(tǒng)的整體框架:

1、架構(gòu)

整個(gè)流程可以描述為:

1.檢查用戶歷史行為數(shù)據(jù)

2.使用matching module產(chǎn)生候選ads。

3.通過ranking module做point-wise的排序,即得到每個(gè)候選ads的點(diǎn)擊概率,并根據(jù)概率排序得到推薦列表。

4.記錄下用戶在當(dāng)前展示廣告下的反應(yīng)(點(diǎn)擊與否),作為label。

特征設(shè)計(jì)

本文將所涉及到的特征分為四個(gè)部分:用戶特征、用戶行為特征、廣告特征、上下文特征,具體如下:

2、特征

其中,用戶行為特征是multi-hot的,即多值離散特征。針對(duì)這種特征,由于每個(gè)涉及到的非0值個(gè)數(shù)是不一樣的,常見的做法就是將id轉(zhuǎn)換成embedding之后,加一層pooling層,比如average-pooling,sum-pooling,max-pooling。DIN中使用的是weighted-sum,其實(shí)就是加權(quán)的sum-pooling,權(quán)重經(jīng)過一個(gè)activation unit計(jì)算得到。這里我們后面還會(huì)再介紹到。

BaseModel

在介紹DIN之前,我們先來看一下一個(gè)基準(zhǔn)模型,結(jié)構(gòu)如下:

3、基準(zhǔn)模型

這里element-wise的意思其實(shí)就是元素級(jí)別的加減,同時(shí),可不要忽略廣播的存在喲。一個(gè)元素和一個(gè)向量相乘,也可以看作element-wise的,因?yàn)檫@個(gè)元素會(huì)廣播成和向量一樣的長(zhǎng)度嘛,嘻嘻。

可以看到,Base Model首先吧one-hot或multi-hot特征轉(zhuǎn)換為特定長(zhǎng)度的embedding,作為模型的輸入,然后經(jīng)過一個(gè)DNN的part,得到最終的預(yù)估值。特別地,針對(duì)multi-hot的特征,做了一次element-wise+的操作,這里其實(shí)就是sum-pooling,這樣,不管特征中有多少個(gè)非0值,經(jīng)過轉(zhuǎn)換之后的長(zhǎng)度都是一樣的!

Deep Interest Network

Base Model有一個(gè)很大的問題,它對(duì)用戶的歷史行為是同等對(duì)待的,沒有做任何處理,這顯然是不合理的。一個(gè)很顯然的例子,離現(xiàn)在越近的行為,越能反映你當(dāng)前的興趣。因此,對(duì)用戶歷史行為基于Attention機(jī)制進(jìn)行一個(gè)加權(quán),阿里提出了深度興趣網(wǎng)絡(luò)(Deep Interest Network),先來看一下模型結(jié)構(gòu):

4、DIN模型

Attention機(jī)制簡(jiǎn)單的理解就是,針對(duì)不同的廣告,用戶歷史行為與該廣告的權(quán)重是不同的。假設(shè)用戶有ABC三個(gè)歷史行為,對(duì)于廣告D,那么ABC的權(quán)重可能是0.8、0.1、0.1;對(duì)于廣告E,那么ABC的權(quán)重可能是0.3、0.6、0.1。這里的權(quán)重,就是Attention機(jī)制即上圖中的Activation Unit所需要學(xué)習(xí)的。

為什么要引入這一個(gè)機(jī)制呢?難道僅僅是通過觀察歷史數(shù)據(jù)拍腦袋決定的么?當(dāng)然不是,如果不用Local activation的話,將會(huì)出現(xiàn)下面的情況:假設(shè)用戶的興趣的Embedding是V_u,候選廣告的Embedding是V_a,用戶興趣和候選的廣告的相關(guān)性可以寫作F(u,a)=V_u *V_a。如果沒有Local activation機(jī)制的話,那么同一個(gè)用戶對(duì)于不同的廣告,V_u都是相同的。舉例來說,如果有兩個(gè)廣告A和B,用戶興趣和A,B的相似性都很高,那么在V_aV_b連線上的廣告都會(huì)有很高的相似性。這樣的限制使得模型非常難學(xué)習(xí)到有效的用戶和廣告的embedidng表示。

在加入Activation Unit之后,用戶的興趣表示計(jì)算如下:

? ??????????????????V_u = f(V_a) = \sum_{i=1}^N w_i * V_i = \sum_{i=1}^N g(V_i, V_a)* V_i

其中,V_i表示behaviorI_id i的嵌入向量,比如good_id,shop_id等。V_u是所有behavior_ids的加權(quán)和,表示的是用戶興趣;V_a是候選廣告的嵌入向量;W_i是候選廣告影響著每個(gè)behavior_id的權(quán)重,也就是Local Activation。w_i通過Activation Unit計(jì)算得出,這一塊用函數(shù)去擬合,表示為 g(V_i, V_a)

3、模型細(xì)節(jié)

3.1 評(píng)價(jià)指標(biāo)GAUC

模型使用的評(píng)價(jià)指標(biāo)是GAUC,我們先來看一下GAUC的計(jì)算公式:

? ??????????????????GAUC = \frac{\sum\nolimits_{i=1}^n w_i*AUC_i }{\sum\nolimits_{i=1}^n w_i}  = \frac{\sum\nolimits_{i=1}^n impression_i * AUC_i }{\sum\nolimits_{i=1}^n impression_i}

我們首先要肯定的是,AUC是要分用戶看的,我們的模型的預(yù)測(cè)結(jié)果,只要能夠保證對(duì)每個(gè)用戶來說,他想要的結(jié)果排在前面就好了。

假設(shè)有兩個(gè)用戶A和B,每個(gè)用戶都有10個(gè)商品,10個(gè)商品中有5個(gè)是正樣本,我們分別用TA,TB,F(xiàn)A,F(xiàn)B來表示兩個(gè)用戶的正樣本和負(fù)樣本。也就是說,20個(gè)商品中有10個(gè)是正樣本。假設(shè)模型預(yù)測(cè)的結(jié)果大小排序依次為TA,F(xiàn)A,TB,F(xiàn)B。如果把兩個(gè)用戶的結(jié)果混起來看,AUC并不是很高,因?yàn)橛?個(gè)正樣本排在了后面,但是分開看的話,每個(gè)用戶的正樣本都排在了負(fù)樣本之前,AUC應(yīng)該是1。顯然,分開看更容易體現(xiàn)模型的效果,這樣消除了用戶本身的差異。

但是上文中所說的差異是在用戶點(diǎn)擊數(shù)即樣本數(shù)相同的情況下說的。還有一種差異是用戶的展示次數(shù)或者點(diǎn)擊數(shù),如果一個(gè)用戶有1個(gè)正樣本,10個(gè)負(fù)樣本,另一個(gè)用戶有5個(gè)正樣本,50個(gè)負(fù)樣本,這種差異同樣需要消除。那么GAUC的計(jì)算,不僅將每個(gè)用戶的AUC分開計(jì)算,同時(shí)根據(jù)用戶的展示數(shù)或者點(diǎn)擊數(shù)來對(duì)每個(gè)用戶的AUC進(jìn)行加權(quán)處理。進(jìn)一步消除了用戶偏差對(duì)模型的影響。通過實(shí)驗(yàn)證明,GAUC確實(shí)是一個(gè)更加合理的評(píng)價(jià)指標(biāo)。

3.2 Dice激活函數(shù)

從Relu到PRelu

Relu激活函數(shù)在值大于0時(shí)原樣輸出,小于0時(shí)輸出為0。這樣的話導(dǎo)致了許多網(wǎng)絡(luò)節(jié)點(diǎn)的更新緩慢。因此又了PRelu,也叫Leaky Relu,形式如下:

5、PRelu

這樣,及時(shí)值小于0,網(wǎng)絡(luò)的參數(shù)也得以更新,加快了收斂速度。

從PReLU到Dice

盡管對(duì)Relu進(jìn)行了修正得到了PRelu,但是仍然有一個(gè)問題,即我們認(rèn)為分割點(diǎn)都是0,但實(shí)際上,分割點(diǎn)應(yīng)該由數(shù)據(jù)決定,因此文中提出了Dice激活函數(shù)

Dice激活函數(shù)的全稱是Data Dependent Activation Function,形式如下:

? ??????????????????y_i = a_i(1-p_i)y_i + p_iy_i

? ??????????????????p_i = \frac{1}{1+e^{-\frac{y_i - E[y_i]}{\sqrt{v \alpha \tau [y_i]} +\varepsilon  } }}

其中,期望和方差的計(jì)算如下:

? ??????????????????{E[y_i]_{t+1}}^ {\prime} ={E[y_i]_t}^{\prime} + \alpha {E[y_i]}_{t+1}

? ??????????????{V\alpha \tau [y_i]_{t+1}}^ {\prime} ={V\alpha \tau [y_i]_t}^{\prime} + \alpha {V\alpha \tau [y_i]}_{t+1}

可也看到,每一個(gè)yi對(duì)應(yīng)了一個(gè)概率值pi。pi的計(jì)算主要分為兩步:將yi進(jìn)行標(biāo)準(zhǔn)化和進(jìn)行sigmoid變換。

3.3 自適應(yīng)正則 Adaptive Regularization

CTR中輸入稀疏而且維度高,通常的做法是加入L1、L2、Dropout等防止過擬合。但是論文中嘗試后效果都不是很好。用戶數(shù)據(jù)符合長(zhǎng)尾定律long-tail law,也就是說很多的feature id只出現(xiàn)了幾次,而一小部分feature id出現(xiàn)很多次。這在訓(xùn)練過程中增加了很多噪聲,并且加重了過擬合。

對(duì)于這個(gè)問題一個(gè)簡(jiǎn)單的處理辦法就是:直接去掉出現(xiàn)次數(shù)比較少的feature id。但是這樣就人為的丟掉了一些信息,導(dǎo)致模型更加容易過擬合,同時(shí)閾值的設(shè)定作為一個(gè)新的超參數(shù),也是需要大量的實(shí)驗(yàn)來選擇的。

因此,阿里提出了自適應(yīng)正則的做法,即:

1.針對(duì)feature id出現(xiàn)的頻率,來自適應(yīng)的調(diào)整他們正則化的強(qiáng)度;

2.對(duì)于出現(xiàn)頻率高的,給與較小的正則化強(qiáng)度;

3.對(duì)于出現(xiàn)頻率低的,給予較大的正則化強(qiáng)度。

計(jì)算公式如下:

? ??????????????????I_i = \left\{\begin{array}{cc} 
		1, \exists (x_j,y_j)\in B,s.t.[x_j]_i \neq 0\\0, other\ values 
	\end{array}\right.

? ??????????????????w_i \leftarrow w_i - \eta [\frac{1}{b}  \sum_{(x_j,y_j)\in B} \frac{\partial L(f(x_j),y_j)}{\partial  w_i} +\lambda \frac{1}{n_i}w_iI_i   ]

4、效果展示

下圖是對(duì)Local Activation效果的一個(gè)展示,可以看到,對(duì)于候選的廣告是一件衣服的時(shí)候,用戶歷史行為中跟衣服相關(guān)的權(quán)重較高,而非衣服的部分,權(quán)重較低。

6、Local activation

下圖是對(duì)使用不同正則項(xiàng)的結(jié)果進(jìn)行的展示,可以發(fā)現(xiàn),使用自適應(yīng)正則的情況下,模型的驗(yàn)證集誤差和驗(yàn)證集GAUC均是最好的。

7、驗(yàn)證自適應(yīng)正則

下圖對(duì)比了Base Model和DIN的實(shí)驗(yàn)結(jié)果,可以看到,DIN模型在加入Dice激活函數(shù)以及自適應(yīng)正則之后,模型的效果有了一定的提升:

8、DIN與基準(zhǔn)模型比較

參考文獻(xiàn):

論文:Deep Interest Network for Click-Through Rate Prediction

推薦系統(tǒng)遇上深度學(xué)習(xí)(十八)--探秘阿里之深度興趣網(wǎng)絡(luò)(DIN)淺析及實(shí)現(xiàn)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,030評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,310評(píng)論 3 415
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,951評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,796評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,566評(píng)論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,055評(píng)論 1 322
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,142評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,303評(píng)論 0 288
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,799評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,683評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,899評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,409評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,135評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,520評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,757評(píng)論 1 282
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,528評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,844評(píng)論 2 372

推薦閱讀更多精彩內(nèi)容