DeepChem 是最早、也是最全面的开源分子机器学习库。它的价值毋庸置疑——但把它当作「药企级 AI 平台」是一个常见的误解。理解它的真实定位,能避免不必要的失望。
DeepChem 提供什么
| 模块 | 内容 |
|---|---|
| 数据加载 | MoleculeNet 全部数据集,一行加载(见 132《MoleculeNet 论文精读》) |
| 特征化 | ECFP、图、Coulomb 矩阵、Weave、Mol2Vec 等 |
| 划分器 | 随机、骨架、时间、指纹、分子量 |
| 模型 | GCN、GAT、MPNN、AttentiveFP、Chemprop 封装、随机森林等 |
| 评价 | 各类指标与超参数搜索 |
| 其它 | 对接封装、量子化学接口、材料科学模块 |
典型用法
pip install deepchem
# 图模型还需要:pip install dgl torch
import deepchem as dc
import numpy as np
# ---- 加载数据 ----
tasks, datasets, transformers = dc.molnet.load_delaney(
featurizer="GraphConv", splitter="scaffold")
train, valid, test = datasets
# ---- 训练图卷积模型 ----
model = dc.models.GraphConvModel(
n_tasks=len(tasks),
mode="regression",
dropout=0.2,
batch_size=64,
learning_rate=0.001,
model_dir="model/",
)
model.fit(train, nb_epoch=50)
# ---- 评价 ----
metric = dc.metrics.Metric(dc.metrics.pearson_r2_score)
print("训练:", model.evaluate(train, [metric], transformers))
print("验证:", model.evaluate(valid, [metric], transformers))
print("测试:", model.evaluate(test, [metric], transformers))
# ---- 用自己的数据 ----
loader = dc.data.CSVLoader(
tasks=["activity"],
feature_field="smiles",
featurizer=dc.feat.CircularFingerprint(size=2048, radius=2),
)
dataset = loader.create_dataset("my_data.csv")
splitter = dc.splits.ScaffoldSplitter()
train, valid, test = splitter.train_valid_test_split(dataset)
# 随机森林基线(【应该先跑这个】)
from sklearn.ensemble import RandomForestRegressor
sklearn_model = RandomForestRegressor(n_estimators=500, n_jobs=-1)
model = dc.models.SklearnModel(sklearn_model)
model.fit(train)
「不等于生产级平台」是什么意思
# 真实的药企 AI 平台需要的能力,DeepChem 大多不提供:
#
# 1) 【数据治理】
# - 实验数据的来源追溯与版本管理
# - 不同测定方法的数据对齐
# - 数据质量的自动检查与异常标记
# → DeepChem 假设数据已经干净
#
# 2) 【模型生命周期管理】
# - 模型版本、训练数据快照、超参数记录
# - A/B 测试与灰度发布
# - 模型性能的持续监控与漂移检测
# → 这些需要 MLOps 基础设施(见 205)
#
# 3) 【与实验系统的集成】
# - 电子实验记录本(ELN)
# - 化合物注册系统
# - 高通量筛选数据管道
# → 这是药企 IT 的核心,DeepChem 不涉及
#
# 4) 【多方案协作】
# - 化学家能用的界面
# - 结果的审阅与批注
# - 决策记录
#
# 5) 【合规与审计】
# - 数据访问控制
# - 计算过程的可追溯性
# - 法规环境下的验证要求
#
# 6) 【性能与规模】
# - 十亿级分子的处理
# - 分布式训练与推理
# - 缓存与增量计算
#
# DeepChem 的定位是【研究工具库】而非【平台】
# —— 这不是缺陷,而是它的设计目标
实践中的常见问题
- 依赖较重且易冲突:DGL、PyTorch、TensorFlow、RDKit 的版本组合有时难以调和。建议用独立的 conda 环境并锁定版本;
- API 变动:不同版本间接口有变化,老教程可能跑不通;
- 模型实现的成熟度不一:有些模型是完整实现且充分测试的,有些是较早的贡献且维护较少——用之前应看该模型的最近更新与测试覆盖;
- 性能不是首要目标:对大规模数据,专用实现(如 Chemprop 本身、PyTorch Geometric)通常更快;
- 封装的抽象有时碍事:
dc.data.Dataset的抽象在做定制时可能不如直接用 PyTorch 方便。
什么时候用,什么时候不用
| 场景 | 建议 |
|---|---|
| 学习分子机器学习 | 很好——教程完整,覆盖面广 |
| 快速尝试多种特征化方法 | 很好——统一接口 |
| 复现 MoleculeNet 结果 | 很好 |
| 教学与培训 | 很好 |
| 做一个具体任务的最优模型 | 用专用库(Chemprop、PyG) |
| 生产部署 | 需要自建工程层 |
| 大规模数据处理 | 用专用方案 |
务实的项目搭建路线
# 从零搭建一个内部分子性质预测能力,建议路线:
#
# 阶段 1:基线(1~2 周)
# RDKit 算 ECFP + 描述符
# LightGBM 训练
# 骨架划分评测
# → 这个基线常常已经够用
# → 【不要跳过这一步】
#
# 阶段 2:数据工程(持续)
# 建立数据清洗与标准化流程(见 046)
# 记录数据来源与测定条件
# 建立时间划分的评测集
# → 【这一步的价值通常高于换模型】
#
# 阶段 3:模型改进(按需)
# 试 Chemprop、预训练模型
# 只有在明确超过基线时才采用
#
# 阶段 4:工程化(有需求时)
# 实验跟踪(MLflow/W&B)
# 模型注册与版本管理
# 推理服务与监控
# → 见 205
#
# DeepChem 在阶段 1 与 3 有用,
# 但阶段 2 与 4 才是决定项目成败的地方
关键要点
- DeepChem 的定位是研究工具库,不是平台——它不做数据治理、生命周期管理与系统集成;
- 教学、原型、方法横向比较是它的强项;生产部署需要自建工程层;
- 依赖较重,建议独立环境并锁定版本;不同模型的成熟度不一;
- 数据工程的价值通常高于换模型——这是项目成败的真正分水岭。
延伸资源
- MoleculeNet:132《MoleculeNet 论文精读》;TDC:133《TDC 论文精读》;Chemprop:131《Chemprop / D-MPNN 论文精读》;
- MLOps:205《MDAnalysis》;分子标准化:046《分子标准化》。