======================================================

Dalam artikel ini, kita akan membahas implementasi model prediksi link Relational Graph Convolutional Network (RGCN) menggunakan PyTorch. RGCN adalah sebuah model yang sangat populer untuk memprediksi relasi antara dua entitas dalam suatu graf. Dalam implementasi ini, kita menggunakan library torch_geometric untuk memungkinkan efisiensi kode dan meningkatkan kinerja.

Latar Belakang

Model RGCN awalnya diperkenalkan oleh paper "Modeling Relational Data with Graph Convolutional Networks" yang dipublikasikan pada tahun 2018. Pada dasarnya, model ini menggunakan teknologi konvolusi graf untuk memprediksi relasi antara dua entitas dalam suatu graf.

Implementasi

Kode implementasi RGCN link prediction dapat ditemukan pada repository berikut: https://github.com/MichSchli/RelationPrediction. Namun, dalam artikel ini, kita akan membahas bagaimana kita dapat menggunakan PyTorch untuk mengimplementasikan model tersebut.

Membuat Model


Pertama-tama, kita perlu membuat model RGCN dengan menggunakan kelas nn.Module dari PyTorch. Dalam contoh berikut, kita akan membuat sebuah model yang terdiri atas beberapa layer RGCN:

import torch.nn as nn
import torch_geometric.nn as pyg_nn

class RGCN(nn.Module):
 def __init__(self, num_layers, input_dim, hidden_dim, output_dim):
 super(RGCN, self).__init__()
 self.layers = nn.ModuleList([pyg_nn.RGConv(input_dim, hidden_dim) for _ in range(num_layers)])
 self.fc = nn.Linear(hidden_dim, output_dim)

 def forward(self, x, edge_index):
 for layer in self.layers:
 x = layer(x, edge_index)
 return self.fc(x)

Dalam contoh di atas, kita membuat sebuah model RGCN yang terdiri atas num_layers lapisan RGCN. Setiap lapisan memiliki input_dim sebagai dimensi input dan hidden_dim sebagai dimensi rahasia.

Mempersiapkan Data


Sebelum memprediksi link, kita perlu mempersiapkan data dalam bentuk graf yang sesuai dengan model RGCN. Dalam contoh berikut, kita menggunakan dataset ogbn-arxiv dari Open Graph Benchmark (OGB):

import ogb.graphpropprediction as ogb

dataset = ogb.GraphPropPredDataset(name='arxiv', uncased=True)
data = dataset[0]

Memprediksi Link


Setelah mempersiapkan data, kita dapat menggunakan model RGCN untuk memprediksi link. Dalam contoh berikut, kita menggunakan fungsi predict dari kelas RGCN untuk memprediksi link:

model = RGCN(num_layers=3, input_dim=data.num_node_features, hidden_dim=64, output_dim=dataset.num_classes)
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)

for epoch in range(10):
 optimizer.zero_grad()
 outputs = model(data.x, data.edge_index)
 loss = criterion(outputs, data.y)
 loss.backward()
 optimizer.step()
 print(f'Epoch {epoch+1}, Loss: {loss.item()}')

Dalam contoh di atas, kita menggunakan fungsi predict untuk memprediksi link. Kita juga menggunakan fungsi CrossEntropyLoss dari PyTorch sebagai fungsi loss dan Adam Optimizer untuk mengoptimalkan model.

Referensi

Dalam artikel ini, kita telah membahas implementasi model prediksi link RGCN menggunakan PyTorch. Kita juga telah mengetahui bagaimana kita dapat mengoptimalkan kode dengan menggunakan library torch_geometric dan PyTorch.