【CTR預估】DSIN模型

最近看了一篇文章‘Deep Session Interest Network for Click-Through Rate Prediction’, 這篇是阿里發表在IJCAI2019的文章。

文章地址:https://arxiv.org/abs/1905.06482

作者還開源了代碼:https://github.com/hhh920406/DSIN

淘寶最近也公開了一個rank模型,和這個有一點點像,也可以看看,模型要比這個要簡單點:https://mp.weixin.qq.com/s/1y8jTqCcI7HkMA3qXtqdIg

模型是用於CTR預估的,整個模型在傳統的DNN模型基礎上,加上了tranformer結構和Bi-LSTM來分別捕捉session內和session間的內在聯繫,最後通過attention機制對目標item和由兩個結構生成的session內順序信息和session之間順序信息加權輸出,和用戶畫像embedding,以及item畫像embedding一起concate起來,送入MLP裏做分類。整體給我的感覺是思路很棒,但是感覺這個預估模型有點重,像我這種小公司的線上服務rt還不一定能用起來......

Based model

文章先大概介紹了一下使用DNN來構造ctr預估模型的一個基本框架。

1.embedding。這個是必須的,一般稀疏類別特徵,不出意外都可以用embedding來操作。這個一方面可以降低輸入的維度,還可以將特徵映射到高緯空間學習出不同特徵值之間的距離,而不是像onehot一樣,每個特徵值都一樣。當然還有好多優點,比如方便後續計算,使用;方便將不同域的特徵映射到同一空間進行比較等等,優點多多。

2.MLP。基本上將稀疏類別特徵embedding化後,和稠密特徵一起concate起來就可以直接送入神經網絡,進行訓練,這樣就可以組成一個基本的DNN網絡,用於分類,迴歸等。

DSIN模型

                        

如上圖所示是模型的整體結構,左側的User Field 和Item Field就是上面說的稀疏類別特徵的embedding和稠密特徵的組合,這裏按user和item做了區分。文章的核心工作在右邊這塊。

從下到上

Session Divsion Layer

這塊的工作是將用戶的歷史行爲劃分成不同session,將歷史行爲的items以三十分鐘爲界,劃分成不同的session。並且爲了保持維度的一致,每個session的長度是一致的,多了的截斷,少了的按0填充。session的個數也保持一致。

                                                             

Q就是一個session,b表示session的行爲。

Session Interest Extractor Layer

這一步的目的就是去捕獲session list中每個session內部的行爲關係。將session作爲輸入,送入tranformer結構。

session在送入tranformer之前使用了一個操作Bias Encoding.

                                                                 

用了三個矩陣分別對session本身,session中的每個位置,每個位置處id的embedding的每個維度都加上了一個偏置項。源碼如下:

          

然後將偏置項加入到輸入的session list中

                                                                             

         

這一步應該算是對原始tranformer中position encoding的優化,利用偏置項來區分不同位置session,不同位置的item,以及不同位置的embedding值。

接着把經過Bias Encoding處理的輸入session list傳入tranformer結構裏:

                                               

tranformer輸出的結果被再次輸入一個前向網絡裏面做了一層映射

                                                        

然後再用average pooling把每個session的維度進行壓縮:

                                                                       

到這爲止,或得到了每個session的一個內在表示,就是圖裏面的:

                                                                 

Session Interest Interacting Layer

文章爲了捕獲不同session之間的順序關係,使用了Bi-LSTM。Bi-LSTM是雙向的,可以同時捕獲上下文關係。

因此經過Bi-LSTM編碼的輸入,每個維度的輸出向量其實都包含了輸入數據同一位置的前後信息。這步獲得的數據是圖中的:

                                                             

到這爲止,模型已經同時捕獲到了session內部和session之間的順序關係。如果想簡單一點,直接把這兩者的輸出結果和圖中左側的畫像特徵concate起來也可以。不過文章作者在concate前對兩者的輸出做了一層attention,用來判斷sesison信息和目標item之間的相關性。

Session Interest Activating Layer

                                                  

attention的query就是公式中的X,就是目標item的embedding。item的embedding是item畫像特徵所有embedding一起concate起來獲得的。value和key就是前面獲得兩個輸出I和H。

最後把以上這些向量都組合起來送入DNN中進行訓練。

文章總的來說,思路清晰,之前看過一些文章基本只會去考慮session內部的關係,很少有考慮session之間的關係,還把NLP中的tranformer模型用到了ctr預估。

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