174

Chemprop:分子性质预测模型训练入门

Chemprop 提供开箱即用的 D-MPNN 训练流程,是分子性质预测最该先打的强基线。这篇给出完整命令行、必须开的选项,以及怎么读它的不确定性输出。

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 更有实用价值。

延伸资源