召回階段的多興趣模型——MIND

前言

2019年阿里團隊發(fā)表在CIKM上的論文“Multi-Interest Network with Dynamic Routing for Recommendation at Tmall”,應用膠囊網(wǎng)絡的動態(tài)路由算法來構(gòu)建一個多興趣網(wǎng)絡MIND,是一個召回階段的模型。

(一)背景

本文是在召回階段的工作,來滿足用戶興趣的物品的有效檢索。建立「用戶興趣模型」「尋找用戶興趣表示」是非常重要的,但由于「用戶的興趣存在著多樣性」并不是一件容易的事。

現(xiàn)有的一些用戶興趣表示方法:
1.基于協(xié)同過濾的方法通過歷史交互物品或隱藏因子來表示用戶興趣:會遇到稀疏和計算問題。
2.基于深度學習的方法用低維Embedding向量表示用戶興趣:
作者認為這是多興趣表達的一個瓶頸,因為必須壓縮所有與用戶多興趣相關(guān)的信息到一個表示向量,所以關(guān)于用戶多興趣的所有信息是混合在一起的,導致召回階段物品檢測不準確。
3.DIN在Embedding的基礎(chǔ)上加入Attention機智:但采用attention機制對于每個目標物品,都需要重新計算用戶表示,因此無法使用在召回階段。

關(guān)于膠囊網(wǎng)絡:
囊間動態(tài)路由算法,Dynamic Routing膠囊算法的核心就在于此處參數(shù)b的更新方法:更新參數(shù)時,綜合考量了低層特征 與輸出膠囊特征,由于二者都是向量,當二者同向時,即二者相似度較高,當前的低層特征更能反映圖像特征,乘積為正,b權(quán)重增加,表示當前低層膠囊更被高層膠囊所“接納”;相反,當二者反向時,代表當前低層特征與輸出膠囊匹配度并不高,乘積為負,b權(quán)重減小,表示當前低層膠囊被更高層膠囊所“排斥”。通過這樣的權(quán)重更新方式建立起了低層特征與高層特征的關(guān)聯(lián),使模型更能“理解”圖像。
“膠囊”是一組聚合起來輸出整個向量的小神經(jīng)元。采用動態(tài)路由學習膠囊之間的連接權(quán)值,并利用期望最大化算法(EM)對其進行改進,克服了一些不足,獲得了更好的精度。

主要貢獻:
文章關(guān)注的是在召回階段用戶的多興趣的問題,提出了使用動態(tài)路由的多興趣網(wǎng)絡(MIND) 來學習用戶表示。
最主要的「創(chuàng)新點」是:采用膠囊網(wǎng)絡的動態(tài)路由算法來獲得用戶多興趣表示,將用戶的歷史行為聚集成多個集合內(nèi)容,每一組歷史行為進一步用于推斷對應特定興趣的用戶表示向量。這樣,對于一個特定的用戶,MIND輸出了多個表示向量,它們共同代表了用戶的不同興趣。用戶表示向量只計算一次,可用于在匹配階段從十億個尺度的物品中檢索相關(guān)物品。

(二)MIND模型

MIND網(wǎng)絡結(jié)構(gòu)圖
2.1MIND模型問題定義

任務目標
召回任務的目標是對于每一個用戶u \in U從十億規(guī)模的物品池檢索出包含與用戶興趣相關(guān)的上千個物品集。

模型輸入
對于模型,每個樣本的輸入可以表示為一個三元組(I_u,P_u,F_i),其中I_u代表與用戶u交互過的物品集,即用戶的歷史行為;P_u表示用戶的屬性,例如性別、年齡等;F_i表示為目標物品i的一些特征,例如物品id和種類id等。

核心任務
學習一個函數(shù)可以將User-Item實例(原生特征)映射為用戶興趣Embedding表達集合V_u=f_u(I_u,P_u)=(v_u^1,...,v_u^k)\in R^{d\times k}為用戶u的向量表示,d為embedding的維度,K表示向量數(shù)量即興趣的數(shù)量。
K=1,即其他模型(如Youtube DNN)的Embedding表示方式,物品i的Embedding函數(shù)為:\overrightarrow{e_i}=f_{item}(F_i)其中\overrightarrow{e_i}\in R^{d\times 1},f_{item}(·)表示一個Embedding&Pooling層。

