jasperzhong / read-papers-and-code

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

WWW '19 | Heterogeneous Graph Attention Network #328

Closed jasperzhong closed 1 year ago

jasperzhong commented 1 year ago

https://arxiv.org/pdf/1903.07293.pdf

jasperzhong commented 1 year ago

image

写得很好的文章. 可以看作是GAT在heterogeneous graph上的拓展. GAT是在邻居的node embedding上做attention,而HAT是在metapath邻居上做attention. 但一个异构图有多条metapath,每条metapath都可以弄一个node embedding出来. 所以最后对各个metapath的node embedding再来一次attention,不同metapath有不同的语义,对于任务的重要性可能不同.

image

image

这样看,其实本质上是把一个异构图根据metapath看成了多个图?每个图都可以生成一个node embedding.

我对metapath仍有疑问,到底如何确定metapath?看实验似乎是根据数据集手动指定的?

实验效果确实更好,Figure 6的node embedding visualization非常impressive,确实HAN生成的node embedding相同类别的更加聚集.

image

jasperzhong commented 1 year ago

OK,看了一篇综述,metapath选择的确是需要domain knowledge.

jasperzhong commented 1 year ago

image

回顾下meta-path-based sampling method. 首先meta-path based neighbors的概念,是通过meta-path连接的nodes. 相当于meta-path成了一个link,而在homo graph里面,edge就是link. 有了neighbor的概念,剩下的sampling就很自然了. 然后paper里面提到的估计用的是full-graph training,没提到fanout. 但自然也可以结合sampling.

从实现的角度来看,找meta-path-based neighbors是挺麻烦的事情. 比如如果是AMDMA这样的metapath,寻找meta-path-based neighbors可不是一件很直接的事情. 内部数据结构是如何存储的?需要进一步研究. 一个做法可能是根据AMDMA,随便走fanout条就行了,得到fanout个neighbors,确实可行. 这个需要确认.

jasperzhong commented 1 year ago

研究下这个实现: https://github.com/dmlc/dgl/tree/master/examples/pytorch/han

果然是用RandomWalk来实现的,有fanout个random walks. dgl的random_walk可以带metapath (https://docs.dgl.ai/en/0.8.x/generated/dgl.sampling.random_walk.html)