
本文介紹的論文是:《Multi-Interest Network with Dynamic Routing for Recommendation at Tmall》
關(guān)于召回階段的算法,以youtube DNN為代表的向量化召回方式是目前的主流算法之一,但是目前的大多數(shù)算法僅僅將用戶的興趣表示成單個的Embedding,這是不足以表征用戶多種多樣的興趣的,同時容易造成頭部效應。因此本文提出了MIND,同時生成多個表征用戶興趣的Embedding,來提升召回階段的效果,一起來學習一下。
1、背景
在天貓的推薦過程中,推薦系統(tǒng)也被拆分為召回和排序階段。

本文重點關(guān)注召回階段的算法。召回階段的目標是得到數(shù)千個跟用戶興趣緊密相關(guān)的商品候選集。在天貓場景下,用戶每天都要與成百上千的商品發(fā)生交互,用戶的興趣表現(xiàn)得多種多樣。如下圖所示,不同的用戶之間興趣不相同,同時同一個用戶也會表現(xiàn)出多樣的興趣:

因此,對于用戶興趣的建模顯得至關(guān)重要。目前召回階段主流的算法是協(xié)同過濾和向量化召回。協(xié)同過濾面臨稀疏性的問題。而向量化召回方法如youtube dnn,將用戶的興趣表示成一個固定長度的向量。
但在天貓場景下,對于用戶多樣化的興趣,一個Embedding往往是不夠的,除非這個Embedding的長度足夠大,具有足夠的表征能力。除此之外,只有一個Embedding會造成一定的頭部效應,召回的結(jié)果往往是比較熱門領(lǐng)域的商品(頭部問題),對于較為小眾領(lǐng)域的商品,召回能力不足。
解決上述問題的方法也很簡單,搞多個用戶Embedding就好了嘛,而本文要介紹的MIND,正是通過生成多個表征用戶興趣的Embedding,來提升召回階段的效果,一起來學習一下。(昨天聽了俊林老師的講座,這個方向也是他比較看好的)
2、MIND
2.1 問題概述
召回階段的目標是對于每個用戶u∈U的請求,從億級的商品池I中,選擇成百上千的符合用戶興趣的商品候選集。每條樣本可以表示成三元組(Iu,Pu,Fi),其中Iu是用戶u歷史交互過的商品集合,Pu是用戶畫像信息,比如年齡和性別,F(xiàn)i是目標商品的特征,如商品ID、商品品類ID。
那么MIND的核心任務是將用戶相關(guān)的特征轉(zhuǎn)換成一系列的用戶興趣向量:


而目標商品向量Fi也被轉(zhuǎn)換為一個Embedding:

當?shù)玫接脩艉蜕唐返南蛄勘硎局?,通過如下的score公式計算得到topN的商品候選集:

整個MIND的框架如下:

接下來,詳細介紹MIND中的各部分。
2.2 Embedding Layer
如上圖,MIND的輸入中包含三部分,用戶的畫像信息Pu、用戶歷史行為Iu和目標商品Fi。每個部分都包含部分的類別特征,類別特征會轉(zhuǎn)換為對應的embedding。對用戶畫像信息部分來說,不同的embedding最終拼接在一起。而對于用戶歷史行為Iu中的商品和目標商品Fi來說,商品ID、品牌ID、店鋪ID等轉(zhuǎn)換為embedding后會經(jīng)過avg-pooling layer來得到商品的embedding表示。
2.3 Multi-Interest Extractor Layer
接下來是最為關(guān)鍵的 Multi-Interest Extractor Layer,這里借鑒的是Hiton提出的膠囊網(wǎng)絡(luò)。有關(guān)膠囊網(wǎng)絡(luò),下面的圖可以幫助你快速理解(圖片來源于知乎:https://zhuanlan.zhihu.com/p/68897114):

可以看到,膠囊網(wǎng)絡(luò)和傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)較為類似。傳統(tǒng)神經(jīng)網(wǎng)絡(luò)輸入一堆標量,首先對這堆標量進行加權(quán)求和,然后通過非線性的激活函數(shù)得到一個標量輸出。而對膠囊網(wǎng)絡(luò)來說,這里輸入的是一堆向量,首先對這組向量進行仿射變換,然后進行加權(quán)求和,隨后通過非線性的"squash"方程進行變換,得到另一組向量的輸出。
而MIND中的Multi-Interest Extractor Layer,與膠囊網(wǎng)絡(luò)主要有兩個地方不同:
1)在膠囊網(wǎng)絡(luò)中,每一個輸入向量和輸出向量之間都有一個單獨的仿射矩陣,但是MIND中,仿射矩陣只有一個,所有向量之間共享同一個仿射矩陣。主要原因是用戶的行為數(shù)量長度不同,使用共享的仿射矩陣不僅可以減少參數(shù),同時還能對應另一處的改變,即不同用戶輸出向量的個數(shù)K是基于他歷史行為長度自適應計算的:

