Closed jasperzhong closed 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方法有点复杂.
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,需要再研究下.
http://shichuan.org/hin/time/2019.KDD%202019%20Heterogeneous%20Graph%20Neural%20Network.pdf