DGL | 基于深度图学习框架DGL的分子图生成
引言
Deep Graph Library (DGL) 是一个在图上做深度学习的框架。在0.3.1版本中,DGL支持了基于PyTorch的化学模型库。如何生成分子图是我感兴趣的。
环境准备
- PyTorch:深度学习框架
- DGL:用于图上的深度学习,支持PyTorch、MXNet等多种深度学习框架
- RDKit:用于构建分子图并从字符串表示形式绘制结构式
分子生成与Junction Tree VAE
分子生成
候选药用化合物的数量估计为10 ^ {23} -10 ^ {60} ,但是合成所有这些化合物是不现实的,每年都会发现新的化合物。到目前为止,仅合成了大约10 ^ 8 。
设计新化合物,考虑其合成方法,在药物发现的过程中尝试实际合成的化合物需要大量的时间和金钱,故AI药物发现具有了原始动机。药物发现的的目标是产生对疾病有效的药物,副作用更少且易合成
Junction Tree VAE
JT-VAE (junction tree variational autoencoder)

JT-VAE同时考虑了分子的两种图表示:分子图和联合树。在分子图中,我们把原子作为节点,化学键作为边。在联合树中,我们将分子图中的一些子结构看作节点。”
基于DGL的分子图生成
导入库
import dglfrom dgl import model_zoofrom dgl.model_zoo.chem.jtnn import JTNNDataset, cuda, JTNNCollatorimport rdkitfrom rdkit import Chemfrom rdkit.Chem import Draw, MolFromSmiles, MolToSmilesimport torchfrom torch.utils.data import DataLoader, Subsetfrom tqdm.notebook import tqdm
数据预处理
dataset = JTNNDataset(data="test", vocab="vocab", training=False)dataset.training = False
载入数据
dataset.data = ['CN1C=NC2=C1C(=O)N(C(=O)N2C)C', 'CCN(CC)C(=O)C1CN(C2CC3=CNC4=CC=CC(=C34)C2=C1)C']
使用Dataloader批次化处理和获取数据
def worker_init_fn(id_): lg= rdkit.RDLogger.logger() lg.setLevel(rdkit.RDLogger.CRITICAL)