项目文件夹

文件

Junction Tree Variational Autoencoder for Molecular Graph Generation (JTNN)

Wengong Jin, Regina Barzilay, Tommi Jaakkola. Junction Tree Variational Autoencoder for Molecular Graph Generation. arXiv preprint arXiv:1802.04364, 2018.

JTNN uses algorithm called junction tree algorithm to form a tree from the molecular graph. Then the model will encode the tree and graph into two separate vectors z_G and z_T. Details can be found in original paper. The brief process is as below (from original paper):

image

Goal: JTNN is an auto-encoder model, aiming to learn hidden representation for molecular graphs. These representations can be used for downstream tasks, such as property prediction, or molecule optimizations.

Dataset

ZINC

The ZINC database is a curated collection of commercially available chemical compounds prepared especially for virtual screening. (introduction from Wikipedia)

Generally speaking, molecules in the ZINC dataset are more drug-like. We uses ~220,000 molecules for training and 5000 molecules for validation.

Preprocessing

Class JTNNDataset will process a SMILES into a dict, including the junction tree, graph with encoded nodes(atoms) and edges(bonds), and other information for model to use.

Usage

Training

To start training, use python train.py. By default, the script will use ZINC dataset with preprocessed vocabulary, and save model checkpoint at the current working directory.

-s SAVE_PATH, Path to save checkpoint models, default to be current
              working directory (default: ./)
-m MODEL_PATH, Path to load pre-trained model (default: None)
-b BATCH_SIZE, Batch size (default: 40)
-w HIDDEN_SIZE, Size of representation vectors (default: 200)
-l LATENT_SIZE, Latent Size of node(atom) features and edge(atom)
                features (default: 56)
-d DEPTH, Depth of message passing hops (default: 3)
-z BETA, Coefficient of KL Divergence term (default: 1.0)
-q LR, Learning Rate (default: 0.001)

Model will be saved periodically. All training checkpoint will be stored at SAVE_PATH, passed by command line or by default.

Dataset configuration

If you want to use your own dataset, please create a file contains one SMILES a line, and pass the file path to the -t or --train option.

  -t TRAIN, --train TRAIN
                        Training file name (default: train)

Evaluation

To start evaluation, use python reconstruct_eval.py, and following arguments

-t TRAIN, Training file name (default: test)
-m MODEL_PATH, Pre-trained model to be loaded for evalutaion. If not
               specified, would use pre-trained model from model zoo
               (default: None)
-w HIDDEN_SIZE, Hidden size of representation vector, should be
                consistent with pre-trained model (default: 450)
-l LATENT_SIZE, Latent Size of node(atom) features and edge(atom)
                features, should be consistent with pre-trained model
                 (default: 56)
-d DEPTH, Depth of message passing hops, should be consistent
          with pre-trained model (default: 3)

And it would print out the success rate of reconstructing the same molecules.

Pre-trained models

Below gives the statistics of pre-trained JTNN_ZINC model.

Pre-trained model % Reconstruction Accuracy
JTNN_ZINC 73.7

Visualization

Here we draw some "neighbor" of a given molecule, by adding noises on the intermediate representations. You can download the script with wget https://data.dgl.ai/dgllife/jtnn_viz_neighbor_mol.ipynb. Please put this script at the current directory (examples/pytorch/model_zoo/chem/generative_models/jtnn/).

Given Molecule

image

Neighbor Molecules

image