DiffDock(MIT Jaakkola 组,ICLR 2023)把分子对接重新表述为生成问题:在配体的平移、旋转和可旋转键扭转构成的流形上做扩散去噪,直接采样出结合姿势,再用一个独立的置信度模型排序。它不需要预先指定口袋,属于「盲对接」。
部署
git clone https://github.com/gcorso/DiffDock.git
cd DiffDock
mamba env create -f environment.yml
conda activate diffdock
python -m inference --config default_inference_args.yaml \
--protein_path receptor.pdb --ligand "COc1ccc2nc(...)cc2c1" \
--out_dir results/
需要 GPU(推荐 ≥16 GB 显存),依赖 torch-geometric、e3nn 等。批量运行时用 CSV 传入蛋白路径与配体 SMILES 列表。首次运行会下载预训练权重。
关键参数
| 参数 | 含义 | 建议 |
|---|---|---|
samples_per_complex |
采样姿势数 | 10~40;越多越可能采到正确姿势,也越慢 |
inference_steps |
扩散去噪步数 | 默认 20 通常够用 |
--no_final_step_noise |
末步去噪声 | 开启通常更稳 |
置信度怎么读
输出文件名里的 confidence 是置信度模型给的分数(大致对应「该姿势 RMSD < 2 Å 的可能性」,logit 尺度)。经验分界:
- > 0:较可信,值得进入下一步分析;
- −1.5 ~ 0:不确定,需要交叉验证;
- < −1.5:低可信,基本不应采纳。
置信度不是亲和力。它只回答「这个姿势像不像真的」,完全不回答「这个分子结合得强不强」。用它做虚拟筛选排序是常见误用。
独立评测提出的质疑
- 训练集泄漏与相似性:多项独立工作指出,PDBBind 时间划分下 DiffDock 的成功率明显低于原论文数字;对与训练集相似度低的新蛋白,表现下降显著。
- 物理合理性问题:生成的姿势常出现键长键角畸变、与蛋白原子空间冲突(steric clash)。PoseBusters 等检查套件发现相当比例的姿势通不过基本物理检验——拿到结果后务必跑一遍 PoseBusters 类检查。
- 对 apo / 预测结构更弱:在非共晶(apo)结构或 AlphaFold 预测结构上,成功率比在 holo 结构上低不少,而这恰恰是实际项目的常见处境。
- 后续版本有改进:DiffDock-L 等更新版本扩大了训练数据并改善了泛化,选版本时留意。
务实用法
- 用它做口袋未知时的探索——这是它相对传统对接的真正优势场景。
- 把它的姿势当假设而非结论:与 Vina / GNINA 交叉对比,一致的姿势才更可信。
- 选中的姿势再做短程 MD 或能量最小化,滤掉物理上站不住的结果。
- 不要用置信度做亲和力排序;需要排序就回到经验打分或 CNN 重打分。
上手提示
- 优势是盲对接(不需要已知口袋),不是精度也不是排序能力;
- 置信度衡量姿势可信度,绝不等于亲和力;
- 结果必须过 PoseBusters 类物理检查,畸变姿势比例不低;
- 与 Vina / GNINA 交叉验证,一致才采纳。
延伸资源
- 论文精读:101《DiffDock 论文精读》;教程:018《DiffDock 教程》;
- 对照方法:182《AutoDock Vina》、183《GNINA》、185《EquiBind》、186《TankBind》;
- 评测陷阱:169《Benchmark 陷阱》。