用戶歷史行為中包含了豐富的信息,是刻畫用戶心智的重點特征。在推薦廣告領域,如何挖掘用戶行為序列中的有效信息是CTR預估等任務的重點。筆者在上一篇文章中介紹了DIN(Deep Interest Network),其抓住了用戶行為序列與目標廣告/商品之間的關系。在這篇文章中將介紹阿里團隊的另外一項重要的工作:BST(Behavior Sequence Transformer) ,將NLP中的transformer模型運用到了CTR預估中,更好地挖掘用戶行為序列內部的時序關系。
文章地址:Behavior Sequence Transformer for E-commerce Recommendation in Alibaba
Transformer論文地址:Attention Is All You Need,想對transformer有詳細了解的同學們可以參考
transformer的tensorflow代碼可以參考tf官方的github:地址
我自己試了一下,簡潔直觀,容易實現(xiàn)。
1. BST網(wǎng)絡簡介
BST的網(wǎng)絡結構如下圖所示:

1.1 核心思想
WDL 和 DIN沒有考慮到用戶序列的時序性,即用戶序列中不同商品間的關系。本論文使用了transformer的結構,來捕捉這種關系。
1.2 輸入特征
網(wǎng)絡的輸入特征有兩部分:用戶行為序列(User Behavior Sequence)和其他特征(user, item, context, cross等)。其中用戶序列中的每一個item有兩部分組成:sequence item feature 和positional feature,如圖1所示。這里的用戶序列也包含了target item及其position,見圖1的右下角。
- sequence item feature:使用item_id和category_id
- positional feature: 用戶序列中商品的位置信息,目的是為用戶序列引入時序信息。商品
的位置特征計算如下:
即商品的點擊時間與當前target item的推薦時間之間的gap。這里加入的position feature相當于<<attention is all you need>>里的postitional encoding,只是本論文中沒有使用sin/cos的編碼方法,而是更直接地將postional feature與item feature進行了concat.
1.3 transformer layer
transformer layer主要實現(xiàn)了<<attention is all you need>>里的multi-head self attention + Point-wised FFN 結構(即encoder結構)
-
multi-head self attention:
其中即Query, Key 和Value,是同一個item與不同的權值矩陣
相乘得到,權值矩陣
為可學習參數(shù);
為embedding size。此處的attention抽象為對Value中的每個item進行加權,而加權所用到的weight就是式(3)所計算得到的,即用Query和Key來決定注意力應該放到value中的哪個item上。Query之所以叫query(查詢),是因為每次都用一個embedding vector去查詢其與其他的embedding vector的match程度。一共要做n輪這種操作,n為1個batch中的序列個數(shù)。
multi-head:將Q, K 和V在embedding size維度上投影h次,分別進行學習,最后concat起來作為attention的最終輸出。使用multi head是為了使模型能夠自適應地學到不同子空間下的序列信息。這里與CNN的feature map思想有些類似,使用相同形狀的多個feature map,以期待模型能夠自動學習到不同子空間下的特征。
注:這里論文的公式寫法有些混亂,我的理解就是把
分成了h等份(源碼中使用的是
tf.split()函數(shù)),分別做公式(2)中的變換,再concat起來。詳細分析見后面的圖解。 Point-Wised Feed-Forward Networks(FFN)
FFN中應用了normalization和residual blocks。self attention和FFN中都應用了dropout和LeakyReLU來避免過擬合。疊加多層self attention和FFN模塊:
疊加多層模塊是為了模型能夠更好地學習序列間的復雜關系。但論文的實驗中證明時的效果最好。
2. self attention過程詳解


在圖2中, 首先經(jīng)過embedding得到向量
, 其中
為序列長度,
為embedding size. 然后
與3個相同形狀的權重矩陣
點乘,將自身映射為3個不同的矩陣
。接下來這三個矩陣會完成self attention的基本操作,即式(2)。
與
得到的attention score
作為權重,與
點乘,作為self attention的輸出。
圖3在圖2的基礎上加入了multi head 操作,即將在embedding size
的維度拆分為
個矩陣(圖中h=3),分別進行self attention 操作,得到的結果再concat起來作為最終的輸出。
參考文獻:
[1] multi-head attention
[2] 推薦系統(tǒng)遇上深度學習(四十八)-BST:將Transformer用于淘寶電商推薦
[3] 論文筆記:Attention is all you need