Создайте гетерогенный граф, используя dgl в Python
В этой статье мы создадим гетерогенные графы, используя библиотеку dgl (Deep Graph Library) в Python. Графы — это не что иное, как набор узлов/вершин и ребер. Кроме того, ребра — это не что иное, как исходные узлы для узлов назначения. Таким образом, все ребра могут быть представлены как (U, V), где U и V — узлы.
Но в случае с гетерогенными графами нам нужно быть на шаг осторожнее. Гетерогенный граф — это особый вид информационной сети, который содержит либо несколько типов объектов (узлов), либо несколько типов связей (ребер).
G = (V, E)
Что такое библиотека Deep Graph (DGL) в Python?
Библиотека Deep Graph (DGL) — это библиотека Python с открытым исходным кодом, которая помогает исследователям и ученым быстро создавать, обучать и оценивать GNN на своих наборах данных. Это фреймворк-агностик. Создавайте свои модели с помощью PyTorch, TensorFlow или Apache MXNet.
Есть лишь небольшая разница по сравнению с созданием однородных графиков. В случае однородных графов все, что нам нужно передать, — это 2 набора тензоров, и это создает ребра между передаваемыми идентификаторами. Поскольку однородные графы имеют только 1 тип вершины и 1 тип ребра.
Здесь в гетерогенных графах у нас есть несколько типов узлов и несколько типов ребер . Таким образом, входные данные, которые мы передаем, представляют собой словарь пар ключ-значение для каждого отношения .
Syntax: { (source_type, edge_type, destination_type) : (src_node_id Tensor , dest_node_id Tensor ) }
Ниже приведена реализация:
Python3
import dgl import torch data_dict = { ( "user" , "watches" , "movie" ): (torch.tensor([ 0 , 0 , 1 , 2 ]), torch.tensor([ 0 , 1 , 0 , 1 ])), ( "director" , "directs" , "movie" ): (torch.tensor([ 0 , 1 ]), torch.tensor([ 1 , 0 ])) } hetero_graph = dgl.heterograph(data_dict) hetero_graph |
Выход:
Теперь давайте рассмотрим различные типы узлов в графе, который мы здесь создали.
Python3
hetero_graph.ntypes |
Выход:
["director", "movie", "user"]
Мы также можем посмотреть на различные типы ребер, присутствующих в рассматриваемом графе.
Python3
hetero_graph.etypes |
Выход:
["directs", "watches"]
Преимущества создания гетерогенного графа
- Если мы посмотрим на реальные сценарии — большинство задач относятся к типу гетерогенных графов.
- Кроме того, следующим преимуществом является то, что мы получаем возможность применять разные модели GNN к разным отношениям .
- Кроме того, при отрицательной и положительной выборке мы получаем точные края, никакие избыточные и неоднозначные края не выбираются.
- Вот хороший пример: Пользователь – (смотрит) -> Фильм. Эта связь Watch может быть только между пользователем и фильмом. У вас не может быть Кино- (смотрит) -> Кино (или) Пользователь — (смотрит) -> Пользовательские отношения в случае разнородных графов, так как мы знаем тип узла.