搜索推荐炼丹笔记:融合GNN、图谱、多模态的推荐
說到推薦系統(tǒng),就不得不面對數據稀疏和冷啟動問題,怎么解決呢?美團這篇論文《Multi-Modal Knowledge Graphs for Recommender Systems》說,我們不僅要加數據,而且是各種類型的都加。很多論文提出了用知識圖譜作為推薦系統(tǒng)的輔助信息,而忽視了文本和圖像,美團這篇論文,是第一個把知識圖譜,多模態(tài),attention都用來構建推薦系統(tǒng)的。模型模型也很霸氣,叫MKGAT。GNN,知識圖譜,多模態(tài),推薦體系統(tǒng)在這篇論文里應有盡有。
知識圖譜與推薦系統(tǒng)
知識圖譜也算是火了很久,也已經廣泛應用于學術界,工業(yè)界。知識圖譜能給推薦系統(tǒng)提供豐富的特征和信息,有效的緩解了數據稀疏和冷啟動。然而圖片和文本會對推薦效果產生重大影響。舉個 ,在看一部電影前,用戶傾向于看海報和影評。在選擇吃什么前,都會在大眾點評上瀏覽各種美食圖片。所以美團覺得,把這些多模態(tài)數據融入知識圖譜,會對推薦系統(tǒng)產生很大的正面影響。一個簡單的多模態(tài)知識圖譜如下圖:
這張圖,其實是很難作為推薦系統(tǒng)的輸入的,所以往往是通過GNN等方式,學習圖上每個實體的embedding,然后把和推薦上下文相關實體的embeding發(fā)送給下游輔助模型學習。學習多模態(tài)知識圖譜的表達,有兩種方法:
- 基于特征的方法:把多模態(tài)信息作為實體額外的信息,然而這需要數據源中每個實體都有多模態(tài)相關信息。
- 基于實體的方法:把各種多模態(tài)信息,都當作一個單獨的實體,和其他實體建立聯(lián)系。如上圖"Toy Story" 和"電影海報"的關系是有一張圖片。基于實體的方法就是分別用遷移模型和CNN等方法學習3元祖(h,r,t)的embedding,h為head,r為relation,t為tail。上圖就有很多三元祖(Toy Story, has image, 海報),(Toy Story, director, John Lasseter)等等。
論文提到,基于實體的方法關注點是實體直接的聯(lián)系,而非多模態(tài)數據,因此需要更顯示的表達多模態(tài)信息相關實體,這時候MKGAT隆重登場。
問題定義
一個簡單的知識圖譜,就是由節(jié)點和邊構成,G=(V,E)。從上圖可知,這是個有向圖,一條邊r表達了head和tail的關系 ,如(Toy Story, actor, Tom Hanks)。多模態(tài)知識圖譜中,圖片文本就成了一等公民,成為了圖中的實體。
聯(lián)合知識圖譜(collaborative knowledge graph),如下圖:
eu表示用戶實體,ei表示item實體,綠色點就是多模態(tài)的實體,紫色點就是一般的實體。這張圖箭頭有實線,有虛線。實線表示某個用戶對某個實體產生了某種交互(點擊,購買等),虛線表示各種非人實體之間其他關系。這篇論文的輸入就是上圖,輸出是用戶會和某個item交互的概率。
MKGAT
先看下整體模型架構:
MKGAT可以拆解為兩個子模塊,多模態(tài)embeding模塊和推薦模塊。在介紹各個子模塊前,我們先介紹兩個小的模塊:
- 多模態(tài)圖譜實體編碼器: 給不同類型實體編碼
- 多模態(tài)圖譜注意力層:用注意力機制,融合所有鄰居節(jié)點的信息,學習新實體的embedding。
多模態(tài)embeding把聯(lián)合知識圖譜作為輸入,充分利用上面提到的兩個小模塊,去學習各個entity的表達。再用各個實體embeding的表達,去學習圖譜之間的關系。推薦模塊充分利用知識圖譜學到的embedding ,和聯(lián)合知識圖譜去豐富用戶和items的表達,從而提升推薦效果。
多模態(tài)圖譜實體編碼器其實很簡單,如下圖所示:
不同類型的數據用不同的embeding,一般的實體就是直接embeding+FC,圖像就是CNN(Resnet)+FC,文本就是SIF+FC。
多模態(tài)圖譜注意力層,看過GAT論文應該很熟悉,每個實體的embeding按照不同權重,聚合鄰居節(jié)點。然而GAT忽視了KG節(jié)點直接關系是不同的,所以論文對此做了改進。如下圖所示:
假設有個實體h,我們要學習(h,r,t),在transE模型中認為h+r=t,但是實體h連接了很多多模態(tài)鄰居節(jié)點,我們可以融合這些鄰居信息去豐富h,最終得到eagg,如下公式所示:
傳播層:Nh就是h和所有鄰居節(jié)點形成的三元祖,e(h,r,t)是三元祖的embeding,前面乘的是該三元祖的attention分數。如下定義
融合層:得到eagg后如何融合原本實體的向量eh呢?論文給出了兩種方法:
加法融合:先對eh做線性變換到公共空間,然后直接相加(借鑒殘差網絡)
concat融合:
傳播層和融合層在知識圖譜中可以多次操作,以挖掘更深的信息,比如我們可以對鄰居的鄰居做傳播融合,得到鄰居的embeding后在做一次傳播融合,得到該實體的embeding。
得到embeding后,就要確定目標函數了,該文用了一個pairwise ranking loss,其中t'是隨機采樣的實體,不滿足(h,r,t')的關系,如下式所示:
推薦模塊
上一節(jié)只是把embeding學好了,但我們最終目標是給用戶推薦商品。在推薦模塊中,attention層依然可以復用,去融合鄰居節(jié)點的信息。
對于一個用戶(知識圖譜中的一個實體),他已經有一個向量e0,我們可以通過他的鄰居,用attention的方式,再給他生成另一個向量e1,用他鄰居和他鄰居的鄰居再生成向量e2,依此類推,最后把這些向量concat在一起,就是用戶最終向量。推薦的item同理,如下式:
最終得到eu*和ei*后,直接點積再接BPR loss即可,如下式子:
實驗
對比了目前一些算法,該MKGAT表現無論是在recall指標還是ndcg,都優(yōu)于現有算法。
論文還提到,多模態(tài)相比于沒有多模態(tài)的圖譜,對推薦效果的提升也是顯而易見的。
更多干貨,請關注微信公眾號:煉丹筆記總結
以上是生活随笔為你收集整理的搜索推荐炼丹笔记:融合GNN、图谱、多模态的推荐的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐算法炼丹笔记:排序模型CTR点击率预
- 下一篇: 机器学习入门开源资料