deepwalk和node2vec針對同構圖的游走,如果應用於異構圖則會造成以下問題:
- 偏向於出現頻率高的節點類型
- 偏向於相對集中的幾點(即度數高的節點)
要了解異構圖的游走,首先我們需要了解什么是異構圖:
我們知道同構圖G=(V,E),而異構圖G=(V,E,T),T是節點V的類型
例如,學術網絡:
在上圖中,我們知道節點有四種不同的類型,而節點之間的邊E也有三種不同的類型
在我們了解異構圖之后,下面介紹metapath2vec
在metapath2vec算法中,提出了元路徑(meta path)的概念
meta path:在圖中選取的由節點類型構成的組合路徑
例如:APA的含義為兩個作者寫了用一篇論文,又例如:APCPA,兩個作者分別寫的兩篇論文在同一個會議發布
可見,元路徑的選取都是有意義的,但是為什么要這么做呢?
因為我們會在選取出來的元路徑上進行游走,如果選取出來的元路徑沒有什么意義,那么訓練出來的模型的效果較差
基於meta path的隨機游走:
對於選取節點A來說,每個節點有1/4的概率被選中,假設我們選取了節點A1,對於選取節點P,對應的有兩個節點P1和P2,每個節點被選中的概率是1/2,我們選擇P2,那么A節點則有A1、A3和A4三個選擇
ps:只要首尾節點類型相同,就可以繼續游走,元路徑最好是對稱的,這樣可以方便我們對元路徑做出擴展,不對稱的元路徑也是有意義的
停止游走的條件:
- 到達指定的最大游走程度
- 找不到符合要求節點類型的節點
metapath2vec的整體框架:
metapath2vec在隨機游走的時候考慮了節點類型,但是在負采樣的時候沒有考慮節點類型:
可以看出負樣本的節點類型和正樣本不同,這樣的負樣本采集方式並不利於模型訓練,我們應當采集同樣的樣本類型,因此提出了metapath2vec++算法,在負采樣的時候,考慮節點類型
變種:multi-metapath2vec:利用元路徑生成器,生成多條metapath
變種:side info + multi-metapath2vec:每個節點都有自己的特征表示,通過元路徑生成器生成多條元路徑,在實際訓練過程中將特征融入矩陣中,讓模型獲得更多信息
圖游走算法總結: