jasperzhong / read-papers-and-code

My paper/code reading notes in Chinese
43 stars 3 forks source link

KDD '19 | Heterogeneous Graph Neural Network #338

Closed jasperzhong closed 1 year ago

jasperzhong commented 1 year ago

http://shichuan.org/hin/time/2019.KDD%202019%20Heterogeneous%20Graph%20Neural%20Network.pdf

jasperzhong commented 1 year ago

interesting paper. 这篇papaer HetGNN提出了一个新的sampling方法,称之为Random Walk with Restart (RWR). 和之前的meta-path-based methods like HAN #328 迥然不同. meta-path-based方法必须要人为指定一个meta-path,然后从meta-path-based neigbhors里面sample,这样其实最后只有一个type of neighbors.

而RWR对每个node type都有一定数量的neighbors,具体方法是: 1) 给定node v,进行random walk,有一定概率p会回到初始位置,直到采样到固定数量的neighbors,记作RWR(v). 2) 对于每个node type t,从RWR(v)里面选取k_t个出现频率最高的nodes作为这个node v的node type t的neighbors. 实验里面设置的fanout大概是10左右.

然后对于node v的same node type的neighbors,非常straighforward,aggregate一下得到一个node embedding e_t (paper里面用了LSTM,没啥必要,GAT那种attention就行了);于是node v有了不同node type的node embedding,再attention一下,得到最终的node embedding. 这和HAN非常类似.

这篇paper和HAN都是19年的,互相没有比较过. 但是后续paper #336 的实验显示HAN还是略胜一筹.


个人觉得这篇paper的sampling方法有点复杂.

jasperzhong commented 1 year ago

DGL dgl.sampling.random_walk的API可以设置restart prob. https://docs.dgl.ai/en/latest/generated/dgl.sampling.random_walk.html

那其实第一步可以直接当成一个homo graph,做random walk,如这个实现 https://github.com/BUPT-GAMMA/OpenHGNN/blob/main/openhgnn/sampler/HetGNN_sampler.py#L194 第二步这个实现似乎构建了一个hetero graph然后select topk,需要再研究下.