向量召回 MIND多兴趣双塔模型
熟悉雙塔的人都知道,在用戶側,模型最后往往都生成一個向量去檢索,這個向量不足以表達用戶的多興趣,《Multi-Interest Network with Dynamic Routing for Recommendation at Tmall》這篇就提出了一個label-aware attention把用戶表達為多個興趣。
左圖展示了天貓給上億用戶個性化的推薦,右圖展示了商品豐富的品類,我們肯定不希望最近買了個iphone12,打開天貓,一整面的手機配件商品推薦,多興趣的目標,也是增加推薦的多樣性。天貓上億的用戶,每個人都要每天瀏覽上百的商品,這些商品不同的類目,就反應了用戶不同的興趣。廢話不多說,下面直入論文主題。
問題定義
多興趣的目標,就是為每個用戶從上億規模的商品集合I中找到候選集,該候選集一般有幾千個商品,都和該用戶當前的興趣相關。歷史數據就尤為重要了,當前興趣和歷史行為強相關。每個樣本都能表達為一個三元組(Iu, Pu, Fi),Iu表示歷史上,和用戶交互過的商品。Pu就是用戶的基礎特征(年齡性別啥的),Fi就是商品的特征了(itemid, 類目id)。
這篇論文的模型,目標就是把每個用戶歷史交互特征和基本特征映射成多個向量:
然后把商品映射成向量:
最后ANN召回Top N:
MIND模型
上圖就是整個MIND模型,看似很復雜,其實沒那么復雜,我們拆解下。
從這張圖我們看到,有N個與用戶交互過的item,每個item有3個特征,分別是ItemID、Category ID、Brand ID。embeding后進入Pooling Layer。這里增加Category ID和Brand ID有利于冷啟動,當新的item出現,這些ID通過pooling層,還是有不錯的泛化性。
other features就是用戶特征了,直接embeding后concat在一起,不贅述。重要的當屬多興趣提取層了,如下圖。
大家看到個熟悉的字眼,興趣膠囊。沒錯,又是膠囊網絡。先回歸一下動態路由算法。假若有兩層膠囊。
- 低level的m個膠囊:
- 高level的n個膠囊:
每個膠囊就是個向量,高level的膠囊是由低level的膠囊聚合而成,其實就是簡單的線性加權,權重是模型自動學到的,計算權重的方式如下:
有了權重就可以線性加權了:
加權完后,就應該有激活函數了,膠囊網絡中用的激活函數都是squash,因為膠囊向量的方向表示特征,長度表示概率。最后高level的膠囊計算如下:
在MIND中,高level向量就是興趣向量,低level向量就是交互的item過pooling后的向量。這里要注意的是,在傳統膠囊網絡bij第一次計算是要初始化為0的,但是在MIND中卻不行,因為該論文對膠囊網絡做了3大改造。
下面是動態路由算法的詳細過程:
所以該層就是通過動態路由算法將N個item生成的N個embedding映射成k個興趣embedding。
最后是Label-aware Attention層,該層做的事很簡單,把target item的embedding作為Q,興趣向量作為K和V,做attention操作,變成一個向量,如下:
p是我們可以調節的一個參數,p是0,最終向量就是興趣向量的平均。如果p>1,那最終向量偏向于和target向量最接近的向量。p無窮大,就相當于選擇和target向量最相關的興趣向量作為最終向量。論文實驗發現,調大p,收斂較快。
訓練&在線
有了最終興趣向量,和target向量,損失函數如下:
就是softmax計算概率,然后用logloss做梯度下降。在線服務的時候,每個興趣向量,都用來做召回,取最相關的top N個。需要注意的一點是,在用戶與item不斷交互的過程中,興趣向量是在不斷改變的。實驗就不詳細說了,想了解調參和算法比較的去看下原文。
結語
多興趣看似不是雙塔,其實本質上還是雙塔,只是用戶側向量映射成了多個。召回場景下雙塔的使用是最頻繁的,十方也在嘗試些其他召回方式,如TDM,DR等,大家在工作學習中有什么實踐經驗,歡迎留言或者進群交流!
參考論文
1、Multi-Interest Network with Dynamic Routing for Recommendation at Tmall
更多干貨,請關注煉丹筆記小學生才做選擇題,"塔"們,我全要!多興趣召回!總結
以上是生活随笔為你收集整理的向量召回 MIND多兴趣双塔模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法模型该如何解释?
- 下一篇: 盘一盘推荐系统里值得一读的那些论文