Chemprop 是 MIT 开源的分子性质预测工具,核心是 D-MPNN(有向消息传递神经网络)。它长期是这个领域最难被超越的强基线之一——很多号称 SOTA 的新架构,在公平划分下并不能稳定赢过调好的 Chemprop。任何分子性质预测项目,先用它打一版基线是最省时间的做法。
安装
pip install chemprop
chemprop train --help # v2 起统一为 chemprop 子命令
注意 Chemprop v1 与 v2 的命令行差别很大(v1 用 chemprop_train 脚本,v2 改为 chemprop train)。网上大量教程还停留在 v1,跑不通时先确认版本。
数据格式
smiles,logS
CC(=O)Oc1ccccc1C(=O)O,-1.72
CN1C=NC2=C1C(=O)N(C)C(=O)N2C,-0.88
一个 CSV,第一列 SMILES,其后每列一个任务。多任务只需多加几列,缺失值留空即可——D-MPNN 会自动只在有标签的任务上回传梯度,这是它做多任务 ADMET 的便利之处。
训练与预测
# 训练:骨架划分 + 5 折集成 + 拼接 RDKit 描述符
chemprop train \
--data-path train.csv --task-type regression \
--split-type scaffold_balanced --num-folds 5 \
--ensemble-size 5 --epochs 50 \
--descriptors-generator rdkit_2d_normalized \
--save-dir ckpt/
# 预测
chemprop predict --test-path new.csv \
--model-path ckpt/ --preds-path preds.csv \
--uncertainty-method ensemble
| 选项 | 为什么要开 |
|---|---|
--split-type scaffold_balanced |
随机划分会让指标虚高,骨架划分才反映外推能力 |
--ensemble-size 5 |
小数据下单模型方差大,集成同时提升精度与不确定性质量 |
--descriptors-generator rdkit_2d_normalized |
图表示 + 全局描述符拼接,通常比纯图稳一截 |
--uncertainty-method ensemble |
拿到每个预测的方差,用于判断可信度 |
超参搜索
chemprop hpopt --data-path train.csv --task-type regression \
--search-parameter-keywords depth hidden_dim ffn_num_layers dropout \
--raytune-num-samples 30 --hyperopt-save-dir hpopt/
常见有效区间:depth 3~6、hidden_dim 300~1200、dropout 0~0.35。收益通常不如「把数据清干净 + 用对划分 + 做集成」来得大,别在这里花掉大部分时间。
怎么读结果
- 先看基线对比:拿 ECFP4 + 随机森林作为对照。如果 Chemprop 赢不了指纹基线,多半是数据量太小(几百条以下)或标签噪声太大,此时该回头查数据而不是换模型。
- 看不确定性而不只看点预测:集成方差大的分子,说明落在训练分布之外,预测不该被采信。实际项目里,用不确定性做过滤比追求整体 RMSE 低更有价值。
- 关注适用域:D-MPNN 学的是相关性不是机理。对训练集里没有的新骨架,外推能力有限,这是所有分子性质模型的共同边界。
- 报告要完整:写清划分方式、折数、随机种子数、是否集成。只报一个 RMSE 而不说划分方式的结果,等于没报。
上手提示
- 任何分子性质预测项目,先跑 Chemprop 打基线,再谈复杂模型;
- 三件必开:骨架划分、多折集成、RDKit 描述符拼接;
- 永远和 ECFP4 + 随机森林对照,赢不了就回去查数据;
- 用集成方差做可信度过滤,比压低整体 RMSE 更有实用价值。
延伸资源
- 论文精读:131《Chemprop / D-MPNN 论文精读》;评测陷阱:169《Benchmark 陷阱》;
- 对照框架:172《DeepChem》、176《PyTorch Geometric》;特征工程:219《Molfeat》;
- 不确定性与适用域的概念背景见「AI 模型」模块。