This repository contains the source code for the paper GNNExplainer: Generating Explanations for Graph Neural Networks by Rex Ying, Dylan Bourgeois, Jiaxuan You, Marinka Zitnik & Jure Leskovec, presented at NeurIPS 2019.
[Arxiv] [BibTex] [Google Scholar]
@misc{ying2019gnnexplainer,
    title={GNNExplainer: Generating Explanations for Graph Neural Networks},
    author={Rex Ying and Dylan Bourgeois and Jiaxuan You and Marinka Zitnik and Jure Leskovec},
    year={2019},
    eprint={1903.03894},
    archivePrefix={arXiv},
    primaryClass={cs.LG}
}
See INSTALLATION.md
This is the model that will be explained. We do provide pre-trained models for all of the experiments that are shown in the paper. To re-train these models, run the following:
python train.py --dataset=EXPERIMENT_NAME
where EXPERIMENT_NAME is the experiment you want to replicate.
For a complete list of options in training the GCN models:
python train.py --help
TODO: Explain outputs
To run the explainer, run the following:
python explainer_main.py --dataset=EXPERIMENT_NAME
where EXPERIMENT_NAME is the experiment you want to replicate.
For a complete list of options provided by the explainer:
python train.py --help
The result of the optimization can be visualized through Tensorboard.
tensorboard --logdir log
You should then have access to visualizations served from localhost.
We provide an example visualization through Jupyter Notebooks in the notebook folder. To try it:
jupyter notebook
The default visualizations are provided in notebook/GNN-Explainer-Viz.ipynb.
Note: For an interactive version, you must enable ipywidgets
jupyter nbextension enable --py widgetsnbextension
You can now play around with the mask threshold in the GNN-Explainer-Viz-interactive.ipynb.
TODO: Explain outputs + visualizations + baselines
We provide export functionality so the generated masks can be visualized in other data visualization frameworks, for example d3.js. We provide an example visualization in Observable.
| Name | EXPERIMENT_NAME | 
Description | 
|---|---|---|
| Synthetic #1 | syn1 | 
Random BA graph with House attachments. | 
| Synthetic #2 | syn2 | 
Random BA graph with community features. | 
| Synthetic #3 | syn3 | 
Random BA graph with grid attachments. | 
| Synthetic #4 | syn4 | 
Random Tree with cycle attachments. | 
| Synthetic #5 | syn5 | 
Random Tree with grid attachments. | 
| Enron | enron | 
Enron email dataset source. | 
| PPI | ppi_essential | 
Protein-Protein interaction dataset. | 
| Reddit* | REDDIT-BINARY | 
Reddit-Binary Graphs (source). | 
| Mutagenicity* | Mutagenicity | 
Predicting the mutagenicity of molecules (source). | 
| Tox 21* | Tox21_AHR | 
Predicting a compound's toxicity (source). | 
Datasets with a * are passed with the
--bmnameparameter rather than--datasetas they require being downloaded manually.
TODO: Provide all data for experiments packaged so we don't have to split the two.
A graph attention model is provided. This repo is still being actively developed to support other GNN models in the future.
See CHANGELOG.md