| Graphique dynamique | Tgn |
|---|---|
![]() | ![]() |
Malgré la pléthore de différents modèles d'apprentissage en profondeur sur les graphiques, peu d'approches ont été proposées jusqu'à présent pour faire face à des graphiques qui présentent une sorte de nature dynamique (par exemple, des caractéristiques en évolution ou une connectivité au fil du temps).
Dans cet article, nous présentons des réseaux de graphiques temporels (TGN), un cadre générique et efficace pour l'apprentissage en profondeur sur des graphiques dynamiques représentés comme des séquences d'événements chronométrés. Grâce à une nouvelle combinaison de modules de mémoire et d'opérateurs basés sur des graphiques, les TGN sont capables de surpasser considérablement les approches précédentes étant en même temps plus efficaces sur le calcul.
Nous montrons en outre que plusieurs modèles précédents d'apprentissage sur des graphiques dynamiques peuvent être coulés comme des instances spécifiques de notre cadre. Nous effectuons une étude d'ablation détaillée de différentes composantes de notre cadre et concevons la meilleure configuration qui atteint des performances de pointe sur plusieurs tâches de prédiction transductive et inductive pour les graphiques dynamiques.
Dépendances (avec python> = 3,7):
pandas==1.1.0
torch==1.6.0
scikit_learn==0.23.1
Téléchargez les exemples de jeux de données (par exemple Wikipedia et Reddit) à partir d'ici et stockez leurs fichiers CSV dans un dossier nommé data/ .
Nous utilisons le format npy dense pour enregistrer les fonctionnalités au format binaire. Si les caractéristiques de bord ou les caractéristiques des nœuds sont absentes, elles seront remplacées par un vecteur de zéros.
python utils/preprocess_data.py --data wikipedia --bipartite
python utils/preprocess_data.py --data reddit --bipartite
Apprentissage auto-supervisé à l'aide de la tâche de prédiction de lien:
# TGN-attn: Supervised learning on the wikipedia dataset
python train_self_supervised.py --use_memory --prefix tgn-attn --n_runs 10
# TGN-attn-reddit: Supervised learning on the reddit dataset
python train_self_supervised.py -d reddit --use_memory --prefix tgn-attn-reddit --n_runs 10
Apprentissage supervisé sur la classification des nœuds dynamiques (cela nécessite un modèle formé à partir de la tâche auto-supervisée, par exemple en exécutant les commandes ci-dessus):
# TGN-attn: self-supervised learning on the wikipedia dataset
python train_supervised.py --use_memory --prefix tgn-attn --n_runs 10
# TGN-attn-reddit: self-supervised learning on the reddit dataset
python train_supervised.py -d reddit --use_memory --prefix tgn-attn-reddit --n_runs 10
### Wikipedia Self-supervised
# Jodie
python train_self_supervised.py --use_memory --memory_updater rnn --embedding_module time --prefix jodie_rnn --n_runs 10
# DyRep
python train_self_supervised.py --use_memory --memory_updater rnn --dyrep --use_destination_embedding_in_message --prefix dyrep_rnn --n_runs 10
### Reddit Self-supervised
# Jodie
python train_self_supervised.py -d reddit --use_memory --memory_updater rnn --embedding_module time --prefix jodie_rnn_reddit --n_runs 10
# DyRep
python train_self_supervised.py -d reddit --use_memory --memory_updater rnn --dyrep --use_destination_embedding_in_message --prefix dyrep_rnn_reddit --n_runs 10
### Wikipedia Supervised
# Jodie
python train_supervised.py --use_memory --memory_updater rnn --embedding_module time --prefix jodie_rnn --n_runs 10
# DyRep
python train_supervised.py --use_memory --memory_updater rnn --dyrep --use_destination_embedding_in_message --prefix dyrep_rnn --n_runs 10
### Reddit Supervised
# Jodie
python train_supervised.py -d reddit --use_memory --memory_updater rnn --embedding_module time --prefix jodie_rnn_reddit --n_runs 10
# DyRep
python train_supervised.py -d reddit --use_memory --memory_updater rnn --dyrep --use_destination_embedding_in_message --prefix dyrep_rnn_reddit --n_runs 10
Commandes pour reproduire tous les résultats dans l'étude d'ablation sur différents modules:
# TGN-2l
python train_self_supervised.py --use_memory --n_layer 2 --prefix tgn-2l --n_runs 10
# TGN-no-mem
python train_self_supervised.py --prefix tgn-no-mem --n_runs 10
# TGN-time
python train_self_supervised.py --use_memory --embedding_module time --prefix tgn-time --n_runs 10
# TGN-id
python train_self_supervised.py --use_memory --embedding_module identity --prefix tgn-id --n_runs 10
# TGN-sum
python train_self_supervised.py --use_memory --embedding_module graph_sum --prefix tgn-sum --n_runs 10
# TGN-mean
python train_self_supervised.py --use_memory --aggregator mean --prefix tgn-mean --n_runs 10
optional arguments:
-d DATA, --data DATA Data sources to use (wikipedia or reddit)
--bs BS Batch size
--prefix PREFIX Prefix to name checkpoints and results
--n_degree N_DEGREE Number of neighbors to sample at each layer
--n_head N_HEAD Number of heads used in the attention layer
--n_epoch N_EPOCH Number of epochs
--n_layer N_LAYER Number of graph attention layers
--lr LR Learning rate
--patience Patience of the early stopping strategy
--n_runs Number of runs (compute mean and std of results)
--drop_out DROP_OUT Dropout probability
--gpu GPU Idx for the gpu to use
--node_dim NODE_DIM Dimensions of the node embedding
--time_dim TIME_DIM Dimensions of the time embedding
--use_memory Whether to use a memory for the nodes
--embedding_module Type of the embedding module
--message_function Type of the message function
--memory_updater Type of the memory updater
--aggregator Type of the message aggregator
--memory_update_at_the_end Whether to update the memory at the end or at the start of the batch
--message_dim Dimension of the messages
--memory_dim Dimension of the memory
--backprop_every Number of batches to process before performing backpropagation
--different_new_nodes Whether to use different unseen nodes for validation and testing
--uniform Whether to sample the temporal neighbors uniformly (or instead take the most recent ones)
--randomize_features Whether to randomize node features
--dyrep Whether to run the model as DyRep
@inproceedings { tgn_icml_grl2020 ,
title = { Temporal Graph Networks for Deep Learning on Dynamic Graphs } ,
author = { Emanuele Rossi and Ben Chamberlain and Fabrizio Frasca and Davide Eynard and Federico
Monti and Michael Bronstein } ,
booktitle = { ICML 2020 Workshop on Graph Representation Learning } ,
year = { 2020 }
}