上面基于用戶歷史行為長度自適應計算輸出向量個數(shù)K'的策略,對于那些交互行為較少的用戶來說,可以減少這批用戶的存儲資源。
2)為了適應第一個改變,膠囊網(wǎng)絡(luò)中權(quán)重的初始化由全部設(shè)置為0變?yōu)榛谡植嫉某跏蓟?/p>
下圖是整個Multi-Interest Extractor Layer的過程:

通過Multi-Interest Extractor Layer,得到了多個用戶向量表示。接下來,每個向量與用戶畫像embedding進行拼接,經(jīng)過兩層全連接層(激活函數(shù)為Relu)得到多個用戶興趣向量表示。每個興趣向量表征用戶某一方面的興趣。
2.4 Label-aware Attention Layer
在上一步得到用戶興趣向量之后,由于不同用戶的興趣向量個數(shù)不同,通過Label-aware Attention Layer對這些向量進行加權(quán)(只應用于訓練階段),類似DIN中的做法:

而計算公式為:

上圖中的Q相當于目標商品的embedding,K和V都是用戶的興趣向量。值得注意的一點是,在softmax的時候,對得到的attention score,通過指數(shù)函數(shù)進行了一定的縮放。當p接近0時(這里應該是假設(shè)了向量的內(nèi)積大于1吧),對softmax是一種平滑作用,使得各attention score大小相近,當p>1且不斷增加時,對softmax起到的是一種sharpen作用,attention score最大那個興趣向量,在sofamax之后對應的權(quán)重越來越大,此時更類似于一種hard attention,即直接選擇attention score最大的那個向量。實驗表明hard attention收斂速度更快。
2.5 Training & Serving
在訓練階段,使用經(jīng)過Label-aware Attention Layer得到的用戶向量和目標商品embedding,計算用戶u和商品i交互的概率(這里和youtube DNN相似,后文中說也進行了采樣):

而目標函數(shù)(而非損失函數(shù))為:

而在線上應用階段,只需要計算用戶的多個興趣向量,然后每個興趣向量通過最近鄰方法(如局部敏感哈希LSH)來得到最相似的候選商品集合。同時,當用戶產(chǎn)生了一個新的交互行為,MIND也是可以實時響應得到用戶新的興趣向量的。
3、實驗結(jié)果
接下來看下實驗結(jié)果。
對于離線實驗,文中使用MIND和BASE模型(如youtube DNN)等進行了對比,結(jié)果如下:

而在線上實驗時,為了進行對比,不同的召回模型都使用同樣的排序模型作為下游,并比較了一周內(nèi)不同實驗組的CTR:

可以看到,無論是線上還是線下實驗,MIND都取得了不錯的效果。
4、總結(jié)
目前召回階段,有幾個值得不錯的方向,比如MIND中的用戶興趣多Embedding拆分和基于Graph的召回,大伙不妨可以嘗試一下。