最終結(jié)果
根據(jù)評分函數(shù)檢索得到top N個候選項:
f_{score}(V_u,\overrightarrow{e_i})=max\overrightarrow{e}_i^T\overrightarrow{v}_u^k
根據(jù)評分函數(shù)檢索:即根據(jù)目標物品與用戶表示向量的內(nèi)積的最大值作為相似度依據(jù),DIN的Attention部分也是以這種方式來衡量兩者的相似度。

2.2Embedding和Pooling層

Embedding層的輸入由三部分組成,用戶屬性P_u、用戶行為I_u和目標物品標簽F_i。每一部分都由多個id特征組成,則是一個高維的稀疏數(shù)據(jù),因此需要Embedding技術(shù)將其映射為低維密集向量。

  • 對于P_u的id特征(年齡、性別等)是將其Embedding向量進行拼接,組成用戶屬性Embedding \overrightarrow P_u;
  • 目標物品F_i通常包含其他分類特征id(品牌id、店鋪id等) ,這些特征有利于物品的冷啟動問題,需要將所有的分類特征的Embedding向量進行平均池化,得到一個目標物品向量\overrightarrow e_i;
  • 對于用戶行為I_u由物品的Embedding向量組成「用戶行為Embedding列表」,E_u=\overrightarrow e_j,j\in I_u
2.3多興趣提取層

相對于單一向量進行用戶興趣表示,作者采用多個表示向量來分別表示用戶不同的興趣。通過這個方式,在召回階段,用戶的多興趣可以分別考慮,對于興趣的每一個方面,能夠更精確的進行物品檢索。
為了學習多興趣表示,作者利用膠囊網(wǎng)絡表示學習的動態(tài)路由將用戶的歷史行為分組到多個簇中。來自一個簇的物品應該密切相關(guān),并共同代表用戶興趣的一個特定方面。
動態(tài)路由
“膠囊”是一種用一個向量表示的新型神經(jīng)元,而不是普通神經(jīng)網(wǎng)絡中使用的一個標量。基于向量的膠囊期望能夠表示一個實體的不同屬性,其中膠囊的方向表示一個屬性,膠囊的長度用于表示該屬性存在的概率。

動態(tài)路由是膠囊網(wǎng)絡中的迭代學習算法,用于學習低水平膠囊和高水平膠囊之間的路由對數(shù) (logit)b_{ij},來得到高水平膠囊的表示。
我們假設(shè)膠囊網(wǎng)絡有兩層,即低水平膠囊\overrightarrow c_i^l\in R^{N_h\times 1},i\in \lbrace 1,2,...m\rbrace和高水平膠囊\overrightarrow c_j^h\in R^{N_h\times 1},j\in \lbrace 1,2,...n\rbrace,m,n表示膠囊的個數(shù)N_l,N_h表示每個膠囊內(nèi)的神經(jīng)元個數(shù)(向量長度)。路由對數(shù) b_{ij}通過以下計算得到并進行更新:b_{ij}=(\overrightarrow c_j^h)^TS_{ij}\overrightarrow c_i^l其中S_{ij}\in R^{N_h\times N_t}表示待學習的雙線性映射矩陣(在膠囊網(wǎng)絡的原文中稱為轉(zhuǎn)換矩陣)。
通過計算路由對數(shù),將高階膠囊j的候選向量計算為所有低階膠囊的加權(quán)和:


其中w_ij定義為連接低階膠囊i和高階膠囊j的權(quán)重【稱為耦合系數(shù)】,而且其通過對路由對數(shù)執(zhí)行softmax來計算:

最后,應用一個非線性的“壓縮”函數(shù)來獲得一個高階膠囊的向量【膠囊網(wǎng)絡向量的模表示由膠囊所代表的實體存在的概率】

