AI1002019-09-16 11:27:12
今天給大家介紹的論文是:《SDM: Sequential Deep Matching Model for Online Large-scale Recommender System》
論文下載地址:
https://arxiv.org/abs/1909.00385v1
像淘寶這樣的大規模的推薦系統,需要快速和準確的響應使用者當前的需求。淘寶推薦系統一般採用兩階段的方式。首先在召回階段召回可能的候選集,然後在排序階段進行精準排序推薦。
目前在淘寶的召回模型中,基本上採用的模型的基礎是基於物品的協同過濾模型。但是協同過濾模型只能考慮使用者的靜態興趣,而不能捕獲使用者的動態興趣。這些興趣主要通過使用者的行為來體現。
在淘寶的場景中,使用者的行為主要分為兩種,第一個是當前的瀏覽session,使用者在一個session中,需求往往是十分明確的,比如你想買球鞋,往往只會關注球鞋類的商品。另一個是之前的記錄,一個使用者雖然可能不是每次都來買球鞋,但是也可能提供一定的有用資訊,比如使用者只買阿迪的鞋子或者只買帆布鞋等等。因此分別建模這兩種行為序列來刻畫使用者的興趣,是十分有用的。
接下來,我們就來學習下如何分別刻畫使用者的兩種行為序列,以及如何將二者融合,並最後進行物品召回的。
使用者集合U和物品集合I就不說啦,然後我們主要看看對使用者行為序列的劃分,按照session進行劃分的規則如下:
1)日誌中標記了同樣的session ID
2)雖然session ID不相同,但是相鄰的行為間隔小於10min
3)最長的session長度為50,超過50的劃分到前一個session(我猜測是從後往前劃分session 的吧)
基於上述規則,使用者最近一個session的行為被認為是短期行為,表示如下:
m是序列的長度,而與Su相隔一週以內的行為認為是使用者的長期行為Lu。
根據如上定義,整個的匹配框架如下:
基於使用者的短期行為,通過模型計算得到向量表示su,基於使用者的長期行為,得到向量表示pu,二者在進行融合,最終得到使用者的行為表示ou。通過ou和每個物品對應的向量vi計算匹配分數,並根據分數高低進行召回:
在淘寶的推薦中,使用者不僅僅關注物品本身,一些屬性如品牌、店鋪、價格等都是使用者關注的屬性。因此,我們使用不同的屬性來刻畫物品,如物品ID、葉子結點分類、一級分類、品牌、店鋪等等,並將不同屬性對應的embedding進行拼接得到物品的embedding表示:
同樣的,使用者也有對應的屬性,如年齡區間、性別、蜂窩(學生/白領等等)。使用者的embedding如下:
短期行為建模的整體過程如下:
對於短期行為,即使用者最近的一個session裡的行為。在將物品轉換為embedding後,首先通過LSTM來進行建模:
這樣,每一個物品又一個對應的hidden state的輸出h。接下來,是最近經常被使用的multi-head attention,主要有兩點原因:
1)使用者的行為中存在一些誤點選行為,通過self-attention來降低這種影響;
2)使用者可能對不同物品的關注點不同。
個人感覺前面的LSTM有點多餘,可以在multi-head attention中加入序列資訊的吧,這樣效能可能好一點。而multi-head attention的過程咱們就不多說了,可以參考我之前的文章通俗易懂!使用Excel和TF實現Transformer!。經過multi-head attention,對應的序列輸出為:
隨後又是一層attention,這一次主要的關注點是使用者可能對不同的物品偏好程度不同:
這樣,使用者的短期行為我們就通過一個向量su表示了。
對於長期行為,咱們不像剛才那麼搞,主要是效能撐不住啊,還像短期行為那麼搞的話,有點像之前介紹的DSIN模型,引數有點多。我們主要關注的點在於通過長期行為來從不同角度來刻畫使用者的興趣,比如使用者經常逛某種型別的店鋪、經常復購同一型別的商品等等。因此把長期行為中的所有物品對應的屬性集合劃分為不同的set,如物品IDset、物品店鋪set、物品品類set等等。下圖展示了長期行為的建模過程:
對於不同的set,都經過一個attention層進行建模,如使用者可能對不同的店鋪偏好程度不同,對不同的品類偏好程度不同:
這樣每一個set可以得到一個對應的向量,進行拼接後再經過一層全連線層得到使用者的長期行為表示:
接下來的過程就很巧妙了,並非將長短期興趣向量直接拼接,而是借鑑了LSTM或GRU中的門的概念,對短期興趣向量和長期興趣向量進行一個加權,過程如下:
具體的計算過程如下:
這樣我們就得到了使用者的興趣表示ou。
得到了使用者的興趣表示ou之後,根據日誌我們可以得到使用者下一個互動的物品,作為正例,接下來,取樣K-1個負例物品。將K個物品對應的embedding,分別於使用者興趣表示計算內積,作為每個物品的得分。並最終通過softmax和交叉熵來計算損失,並進行模型訓練:
最後再來看一下整個模型的結構:
本文的實驗的程式碼和資料地址在:https://github. com/alicogintel/SDM.
資料集選擇的是淘寶和京東的兩個資料集。離線實驗的評價指標包括HITRatio、精確率、召回率、F1值:
而線上模型的評價指標主要有三個CTR、GMV和Discovery:
離線效果如下:
除了基準的模型外,SDM模型有許多變體,這裡也簡單介紹一下:
線上效果對比如下,pCTR、pGMV和discovery分別提升了7.04%, 4.50% and 24.37%:
朋友會在“發現-看一看”看到你“在看”的內容