Boltz 亲和力预测实战:一条命令跑通,两个数字筛出候选分子
【免费下载链接】boltzOfficial repository for the Boltz biomolecular interaction models项目地址: https://gitcode.com/GitHub_Trending/bo/boltz
Boltz(Boltz-2)开源项目的亲和力预测模块,一次运行会同时给出两个数:0–1 的结合概率,和以 log10(IC50) 表示的亲和力数值。前者决定一个分子值不值得留下,后者决定下一步该怎么改。本文按"先跑通一次 → 看懂两个数 → 设筛选阈值 → 做优化迭代"的顺序展开,读完可以直接照着做。
🧪 先跑通:输入文件怎么写,一条命令出结果
Boltz 通过 pip 安装后即可使用,模型权重在首次运行时自动下载到本地缓存。整个预测流程只需要一个 YAML 输入文件和一条命令行。
输入文件怎么写
输入文件的核心是三样东西:一条蛋白质链、一条配体链、一个属性声明。
sequences: - protein: id: A sequence: MVTPEGN... # 此处填写完整氨基酸序列 msa: ./examples/msa/seq1.a3m - ligand: id: B smiles: 'NC@@Hcc1)C(=O)O' properties: - affinity: binder: B蛋白质链给出id和氨基酸序列,msa指向该蛋白的多序列比对文件(用在线服务自动生成时可以省略);配体链给出id和 SMILES 字符串(也可以改用ccd码引用化合物数据库里的标准配体)。properties下的affinity块只写一行:binder指向要做亲和力预测的配体链 ID,一个文件里只能指定一个小分子。仓库里提供了可直接运行的示例examples/affinity.yaml,完整字段说明(多链、修饰残基、模板结构、口袋约束等)见 docs/prediction.md。
一条命令跑预测
boltz predict examples/affinity.yaml --use_msa_server --diffusion_samples_affinity 5 --output_format pdb参数逐个看:
--use_msa_server:MSA(多序列比对)是把蛋白的同源序列排齐后的产物,给模型提供进化信息。带上这个开关,Boltz 会通过在线服务自动检索生成;不带就需要自己准备好.a3m文件写进msa字段。--diffusion_samples_affinity:扩散采样的次数。扩散采样可以理解为"模型从一团噪声开始,逐步去噪、精修出一个三维构象"的生成过程,亲和力预测默认采样 5 次,次数越多统计量越稳。--sampling_steps_affinity:每个样本内部的去噪步数,默认 200,步数越多结构越精细,运行也越慢。--output_format pdb:预测出的蛋白-配体复合物以 PDB 格式写出(默认是 MMCIF),之后可以丢进 PyMOL 等可视化工具里检查结合姿态。
结果文件长什么样
运行结束后,输出目录的predictions/<输入文件名>/下会生成affinity_<输入文件名>.json,亲和力结果就在里面:
{ "affinity_pred_value": 0.8367, "affinity_probability_binary": 0.8425, "affinity_pred_value1": 0.8225, "affinity_probability_binary1": 0.0, "affinity_pred_value2": 0.8225, "affinity_probability_binary2": 0.8402 }没有后缀的两个字段是双模型集成(ensemble)的汇总结果,带_1、_2的是集成中第 1、第 2 个模型各自的输出。如果某个成员明显偏离汇总值——比如上面第 1 个模型的概率是 0,第 2 个是 0.84——说明模型对这个化合物"意见不统一",可以把它当作可信度偏低的提示。日常使用一般直接看无后缀的汇总字段。
看懂两个数:一个是是否题,一个是刻度尺
这两个数来自训练数据和监督信号都不同的两个预测头,各自回答的问题不一样:
affinity_probability_binary(结合概率):0–1 之间,是模型认为"这个配体是活性结合物"的概率。它只回答是或否,像流水线上的合格/不合格闸门,适合大规模判别,不管分子结合得多紧。
affinity_pred_value(亲和力数值):单位是 log10(IC50),IC50 按 μM 计算。IC50 指达到一半结合效应所需的配体浓度——数值越小,说明药量需求越低、结合越紧。取 log10 是为了把动态范围压平方便处理:
- 输出
-3:对应 IC50 约 10⁻⁶ μM(即 10⁻⁹ M),强结合物; - 输出
0:对应 IC50 约 1 μM,中等结合物; - 输出
2:对应 IC50 约 100 μM,弱结合物,基本是诱饵水平。
数字越小,预测结合越强。
⚠️ 一个常见误用:这个数值只在"不同活性分子之间比较相对强弱"时才有意义,拿它去区分活性与非活性并不可靠——那是概率字段的任务。
想和实验测定值直接对照,可以用下面的公式换算成 pIC50(kcal/mol 单位的能量值,数值越大亲和力越强):
pIC50 = (6 − affinity_pred_value) × 1.364
🎯 虚拟筛选怎么设阈值:用概率从大库挑苗子
虚拟筛选的任务,是从百万级的化合物库里挑出少数几个值得进湿实验的候选。流程很直接:
- 为库里每个化合物准备一份 YAML 输入,批量跑预测;
- 只记录每个分子的
affinity_probability_binary; - 阈值分两轮:第一轮用约 0.5 的低阈值粗筛,宁可多留、怕漏真阳性;第二轮对幸存者收紧到 0.7–0.8,留得越少,进实验的把握越大。
也可以不切阈值,直接按概率从高到低排序取 Top-N,两种做法结合使用效果更稳。
动手前先做两件事:一是把库里配体原子数明显偏大的化合物先剔除——亲和力模块的可靠范围是 ≤56 个原子(按 RDKit RemoveHs 后的计数),128 个是硬性上限,详见下文边界条件;二是这一步不要拿affinity_pred_value排序,它区分不了活性与惰性分子。
🔬 先导优化怎么迭代:用数值给分子改造指方向
拿到先导化合物后,问题从"它活不活性"变成"能不能结合得更紧",两个字段各自的角色也随之切换:
- 基于先导结构做一轮衍生物设计(官能团替换、桥环延伸等);
- 用 Boltz 批量预测每个衍生物,同时记下概率和数值两个字段;
- 按双重标准挑候选:概率保持在 0.8 以上(确认仍是可靠活性分子),在幸存者里再按
affinity_pred_value升序排,取最低的若干个送湿实验验证。
数值字段此时充当方向盘:这一轮改造如果数值下降且概率没掉,方向对了;如果概率跌破 0.8,说明这次改造丢掉了活性,要回退重做,而不是继续往这个方向推。
两个实用参数:
--affinity_mw_correction:给数值预测头加入分子量校正,当衍生物越改越大时建议开启,能改善大配体的数值估计;- 对最后几个候选,把
--diffusion_samples_affinity和--sampling_steps_affinity一起调高(比如 10 个样本 × 400 步),用更长的运行时间换取更稳的统计,小批量精算比全库都开大参数划算。
⚠️ 什么情况别用:适用边界与结果可信度
跑之前对照三条边界检查输入:
- 配体大小:建议 ≤56 个原子(RDKit RemoveHs 后计数),128 个以内可以运行但不推荐,再大就别用亲和力功能了;
- 靶点类型:针对蛋白质靶点优化,配 RNA/DNA 靶点跑不会报错,但输出不可信;
- 硬件:完整预测依赖 GPU,高采样、高步数的精算配置对显存和时间要求更高,库级筛选建议先用默认参数跑一遍再精算。
可信度方面,项目在独立测试集(含 FEP+ benchmark、CASP16、MF-PCBA)上报告了两个预测头对实验值的 Pearson 相关和 RMSE,与其他模型的对比见下图:
评估脚本在 scripts/eval/(run_evals.py、aggregate_evals.py),数据集构建方式写在 docs/evaluation.md。
往后看,随着训练数据和评测集的持续扩充,亲和力模块能覆盖的靶点与分子范围还会继续扩大;但"概率筛苗、数值精修"这套两个数字的工作流,现在就可以直接上手用。
【免费下载链接】boltzOfficial repository for the Boltz biomolecular interaction models项目地址: https://gitcode.com/GitHub_Trending/bo/boltz
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考