路由過程重復進行3次達到收斂。當路由結(jié)束,高階膠囊值\overrightarrow c_j^h固定,作為下一層的輸入。
B2I動態(tài)路由
作者認為原始路由無法直接應用于處理用戶行為數(shù)據(jù),于是提出了行為到興趣(B2I)動態(tài)路由自適應地將用戶行為聚合到用戶的興趣表示中去。三個創(chuàng)新點:

  • 共享雙向映射矩陣:一方面,用戶行為是可變長度的,從幾十個到幾百個不等,因此使用適應的雙線性映射矩陣是可推廣的。另一方面,希望興趣膠囊在同一個向量空間中,但不同的雙線性映射矩陣將興趣膠囊映射到不同的向量空間中。

    其中\overrightarrow{e_i}\in R^u0z1t8os是歷史物品i的embedding,\overrightarrow{u_j}\in R^u0z1t8os是興趣膠囊j的向量,雙向映射關(guān)系矩陣S是在每一對行為膠囊低階和興趣膠囊高階之間共享。
  • 隨機初始化路由對數(shù)。由于利用共享雙向映射矩陣S,初始化路由對數(shù)為0將導致相同的初始的興趣膠囊,為了避免不同興趣膠囊在所有時刻都保持相同的情景,我們對矩陣通過高斯分布進行隨機采樣來初始化路由對數(shù)。類似于K-Means聚類算法。
  • 動態(tài)興趣數(shù)量。不同用戶可能擁有的興趣膠囊數(shù)量不同,引入一種啟發(fā)式規(guī)則動態(tài)調(diào)整不同用戶的K值。
    K_u^,=max(1,min(K,log_2(|I_u|)))

采用多個向量來表達 User 不同的興趣,將 User 的歷史行為分組到多個 Interest Capsules 的過程。實現(xiàn)邏輯如下:


輸入:

  • User行為序列特征Embedding,E_u = \{ e_i, i \in I_u \} \
  • 迭代次數(shù)r
  • 興趣膠囊個數(shù)K

輸出:

  • 興趣膠囊Embedding,\{u_j,j=1,...K’_u \}\

定義:
(1) 動態(tài)興趣個數(shù)K’_u = max(1,min(K,log_2(|I_u|)))
(2)低階行為向量Embedding表達:c_i^l\in R^{N_l \times1 },i \in \{ 1,...,m\}\代表User的行為向量(同e_i
(3)高階興趣向量Embedding表達:c_j^h\in R^{N_h \times1 },j \in \{ 1,...,m \}\代表User的興趣向量(同v^j_u,u_j
(4)行為向量i與興趣向量j之間的路由logit:b_{ij}=(c_j^h)^TS_{ij}c_i^l=u_jS_{ij}e_i
(5)雙線性映射矩陣:S_{ij} \in R^{N_h \times N_t}=R^{d\times d}
步驟:
(1) 計算興趣Embedding個數(shù)K’_u
(2)初始化b_{ij}(使用正態(tài)分布初始化)
(3)遍歷迭代次數(shù) r
\quad(3.1)對所有的行為路由i,計算w_{ij}=softmax(b_{ij}) =\frac {\rm exp \mit b_{ij}} {\sum_{k=1}^{m} {b_{kj}}}
\quad(3.2)對所有的興趣路由j,計算z_j = \sum_{i\in I_u}^{} {w_{ij}S_{ij}e_i}u_j = squash(z_j)=\frac {||z_j^h ||^2} {1+||z_j^h ||^2}\frac {z_j^h } {||z_j^h ||}
\quad(3.3)迭代更新b_{ij}=b_{ij}+u_jS_{ij}e_i其中S_{ij}是一個共享矩陣S

2.4標簽意識的注意力層

通過多興趣提取層,多個興趣膠囊從用戶行為embedding建立。在訓練期間,我們設(shè)計一個標簽意識注意力層:讓標簽(目標)物品選擇使用過的興趣膠囊。特別的,對于每一個標簽物品,計算興趣膠囊和標簽物品embedding之間的相似性,并且計算興趣膠囊的權(quán)重和作為目標物品的用戶表示向量,通過相應的兼容性確定一個興趣膠囊的權(quán)重。


2.5訓練與服務

訓練
得到用戶向量\overrightarrow{v_u}和標簽物品embedding\overrightarrow{e_i}后,計算用戶u和標簽物品i交互的概率:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容