推薦系統(9)—— 推薦系統重排序-注意力模型小結


1、阿里巴巴PRM模型

  推薦系統的架構大致分為如下幾個模塊:召回、粗排、精排、重排,那么為什么要引入重排模塊呢。在精排階段,我們希望得到的是一個候選排序隊列的全局最優解,但是實際上,通常在精排階段,我們精排模型是針對用戶和每一個候選廣告(商品)輸出一個分值而每個候選之間也會相互影響。例如在360搜索廣告的場景下,這些候選廣告之間的廣告樣式會互相影響,從而影響最終的排序結果(一些圖片類型的廣告的點擊率通常要比純文字鏈廣告的點擊率要高),所以在360搜索廣告的場景下,重排序模塊主要在考慮同屏展現廣告樣式相關的一些信息,利用這些信息對精排候選廣告隊列進行一個重新的排序。

  排序是推薦系統的一個核心問題,目的是給用戶一個“排好序的”item list。通常這個ranking function是從labeled dataset里學到的,通過優化全局表現。這個function對每個item給一個得分。但是這個function可能是次優的,因為它是對每個item“獨立”應用的,而且沒有顯式地考慮item之間的關系,也沒有考慮用戶偏好的不同。於是這篇文章就提出了PRM。這個reranking模型可以接在任何排序模型后面。它直接優化整個的推薦列表,通過“使用transformer結構來encode列表中的item信息”。其中,這個transformer用了self-attention機制,它直接對任意pair的item間的聯系建了模。通過加入一個預訓練好的學習用戶偏好的embedding,效果還會進一步提升。

  Transformer替換RNN的優勢也是較為普遍認知的,1.工程上並行化更容易;2.算法上對於遠距離的item關系刻畫更好。由於業務場景的不同,DLMC強調的是不同query下的特征分布是不同的,比如搜索“老友記”,那相關性相比於多樣性就更重要,本文強調不同用戶的意圖不同對推薦list的影響,比如一個沒有明顯購買意圖的用戶,推薦的多樣性就變得很重要。

(1)Input Layer

  Input Layer的作用比較好理解,就是對精排階段的候選廣告列表進行一個Embedding表征,得到Embedding向量之后喂給后續的Encoding Layer。Input Layer的原始輸入是精排廣告序列的原始特征矩陣X。在此基礎上,主要引入Personalized Vector(PV)和Position Embedding(PE)。如果只將候選廣告的原始特征矩陣X喂給Encoding Layer,則模型只會獲取到候選商品之間的交互信息,為了引入商品-用戶之間的交互信息,則引入了Personalized Vector;Position Embedding則主要是引入精排階段ranking order的相關信息。所以最后最終的Embedding矩陣如下

  那么如何對PV進行建模呢,這里文章給出了兩個辦法,一種是將PV融入到PRM模型中做端到端的訓練,另外一種是采用一個額外的模型進行預訓練得到PV的Embedding Vector;論文采用第二種方式,可以理解為第一中方法只能挖掘用戶-精排候選item之間的交互信息,但是實際上我們這里需要的是用戶更加泛化通用的embedding表征,所以利用一個單獨的預訓練的模型(也可以用簡化版的精排模型),但是我覺得采用端到端的訓練方式和預訓練的方式兩者之間的差距還需要進一步評估,具體兩者差距多少持保留態度。具體預訓練模型的結構如圖1右側部分所示,就是一個簡單的MLP,這里也就不做過多介紹了,值得一提的是,為了更好的表征用戶個性化的信息,在這個預訓練部分引入了一些用戶歷史行為特征、用戶基礎特征(年齡、性別)、item特征這三類。

   這里為什么要用self-attention這種結構呢,因為在重排序階段需要考慮的是候選廣告之間的相互影響(item之間的交互信息),所以self-attention可以捕捉到精排序列中兩兩item之間的信息。本身這塊Encoding Layer的結構就是比較簡單的。同時文章也指出引入多層的Encoding Layer可以進一步捕捉到高階的交叉信息(也就是Encoding Layer可以疊加多層)。

 2、總結下DIN、DIEN、DSIN

優化流程:

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

這樣做有什么問題?

  1. 一個明顯的問題是不同用戶的行為序列長度是不同的,fixed-length信息表達不全面

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

