想象你是一家分子料理餐厅的主厨,而 AI 是你的“疯狂创意助手”。每天早晨,它都会推着一车新菜谱冲进厨房:炭烤天山雪莲、液氮泡沫鲟鱼、用 47 种香料分层堆叠的彩虹千层。每一道听上去都惊艳,但你的后厨只有普通食材和一口炒锅——这些菜谱 90% 根本做不出来。于是你需要一套“菜谱可行性评分系统”:先快速判断哪些菜能端上桌,再给助手立规矩,让它别再设计那些好看不好做的东西。AI 药物发现面临的是同一场闹剧。分子生成模型每天能画出成千上万个结构新颖的分子,但“画得出来”不等于“做得出来”。药物分子必须在实验室里被真实合成,才能进入活性测试——如果合成需要 20 步、产率不到 0.1%,再漂亮的分子也只能躺在纸面上。这篇文章要讲的就是 AI 分子生成领域的“厨房守则”:如何用 SA Score(合成可及性评分)快速评估分子的可制造性,把可合成性约束融入生成过程,再用后过滤、逆合成验证和湿实验形成完整闭环。读完你不仅能理解这套“菜谱评审系统”的原理,还能在自己的生成模型里直接落地。
对 AI 从业者而言,掌握可合成性评估与约束是让生成模型从“纸上谈兵”走向“真实制造”的关键一步,也是药物发现工程化落地中最具实践价值的技能之一。
可视化演示
展示SA Score多特征打分计算、约束融入分子生成流程、后过滤候选分子筛选管线及三种策略SA/多样性/产率对比,含星座网络背景和发光动画。
本节配有交互动效(进入视口后自动加载,约 3KB)。
可合成性概念
主厨面对的第一道难题,是如何判断一张菜谱可不可行。方法很朴素:先看食材在市场上见不见得到,再看工序长不长。药物化学家看到 AI 画出的分子时,脑子里闪过的也是同样的问题——这玩意儿合成得了吗?那些由罕见杂环、密集手性中心堆叠而成的漂亮结构,往往看一眼就知道是实验室的噩梦。
在生成模型与真实实验之间,横亘着一条巨大的“可行性鸿沟”。模型感受不到烧瓶、溶剂和反应温度,它只擅长在化学空间里漫游。SA Score(Synthetic Accessibility Score,合成可及性评分)正是用来丈量这条鸿沟的标尺,它由 Ertl 和 Schuffenhauer 于 2009 年提出,目前是评估分子可制造性最常用的指标。
SA Score 从两个维度估计合成难度:分子中结构片段在已知化合物库中出现的频率,以及分子本身的拓扑复杂度。评分范围 1 到 10,1 代表极易合成,10 代表几乎无法合成。药物化学实践通常以 SA ≤ 4 或 5 作为候选分子的筛选线,超过这条线的分子会被直接降级或要求重新设计。
这就像主厨用“食材可得性 + 工序复杂度”给每张菜谱打出 1-10 的难度分,低于 4 分的菜才有资格进入本周菜单。
- 评分范围SA(m) 把分子 m 映到闭区间 [1, 10],分子 m 是待评估的化合物结构。
- 方向含义SA 值越小,合成难度越低。箭头表示两个量同向变化。
- 实践门槛结合领域惯例,SA ≤ 4 或 5 是进入后续实验的参考线,超过则触发重新设计。
SA Score计算
主厨的评分细则听起来合理,但具体怎么打?答案是两本账:第一本账记录食材在市场上出现的频率——萝卜白菜满街都是,松露出现在高级进口超市,而“喜马拉雅冰莲”只在传说里。第二本账记录做菜的工序复杂度——炒鸡蛋三步搞定,舒芙蕾要控温、打发、水浴,一步不能错。SA Score 的计算,正是把分子拆成“食材片段”记第一本账,再数分子结构的“工序复杂度”记第二本账。
计算时先把分子切割成一系列结构片段,每个片段在 PubChem 等化合物库里都有一个统计出现概率。接着统计分子的环数、桥环、立体中心等复杂度特征。两项按权重叠加,归一化到 1-10,就得到最终的 SA 分数。
其中 $\mathcal{F}(m)$ 是分子 m 切割出的片段集合,$P(f_i)$ 是片段 $f_i$ 在库中的出现概率,$C(m)$ 是复杂度计数,$\beta$ 是权重系数。
1. 片段集合:$\mathcal{F}(m)$ 把分子按化学键规则拆解成若干结构片段,类似菜谱中列出所有食材。
2. 对数概率:$\ln P(f_i)$ 是片段出现概率的对数,概率低时绝对值大,代表食材罕见。
3. 负号取稀缺:$-\ln P(f_i)$ 将罕见的片段转化为较大的难度贡献,罕见扣分多。
4. 复杂度罚项:$\beta \cdot \log(1 + C(m))$ 对环数、立体中心等结构复杂度做平滑惩罚,复杂度越高罚分越高。
5. 两项求和:片段项与复杂度项相加后归一化到 1-10,即 SA Score 的最终值。
这就是菜谱评分器的内部公式:罕见食材扣分多、步骤复杂扣分多。理解它,你就知道 SA Score 为什么能反映合成难度,也明白它本质上是一个基于统计的启发式估计。
约束融入生成
如果等菜谱交上来再逐张评审,一千张里可能有九百张是废纸,后厨团队累死也筛不完。聪明的做法是给创作过程立规矩:跟创意助手说,只允许用超市能买到的食材,工序不超过十步。这样产出的菜谱天然靠谱。分子生成同样如此——与其在生成后再费力筛选,不如把可合成性约束直接融入生成模型。
工程上有三种主流的融入方式。第一种是条件生成:把 SA Score 作为条件变量输入生成器,让模型学会生成指定难度区间的分子。第二种是目标函数惩罚:在 VAE 的重构损失或 GAN 的对抗损失中,加入 λ·SA(m) 惩罚项,强行压低生成分子的难度。第三种是强化学习:把 SA 分数作为奖励信号的组成部分,用策略梯度引导生成器探索“又新颖又好做”的区域。
这个式子描述的是目标函数惩罚与强化学习共用的核心思想:最大化“活性收益”与“可合成性代价”的差值,λ 控制两者间的权衡。
1. 生成分布采样:$m \sim p_\theta(m)$ 表示从参数为 θ 的生成模型分布中采样一个分子,θ 是模型权重。
2. 活性收益:$R_{\text{活性}}(m)$ 是用预测模型评估的分子生物学活性得分,对应菜品的“美味程度”。
3. 合成惩罚:$\lambda \cdot \text{SA}(m)$ 是可合成性惩罚项,λ 是超参数,越大模型越倾向于生成易合成分子。
4. 期望与最大化:$\mathbb{E}[\cdot]$ 求平均收益,$\max_\theta$ 表示调整模型参数使平均净收益最大。
把“超市可购 + 工序简短”直接写进创作需求单,生成器从一开始就不往高难度区域跑,后处理压力骤减。
后过滤策略
即使生成器已经带有可合成性意识,概率采样总会带来漏网之鱼——就像再严格的创作要求,也可能混进一张用液氮做的甜点菜谱。这时后厨需要一道质量检验关卡,把不合格的菜谱挑出来扔掉。后过滤在 AI 分子生成流程中是最直观、成本最低的兜底策略。
后过滤发生在生成完成之后、实验之前。它通常不是单一条件的简单判断,而是多指标联合评估:先看 SA 阈值,再看预测活性,最后核查合成路径是否真实存在。只有全部条件满足的分子才被放行进入实验室。
τ 是 SA 阈值,η 是活性阈值,$\mathcal{T}_{\text{已知}}$ 表示已知反应模板集合。三个条件用逻辑与连接,缺一不可。
这相当于“主厨终审 + 营养师复核 + 供应链核对”三道关叠加,把侥幸漏网的“好看不好做”分子拦在实验室门外。
- SA 阈值门$\text{SA}(m) \le \tau$ 表示分子难度不超过阈值 τ,τ 通常取 4-5。
- 活性阈值门$\text{活性}(m) \ge \eta$ 表示预测活性不低于 η,避免留下“好做但没用”的分子。
- 路径已知门$\text{路径}(m) \in \mathcal{T}_{\text{已知}}$ 意指分子至少存在一条映射到已知反应模板的合成路径。
- 逻辑与$\wedge$ 表示所有条件必须同时满足,任一不满足即被过滤。
逆合成验证
菜谱难度评分再科学,终究是估算。也许“炭烤天山雪莲”听着吓人,但实际只需三步:超市买莲、上炭烤架、撒盐。真正可靠的验证,是把成品菜倒着拆回去,一步步确认能否还原成基础食材。化学上这叫逆合成分析(Retrosynthetic Analysis),是分子可制造性验证的黄金标准。
逆合成的思路是把目标分子当作“成品菜”,用反应模板反向拆解:目标分子在某种反应条件下可以由哪些前体合成,每个前体又继续拆解,直到所有叶子节点都是易得的原料。整个过程构成一棵逆合成树,AI 要做的是在这棵树中搜索一条综合成本最低的路径。
$\mathcal{T}$ 是反应模板库,$P_t$ 是模板 t 下某步逆推的置信概率,K 是路径深度。整体可行性等于最优模板路径上各步概率的连乘。
从成品菜一路倒推,直到菜谱上只剩下超市里的土豆、洋葱和鸡蛋,这条路才算真正走通。
- 模板集合$t \in \mathcal{T}$ 遍历反应模板库中的所有候选逆推方式,类似把成品菜按不同切法倒推。
- 单步逆推概率$P_t(m_k \to m_{k-1})$ 是第 k 步用模板 t 从分子 $m_k$ 推出前体 $m_{k-1}$ 的置信度。
- 路径连乘$\prod_{k=1}^{K}$ 将整条逆合成路径各步概率相乘,任何一步不可行都会压垮整条路径。
- 最优路径$\max_{t}$ 在所有模板候选路径中选取置信度最高的一条,作为该分子的可行合成方案。
实验验证方法
主厨拿着评分、逆推完菜谱,心里也许已经有九成把握,但真正的裁判只有一个:点火试菜。端上桌之前,一切都只是纸面推演。化学领域的“试菜”就是湿实验——把合成的每一步放进真实的烧瓶里,看反应到底跑不跑得通、产率有多少、纯度高不高。
湿实验验证是分子可制造性链条的最后一环,也是最昂贵的一环。因此,工程上会用前三步(SA 打分、约束生成、后过滤)把候选数量压缩到极小,再进入实验室。实验数据还会作为反馈信号回流到生成模型,形成迭代优化闭环:模型看到哪些“看似可合成”的分子实际失败了,下次生成时就主动避开那些坑。
$\mathcal{M}_{\text{PASS}}$ 是通过 SA 门槛的候选分子空间,$E_{\text{实验}}(m)$ 是分子在湿实验中的实测表现,最终选出的 $m^{*}$ 是合成与活性综合最优的分子。
试菜之后要做记录:哪道菜客人点赞、哪道菜糊了锅。这些记录回传给创意助手,让下一轮的菜谱更接地气、更容易端上桌。
- 候选空间$\mathcal{M}_{\text{PASS}}$ 是满足 SA ≤ τ 的分子集合,代表已在纸面上通过可制造性审查的分子。
- 实验表现$E_{\text{实验}}(m)$ 是湿实验实测指标,包括产率、纯度、反应时间等真实数据。
- 最优选择$\arg\max$ 在候选集合中挑选实验表现最佳的分子作为最终产出。
AI 应用场景
AI 制药公司的候选分子大规模筛选
阶段:分子生成后处理与评估
解决的问题:传统虚拟筛选中,面对 AI 生成的海量分子,计算化学家只能靠经验人工挑拣,效率和召回率都很低。引入 SA Score 自动过滤后,资源被集中到真正可合成的分子上,后续湿实验成本大幅下降。
具体案例:某初创药企用强化学习生成 10 万个先导化合物,先用 SA ≤ 4 的阈值过滤掉 83%,再对剩余分子做逆合成路径验证,最终锁定 120 个候选进入实验室合成,实测命中率从不足 1% 提升到 12%。
分子生成模型的可制造性奖励设计
阶段:模型训练与奖励函数设计
解决的问题:如果只在生成后筛选,大量算力和数据都被浪费在不可合成的分子上。更优雅的做法是把可合成性直接编码进训练目标,让生成器天生偏向易合成区域。
具体案例:某团队在训练分子生成模型时加入 λ·SA 惩罚项,模型生成分子的平均 SA 从 6.8 降至 3.9,同时活性分布几乎没有下降。就像在菜谱创作要求里写明“只用超市食材”,创作质量与可行性同时得到保障。
有机合成路线的 AI 辅助规划
阶段:合成规划与实验验证
解决的问题:化学家手动查阅文献设计合成路线,耗时数周且依赖经验。AI 逆合成引擎用反应模板自动拆解目标分子,为每一个候选分子生成可执行的合成路线。
具体案例:某药企将逆合成引擎与 HPLC、质谱分析数据集成,对 1000 个虚拟分子自动规划合成路线,发现其中 96% 存在已知反应模板支撑的路径,合成团队的实验室可执行率达到九成。
Python 演示
"""Simplified SA Score calculation and candidate filtering demo.SA Score low means easy to synthesize. Range is mapped to [1, 10]."""import mathimport random # Fragment frequency library, simulated from PubChem statistics.# Low probability means the fragment is rare and hard to obtain.FRAGMENT_FREQ = { 'methyl': 0.12, 'benzene': 0.08, 'hydroxyl': 0.07, 'carboxyl': 0.05, 'amino': 0.04, 'chloro': 0.02, 'cyclopropane': 0.003, 'perfluoro': 0.001, 'bridged_ring': 0.0005} def sa_score(fragments): """Calculate SA Score for a molecule given its fragments.""" rare_penalty = 0.0 for frag in fragments: prob = FRAGMENT_FREQ.get(frag, 1e-4) rare_penalty += -math.log(prob) complexity = len(fragments) for frag in fragments: if frag in ('bridged_ring', 'perfluoro'): complexity += 2 raw_score = rare_penalty * 0.08 + math.log1p(complexity) * 1.2 return max(1.0, min(10.0, round(raw_score, 2))) def generate_molecules(count=200): """Simulate a generative model producing random molecules.""" fragments = list(FRAGMENT_FREQ.keys()) molecules = [] for _ in range(count): size = random.randint(2, 6) mol = [random.choice(fragments) for _ in range(size)] molecules.append(mol) return molecules def post_filter(molecules, threshold=5.0): """Keep molecules whose SA Score is not higher than threshold.""" passed = [] for mol in molecules: score = sa_score(mol) if score <= threshold: passed.append((mol, score)) return passed def main(): """Run the demo: generate, score, filter and report.""" random.seed(42) mols = generate_molecules(200) passed = post_filter(mols, threshold=5.0) ratio = len(passed) / len(mols) * 100 print("generated molecules: {}".format(len(mols))) print("passed filter: {}".format(len(passed))) print("pass ratio: {:.1f}%".format(ratio)) if passed: best = min(passed, key=lambda item: item[1]) print("easiest molecule: {}, SA = {}".format(best[0], best[1])) if __name__ == '__main__': main()
prob = FRAGMENT_FREQ.get(frag, 1e-4)从模拟频率库查片段的出现概率,查不到就按极罕见的 1e-4 处理,对应“稀有食材按最高难度计”。rare_penalty += -math.log(prob)将概率转为对数再取负,罕见片段贡献很大的难度增量,这是 SA 公式的片段项。math.log1p(complexity) * 1.2复杂度罚项:片段数越多、含桥环或全氟片段,罚分越高,log1p使罚分平滑增长。return max(1.0, min(10.0, round(raw_score, 2)))把原始分数归一化到 1-10 区间,和论文的 SA 范围保持一致。post_filter(mols, threshold=5.0)后过滤函数主体,只保留 SA ≤ 5 的分子,对应药物化学中常用的 5 分门槛。
常见误区
误区我以前以为 SA Score 是实验测出来的物理量,只要分数足够低,分子就一定能合成出来。分数只要低于 3,随便交给实验室都能做出来。
正解SA Score 是启发式估计,不是物理测量值。它由片段频率统计和结构复杂度推导而来,可能低估那些“结构看似简单但反应条件极其苛刻”的分子。SA 低是合成可行的必要条件,但不是充分条件。就像菜谱评分只有 2 分的“分子冰淇淋”,实际需要液氮设备,普通厨房依然做不了。
为何常见:教程常把 SA 可视化当作最终结论,初学者容易把统计打分误认为实验事实,忽略它与真实合成之间还有逆合成验证和湿实验两道关口。
误区模型训练时已经在目标函数里加了 λ·SA 惩罚,生成出来的分子应该全部可合成,后过滤没有必要,直接全部拿去打活性测试就行。
正解生成模型本质是概率采样,即使目标函数包含惩罚项,仍然会随机产出高 SA 分子。工程上“约束融入”和“后过滤”是互补的双保险:前者降低生成的难度均值,后者兜住分布的尾部。类比来说,即使菜谱审核再严格,上菜前仍然要有质检员把个别糊掉的菜拦下来。
为何常见:人们习惯把训练目标当成硬约束,忽略了深度生成模型输出具有随机性这一基本事实。
误区后过滤不就是把 SA 大于 5 的分子删掉吗?一条判断语句就能完成,没什么技术含量。
正解真实工程中的后过滤是“多指标联合评估”:SA 阈值、活性预测、ADMET 性质、逆合成路径检查协同工作。单按 SA 过滤可能留下活性差、毒性高或根本无法合成的分子。好比光看“食材常见”还不够,还得检查菜品是否营养均衡、是否含有过敏原。
为何常见:教学演示为了清晰常以单阈值简化,导致初学者低估了工程落地中多约束联合过滤的复杂度。
误区SA 分数低就代表逆合成可行,两个概念说的都是可合成性,功能上可以互相替代。
正解SA 是端到端的统计评分,输入一个分子输出一个分数,不给出任何具体反应步骤。逆合成分析则用反应模板逐层拆解,输出完整的前体和反应条件。前者是“体检报告”,后者是“具体手术方案”。实践中两者联合使用:SA 负责快速粗筛,逆合成负责精准验证。
为何常见:两者都在回答“这个分子好不好做”这一问题,名称和用途高度相似,初学者极易混淆两者的边界。
面试题
Q1. SA Score 的取值范围是下列哪一项?
- A.介于0和1之间
- B.介于1和10之间← 正确答案
- C.介于1和50之间
- D.介于0和100之间
答案:B。SA Score 是 Ertl 在 2009 年提出的 1-10 分制评分,1 分代表极易合成,10 分代表极难合成,就像菜谱难度评分从“炒青菜”到“分子料理”。A 选项 0-1 是概率的常见范围,C/D 选项夸大了量纲,都不符合论文定义。
Q2. 某分子的 SA Score 越低,表示该分子:
- A.分子越难被合成
- B.分子越容易被合成← 正确答案
- C.表明分子质量较大
- D.分子结构更加稳定
答案:B。SA Score 打分方向是“越低越易合成”,就像菜谱难度 1 分是番茄炒蛋,10 分是分子料理。A 选项把方向说反了;C 选项的分子量与 SA 无关;D 选项的热力学稳定性也不是 SA 的考察对象。
Q3. SA Score 计算公式的两个主要组成部分是:
- A.片段频率与复杂度← 正确答案
- B.原子数目与电荷
- C.分子量大小与熔点
- D.溶解度高低与颜色
答案:A。原论文中 SA 由片段频率贡献项加结构复杂度罚项构成,可类比菜谱的“食材常见度”加“工序复杂度”。B 中原子数属于复杂度但不完整且电荷无关;C 和 D 的物理化学性质都不是 SA 的输入特征。
Q4. 在生成模型的目标函数中加入 λ·SA(m) 惩罚项,属于哪种可合成性融入策略?
- A.后过滤策略
- B.条件生成约束
- C.目标函数惩罚← 正确答案
- D.逆合成分析
答案:C。题干明确说“目标函数中加入惩罚项”,这是把可合成性约束融进训练过程的目标函数惩罚策略。A 后过滤发生在生成之后;B 条件生成是把 SA 当作输入条件变量;D 是生成之后的验证手段,均与题干不符。
Q5. 逆合成分析(Retrosynthetic Analysis)的基本思路是:
- A.从原料出发正向推导成品
- B.从目标分子反推前体和反应← 正确答案
- C.随机组合原子生成各种分子
- D.查数据库获取已有分子结构
答案:B。逆合成是从目标分子出发,用反应模板反向拆解出前体和反应条件,就像大师傅从成品菜反推菜谱步骤。A 是正向合成方向;C 是随机生成器的行为;D 是数据库检索,都与逆合成的“反推”思想不符。
Q6. 以下哪一项是后过滤策略的主要缺点?
- A.实现简单且运行速度快
- B.无需训练任何额外模型
- C.大量候选分子被直接浪费← 正确答案
- D.可解释性强且容易调试
答案:C。后过滤在生成完成后才筛选,若生成器没有可合成性意识,绝大多数候选分子会被丢弃,算力和数据都被浪费。A/B/D 都是后过滤的优点而非缺点。这就像等一千张菜谱交上来再逐张淘汰,厨师的精力消耗巨大。
Q7. 分子通过 SA 阈值过滤后,下一步最应该做的是:
- A.进行逆合成反应验证← 正确答案
- B.无需任何进一步的验证
- C.只需改变分子画的颜色
- D.直接进入临床前动物实验
答案:A。SA 只是启发式估计,通过阈值后需要逆合成验证确认反应路径真实存在,之后才能进入湿实验。就像菜谱评分通过后还要实际试做一次。B 跳过验证风险太高;C 无实际意义;D 跳过了合成与活性测试阶段。
Q8. 把可合成性约束融入分子生成过程的常见方法包括:
- A.条件生成约束← 正确答案
- B.目标函数惩罚← 正确答案
- C.强化学习调整← 正确答案
- D.手动人工筛选
答案:ABC。三种主流的融入方式:条件生成(把 SA 作为条件变量输入生成器)、目标函数惩罚(损失中加入 λ·SA 项)、强化学习(把 SA 作为奖励信号)。D 手动筛选属于生成后的后处理,不是融入生成过程的方法。
Q9. 影响 SA Score 复杂度罚项的分子特征有:
- A.片段出现频率
- B.环与桥环数量← 正确答案
- C.立体中心数目← 正确答案
- D.大环与稠环结构← 正确答案
答案:BCD。复杂度罚项关注分子拓扑结构,包括环数、桥环/稠环、立体中心、大环等特征,这些都会增加合成难度。A 片段频率属于 SA 的片段贡献项而非复杂度罚项,因此不选。
Q10. 以下哪些实践能有效提升 AI 生成分子的可制造性?
- A.生成阶段加SA惩罚← 正确答案
- B.后过滤阈值筛选← 正确答案
- C.逆合成反应验证← 正确答案
- D.湿实验反馈优化← 正确答案
答案:ABCD。完整工程链路是:生成时加入 SA 惩罚让模型天然倾向易合成区域;后过滤做多指标兜底筛选;逆合成验证确认反应路径真实存在;湿实验反馈优化形成迭代闭环。四者共同构成可制造性保障体系,缺一不可。