一行程式碼命令可以做什麼?
“一行命令可以實現‘一條龍’執行實驗。”
訪問 github.com/THUDM/cogdl 一鍵體驗!
但是,由於許多專案的程式碼並未開源或者開原始碼的風格多種多樣,研究者和使用者在使用這些方法的過程中會遇到各種各樣的問題,比如實驗復現以及如何在自己的資料集上執行模型等。
具體而言(以學術研究為例),研究者和使用者在從事研究過程中需要將自己提出的模型與其他模型進行對比,來驗證所提出模型的有效性。但在對比過程中,他們需要選定若干個下游任務,在每個任務下,透過公平的評估方式來對比不同模型的效能,由於不同模型在提出時可能會使用不完全一致的下游任務或者評估方式,他們需要花費大量精力修改基線模型來進行適配。
那麼,如何快速、便捷地復現出基線模型(baseline)的結果,並將這些模型應用到自定義的資料集上?
為此,清華大學知識工程實驗室(KEG)聯合北京智源人工智慧研究院(BAAI)開發了一種基於圖深度學習的開源工具包——CogDL(底層架構為 PyTorch,程式語言為 Python)。
據 CogDL 開發者介紹,該工具包透過整合多種不同的下游任務,同時搭配合適的評估方式,使得研究者和使用者可以方便、快速地執行出各種基線模型的結果,進而將更多精力投入研發新模型的工作之中。
“對圖領域中每種任務,我們提供了一套完整的“資料處理-模型搭建-模型訓練-模型評估”的方案,易於研發人員做相關的實驗。比如對於圖上半監督節點分類任務,我們整合了常用的資料集 Cora、Citeseer、Pubmed,提供了經典的/前沿的各種模型(包括GCN、GAT、GCNII 等),提供了相應的訓練指令碼,並且整理出了一個相應的排行榜作為參考。” CogDL 開發者說。
CogDL 最特別的一點在於它以任務(task)為導向來整合所有演算法,將每一個演算法分配在一個或多個任務下,從而構建了 “資料處理-模型搭建-模型訓練和驗證” 一條龍的實現。
# GCN 和 GAT 在 Cora 和 Citeseer 上的實驗
python scripts/train.py --task node_classification --dataset cora citeseer --model gcn gat
有監督節點分類任務(node classification):包括 GCN、GAT、GraphSAGE、MixHop 和 GRAND 等; 無監督節點分類任務(unsupervised node classification):包括 DGI、GraphSAGE(無監督實現),以及 Deepwalk、Node2vec、ProNE 等; 有監督圖分類任務(graph classification):包括 GIN、DiffPool、SortPool 等; 無監督圖分類任務(unsupervised graph classification):包括 InfoGraph、DGK、Graph2Vec 等; 連結預測任務(link prediction):包括 RGCN、CompGCN、GATNE 等; 異構節點分類(multiplex node classification):包括 GTN、HAN、Metapath2vec 等。
CogDL 還包括圖上的預訓練模型 GCC,GCC 主要利用圖的結構資訊來預訓練圖神經網路,從而使得該網路可以遷移到其他資料集上,來取得較好的節點分類和圖分類的效果。
跟進 SOTA。CogDL 跟進最新發布的演算法,包含不同任務下 SOTA 的實現,同時建立了不同任務下所有模型的 leaderboard(排行榜),研究人員和開發人員可以透過 leaderboard 比較不同演算法的效果。
自定義模型和資料。“資料-模型-訓練”三部分在 CogDL 中是獨立的,研究者和使用者可以自定義其中任何一部分,並複用其他部分,從而提高開發效率。
# 監督GraphSAGE
python scripts/train.py --task node_classification --dataset pubmed --model graphsage -seed 0 1 2 3 4 5
# 無監督GraphSAGE
python scripts/train.py --task unsupervised_node_classification --dataset pubmed --model unsup_graphsage
# DeepWalk + Node2Vec演算法 + BlogCatalog + Wikipedia資料集
python script/train.py --task unsupervised_node_classificatoin --dataset blogcatalog wikipedia --model deepwalk node2vec
# 獲取模型/資料/訓練的引數
args = get_default_args()
args.task = 'node_classification'
args.dataset = 'cora'
args.model = 'gcn'
# 建立資料集
dataset = build_dataset(args)
args.num_features = dataset.num_features
args.num_classes = dataset.num_classes
args.num_layers = 2
# 建立模型
model = build_model(args)
# 訓練+驗證
task = build_task(args, dataset=dataset, model=model)
ret = task.train()
CogDL 開發者表示,“起初,我們只是整合了實驗室內部從事相關領域研究的同學所使用的相關程式碼,為了方便實驗室其餘的同學執行相關的實驗。後來,我們決定將程式碼開源出來,讓更多的研究和開發人員能夠藉助我們的程式碼從事相關工作。”
如今,CogDL 已經上線了 CogDL v0.1.1。
“我們增加了一些最前沿的圖神經網路模型,包括圖自監督模型、圖預訓練模型。使用者可以利用圖上預訓練好的模型做不同的下游任務。在下游任務方面,我們增加了知識圖譜的連結預測任務,方便從事知識圖譜領域的使用者進行相關實驗。” CogDL 開發者說。
具體而言,在監督節點分類任務上,增加了 GRAND 和 DisenGCN,GRAND 在 Cora、PubMed、Citeseer 上取得了 SOTA 或者接近 SOTA 的效果;無監督節點分類任務上,增加了 DGI、MVGRL、GraphSAGE(無監督實現);在連結預測任務上,增加了知識圖譜上的連結預測 GNN 模型 RGCN 和 CompGCN;以及增加了圖上的預訓練模型 GCC。
另外,CogDL 也提供了使用 optuna 進行超引數搜尋的 example,透過指定 "模型,資料集,引數" 即可自動實現超引數的搜尋。
接下來,CogDL 研究者希望在現有基礎上,繼續補充其餘的圖領域的下游任務,新增更多的資料集,更新每個任務的排行榜;同時增加最前沿的關於預訓練的圖神經網路模型,支援使用者直接使用預訓練好的模型來進行相關應用;以及完善 CogDL 的教程和文件,讓剛接觸圖領域的初學者能夠快速上手。
談及最終的願景,CogDL 研究者表示,一方面希望從事圖資料領域的研究人員可以方便地利用 CogDL 來做實驗,另一方面希望面向實際應用的開發人員可以利用 CogDL 來快速地搭建相關下游應用,最終打造一個完善的圖領域的研發生態。
https://github.com/THUDM/cogdl
CogDL 0.1.1 release 詳細資訊
https://github.com/THUDM/cogdl/releases/tag/0.1.1