1. 药物分子生成工程导论

药物发现从来不是“找到一个分子”这么简单。它是一条由靶点确认、先导化合物发现、先导优化、临床前评价到临床试验串联而成的长链条,而分子生成模型真正介入的位置,主要落在链条前段的“候选分子产生”环节。传统做法依赖高通量筛选、化合物库采购或化学家经验设计,可探索的化学空间往往只有 106~107 量级;而类药化学空间估计在 1030~1060 量级。生成模型的价值,就是用可学习的分布去逼近这个巨大空间,并按目标性质定向采样,把“大海捞针”变成“按条件捞针”。

但“能生成分子”与“能交付一个可用的分子生成系统”之间,隔着一条很长的工程链路。本课程关注的正是这条链路:从算法原型到可交付系统。所谓分子生成工程,是把生成模型、化学约束、性质评估、筛选决策、数据闭环与工程服务组合成一套可重复运行、可评估、可迭代的系统,而不是训练完一个模型、跑出一批 SMILES 就结束。

一、分子生成在药物发现流程中的定位

把药物发现流程拆开看,分子生成并不是孤立模块,它同时受上游靶点信息约束、受下游实验评价检验。上游输入通常包括:靶点结构或序列、已知活性化合物(如 IC50、Kd 数据)、结合口袋信息、成药性先验;下游输出则要经过对接打分、ADMET 预测、合成可行性评估,最终进入合成与生物测试。因此,生成模型的第一定位是候选空间的高效采样器,第二定位是多目标约束下的条件生成器,第三定位是与实验数据形成闭环的迭代引擎。

这三层定位决定了工程任务的不同侧重:采样器关注覆盖率与新颖性,条件生成器关注属性达标率与可控性,闭环引擎关注数据回流、模型更新与决策一致性。若只把生成模型当作“分子打印机”,就会在后续筛选阶段发现大量分子无法合成、毒性超标或与靶点无结合,工程价值迅速衰减。

二、生成模型工程的核心任务

核心任务可以归纳为五类,它们彼此耦合,不能单独优化。

  • 表示与建模:选择分子表示(SMILES、SELFIES、分子图、3D 构象)与生成范式(VAE、GAN、自回归 Transformer、扩散模型、流匹配)。表示决定了合法性、可逆性与 3D 信息保留能力。
  • 条件控制:把目标性质(logP、QED、TPSA、对接分数、选择性)作为条件注入生成过程,常见方式有条件向量拼接、分类器引导、无分类器引导(CFG)与强化学习微调。
  • 约束与过滤:硬约束(子结构、骨架、分子量范围)与软约束(类药五规则、PAINS 过滤、合成可及性 SAscore)需要在生成中或生成后执行。
  • 评估与筛选:用有效性、唯一性、新颖性、多样性、属性达标率、对接富集等指标量化生成质量,并建立多目标排序策略。
  • 工程化与闭环:把模型封装为可调用服务,管理数据版本、模型版本、实验反馈,形成“生成—评估—合成—测试—回流”的迭代循环。

这五类任务中,最容易被低估的是评估与闭环。很多项目在生成阶段指标漂亮,却因为没有统一的评估口径和实验回流机制,无法判断模型是否真的在变好。工程上通常要求:每次生成批次都记录模型版本、条件参数、随机种子、过滤规则与评估结果,使任何一批分子都可追溯、可复现。

三、从算法到可交付系统的全链路

下面这张图给出全链路的概览:左侧是输入与约束,中间是生成与评估的核心处理链,右侧是交付与闭环。它强调的不是线性步骤,而是“生成—评估—决策—回流”的循环结构。

输入与约束 靶点结构 / 序列 口袋、关键残基 已知活性数据 IC₅₀ / Kd / 选择性 成药性先验 logP、TPSA、QED 硬约束 骨架、子结构、MW 合成可行性 SAscore、反应规则 约束注入策略 生成与评估核心链 分子表示 SMILES / SELFIES / 图 生成模型 VAE / Transformer / 扩散 条件控制 CFG / 分类器引导 约束与过滤 合法性、PAINS、SAscore 性质评估与对接打分 ADMET 预测 · 对接 · 多目标排序 批次评估指标 有效性 · 唯一性 · 新颖性 · 达标率 候选分子排序与推荐清单 交付与闭环 模型服务化 API · 批处理 · 版本管理 合成与实验 路线设计 · 生物测试 实验数据回流 活性、毒性、代谢 模型再训练 微调 · 主动学习 决策与迭代 继续 / 调整 / 终止 数据—模型—实验闭环 数据回流 生成—评估—决策—回流构成闭环;每一批分子都需记录模型版本、条件参数与评估结果

图中左侧的约束并非一次性输入,而是随项目推进不断细化。例如早期只有靶点序列时,条件主要来自类药性先验;当获得第一批活性数据后,条件可以加入药效团匹配或对接分数阈值;当实验反馈积累到一定规模,条件分布本身就可以被重新估计。工程上常把这一过程称为“约束的逐步收紧”,它比一次性设定全部条件更符合真实项目节奏。

四、一个可运行的最小示例

为了把上述链路落到具体操作,下面给出一个最小可运行示例的配置片段。它并不追求模型性能,而是展示工程上必须显式记录的关键字段。示例参数均为教学假设值,不代表任何真实实验结果。

# generation_batch.yaml(教学示例)
model:
  name: "chemgen-transformer-v0"
  checkpoint: "ckpt/epoch_12.pt"
  representation: "SELFIES"
  max_length: 96

condition:
  target: "EGFR-T790M"
  logP_range: [1.5, 3.5]
  tpsa_max: 90
  qed_min: 0.55
  sa_score_max: 4.0
  substructure_required: "quinazoline"

sampling:
  num_molecules: 5000
  temperature: 0.9
  cfg_scale: 1.8
  seed: 20240517

filter:
  validity: true
  uniqueness: true
  pains: true
  mw_range: [250, 550]

evaluation:
  docking: "vina"
  admet_model: "admet-v2"
  metrics: ["validity", "uniqueness", "novelty",
            "diversity", "qed_pass_rate", "dock_score_p50"]

运行后,工程上首先看的是有效性与唯一性:若 5000 条采样中有效分子不足 80%,说明表示或解码环节存在问题;若唯一性低于 90%,说明模型陷入重复模式。其次看条件达标率:例如 QED ≥ 0.55 的比例、SAscore ≤ 4.0 的比例。最后才看对接分数分布,因为对接本身有噪声,单批次的 p50 波动可能达到 0.5~1.0 kcal/mol,需要多批次比较才有意义。

判断一批生成结果是否“可用”,建议同时满足:有效性 ≥ 95%、唯一性 ≥ 90%、条件达标率 ≥ 60%、且至少 20~50 个分子进入下一轮人工或自动筛选。任一指标显著偏低时,优先排查表示、条件注入与过滤规则,而不是直接换更大的模型。

五、工程视角下的常见误区

第一个误区是把生成指标当成项目指标。有效性、新颖性高,不等于分子能合成、能结合、能成药。第二个误区是忽略数据版本。同一模型在不同数据切分下评估结果可能差异很大,缺少版本记录就无法复现。第三个误区是只做单向生成,不做实验回流。没有回流,模型只能停留在先验分布附近,无法针对真实靶点持续优化。第四个误区是把约束全部放在生成后过滤,导致大量采样被浪费;更高效的做法是在生成过程中就注入关键约束。