【グラフ構造】論文の引用データセットCoraを利用する

Posted: , Category: データセット , 機械学習

Coraデータセットは、論文の引用・被引用関係を集めたデータセットであり、機械学習や深層学習の論文で非常によく利用されています。

今回は、このCoraデータセットを準備し利用する方法について、簡潔でわかりやすくまとめていきます。グラフ構造の扱いに慣れていない人など、ぜひ参考にしてみてください。

Coraデータセットは非常によく利用されているデータセットであり、csv形式でダウンロードしてpandasで読み取る方法や、pytorchの関連モジュールであるPyTorch Geometric(PyG)を用いた手法があります。

近年はかなりpytorchが利用され、特に深層学習や機械学習などを利用している研究者の界隈ではほとんどデファクトスタンダードになっていることから、今回はPyTorch Geometric (PyG)を用いて、Coraデータセットを準備する方法について紹介します。

Coraデータセットの概要を理解する

まず、Coraデータセットを準備する前に、データセットに対して解説をしていきます。

Coraデータセットは、2708点のデータから構成されるデータセットで、冒頭にも説明しましたが、論文の引用・被引用関係のデータセットです。また、論文のの中に、特定の1433種類のワードが含まれているかどうかの0/1値をとる値が、各々のNodeに割り当てられています。

こちらは記事の冒頭でも掲載していた図ですが、Coraデータセットを外観するとこのような感じになっています。

PyG(PyTorch Geomatric)を用いてCoraデータセットを準備する

今回は、PyTorch Geomatricを利用してCoraデータセットを準備していきます。PyTorch Geomatricがインストールされていない人は、下記の記事で解説しているので、こちらも参考にしてください。

【PyG】PyTorch Geometricのインストール方法から利用方法まで解説
PyG(PyTorch Geometric)は、PyTorchでグラフ構造を取り入れた、GCNやGATなどのニューラルネットワークを簡単に実装、学習、推論などができるライブラリです。 グラフ構造を有するオープンなデータセ […]

インストールができたら、データセットをインポートしていきます。以降はPyGがインストールされている前提で進めます。

データセットをダウンロードするために、下記のコードを実行します。

from torch_geometric.datasets import Planetoid
dataset = Planetoid(root="./Cora", name="Cora")

datasetはそれぞれ次のクラスのインスタンスになっているようです。

dataset # => Cora()
type(dataset) # => torch_geometric.datasets.planetoid.Planetoid

これで、datasetオブジェクトに、データが格納されました。まずデータを簡単に確認していきましょう。

Coraデータセットを確認する

まず、Coraデータセットの概要を確認してみます。

# データセットのクラス数を取得する
dataset.num_classes # => 7 
# データセットの数(Graphの数)を取得する
len(dataset) # => 1
# 論文データの特徴量の次元数. 1433種類の特定のワードが論文中に含まれているか 0/1データとなっている
dataset.num_node_features #=> 1433

len(dataset)の数が1つなので、含まれているグラフ構造は1つのようです。

グラフは次のようにIndexを用いて取得できます。

data = dataset[0]
data # => Data(x=[2708, 1433], edge_index=[2, 10556], y=[2708], train_mask=[2708], val_mask=[2708], test_mask=[2708])

torch_geometric.data.data.Dataオブジェクトを得ることができました。

各々の属性は次のようになっています。

xは特徴量ベクトルで、2708点の1433次元のデータを示しています。edge_indexはEdgeの情報を保持しており、10556辺あることがわかります。yはNodeのラベルを示しています。

他のattributeがどのような値になっているかについて気になる人は、data変数のクラスであるtorch_geometric.data.data.Dataに関するドキュメント(公式ドキュメントのDataクラスの箇所)を参照すると良いと思います。

Coraデータセットを可視化

では、これらのグラフデータを可視化してみましょう。

グラフの可視化には、networkxを利用します。可視化のコード全文はこちらになります。

import torch
import matplotlib.pyplot as plt
import networkx as nx
from torch_geometric.utils import to_networkx
from torch_geometric.datasets import Planetoid

dataset = Planetoid(root="./Cora", name="Cora")
data = dataset[0]

data_nx = to_networkx(data)

plt.figure(figsize=(12, 12), dpi=120)
nx.draw(data_nx, node_color = data.y, node_size=5)
plt.show()

このような引用の関係を可視化することができました。

参考文献・リンク

参考にした文献やWebサイト

【広告】
統計学的にあなたの悩みを解決します。
仕事やプライベートでお悩みの方は、ベテラン占い師 蓮若菜にご相談ください。

機械学習と情報技術