2、DIN

  深度學習在CTR預估領域已經有了廣泛的應用,常見的算法比如Wide&Deep,DeepFM等。這些方法一般的思路是:通過Embedding層,將高維離散特征轉換為固定長度的連續特征,然后通過多個全聯接層,最后通過一個sigmoid函數轉化為0-1值,代表點擊的概率。即Sparse Features -> Embedding Vector -> MLPs -> Sigmoid -> Output。這種方法的優點在於:通過神經網絡可以擬合高階的非線性關系,同時減少了人工特征的工作量。

  DIN在有限的緯度表示用戶的差異化興趣,引入局部激活單元,對特定的ad自適應學習用戶興趣表示向量。即同一用戶在候選ad不同時,embedding向量不同。使用attention機制捕獲ad和用戶行為序列商品之間的關。

  1. Diversity:用戶在訪問電商網站時會對多種商品都感興趣。也就是用戶的興趣非常的廣泛。
  2. Local Activation:用戶是否會點擊推薦給他的商品,僅僅取決於歷史行為數據中的一小部分,而不是全部。針對Diversity:

  解決方式:1)針對用戶廣泛的興趣,DIN用an interest distribution去表示。2)針對Local Activation:DIN借鑒機器翻譯中的Attention機制,設計了一種attention-like network structure, 針對當前候選Ad,去局部的激活(Local Activate)相關的歷史興趣信息。和當前候選Ad相關性越高的歷史行為,會獲得更高的attention score,從而會主導這一次預測。

  Base Model有一個很大的問題,它對用戶的歷史行為是同等對待的,沒有做任何處理,這顯然是不合理的。一個很顯然的例子,離現在越近的行為,越能反映你當前的興趣。因此,對用戶歷史行為基於Attention機制進行一個加權。Attention機制簡單的理解就是,針對不同的廣告,用戶歷史行為與該廣告的權重是不同的。假設用戶有ABC三個歷史行為,對於廣告D,那么ABC的權重可能是0.8、0.1、0.1;對於廣告E,那么ABC的權重可能是0.3、0.6、0.1。這里的權重,就是Attention機制即上圖中的Activation Unit所需要學習的。

  將candidate與點擊序列中的每個商品發生交互來計算attention分數。具體計算方法,輸入包括商品和candidate的embedding向量,以及兩者的外積。對於不同的candidate,得到的用戶表示向量也不同,具有更大的靈活性。

 

 幾個創新點:

  1. 評價指標GAUC,不僅將每個用戶的AUC分開計算,同時根據用戶的展示數或者點擊數來對每個用戶的AUC進行加權處理。進一步消除了用戶偏差對模型的影響。通過實驗證明,GAUC確實是一個更加合理的評價指標。

  2. Dice激活函數,盡管對Relu進行了修正得到了PRelu,但是仍然有一個問題,即我們認為分割點都是0,但實際上,分割點應該由數據決定,因此文中提出了Dice激活函數。

  3. 自適應正則 Adaptive Regularization,CTR中輸入稀疏而且維度高,通常的做法是加入L1、L2、Dropout等防止過擬合。但是論文中嘗試后效果都不是很好。用戶數據符合長尾定律long-tail law,也就是說很多的feature id只出現了幾次,而一小部分feature id出現很多次。這在訓練過程中增加了很多噪聲,並且加重了過擬合。對於這個問題一個簡單的處理辦法就是:直接去掉出現次數比較少的feature id。但是這樣就人為的丟掉了一些信息,導致模型更加容易過擬合,同時閾值的設定作為一個新的超參數,也是需要大量的實驗來選擇的。

    因此,阿里提出了自適應正則的做法,即:
    1.針對feature id出現的頻率,來自適應的調整他們正則化的強度;
    2.對於出現頻率高的,給與較小的正則化強度;
    3.對於出現頻率低的,給予較大的正則化強度。

  一般來說,做attention的時候,需要對所有的分數通過softmax做歸一化,這樣做有兩個好處,一是保證權重非負,二是保證權重之和為1。但是在DIN的論文中強調,不對點擊序列的attention分數做歸一化,直接將分數與對應商品的embedding向量做加權和,目的在於保留用戶的興趣強度。例如,用戶的點擊序列中90%是衣服,10%是電子產品,有一件T恤和一部手機需要預測CTR,那么T恤會激活大部分的用戶行為,使得根據T恤計算出來的用戶行為向量在數值上更大,相對手機而言。

