AddMetaPaths

class dgl.transforms.AddMetaPaths(metapaths, keep_orig_edges=True)[source]

基类:BaseTransform

根据给定的元路径向输入图添加新的边,如Heterogeneous Graph Attention Network中所述。

形式上,元路径是一种形如

\[\mathcal{V}_1 \xrightarrow{R_1} \mathcal{V}_2 \xrightarrow{R_2} \ldots \xrightarrow{R_{\ell-1}} \mathcal{V}_{\ell}\]

其中 \(\mathcal{V}_i\) 表示节点类型,\(\xrightarrow{R_j}\) 表示连接其两个相邻节点类型的关系类型。对应于元路径的邻接矩阵是通过沿元路径的邻接矩阵的顺序乘法获得的。

参数:
  • metapaths (dict[str, list]) – 要添加的元路径,将元路径名称映射到元路径。例如,{'co-author': [('person', 'author', 'paper'), ('paper', 'authored by', 'person')]}

  • keep_orig_edges (bool, optional) – 如果为 True,将保留原始图的边。否则,将丢弃它们。

示例

>>> import dgl
>>> from dgl import AddMetaPaths
>>> transform = AddMetaPaths({
...     'accepted': [('person', 'author', 'paper'), ('paper', 'accepted', 'venue')],
...     'rejected': [('person', 'author', 'paper'), ('paper', 'rejected', 'venue')]
... })
>>> g = dgl.heterograph({
...     ('person', 'author', 'paper'): ([0, 0, 1], [1, 2, 2]),
...     ('paper', 'accepted', 'venue'): ([1], [0]),
...     ('paper', 'rejected', 'venue'): ([2], [1])
... })
>>> new_g = transform(g)
>>> print(new_g.edges(etype=('person', 'accepted', 'venue')))
(tensor([0]), tensor([0]))
>>> print(new_g.edges(etype=('person', 'rejected', 'venue')))
(tensor([0, 1]), tensor([1, 1]))