導讀:同一個用戶可能有多樣的興趣,如何在深度模型中刻畫這些多樣的興趣呢?阿里今年的文章《Multi-Interest Network with Dynamic Routing for Recommendation at Tmall》給出一種方案,本文是閱讀此篇文章的筆記。

推薦系統做的事情無非就是在一定的場景(context)下給特定的用戶(user)推薦特定的一些物料(item)。

當然,具體的用戶、場景、物料是沒法直接使用的,需要先進行抽象(即構造特徵,比如用年齡、性別等社會人口屬性和用戶點擊等行為特徵來表達用戶),而如何構造這種抽象表示(representation),使其能在具體業務問題下準確、簡潔地表達原先的對象,對推薦的效果起著決定性的作用。

推薦中經典深度模型範式與其侷限

深度學習在推薦系統的應用中,最經典的範式是Embedding&MLP(代表為Youtube DNN)。這種範式中,user ID、用戶歷史交互item ID等高維category特徵都被映射成為低維的embedding,MLP只能接受固定長度的輸入,而用戶歷史上交互過的item數目是不固定,Embedding&MLP範式的應對方法是把用戶交互過的item embedding求均值(進行average pooling操作),然後把這個固定長度的均值作為user representation的一部分。

圖一 Embedding&MLP範式

圖示為電商場景下Embedding&MLP的範式圖示,用戶交互過的N個商品,每個商品都可以求得一個embedding,對N個embedding進行pooling後,再與其他固定長度的特徵concat,作為MLP的輸入

前面提到用戶的特徵包括社會人口特徵和行為特徵,社會人口特徵只能對用戶大致做一個分羣,用戶本身的歷史行為特徵纔是個性化地刻畫用戶的最重要信號,一定程度上,我們可以認為用戶的歷史行為,就是用戶個性化的興趣。多數用戶的興趣是分散的,比如在電商場景中,很多用戶都有百個以上的歷史點擊商品,這些商品的品牌、類目都有可能十分不同,一個用戶可能既對口紅有興趣、也對貓砂有興趣,而簡單地對用戶歷史點擊過商品的embedding求均值來作為用戶興趣的embedding,是不是真的能準確刻畫用戶多樣性的興趣呢?很可能不準確,當對很多個興趣(歷史交互item)的embedding求均值時,有些長尾興趣可能被湮沒、新求的均值興趣可能會有不可預知的偏移、原先embedding的維度可能不足以表達分散、多樣的興趣。

阿里的兩種改進思路

為瞭解決表達用戶多樣興趣的問題,阿里分別提出了DIN(Deep Interest Network)和MIND(Multi-Interest Network with Dynamic Routing)兩種深度網路,分別在推薦的排序階段和召回階段建模表達用戶的多樣興趣。

  • DIN引入了attention機制,同一個用戶與不同的item進行預測時,DIN會產生不同的用戶embedding,具體來說,當預測某個item時,計算出該item與用戶歷史交互item的「匹配度」,用這個匹配度作為權重對用戶歷史交互item做加權平均得到用戶的興趣embedding,之後用這個興趣embedding與用戶的其他特徵組成所謂label-aware的用戶embedding。

  • 而MIND使用另外一種思路,既然使用一個向量表達用戶多樣興趣有困難,那麼為什麼不使用一組向量呢?具體來說,如果我們可以對用戶歷史行為的embedding進行聚類,聚類後的每個簇代表用戶的一組興趣,不就解決問題了麼。

MIND的具體實現

MIND借鑒了Hiton的膠囊網路(Capsule Network),提出了Multi-Interest Extractor Layer來對用戶歷史行為embedding進行軟聚類,,在介紹它之前我們先用一張圖來對比一下Capsule Network與傳統神經網路的區別。

圖二 Capsule與傳統神經元的對比

Capsule Network中的Capsule概念對應於傳統神經網路中的neuron,操作也類似。傳統的神經網路輸入一組標量,對這組標量求加權和,之後輸入非線性激活函數得到一個標量的輸出。而Capsule輸入是一組向量,對這組向量進行仿射變換之後求加權和,把加權和輸入非線性激活函數得到一個向量的輸出。Hinton提出Capsule Network是為瞭解決傳統的CNN中只能編碼某個特徵是否存在而無法編碼特徵的orientation。(在MIND的中我們只要記住Capsule可以接受一組向量輸入,輸出一個向量;如果我們K個capsule,就會有K個輸出向量)

