Attention在推薦系統中的應用


  本篇博客重點關注Attention在推薦系統中的常見幾類用法。Attention 這里就不多做介紹了,可以參考之前的博客。
  為什么推薦系統需要Attention?Attention在推薦系統中怎么用呢?
  縱觀排序模型的發展歷程,有兩個主要的演進方向:
    1、特征組合自動化;
    2、用戶行為序特征的挖掘。
  像華為很喜歡做各種特征交叉模型,典型代表如deepFM;而阿里很喜歡去挖掘用戶行為序特征,典型模型如DIN、BST等。

  在推薦系統中 Attention 最常見用法就是對用戶行為序列進行建模。我們先來介紹其中最具代表性的模型——DIN。

DIN

  論文:Deep Interest Network for Click-Through Rate Prediction
  地址:https://arxiv.org/abs/1706.06978

  論文中指出,用戶興趣具有以下兩個特點:

  1、多樣性(Diversity): 即用戶在線上購物時往往同時表現出多種興趣。

  2、局部聚焦(Local Activation): 即用戶是否會點擊推薦給他的某一件商品,往往是基於他之前的部分興趣,而非所有興趣。

  

 

  在DIN提出之前,使用了行為序特征的深度學習模型多采用上圖所示的Base Model模型結構。模型可以划分成三層:

  1、embedding層
        該層負責將高維稀疏one-hot編碼向量映射到低維稠密向量中。
  2、池化層
        (1)用戶行為特征中的每個商品的所有特征embedding向量連接成一個向量,k個商品會得到k個向量;
        (2)然后對這k個向量進行sum pooling,也就是向量的同維度元素(element-wise)求和,最終得到一個表示用戶行為特征的向量;
        (3)用戶行為特征向量再與其他特征的embedding向量進行concat,得到全連接層的輸入。
  3、全連接層
  Base Model有一個很大的問題,它對用戶的歷史行為是同等對待的,沒有做任何處理,這顯然是不合理的。一個很顯然的例子是,離當現在越近的行為,越能反映用戶當前的興趣。 
  基於此,提出了DIN模型,模型結構圖如下:
    
  DIN在基准模型的基礎上,增加了一個激活單元。 為用戶行為中每個商品與候選廣告通過激活單元計算出一個激活權重。用戶行為中的商品乘以權重再進行sum pooling。
  激活單元是一個前饋網絡,輸入是行為序中商品的 embedding 向量和候選廣告的 embedding 向量;進入單元后,兩個向量求外積(out product)( 或element-wise相減);為什么要做這一步?一種解釋是為了增加這兩個向量交叉的程度,因為只在全連接層交叉往往針對性不足。求外積得到的向量再與兩個向量本身concat形成神經網絡輸入層;輸出層只有一個節點,最終輸出的就是該商品的激活權重。 
  以上即是DIN的大致思想。DIN從實際業務的出發,從用戶歷史行為中挖掘用戶興趣,針對每個候選廣告,使用Activation Unit計算其與用戶歷史行為商品的相關weight,有效捕捉了用戶興趣多樣性和局部聚焦的特點。

  而后面提出的DIEN模型,可以看作是升級版的DIN,主要針對DIN的兩個缺點:
  1、用戶興趣應該是不斷進化的,DIN無法捕獲到興趣的這種進化性;
  2、DIN無法保證通過用戶的顯式的行為得到的興趣是有效的。
  詳細參考論文 https://arxiv.org/abs/1809.03672

 BST

  論文:Behavior Sequence Transformer for E-commerce Recommendation in Alibaba
  地址:https://arxiv.org/abs/1905.06874
  Transformer 大火,使其成為NLP中最受歡迎的特征提取器(Transformer參考 ),把Attention升級成Transformer也很簡單粗暴。模型結構如下:

  

  在NLP問題中,self-attention幫助我們編碼句子中的某個詞語時,關注句子中其他詞對當前詞的重要度,並將其他詞的部分信息編碼到當前詞語中。簡單理解就是可以更好地編碼當前詞語。
  Transformer在推薦系統中的主要作用,則是為了更好地學習用戶行為序中商品的Embedding表示。
  在BST中,行為序中各商品的Embedding是concat起來的,然后再和其他特征的Embedding一起concat成一個長向量,作為后面全連接層的輸入。DIN則是對用戶行為序中商品的Embedding做sum pooling,最終得到的行為序特征的Embedding和單個商品的 Embedding 長度相同。所以在這一層上,BST的參數量要大於DIN。

