1. 程式人生 > >深度興趣網路DIN-DIEN-DSIN

深度興趣網路DIN-DIEN-DSIN

看看阿里如何在淘寶做推薦,實現“一人千物千面”的使用者多樣化興趣推薦,首先總結下DIN、DIEN、DSIN:

  1. 傳統深度學習在推薦就是稀疏到embedding編碼,變成稠密向量,餵給NN
  2. DIN引入attention機制,捕獲候選商品和使用者瀏覽過的商品之間的關係(興趣)
  3. DIEN在DIN基礎上引入序列概念,將使用者歷史行為序列納入到網路內
  4. DSIN將行為序列劃分為session,更符合RNN概念

大多推薦場景下資料下都包含如下資訊,使用者內在屬性資訊、使用者行為資訊、商品資訊、上下文資訊,一個明顯不同的不同使用者的行為資訊差異很大。

深度學習在推薦系統一般做法:

稀疏向量 -- embedding -- fixed-length稠密向量 --- MLP

這樣做有什麼問題?

  1. 一個明顯的問題是不同使用者的行為序列長度是不同的,fixed-length資訊表達不全面

  2. 使用者最終的行為只和歷史行為中的部分有關,因此對歷史序列中商品相關度應有區分

  • DIN

根據上述問題,有兩個解決思路:

  1. 對不同使用者嘗試不同維度的向量,導致訓練困難
  2. 如何在有限的維度表示使用者的差異化興趣?

DIN從第二個問題出發,引入區域性啟用單元,對特定的ad自適應學習使用者興趣表示向量。即同一使用者在獲選ad不同時,embedding向量不同。

key idea

使用attention機制捕獲ad和使用者行為序列商品之間的關係

看結果

  1. 和ad相似度搞得物品擁有更高的權重
  2. 不相關物品的相似度低

下面是兩個小tricks,對結果提升有幫助:

  1. Mini-batch Aware Regularization

  2. Dice Activation Function

tricks的細節可以參考原論文。


  • DIEN
    DIEN使用了GRU來建模使用者行為序列,在DIN基礎上考慮序列資訊
  1. 使用GRU建模序列資訊,即用GRU最後時刻的隱狀態表示序列
  2. 修改GRU為AUGRU

看下AUGRU部分:
\[ a_{t}=\frac{\exp \left(\mathbf{h}_{t} W \mathbf{e}_{a}\right)}{\sum_{j=1}^{T} \exp \left(\mathbf{h}_{j} W \mathbf{e}_{a}\right)} \]

\[ \begin{aligned}&\tilde{\mathbf{u}}_{t}^{\prime}=a_{t} * \mathbf{u}_{t}^{\prime}\\&\mathbf{h}_{t}^{\prime}=\left(1-\tilde{\mathbf{u}}_{t}^{\prime}\right) \circ \mathbf{h}_{t-1}^{\prime}+\tilde{\mathbf{u}}_{t}^{\prime} \circ \tilde{\mathbf{h}}_{t}^{\prime}\end{aligned} \]

根據attention score控制更新門。

看模型,直觀的思考貌似很合理,但是有兩個問題:

  1. 序列資訊包含多長?即短期興趣還是長期興趣的問題
  2. 序列連續否?不同時期的興趣不一樣,序列間隔過大相關性可能很低
  3. 使用者是否一定服從嚴格的序列?先點那個和後點那個的區別大嗎

1.DIEN使用過去14天資訊行為序列,從RNN角度來說可能短期內行為資訊更重要,但長期資訊是否引入了噪音?

2.過去14天內使用者需求會變。比如第一天買了衣服、可能十天後買的是書

3.使用者點選順序不一定重要,自己想一想好像是

關於使用RNN是否合適,RNN只關心t-1(上一步)和t(當前步),而沒有涉及t-1和t之間的時間間隔。沒涉及不代表不重要,反而是因為其使用前提就是假定各步驟之間是等間距的,見維基百科。

A time series is a series of data points indexed (or listed or graphed) in time order. Most commonly, a time series is a sequence taken at successive equally spaced points in time"

以上部分內容摘自[3].


  • DSIN

DSIN進一步做出優化,在每個會話中的行為是相近的,而在不同會話之間差別是很大的,如下圖的例子:

模型架構

1.會話分割層

將使用者的點選行為按照時間排序,判斷每兩個行為之間的時間間隔,前後的時間間隔大於30min,就進行切分。

2.興趣提取層

用Tansformer編碼使用者行為序列,簡單來說就是輸入一個序列,輸出一個對應的embedding序列。

引入了偏置編碼(Bias encoding),實質上是對序列中位置資訊的編碼

原始做法:
\[ \begin{aligned}&P E_{(\text {pos}, 2 i)}=\sin \left(\text {pos} / 10000^{2 i / d_{\text {model}}}\right)\\&P E_{(p o s, 2 i+1)}=\cos \left(p o s / 10000^{2 i / d_{m o d e l}}\right)\end{aligned} \]
bias encoding:
\[ \mathbf{B E}_{(k, t, c)}=\mathbf{w}_{k}^{K}+\mathbf{w}_{t}^{T}+\mathbf{w}_{c}^{C} \]
第一項表示處於第幾個session,第二項表示session的第幾個行為,第三項表示整體位置的embedding。關於這三項其實不是很明確,知道的同學麻煩幫忙解答下,貼上原圖

3.興趣互動層

捕獲序列的順序關係,文中使用Bi-LSTM

4.興趣啟用層

和DIN中一樣,使用attention捕捉商品相關性

模型思想大概就這麼多,細節部分可以參考原論文。

具體應用

  1. 充分了解領域資料特點,根據場景定製適合具體問題的網路結構

  2. 需要有豐富的特徵

references:

[1]Deep Interest Network for Click-Through Rate Prediction,https://arxiv.org/pdf/1706.06978.pdf ,KDD2018

[2]Deep Interest Evolution Network for Click-Through Rate Prediction, https://arxiv.org/pdf/1809.03672.pdf. AAAI 2019

[3]也評Deep Interest Evolution Network . https://zhuanlan.zhihu.com/p/54838663.

[4]Deep Session Interest Network for Click-Through Rate Prediction. https://arxiv.org/pdf/1905.06482.pdf . IJCAI 2