トランスフォーマーによるグラフ分類

Hugging Face は、Transformers ライブラリを用いたグラフ分類の実装に関する技術ガイドを提供しています。このタスク向けにライブラリで現在利用可能な主なモデルは Microsoft の Graphormer で、ユーザーはトランスフォーマーベースのアーキテクチャをグラフ構造データに適用し、二値分類、多クラス分類、回帰などのタスクを実行できます。

グラフデータのフォーマットとロード

Hugging Face Hub 上のグラフデータセットは主に jsonl 形式で、グラフのリストとして保存されています。各グラフは辞書で表現され、以下の必須フィールドとオプションフィールドを持ちます。

  • edge_index: エッジ内のノードインデックスを表す整数の二つの平行リストを含むリスト(例: [[1, 1, 3], [2, 3, 1]] はエッジ 1–2、1–3、3–1 を表す)。
  • num_nodes: グラフ内の総ノード数を示す整数で、孤立ノードも考慮されます。
  • y: 予測対象の値で、マルチクラス分類の場合は整数、回帰の場合は浮動小数点数、マルチタスク分類の場合は二値ラベルのリストとなります。
  • node_feat(Optional): 各ノードの特徴を整数のリストのリストで表し、ノードインデックス順に並べられます。
  • edge_attr(Optional): 各エッジの属性を整数のリストのリストで表し、edge_index の順序に従います。

ユーザーは datasets ライブラリを使用して、Hub から直接これらのデータセットをロードできます。例として、Open Graph Benchmark(OGB)の ogbg-molhiv データセットがあります。

Graphormer の前処理

グラフトランスフォーマーフレームワークは、学習プロセスを支援する特徴量を生成するために特定の前処理が必要です。Graphormer では、ノード間の最短経路行列や入出次数情報の生成が含まれます。

前処理は以下の 2 通りの方法で行えます。

  1. Static Preprocessing: dataset.map(preprocess_item, batched=False) を使用して、トレーニング前にデータを処理します。
  2. On-the-fly Processing: GraphormerDataCollator 内で on_the_fly_processing=True を設定し、トレーニング中にデータを処理します。大規模グラフに対してはメモリ効率が高くなります。

モデル実装とファインチューニング

GraphormerForGraphClassification クラスを使用してグラフ分類が実装されます。ワークフローは、事前学習済みチェックポイントをロードし、分類ヘッドを特定の下流タスクに適応させることです。

ロードと設定

from_pretrained でモデルをロードする際、ユーザーは num_classes を指定してタスクに合わせることができます(例: 二値分類の場合は num_classes=2)。ignore_mismatched_sizes=True を設定すると、ライブラリはカスタム分類ヘッドを作成し、事前学習チェックポイントの元のデコーダヘッドを置き換えます。

トレーニングワークフロー

トレーニングは Trainer API を通じて管理されます。主な技術的考慮点は以下です。

  • Data Collator: 個々のグラフをバッチに変換するために、TrainerGraphormerDataCollator を渡す必要があります。
  • Memory Management: モデルサイズが大きいため、per_device_train_batch_sizegradient_accumulation_steps を調整し、メモリ不足(OOM)エラーを防ぐことが重要です。
  • Hardware: CPU でもトレーニングは可能ですが、ガイドでは 20 エポックで Intel Core i7 で約 1 日かかると記載されており、実用上は GPU 加速が強く推奨されます

Sources