1. 程式人生 > >阿里的CTR預測(二):Deep Interest Evolution Network

阿里的CTR預測(二):Deep Interest Evolution Network

這篇文章釋出於2018年9月,是之前的DIN的改進版。我們在阿里的CTR預測(一):Deep Interest Network中提到過,他們嘗試使用LSTM來學習序列化資料的特徵,但是對DIN的結果沒有改善。DIEN在這一點上做了改善。

Deep Interest Evolution Network(DIEN)

我們略去背景介紹,尤其是Base Model的部分,如果大家想看的話,可以去前一篇文章中找。現在我們直接介紹DIEN的結構。DIEN最大的特點是不但要找到使用者的interest,還要抓住使用者interest的進化過程。作者們將GRU融合到網路中,從而抓出變化的sequence。關於GRU的介紹有興趣的話不妨看看這篇

Understanding GRU networks

上面兩張圖分別是DIN和DIEN的結構圖,我們可以對比來看。

可以看到,DIEN仍然存在Embedding Layer,並且Embedding的方法也和之前一致。其他User profile, target AD和context feature的處理方式兩者都是一致的,只是把user behavior組織成了序列資料的形式,並把簡單的使用外積完成的activation unit變成了一個attention-based GRU網路。

Interest Extractor Layer

現在我們具體來說Interest Extractor Layer,也就是GRU單元在的那個layer。顧名思義,這個Layer的主要目標是從embedding資料中提取出interest來。但一個使用者在某一時間的interest不僅與當前的behavior有關,也與之前的behavior相關,所以作者們使用GRU單元來提取interest。

這是一個GRU單元的表示式,其中i_t = e_b[t]代表一個t時刻behaviour的embedding,\sigma是sigmoid函式,o代表element-by-element乘法。

他們在這一步還引入了一個L_{aux}~Loss,用來輔助進行Interest Extractor。因為普通的h_t只能從embedding中提取資訊,提取的卻不一定是interest。最後的action只由final interest決定,要保留中間狀態的interest需要其他的激勵。通過引入L_{aux}~Loss如下

並將最終的模型目標設為L = L_{target} + L_{aux},可以讓GRU在中間狀態提取出interest資訊。

Interest Evolution Layer

以使用者對衣服的interest為例,隨著季節和時尚風潮的不斷變化,使用者的interest也會不斷變化。

  • 追蹤使用者的interest可以使我們學習final interest的表達時包含更多的歷史資訊
  • 可以根據interest的變化趨勢更好地進行CTR預測 而interest在變化過程中遵循如下規律:
  • interest drift:使用者在某一段時間的interest會有一定的集中性。比如使用者可能在一段時間內不斷買書,在另一段時間內不斷買衣服。
  • interest individual:一種interest有自己的發展趨勢,不同種類的interest之間很少相互影響,例如買書和買衣服的interest基本互不相關。

為了利用這兩個時序特徵,我們需要再增加一層GRU的變種,並加上attention機制以找到與target AD相關的interest。其中,attention function可以表示為:

e_a是target AD的embedding。

把Attention和GRU結合起來的機制有很多種,

  • AIGRU: i_t'  = h_t * a_t
  • AGRU: h_t' = (1 - a_t) * h_{t - 1}' + a_t * \tilde{h_t'}
  • AUGRU: \tilde{u_t'} = a_t * u_t';~ h_t' = (1 - \tilde{u_t'}) \circ h_{t-1}' + \tilde{u_t'} \circ \tilde{h_t'}

文章中嘗試了這三種機制。

Results

文章在公共資料和自己的資料集上都做了實驗,離線實驗的結果如下: