天天看點

推薦搜尋煉丹筆記:向量召回 MIND多興趣雙塔模型

推薦搜尋煉丹筆記:向量召回 MIND多興趣雙塔模型

作者:十方,公衆号:煉丹筆記

熟悉雙塔的人都知道,在使用者側,模型最後往往都生成一個向量去檢索,這個向量不足以表達使用者的多興趣,《Multi-Interest Network with Dynamic Routing for Recommendation at Tmall》這篇就提出了一個label-aware attention把使用者表達為多個興趣。

推薦搜尋煉丹筆記:向量召回 MIND多興趣雙塔模型

左圖展示了天貓給上億使用者個性化的推薦,右圖展示了商品豐富的品類,我們肯定不希望最近買了個iphone12,打開天貓,一整面的手機配件商品推薦,多興趣的目标,也是增加推薦的多樣性。天貓上億的使用者,每個人都要每天浏覽上百的商品,這些商品不同的類目,就反應了使用者不同的興趣。廢話不多說,下面直入論文主題。

問題定義

多興趣的目标,就是為每個使用者從上億規模的商品集合I中找到候選集,該候選集一般有幾千個商品,都和該使用者目前的興趣相關。曆史資料就尤為重要了,目前興趣和曆史行為強相關。每個樣本都能表達為一個三元組(Iu, Pu, Fi),Iu表示曆史上,和使用者互動過的商品。Pu就是使用者的基礎特征(年齡性别啥的),Fi就是商品的特征了(itemid, 類目id)。

這篇論文的模型,目标就是把每個使用者曆史互動特征和基本特征映射成多個向量:

推薦搜尋煉丹筆記:向量召回 MIND多興趣雙塔模型
推薦搜尋煉丹筆記:向量召回 MIND多興趣雙塔模型

然後把商品映射成向量:

推薦搜尋煉丹筆記:向量召回 MIND多興趣雙塔模型

最後ANN召回Top N:

推薦搜尋煉丹筆記:向量召回 MIND多興趣雙塔模型

MIND模型

推薦搜尋煉丹筆記:向量召回 MIND多興趣雙塔模型
上圖就是整個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在一起,不贅述。重要的當屬多興趣提取層了,如下圖。

推薦搜尋煉丹筆記:向量召回 MIND多興趣雙塔模型

大家看到個熟悉的字眼,興趣膠囊。沒錯,又是膠囊網絡。先回歸一下動态路由算法。假若有兩層膠囊。

  • 低level的m個膠囊:
推薦搜尋煉丹筆記:向量召回 MIND多興趣雙塔模型
  • 高level的n個膠囊:
推薦搜尋煉丹筆記:向量召回 MIND多興趣雙塔模型
推薦搜尋煉丹筆記:向量召回 MIND多興趣雙塔模型

每個膠囊就是個向量,高level的膠囊是由低level的膠囊聚合而成,其實就是簡單的線性權重,權重是模型自動學到的,計算權重的方式如下:

推薦搜尋煉丹筆記:向量召回 MIND多興趣雙塔模型
推薦搜尋煉丹筆記:向量召回 MIND多興趣雙塔模型

有了權重就可以線性權重了:

推薦搜尋煉丹筆記:向量召回 MIND多興趣雙塔模型

權重完後,就應該有激活函數了,膠囊網絡中用的激活函數都是squash,因為膠囊向量的方向表示特征,長度表示機率。最後高level的膠囊計算如下:

推薦搜尋煉丹筆記:向量召回 MIND多興趣雙塔模型

在MIND中,高level向量就是興趣向量,低level向量就是互動的item過pooling後的向量。這裡要注意的是,在傳統膠囊網絡bij第一次計算是要初始化為0的,但是在MIND中卻不行,因為該論文對膠囊網絡做了3大改造。

  1. 共享Sij:這樣做其實很容易了解,畢竟低level的膠囊,都是item向量,量綱是統一的。
  2. bij第一次按高斯分布随機初始化:這樣做是因為共享Sij後,如果還把bij初始化為0,那麼得到的興趣向量都是相同的。
  3. 動态調節興趣數量:Ku′ =max(1,min(K,log2(|Iu|))).

下面是動态路由算法的詳細過程:

推薦搜尋煉丹筆記:向量召回 MIND多興趣雙塔模型

是以該層就是通過動态路由算法将N個item生成的N個embedding映射成k個興趣embedding。

最後是Label-aware Attention層,該層做的事很簡單,把target item的embedding作為Q,興趣向量作為K和V,做attention操作,變成一個向量,如下:

推薦搜尋煉丹筆記:向量召回 MIND多興趣雙塔模型

p是我們可以調節的一個參數,p是0,最終向量就是興趣向量的平均。如果p>1,那最終向量偏向于和target向量最接近的向量。p無窮大,就相當于選擇和target向量最相關的興趣向量作為最終向量。論文實驗發現,調大p,收斂較快。

訓練&線上

有了最終興趣向量,和target向量,損失函數如下:

推薦搜尋煉丹筆記:向量召回 MIND多興趣雙塔模型

就是softmax計算機率,然後用logloss做梯度下降。線上服務的時候,每個興趣向量,都用來做召回,取最相關的top N個。需要注意的一點是,在使用者與item不斷互動的過程中,興趣向量是在不斷改變的。實驗就不詳細說了,想了解調參和算法比較的去看下原文。

結語

多興趣看似不是雙塔,其實本質上還是雙塔,隻是使用者側向量映射成了多個。召回場景下雙塔的使用是最頻繁的,十方也在嘗試些其他召回方式,如TDM,DR等,大家在工作學習中有什麼實踐經驗,歡迎留言或者進群交流!

參考論文

1、Multi-Interest Network with Dynamic Routing for Recommendation at Tmall

推薦搜尋煉丹筆記:向量召回 MIND多興趣雙塔模型

更多幹貨,請關注煉丹筆記 國小生才做選擇題,"塔"們,我全要!多興趣召回!