004

DeepChem 教程体系入门:适合新手的第一个 AI 制药工具箱

DeepChem 教程适合作为第一个 AI 制药工具箱。这篇给出学习路径、重点章节与需要注意的地方。

DeepChem 的教程体系是入门 AI 制药最完整的免费资源之一:从化学信息学基础到深度学习模型,有几十个可直接运行的 Notebook。它的价值在于「能立刻跑起来」,而这对入门至关重要。

教程体系的结构

部分 内容 建议
基础 数据集、特征化、模型接口 必看
分子性质预测 QSAR、多任务、图模型 必看
数据处理 划分器、转换器 必看(划分部分)
深度学习模型 GCN、GAT、MPNN、AttentiveFP 选看
生成模型 VAE、GAN 选看
蛋白与结构 结合亲和力、对接封装 选看
量子化学 / 材料 DFT 数据、材料性质 按需

建议的学习路径

# 【第 1 周】:跑通基础流程
#
#   1) 环境安装
#      conda create -n deepchem python=3.10
#      conda activate deepchem
#      pip install deepchem[torch]
#      → 【依赖较重,建议独立环境】
#
#   2) 加载一个数据集,训练一个模型,看指标
#      目标:理解 Dataset → Featurizer → Model → Metric 的流程
#
#   3) 换不同的 featurizer 试试
#      ECFP / GraphConv / Mol2Vec
#      → 【感受表示方式对结果的影响】

import deepchem as dc

# 【关键:用 scaffold 划分而非 random】
tasks, datasets, transformers = dc.molnet.load_delaney(
    featurizer="ECFP", splitter="scaffold")
train, valid, test = datasets

from sklearn.ensemble import RandomForestRegressor
model = dc.models.SklearnModel(
    RandomForestRegressor(n_estimators=500, n_jobs=-1))
model.fit(train)

metric = dc.metrics.Metric(dc.metrics.rms_score)
print("训练:", model.evaluate(train, [metric], transformers))
print("测试:", model.evaluate(test, [metric], transformers))
# 【训练与测试的差距,就是过拟合的程度】

# 【第 2 周】:理解评测
#
#   4) 【对比 random 与 scaffold 划分的结果】
#      → 这个对比是整个学习中最有价值的一课
#
#   5) 多个随机种子跑同一个配置
#      → 感受结果的方差有多大
#
#   6) 用自己的 CSV 数据跑一遍

# 【第 3 周】:深度学习模型
#
#   7) 试 GraphConvModel、AttentiveFP
#   8) 【与随机森林基线比较】
#      → 常常发现深度模型没有明显优势
#      → 这是重要的认识,不是失败

# 【第 4 周】:扩展
#
#   9) 多任务学习
#   10) 迁移学习 / 预训练模型
#   11) 结合自己关心的实际问题

最重要的一课:划分方式的影响

# 【建议在学习早期就做这个实验】

import deepchem as dc
import numpy as np
from sklearn.ensemble import RandomForestRegressor

results = {}
for splitter in ["random", "scaffold"]:
    scores = []
    for seed in range(5):
        tasks, datasets, transformers = dc.molnet.load_delaney(
            featurizer="ECFP", splitter=splitter, reload=False)
        train, valid, test = datasets
        model = dc.models.SklearnModel(
            RandomForestRegressor(n_estimators=300, random_state=seed, n_jobs=-1))
        model.fit(train)
        metric = dc.metrics.Metric(dc.metrics.pearson_r2_score)
        scores.append(model.evaluate(test, [metric], transformers)["pearson_r2_score"])
    results[splitter] = (np.mean(scores), np.std(scores))

for k, (m, s) in results.items():
    print(f"{k:10s} R² = {m:.3f} ± {s:.3f}")

# 典型输出:
#   random     R² = 0.88 ± 0.02
#   scaffold   R² = 0.62 ± 0.05
#
# 【这个差距就是「记忆」与「泛化」的差别】
# → 理解了这一点,你就超过了很多发表的论文(见 169)

需要注意的地方

  • 依赖较重且易冲突:DGL、PyTorch、TensorFlow、RDKit 的版本组合有时难调和。用独立 conda 环境并锁定版本
  • 教程可能与最新版本不同步:API 有变化,老 Notebook 可能报错。遇到问题先查 GitHub 的 issue
  • MoleculeNet 数据集的局限:数据集小、标签质量参差(见 132《MoleculeNet 论文精读》)——把它当作学习工具而非评价方法优劣的依据
  • 不是生产级平台:DeepChem 定位是研究工具库,缺少数据治理、模型管理、系统集成能力(见 134《DeepChem 平台解读》);
  • 某些模型实现的成熟度不一:用之前看看该模型的更新时间与测试情况。

学完之后该往哪走

方向 下一步
分子性质预测 Chemprop(专用、更成熟,见 131《Chemprop / D-MPNN 论文精读》
更贴近实际的数据与任务 TDC(见 133《TDC 论文精读》005《Therapeutics Data Commons 教程》
化学信息学实操 RDKit Cookbook(见 013《RDKit Cookbook》
完整的 CADD 流程 TeachOpenCADD(见 012《TeachOpenCADD 教程》
图神经网络原理 CS224W(见 006《Stanford CS224W 图神经网络》
结构基方法 对接与 MD(见 017《AutoDock Vina 教程》015《OpenMM 教程》
实际项目 用自己的数据做一遍

给不同背景学习者的建议

  • 有 ML 背景、缺化学:重点看 featurizer 部分,理解不同分子表示的含义;同时补化学信息学基础(见 031《SMILES 入门》035《分子指纹是什么》);
  • 有化学背景、缺 ML重点看划分器与评测部分——这是最容易出错也最重要的;模型部分可以先当黑盒;
  • 共同建议不要满足于「跑通了教程」。真正的学习发生在你用自己的数据、遇到教程里没有的问题时;
  • 一个练习:从 ChEMBL 下载一个靶点的数据,完整走一遍清洗、建模、评测——你会发现真实数据的问题比教程多得多,而这正是要学的

关键要点

  • 它的核心价值是「能立刻跑起来」,对入门至关重要;
  • 最有价值的一课是对比 random 与 scaffold 划分的结果差距——理解了这点就超过很多论文;
  • 依赖较重,用独立 conda 环境并锁定版本;教程可能与最新版不同步;
  • 不要满足于跑通教程——真正的学习发生在用自己的数据时

延伸资源