原始的Capsule Network,如果有m個輸入向量,n個輸出向量,輸入向量和輸出向量兩兩之間各有自己的仿射變換矩陣,那麼總共會有m*n個變換矩陣(上圖中的Wij),而且仿射變換之後向量的權重(上圖中的c_ij)最開始是初始化為0的。MIND做了兩處改動,一個是仿射矩陣變為共享,從m*n個變為1個,這麼做的原因之一是用戶交互過的item數目是不同的(即輸入向量的數目會變化),使用共享的變換矩陣可以做到以不變應萬變,另外這樣做也減少了模型的參數;第二個改動是第一個改動的衍生,共享變換矩陣後,如果權重仍然初始化為0,會導致輸出向量一模一樣,因此,在這裡使用權重隨機初始化的策略。圖三是原文給出的Multi-Interest Extractor Layer層演算法流程,注意在這裡權重用w_ij表示,變換矩陣用S表示,另外,輸出向量的個數也根據輸入向量的個數做了動態調整(後面實驗有針對這個策略進行驗證,雖然對CTR沒有提升,但可以節省資源)。

圖三 Multi-Interest Extractor Layer演算法流程

動態決定輸出向量(興趣embedding)個數的公式:

決定輸出向量個數的公式

整個MIND network的結構如下圖所示:

圖四 MIND模型結構

MIND中的用戶特徵由歷史交item和基礎畫像屬性組成,用戶歷史交互item由item ID,item所屬類目ID和Item所屬品牌ID三部分組成,這三部分進行低維embedding之後做average pooling,合成item本身的embedding表示。用戶交互過的items生成的一組向量(即item embedding)作為Multi-Interest Extractor Layer的輸入,經過dynamic routing之後,產生另外一組向量(即興趣embedding),作為用戶多樣化興趣的表示。用戶基礎畫像屬性的embedding與用戶興趣embedding分別做concat,接著經過兩層ReLU隱層,得到用戶的一組embedding。

在訓練階段,要進行預測的label只有一個embedding,而用戶有一組,沒法直接求內積計算匹配度,這裡MIND提出了Label-aware Attention,思路跟DIN是一致的,就是根據label的embedding對用戶的一組embedding分別求出權重(所謂label-aware),然後對用戶的一組embedding求加權和,得到最終的一個embedding,只是具體方案上有差別。圖三右上角是Label-aware Attention的圖示,K,V都是用戶embedding(矩陣),Q是label embedding(向量),K、Q相乘可以得到不同的用戶embedding對label的響應程度,Power對求得的響應做指數運算(可以控制指數的大小),從而控制attention的程度,指數越大,響應高的用戶embedding最終權重佔比越大。SoftMax對結果進行歸一化,最後一步的MatMul求得加權和。

在召回階段,直接使用用戶的一組embedding進行召回,假設要召回TOP N,定義召回分如下:

召回分定義

其中Vu代表用戶的一組向量,有K個,e代表候選item的embedding,最後計算計算每個item的召回分,取召回分TOP N的item。

實驗結果

MIND在Amazon Books和TmallData兩個電商數據集上做了實驗,並與Youtube DNN等其他方法做了對比,表現都是最好的(要不也不會發論文嘛)。另外還對Label-aware attetion中power操作指數的大小做了實驗,結果證明「注意力越集中,效果越好」。

線上實驗的話,表現也是優於YouTube DNN和item-based CF的(注意,item-based CF效果要好於YouTubeDNN,作者在這裡給YouTubeDNN找了下場子,說是可能因為item-based CF經過長時間實踐優化的原因)。另外,線上實驗還表明,用戶興趣分得越細(用戶向量數K越大),效果越好。根據用戶歷史行為數動態調整興趣數(K的值)雖然線上指標沒有提升,但是模型資源消耗降低了。

參考資料:

MIND

DIN

膠囊網路


推薦閱讀:
相關文章