使用 Transformers 進行圖形分類
Hugging Face 提供了一份關於使用 Transformers 套件實作圖形分類的技術指南。目前套件中可用於此任務的主要模型是微軟的 Graphormer,使用者可以將基於 transformer 的架構套用於圖結構資料,執行二元分類、多類別分類或回歸等任務。
圖形資料格式化與載入
在 Hugging Face Hub 上的圖形資料集主要以 jsonl 格式儲存,作為圖形列表。每個圖形以字典形式表示,包含以下必須與可選欄位:
edge_index:一個列表,內含兩個平行的整數列表,代表邊中節點的索引(例如[[1, 1, 3], [2, 3, 1]]表示邊 1–2、1–3、以及 3–1)。num_nodes:一個整數,表示圖形中節點的總數,以確保孤立節點也被計算在內。y:預測的目標值,可為整數(用於多類別分類)、浮點數(用於回歸),或二元標籤列表(用於多任務分類)。node_feat(可選):一個整數列表的列表,包含每個節點的特徵,依節點索引排序。edge_attr(可選):一個整數列表的列表,包含每條邊的屬性,依edge_index的順序排列。
使用者可以直接透過 datasets 套件從 Hub 載入這些資料集,例如來自 Open Graph Benchmark(OGB)的 ogbg-molhiv 資料集。
Graphormer 的前處理
圖形 transformer 框架需要特定的前處理,以產生有助於學習的特徵。對於 Graphormer,這包括產生節點間的最短路徑矩陣以及進出度資訊。
前處理可以透過兩種方式處理:
- 靜態前處理:使用
dataset.map(preprocess_item, batched=False)在訓練前處理資料。 - 即時前處理:在
GraphormerDataCollator中設定on_the_fly_processing=True,於訓練時即時處理資料,對大型圖形更節省記憶體。
模型實作與微調
圖形分類使用 GraphormerForGraphClassification 類別實作。工作流程包括載入預訓練檢查點,並將分類頭調整至特定的下游任務。
載入與設定
透過 from_pretrained 載入模型時,使用者可以指定 num_classes 以符合其特定任務(例如二元分類時 num_classes=2)。將 ignore_mismatched_sizes=True 設定為真時,套件會建立自訂的分類頭,取代預訓練檢查點中的原始解碼頭。
訓練工作流程
訓練過程透過 Trainer API 管理。主要的技術考量包括:
- 資料整理器:必須將
GraphormerDataCollator傳入Trainer,以將單一圖形轉換為批次。 - 記憶體管理:由於模型尺寸,調整
per_device_train_batch_size與gradient_accumulation_steps對防止記憶體不足(OOM)錯誤至關重要。 - 硬體:雖然可以在 CPU 上訓練,但指南指出在 Intel Core i7 上訓練 20 個 epoch 大約需要一天,實務上強烈建議使用 GPU 加速。