184

DiffDock:深度学习对接模型部署与使用

DiffDock 用扩散模型做盲对接,无需指定口袋即可给出候选姿势与置信度。这篇给出部署命令、置信度的正确读法,以及它被独立评测质疑的那些点。

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-geometrice3nn 等。批量运行时用 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 交叉验证,一致才采纳。

延伸资源