3、DIEN

  DIN在捕獲順序行為之間的依賴關系方面很弱,以前的方法不能挖掘行為背后真正的用戶興趣。此外,用戶的興趣是不斷發展的,捕捉興趣之間的動態關系對於興趣的表達是非常重要的。用戶興趣多樣性,導致興趣漂移(interest drifting phenomenon):在相鄰的訪問中,用戶的意圖可能非常不同,用戶當前行為可以依賴很久之前的用戶行為。同時,一個用戶對不同目標項的點擊行為受不同興趣部分的影響。dien主要在din基礎上優化興趣演化層,在注意力機制新穎嵌入序列機制中,使用興趣狀態和目標項計算相關性,AUGRU強化了相對興趣對興趣演化的影響,弱化了興趣漂移導致的非相對興趣效應,在DIN基礎上考慮序列信息。

  創新點:1)從顯式用戶行為中提取潛在的興趣;2)對興趣演化過程建模;

  • 由於興趣的多樣性,興趣可以漂移。興趣漂移對行為的影響是用戶可能在一段時間內對各種書籍感興趣,而在另一段時間內需要衣服;
  • 盡管興趣可能相互影響,但每個興趣都有自己的發展過程,例如書籍和衣服的發展過程幾乎是獨立的。我們只關注與目標項目相關的演化過程;

  改進點:

  1. 設計了興趣抽取層,並通過計算一個輔助loss,來提升興趣表達的准確性;
  2. 設計了興趣進化層,來更加准確的表達用戶興趣的動態變化性;

  dien首先通過embedding層對所有類別的特征進行轉換。其次,DIEN通過兩個步驟來捕捉興趣進化:1)興趣提取層根據行為序列提取興趣序列2)興趣進化層對與目標項目相關的興趣進化過程進行建模。然后將最終興趣的表示和embedding向量ad、用戶畫像、上下文連接起來。將該向量輸入MLP進行最終預測。

  相對於base模型和DIN,只對用戶行為序列User behavior sequence的處理做了調整。這里包含了3個部分,最底層是Behavior Layer,用於將用戶瀏覽過的商品轉換成對應的embedding,並且按照瀏覽時間做排序,中間層是興趣提取層Interest Extractor Layer,最上層是興趣發展層Interest Evolving Layer,我們重點介紹上面兩個Layer。

  興趣提取層引入了一個有監督學習,強行將RNN輸出隱層與商品embedding發生交互,輸入是按照時間步排列的商品embedding向量,假設第t個時間步輸入e(t),GRU輸出隱單元h(t),令下一個時間步的輸入向量e(t+1)作為正樣本,隨機采樣負樣本 [公式] ,且 [公式] ,h(t)與正負樣本向量分別做內積,定義輔助loss如圖5所示。 [公式] 是CTR任務的loss函數,將CTR的loss和輔助loss相加作為整個網絡的loss進行優化。 [公式] 是超參,平衡兩個loss的權重。輔助loss有幾個好處,當GRU處理較長序列的時候有助於降低反向傳播的難度,對於商品embedding的學習也有助益。再用一句話總結下,興趣提取層的作用是挖掘行為序列中商品之間的聯系,對用戶的興趣進行提取和表達

 

  有了用戶的興趣表示,興趣發展層的作用就是捕獲與candidate相關的興趣發展模式,如圖4中紅色區域所示,這里使用了第2個GRU。將candidate的embedding向量與第1個GRU的輸出隱向量發生交互,生成attention分數,具體計算公式如圖7所示。其中, [公式] 是隱向量, [公式] 是candidate的表示向量,W是需要訓練的參數矩陣。需要注意的是,與DIN不同,這里的attention分數采用softmax做了歸一化。 文中將attention分數與update gate相乘,替換原始的update gate,稱為AUGRU,其中A指的是Attention,U指的是Update gate。

  提取層利用輔助損失提取每個興趣狀態h[t]。在興趣演化層,AUGRU對與目標項目相關的興趣演化過程進行建模。最終興趣狀態h^{'}[T]與剩余特征的嵌入向量串聯起來,輸入MLR進行最終的CTR預測。

  我們看一下DIEN這個結構有什么問題。GRU是串行計算結構,要按照時間步一步一步進行計算。DIEN有兩個GRU,第2個GRU還要基於第1個GRU的結果來做attention,所以第2個GRU必須要等到第1個GRU全部計算完成才能開始計算,兩個GRU單元無法並行計算,所以可能存在時延大的問題,序列越長,時延可能就越長。文中介紹說工業場景輸入的序列長度是50,累積兩個GRU的時延,相當於序列長度為100的時延。最后關於DIEN再提出我的一點想法。興趣提取層是否是必要的,是否可以砍掉?我自己的感覺是可以砍掉,直接將商品embedding輸入給興趣發展層,通過興趣發展層來提取與candidate相關的興趣發展模式,而且興趣發展層本身也是一個GRU,也可以直接挖掘商品之間依賴關系。不過具體效果如何,還是需要通過試驗來驗證。 

4、DSIN

  用戶行為在每個會話中都是高度同構的,但跨會話是異構的。DSIN進一步做出優化,在每個會話中的行為是相近的,而在不同會話之間差別是很大的。dsin指出用戶同一session下瀏覽商品的相似性和不同session瀏覽商品差異性,在self-attention做local activation又加入BI-LSTM做改進。

改進點:

  • 將用戶的連續行為自然地划分為會話,然后利用帶有偏置編碼的self attention網絡對每個會話進行建模;
  • 應用BI-LSTM捕捉用戶不同歷史會話興趣的交互和演變;
  • 設計了一個局部的活動單元,將它們與目標項聚合起來,形成行為序列的最終表示形式;

  1. 會話划分層:用戶情景的分割存在於時間間隔大於30分鍾的相鄰行為之間。
  2. 會話興趣提取層:同一會話中的用戶行為密切相關。此外,用戶在會話中的隨意行為也使得原有會話展示發生偏差。捕捉同一會話中行為之間的內在關系並減少這些不相關行為的影響,paper在每個會話中都采用了多頭注意機制並對自我注意機制做了一些改進。

  3. 會話興趣交互層:用戶會話興趣與上下文興趣具有順序關系,對動態演變進行建模可以豐富會話興趣的表示。

  4. 會話興趣激活層:與目標項關聯更密切的用戶會話興趣對用戶是否單擊目標項影響更大,用戶會話興趣的權重需要重新分配到目標項。注意機制在源和目標之間進行軟對齊,是一種有效的權重分配機制。

   比起DIEN中對User Behaviors 部分分了三層去處理,在DSIN中有四層!第一層是Session Division Layer,第二層是Session Interest Extractor Layer,第三層是Session Interest Interacting Layer,第四層是Session Interest Activating Layer。先來說Session是什么,我們注意到用戶的興趣很廣泛,但在一個較短的時間內還是比較專注的,興趣會聚焦於一點,我們就把這較短的時間段稱為一個Session,比起DIN和DIEN把行為序列全打包到一起,在DSIN中把行為序列划成一個個Session再分別處理會更符合我們的直覺。

  1. 第一層的Session Division Layer就是把行為序列划成一個個Session,通常把間隔30分鍾以上的不同行為item划歸成不同的Session,
  2. 第二層的Session Interest Extractor Layer就是提取出每個Session的興趣,畢竟我們剛才說了在每個Session中用戶的興趣通常會聚焦於一點。每個Session中興趣聚焦於一點,不同的Session之間興趣聚焦於不同的點上,但如同DIEN所說,興趣的轉變總有個較為自然的轉變過程,
  3. 第三層的Session Interest Interacting Layer就是捕捉Session間興趣演化的過程。一如DIN,DIEN中所說,用戶的興趣總是廣泛的,我們要推薦給用戶的item總是只能對應用戶的一部分興趣,所以需要使用attention mechanism 提取出用戶興趣中與要推薦的item相關聯的部分,
  4. 第四層即是Session Interest Activating Layer。對用戶行為特征處理完后再與其它平平無奇的特征拼接完后就可以送入全鏈接網絡進行訓練了。那么總的網絡結構就是這樣,下面我們一層一層來細說。

 

參考文獻:https://www.cnblogs.com/gongyanzh/p/12133984.html 

DIN 原理解析

DIEN 原理解析

DSIN 原理解析

DINMP 解析

  


免責聲明!

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



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