172

DeepChem:AI 药物发现开源框架实战价值

DeepChem 把数据集、特征化、模型、划分统一成四件套,是新手跑通分子机器学习最省心的框架。这篇讲清它的对象模型、什么时候该用它、什么时候该换掉它。

DeepChem 是最早成体系的开源分子机器学习框架(MIT 许可,源自斯坦福 Pande 组)。它的价值不在于某个最强模型,而在于把「数据集 → 特征化 → 模型 → 划分与评测」抽象成四个可互换的组件,让你用几十行代码跑通一条完整的分子 ML 流程。

安装

pip install deepchem            # 核心
pip install deepchem[torch]     # 需要 GNN 等深度模型时
python -c "import deepchem as dc; print(dc.__version__)"

DeepChem 同时支持 PyTorch 与 TensorFlow 后端,历史上的模型分散在两边,新项目优先选 PyTorch 系的实现。它依赖 RDKit 做底层化学处理(见 171《RDKit》)。

四件套对象模型

组件 作用 常用实现
Featurizer 分子 → 数值表示 CircularFingerprintMolGraphConvFeaturizerRDKitDescriptors
Dataset 统一存放 X / y / w / ids NumpyDatasetDiskDataset
Splitter 划分训练/验证/测试 RandomSplitterScaffoldSplitterButinaSplitter
Model 训练与预测 GraphConvModelAttentiveFPModelSklearnModel

四者可以自由组合:换特征不用改模型,换划分不用改数据。这种正交设计正是它适合做基线对比的原因。

一段完整流程

import deepchem as dc
import numpy as np

# 1) 加载标准数据集(自动下载 + 特征化 + 划分)
tasks, datasets, transformers = dc.molnet.load_delaney(
    featurizer="GraphConv", splitter="scaffold")
train, valid, test = datasets

# 2) 建模训练
model = dc.models.GraphConvModel(n_tasks=len(tasks), mode="regression")
model.fit(train, nb_epoch=50)

# 3) 评测(注意要反变换回原尺度)
metric = dc.metrics.Metric(dc.metrics.rms_score)
print("valid RMSE", model.evaluate(valid, [metric], transformers))
print("test  RMSE", model.evaluate(test,  [metric], transformers))

这里刻意用了 splitter="scaffold"。随机划分会把同一骨架的类似物同时放进训练和测试集,导致指标虚高——这是分子 ML 最常见的自欺方式,DeepChem 把骨架划分做成一行参数正是为了让你别偷懒。

什么时候用它,什么时候别用

  • 适合:第一次跑通分子 ML 全流程;快速比较「不同特征 × 不同模型 × 不同划分」的组合;教学与内部培训;需要 MoleculeNet 标准数据集做对照实验(见 178《DeepPurpose》)。
  • 不适合:追最新 SOTA 架构——DeepChem 的模型实现更新往往滞后;单任务性质预测上,Chemprop(见 174《Chemprop》)通常是更强也更省心的基线;要深度定制图网络结构时,直接写 PyG(见 176《PyTorch Geometric》)更自由。
  • 现实做法:用 DeepChem 建立第一版可运行基线和评测脚手架,一旦确定要深挖某个任务,再迁到专用工具上。

常见坑

  • 忘了传 transformersload_* 默认对 y 做了归一化,评测时不传回 transformers,得到的 RMSE 是归一化尺度上的数字,看着好得离谱。
  • API 跨版本漂移:DeepChem 历史上多次重构,网上教程常跑不通。锁死版本号,并以官方 Examples 仓库(见 180《DeepChem Examples》)为准。
  • DiskDataset 留下大量缓存:反复实验会在临时目录堆积特征化结果,长期跑批要主动清理。
  • 把 MoleculeNet 成绩当项目预期:公开集上的 RMSE 和你自家数据上的表现没有可比性,数据分布完全不同。

上手提示

  • DeepChem 的核心资产是「四件套」抽象和标准数据集,不是模型本身;
  • 默认就用 ScaffoldSplitter,随机划分只用于 sanity check;
  • 评测记得传 transformers,否则指标不在原始尺度上;
  • 把它当起步脚手架,深入某个任务后换更专精的工具。

延伸资源