GFT的官方實施,GFT是圖表上的跨域跨任務基礎模型。徽標由dall·e 3生成。
由Zehong Wang,Zheyuan Zhang,Nitesh V Chawla,Chuxu Zhang和Yanfang Ye撰寫。
GFT是一種跨域和交叉任務圖基礎模型,它將計算樹視為可轉移的模式,以獲得可轉移的樹詞彙。此外,GFT提供了一個統一的框架,以使與圖形相關的任務與單個圖形模型(例如,GNN)相結合,以共同處理節點級別,邊緣級別和圖形級任務。
在預訓練期間,該模型通過樹重建任務編碼從圖數據庫中的通用知識到樹詞彙。在微調中,將學習的樹詞彙應用於將與圖形相關的任務統一為樹格分類任務,從而將所獲得的常識調整為特定任務。
您可以使用conda安裝環境。請運行以下腳本。我們在單個A40 48G GPU上運行所有實驗,但是具有24G內存的GPU足以處理所有具有迷你批次的數據集。
conda env create -f environment.yml
conda activate GFT
我們使用OFA提供的數據集。您可以運行pretrain.py
以自動下載數據集,默認情況下將下載到/data
文件夾。管道將通過將文本描述轉換為文本嵌入來自動預處理數據集。
另外,您可以下載我們的預處理數據集並在/data
文件夾上解壓縮。
GFT代碼以文件夾/GFT
表示。結構如下。
└── GFT
├── pretrain.py
├── finetune.py
├── dataset
│ ├── ...
│ └── process_datasets.py
├── model
│ ├── encoder.py
│ ├── vq.py
│ ├── pt_model.py
│ └── ft_model.py
├── task
│ ├── node.py
│ ├── link.py
│ └── graph.py
└── utils
├── args.py
├── loader.py
└── ...
您可以在各種圖形上進行預處理和finetune.py
進行pretrain.py
。
為了重現結果,我們分別在config/pretrain.yaml
和config/finetune.yaml
中提供了詳細的超參數用於預處理和填充。為了利用默認的超參數,我們為預處理和Finetune提供了一個命令--use_params
。
# Pretraining with default hyper-parameters
python GFT/pretrain.py --use_params
# Finetuning on Cora with default hyper-parameters
python GFT/finetune.py --use_params --dataset cora
# Few-shot learning on Cora with default hyper-parameters
python GFT/finetune.py --use_params --dataset cora --setting few_shot
對於芬口,我們提供八個數據集,包括cora
, pubmed
, wikics
, arxiv
, WN18RR
, FB15K237
, chemhiv
和chempcba
。
另外,您可以運行腳本以重現實驗。
# Pretraining with default hyper-parameters
sh script/pretrain.sh
# Finetuning on all datasets with default hyper-parameters
sh script/finetune.sh
# Few-shot learning on all datasets with default hyper-parameters
sh script/few_shot.sh
注意:驗證的模型將存儲在ckpts/pretrain_model/
默認情況下。
# The basic command for pretraining GFT
python GFT/pretrain.py
當您運行pretrain.py
時,您可以自定義預處理數據集和超參數。
您可以使用--pretrain_dataset
(或--pt_data
)設置使用的預處理數據集和相應的權重。預定義的數據配置位於config/pt_data.yaml
中,具有以下結構。
all:
cora: 5
pubmed: 5
arxiv: 5
wikics: 5
WN18RR: 5
FB15K237: 10
chemhiv: 1
chemblpre: 0.1
chempcba: 0.1
...
在上面的情況下, all
內容都是設置的名稱,這意味著所有數據集都在預處理中使用。對於每個數據集,都有一個鍵值對,其中鍵是數據集名稱,值是採樣權重。例如, cora: 5
表示cora
數據集將在單個時期中進行5
次採樣。您可以設計自己的數據集組合,以預處理GFT。
您可以通過更改編碼器的超參數,向量量化,模型訓練來自定義訓練階段。
--pretrain_dataset
:指示預處理數據集。與上述相同。--use_params
:使用預定義的超參數。--seed
:用於預處理的種子。--hidden_dim
:GNNS隱藏層中的尺寸。--num_layers
:GNN層。--activation
:激活函數。--backbone
:骨幹GNN。--normalize
:歸一化層。--dropout
:GNN層的輟學。--code_dim
:詞彙中每個代碼的維度。--codebook_size
:詞彙中的代碼數。--codebook_head
:代碼書的頭數。如果數字大於1,則將共同使用多個詞彙。--codebook_decay
:代碼的衰減率。--commit_weight
:承諾術語的重量。--pretrain_epochs
:時期的數量。--pretrain_lr
:學習率。--pretrain_weight_decay
:L2正常器的重量。--pretrain_batch_size
:批處理大小。--feat_p
:功能損壞率。--edge_p
:邊緣/結構損壞率。--topo_recon_ratio
:邊緣的比率應重建。--feat_lambda
:特徵損失的重量。--topo_lambda
:拓撲損失的重量。--topo_sem_lambda
:重建邊緣特徵中拓撲損失的重量。--sem_lambda
:語義損失的重量。--sem_encoder_decay
:語義編碼器的動量更新速率。 # The basic command for adapting GFT on downstream tasks via finetuning.
python GFT/finetune.py
您可以設置--dataset
指示下游數據集,以及--use_params
為每個數據集使用預定義的超參數。您可以指出的其他超參數如下。
對於具有1個預定義分裂的圖形,您可以設置--repeat
進行多個實驗。
--hidden_dim
:GNNS隱藏層中的尺寸。--num_layers
:GNN層。--activation
:激活函數。--backbone
:骨幹GNN。--normalize
:歸一化層。--dropout
:GNN層的輟學。--code_dim
:詞彙中每個代碼的維度。--codebook_size
:詞彙中的代碼數。--codebook_head
:代碼書的頭數。如果數字大於1,則將共同使用多個詞彙。--codebook_decay
:代碼的衰減率。--commit_weight
:承諾術語的重量。--finetune_epochs
:時代的數量。--finetune_lr
:學習率。--early_stop
:最大早期停止時期。--batch_size
:如果設置為0,請進行完整的圖形訓練。--lambda_proto
:芬特列中原型分類器的重量。
--lambda_act
:填充中線性分類器的重量。
--trade_off
:使用Prototype Classier或使用線性分類器進行推理之間的權衡。
您可以添加--no_lin_clf
或--no_proto_clf
分別避免使用線性分類器或原型分類器。請注意,這兩個術語是衝突,因為您必須使用至少一個分類器。
# The basic command for adaptation GFT on downstream tasks via few-shot learning.
python GFT/finetune.py --setting few_shot
您可以設置--dataset
指示下游數據集,以及--use_params
為每個數據集使用預定義的超參數。您可以指出的其他超參數如下。
專門用於幾次學習的超參數是
--n_train
:用於對模型進行填充的每課的培訓實例數。請注意,小n_train
實現了理想的性能--n_task
:採樣任務的數量。--n_way
:方法數。--n_query
:以每條方式設置的查詢大小。--n_shot
:支撐設置的大小。--hidden_dim
:GNNS隱藏層中的尺寸。--num_layers
:GNN層。--activation
:激活函數。--backbone
:骨幹GNN。--normalize
:歸一化層。--dropout
:GNN層的輟學。--code_dim
:詞彙中每個代碼的維度。--codebook_size
:詞彙中的代碼數。--codebook_head
:代碼書的頭數。如果數字大於1,則將共同使用多個詞彙。--codebook_decay
:代碼的衰減率。--commit_weight
:承諾術語的重量。--finetune_epochs
:時代的數量。--finetune_lr
:學習率。--early_stop
:最大早期停止時期。--batch_size
:如果設置為0,請進行完整的圖形訓練。--lambda_proto
:芬特列中原型分類器的重量。
--lambda_act
:填充中線性分類器的重量。
--trade_off
:使用Prototype Classier或使用線性分類器進行推理之間的權衡。
您可以添加--no_lin_clf
或--no_proto_clf
分別避免使用線性分類器或原型分類器。請注意,這兩個術語是衝突,因為您必須使用至少一個分類器。
實驗結果可能由於預處理過程中的隨機初始化而有所不同。我們在訓練中使用不同的隨機種子(IE,1-5)提供實驗結果,以顯示隨機初始化的潛在影響。
科拉 | PubMed | Wiki-CS | arxiv | WN18RR | FB15K237 | 愛滋病 | PCBA | 平均的 | |
---|---|---|---|---|---|---|---|---|---|
種子= 1 | 78.58±0.90 | 77.55±1.54 | 79.38±0.57 | 72.24±0.16 | 91.56±0.33 | 89.67±0.35 | 72.69±1.93 | 78.24±0.23 | 79.99 |
種子= 2 | 78.27±1.26 | 76.41±1.36 | 79.36±0.62 | 72.13±0.24 | 91.72±0.19 | 89.66±0.31 | 71.62±2.45 | 78.20±0.33 | 79.67 |
種子= 3 | 78.16±1.62 | 76.28±1.37 | 79.32±0.65 | 72.13±0.30 | 91.57±0.44 | 89.78±0.23 | 71.58±2.28 | 78.12±0.37 | 79.62 |
種子= 4 | 78.42±1.37 | 75.76±1.58 | 79.44±0.62 | 72.36±0.34 | 91.70±0.24 | 89.73±0.21 | 72.57±2.46 | 78.34±0.27 | 79.79 |
種子= 5 | 78.56±1.62 | 76.49±2.00 | 79.27±0.55 | 72.18±0.26 | 91.47±0.39 | 89.80±0.19 | 72.27±0.93 | 78.31±0.34 | 79.79 |
報告 | 78.62±1.21 | 77.19±1.99 | 79.39±0.42 | 71.93±0.12 | 91.91±0.34 | 89.72±0.20 | 72.67±1.38 | 77.90±0.64 | 79.92 |
為了更好地確保可重複性,我們在此鏈接中提供了種子= 1的檢查點。由於其最佳平均表現,我們選擇了它。您可以在路徑ckpts/pretrain_model/
中解壓縮下載的文件,並在使用finetune.py
時設置--pt_seed 1
,以精緻利用我們提供的檢查點。
如果您有疑問,請聯繫[email protected]
或打開問題。
如果您發現倉庫對您的研究很有用,請正確引用原始論文。
@inproceedings { wang2024gft ,
title = { GFT: Graph Foundation Model with Transferable Tree Vocabulary } ,
author = { Wang, Zehong and Zhang, Zheyuan and Chawla, Nitesh V and Zhang, Chuxu and Ye, Yanfang } ,
booktitle = { The Thirty-eighth Annual Conference on Neural Information Processing Systems } ,
year = { 2024 } ,
url = { https://openreview.net/forum?id=0MXzbAv8xy }
}
該存儲庫基於OFA,PYG,OGB和VQ的代碼庫。感謝他們的分享!