【Graph Embedding】: metapath2vec算法

metapath2vec: Scalable Representation Learning for Heterogeneous Networks 發表在kdd2017,用於解決異構網絡的embedding表示。個人看完文章的感覺就是將deepwalk的算法思路引入到異構網絡當中,並針對異構網絡的特點,針對deepwalk算法中的各個步驟,針對性的進行優化。所以看在瞭解metapath2vec之前建議先了解一下deepwalk。

什麼是異構網絡?

異構網絡不同於同構網絡在於,同構網絡中的nodes都是同一類型的節點,link都是針對同一類型節點的鏈接。而異構網絡節點可以是不同類型的實體,鏈接也可以是不同實體之間的鏈接。拿電商行爲來說,用戶A購買了店鋪S1的商品L1,用戶A購買了店鋪S2的商品L2。如果我們想用同構網絡來表示用戶的購買session,那麼網絡的節點就是可以用商品來表示,並把同一用戶的購買商品按順序鏈接起來。但是這樣就丟失了用戶和店鋪這兩個實體。異構網絡就可以解決這個問題,我們可以直接把用戶和店鋪進行鏈接,店鋪和商品進行鏈接,用戶和商品進行鏈接起來,形成一個異構網絡。

定義問題

異構網絡(Heterogeneous Networks): 異構網絡由圖G(V,E,T)表示,其中節點v和鏈接e分別對應映射函數:

\phi (v):V->T_v 和 \phi (e):E->T_E, 這裏的T_E和 T_v指對象和關係類型的集合。並且|T_V|+|T_E|>2,如果等於2的話就是同構網絡。這裏想要說明的意思其實就是說 異構網絡是由一個或者多個類型的節點,以及一個或者多個類型的鏈接組成的圖。

異構網絡表示學習(Heterogeneous Network Reperesentation Learning):給定一個異構網絡G,這裏的工作就是將圖中的節點v表示成一個低緯向量X \in R^{|V|\times d} , d\ll |V|,用於學習出圖中節點的結構和語義相關性。而該問題的輸出則爲低緯矩陣X,表示的是一個所有節點的低緯向量,所以它的大小是節點個數*d。而該問題因爲同時優化不同類型的節點,所以最後生成的節點低緯向量都在同一高緯空間。所以我們能很方便的將學習出的向量應用於各種各樣的任務。

異構網絡embedding:metapath2vec

在metapath2vec中,採用和deepwalk類似的方式,利用skip-gram來學習圖的embedding。主要步驟由兩步,1. 利用隨機遊走來從圖中獲取序列,2.利用skip-gram優化提取的序列。但是針對異構圖,這部分中都存在一定的差異。這裏分別說一下。

Heterogeneous Skip-Gram. 給定異構網絡G=(V,E,T), |T_V| > 1, 目標就是在給定節點v後,使其上下文內容存在的概率最大化,如下:

                                             

這裏的N_t(v)指的是在節點v的鄰近節點中,爲第t個類型的節點。而概率函數p(c_t|v;\theta )則爲softmax。可表示爲:

                                                     p(c_t|v;\theta )=\frac{e^{X_{ct}\cdot X_v}}{\sum_{u\in V} e^{{X_u}\cdot X_v}}

這裏X_v就是從矩陣X從取出來的第v行向量,它表示節點v的embedding向量。爲了減少計算量,進一步優化爲負採樣後的優化目標:

                                                  log \sigma (X_{c_t}\cdot X_v)+\sum ^M_{m=1}E_{u^m}~P(u) [log \sigma (-X_{u^m}\cdot X_v)]

其中\sigma是sigmoid函數,p(u)是預定義的函數,用於採樣節點M次。這裏它並沒有區分不同的節點來進行採樣,對不同節點進行均勻採樣。

元路徑隨機遊走(Meta-Path-Based Random Walks.)在deepwalk和node2vec中都採用的是隨機遊走的方式,如果不考慮節點之間的類型,我們也可以直接使用隨機遊走來定義轉化概率p(v^{i+1}|v^i),然後生成的序列直接利用skipgram來進行優化。但是sun等人證明來隨機遊走是偏向於高可見類型的節點,即那些具有主導優勢的節點,所以本文提出來一個基於元路徑的隨機遊走方法。

定義matapath P的形式爲

                                                  

這裏的V_1,V_2,....指的都是節點類型,metapath的意思就是事先定義好節點類型的變化規律。而整個變化規律就是從V_1V_l。這樣就可以將變化規律限制在定義好的metapath之中,用於解決隨機遊走偏向於選擇高可見類型節點的問題。具體的在每步的轉移概率爲:

                                             

其中v_t^i\in V_t,而N_{t+1}(v_t^i)指的是節點v_t^iV_{t+1}類型的鄰近節點,而轉移概率就是該類型節點個數的倒數。表達的是只有在下一步爲指定mtapath位置上的節點類型的時候才發生轉移,並且轉移概率爲領域內該類型節點數的倒數。基於metapath的隨機遊走保證來語義變化的正確性。比如如下圖中的a4所示,如果其上一步爲CMU,那麼它可以轉移到a2,a3,a5,p2,p3,CMU中任意和其由鏈接的節點。但是如果定義來metapath “OAPVPAO”,隨機遊走就會偏向於選擇P類型的節點。

metapath2vec++

在前面的metapath中,存在一個小問題,就是隨機遊走這一步是考慮來節點的類型了,但是skipgram在訓練的時候並有沒對其區分對待。所以進一步針對這點提出了Heterogeneous negative sampling. 優化函數如下:

                                                         

V_t是整個網絡中類型爲t的集合,即根據同類型的節點進行softmax歸一化。這樣的話,相當於每個類型的節點都會有了一個概率分佈。按文章給的例子來說,給定一個目標節點a4,那麼利用這個方法就能得到對應的V,A,O,P四種節點類型的分佈。

優化後的負採樣目標如下:

                                     

 

以上就是metapath2vec的核心思想,具體的實驗結果,可以詳細看論文。具體的實現代碼和實驗數據可以參考:

https://ericdongyx.github.io/metapath2vec/m2v.html

論文下載地址:

https://www3.nd.edu/~dial/publications/dong2017metapath2vec.pdf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章