美團Transformer

  在美團2020技術干貨中,介紹了Transformer在美團APP搜索排序中的應用。迭代了以下三個版本,我們一一來看。

  第一版

  

  模型結構如上圖所示。

  模型核心點有以下三個:

  (1)用戶行為分成了短期行為序和長期行為序,用來捕捉用戶的短期和長期特征;
  (2)使用 Transformer 對行為序中的item學習更好的 Embedding 表示;
  (3)對行為序中各商品的 Embedding 做sum pooling操作,得到行為序特征的 embedding 表示。

  方法簡單直接,不需再過多介紹。不過該方法主要的問題是,對候選商品打分時,對於所有商品,行為序的 embedding 都是一樣的。即對於目標商品,並沒有對行為序中的item pay attention,Transformer只是用來更好的學習行為序中item的Embedding。

  第二版

  針對第一版存在的問題,並參考 BST 模型,在第一個版本的基礎上引入 Target-item, 這樣可以學習行為序列內部的 item 與 Target-item 的相關性,這樣在對不同的 item 打分時,用戶的 Embedding 表示是不一樣的網絡結構如下:

  

  第三版

   

  從模型結構圖容易看出,第三版其實是 DIN + Transformer。基礎架構還是DIN,和DIN相比,改進的地方有兩個:

  (1)使用 Transformer 對行為序中的item學習更好的 Embedding 表示;

  (2)短期行為序和長期行為序,用來捕捉用戶的短期和長期特征。

  

  文章開頭簡單介紹過,在推薦系統中 Attention 最常見用法就是對用戶行為序列進行建模。

  還有一種用法是在進行特征組合時,對不同的特征pay attention。代表模型有AFM模型和AutoInt模型。

AFM

  論文:Attentional Factorization Machines: Learning the Weight of Feature Interactions via Attention Networks∗

  地址:https://www.ijcai.org/Proceedings/2017/0435.pdf

  FM與DNN結合有兩種主流方法:

  (1)並行結構:以 deepFM 為代表;
  (2)串行結構:以 NFM、AFM為代表。
  后面會出一篇詳細介紹 FM 模型與 DNN 結合的文章。

  先簡單回顧下FM模型。

  FM的函數形式如下

  
  二階部分可以做如下化簡:
  
  對於化簡結果, 不考慮最外層的求和,得到的其實是一個K維的向量。
  之所以提出AFM模型,是因為FM在預測時有一個問題,即當某個特征與其他特征做交叉時,都是用同樣的向量去做計算。但是不同特征之間的交叉,重要程度是不一樣的。 
  如何體現這種重要度呢?FFM一種方法(后面再出文詳細介紹),另一種就是 Attention機制。
  AFM就是在FM模型的基礎上添加了Attention機制。模型目標函數如下:
    
  圓圈中有個點的符號表示哈達瑪積,即逐點相乘。兩個向量求哈達瑪積得到的還是一個向量。
  a ij是Attention層輸出的權重值,取值范圍在[0,1]。
  現在求和之后得到的是一個K維的向量,還需要再跟一個向量 p 相乘,得到一個具體的數值。
  從FM和AFM的函數形式容易看出, AFM 的前兩部分(即一階部分)和 FM 相同,二階部分的網絡結構如下:
  圖中的前三部分:sparse iput,embedding layer,pair-wise interaction layer,都和FM是一樣的。
  embedding layer 得到的vector其實就是我們在FM中要學習的隱變量 v 。
  Attention 層的計算方式如下,也就是使用多層感知機的方式計算權重: 

    

AutoInt

  模型使用multi-head self-attention機制來進行自動特征交叉學習來提升CTR預測的效果。論文中的multi-head self-attention與Transformer中的多頭注意力機制類似。
  模型有兩個亮點:
  (1)將類別特征和連續特征都嵌入到低維空間中,因此模型允許不同類型的特征通過矢量算法相互交互;
  (2)通過多頭注意力機制捕捉有意義的高階特征組合,多頭機制在不同的子空間中可以捕獲不同的特征交互模式,並且可以通過層的疊加捕獲更高階的交互模式。
  模型結構如下

  輸入層和嵌入層  

 

  1、類別特征,通過embedding映射成低維稠密向量;
  2、連續特征,賦予其一個embedding向量,用歸一化后的特征值與embedding向量的乘積作為其最終表示。
  對於連續特征,也可以將其離散化后作為類別特征處理,孰優孰劣要在實際場景中測試。  

  交互層(Interacting Layer)

   

  相信熟悉self-attention和Transformer的各位看圖就明白了AutoInt的原理。
  最后的輸出層即經典神經網絡。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM