想象一位水果店老板要为新店进货。如果他只进同一箱红富士苹果,第一天或许卖得不错,但第二天顾客就会发现货架单调、选择匮乏,生意很快冷清。聪明的老板会进不同品种的水果——苹果、香蕉、橙子、葡萄,还要考虑产地、大小和成熟度。分子生成模型就像这位老板:一个只会输出相似分子的模型,哪怕单个分子质量再高,也会让后续的筛选、实验和研发失去意义。分子多样性,就是衡量这份“货架丰富度”的标尺。本文将从多样性度量指标(内部多样性与骨架多样性)出发,解释如何在生成过程中维持多样性,并探讨多样性-质量的平衡之道——让 AI 生成的分子既能覆盖广阔化学空间,又能满足实际性能需求。
对 AI 从业者而言,掌握分子多样性的度量和控制方法,是让生成模型真正落地到药物发现、新材料筛选等场景的关键能力,能显著提升实验筛选的覆盖率和命中率。
目录
可视化演示
分子多样性是评估生成模型质量的重要维度,过于相似的分子集合降低了虚拟筛选的覆盖面,本文讨论多样性度量指标内部多... 切换模式查看不同维度。
本节配有交互动效(进入视口后自动加载,约 3KB)。
分子多样性概:核心原理 动态展示关键流程与数据流动 交互控件调节参数实时渲染 f(x) = transform(x) 核心概念的可视化呈现
多样性度量:为什么货架不能只摆一种水果
水果店老板在开业前会先想清楚一个问题:我的货架要覆盖哪些品类?只卖苹果的店叫专卖店,卖上百种水果的店叫精品超市。分子生成模型同样面临“货架定位”:如果生成的分子全都围绕同一个母核打转,后续的虚拟筛选就只能在很小的化学空间里打转。多样性度量就是回答“我的货架有多丰富”的量化工具,它决定了生成模型能否真正帮助我们发现新分子。
多样性度量主要分为两个维度:内部多样性关注分子两两之间的差异程度,骨架多样性关注分子核心骨架的覆盖范围。前者回答“分子们彼此有多不像”,后者回答“分子们跨越了多少个结构家族”。两者结合,才能完整描述一个分子集合的丰富度。评估流程通常是:生成分子集合 → 计算分子指纹 → 选择度量指标 → 输出多样性分数。
一个通用的内部多样性计算方式是统计所有分子对的平均差异:
回到水果店:内部多样性高,意味着货架上的水果品种、大小、口感差异明显;若所有水果都像个孪生兄弟,哪怕数量再多,顾客也会觉得“没得选”。多样性度量,就是把这种“没得选”变成可以计算的数字。
- 分子总数$N$ 表示集合中分子的数量,分子对总数为 $\binom{N}{2} = \frac{N(N-1)}{2}$。
- 相似度分数$T_{ij}$ 表示第 $i$ 个分子与第 $j$ 个分子的相似度(如 Tanimoto 系数),取值范围 0 到 1。
- 互补距离$1 - T_{ij}$ 将相似度转换为“距离”,数值越大代表两个分子差异越大。
- 平均化处理$\frac{2}{N(N-1)}$ 将所有分子对的距离求和后取平均,得到集合的整体多样性水平。
内部多样性:每两件货的相似程度
假设老板想评估现有货架的丰富度,他会怎么做?最直观的办法是拿起任意两件水果比较——苹果和香蕉差异大,红富士和嘎啦差异小。把所有“两两比较”的结果综合起来,就是货架的整体丰富度。内部多样性正是按这个思路设计的:对分子集合中每一对分子计算相似度,再取“1 - 平均相似度”作为多样性分数。
技术实现上,先为每个分子生成指纹(下文会详述),再用 Tanimoto 系数计算两两相似度。Tanimoto 系数的定义是两个分子特征集的交集大小除以并集大小:
内部多样性的优点在于计算简单、对任何分子集合都适用。但它有一个明显的局限:对“骨架”不敏感。就像水果店里苹果和梨虽然在外观上很不同,但都属于蔷薇科——某些结构类似、取代基不同的分子可能相似度低,但骨架完全相同。只看内部多样性,可能会高估集合的覆盖范围。因此,我们需要下一节的骨架多样性来互补。
- 特征集合$A$、$B$ 分别是两个分子的指纹特征集合,$|A|$ 表示集合元素数量。
- 交集$|A \cap B|$ 是两个分子共有的特征数量,记为 $c$。
- 并集$|A \cup B|$ 是两个分子全部特征的数量之和减去交集,即 $a + b - c$。
- 比值计算共同特征占比越高,Tanimoto 值越接近 1;占比越低,分子差异越大。
骨架多样性:不同大类的骨架
水果店老板若只按“大小”和“颜色”进货,可能会买回一堆梨形苹果、苹果形梨——看起来不同,本质上还是同一个家族。真正让货架丰富的,是引入香蕉、橙子、葡萄这些不同“骨架”的品类。在分子世界里,Bemis-Murcko 骨架就是分子的“品类标识”:它去掉侧链和取代基,只保留环状核心和连接链结构。拥有相同 Bemis-Murcko 骨架的分子,共享同一“结构家族”。
骨架多样性的度量思路是:统计生成分子集合中出现了多少种不同的骨架,计算“唯一骨架数 / 总分子数”的覆盖率:
骨架多样性高的好处很直接:如果 AI 生成了一批覆盖多个骨架家族的分子,虚拟筛选就能探索不同的化学空间区域——相当于水果店里苹果、香蕉、葡萄各自都有货,顾客总能找到想要的。实际应用中,RDKit 的 MurckoScaffold 模块可以直接提取骨架;大多数用于分子生成的论文都会同时汇报骨架覆盖率与内部多样性。
- 骨架去重$s_1, s_2, \dots, s_k$ 是分子集合中所有不同的 Bemis-Murcko 骨架。
- 唯一骨架数$\{s_1, s_2, \dots, s_k\}$ 表示去重后的骨架集合,$|\cdot|$ 取其数量。
- 总分子数$N$ 是集合中分子的总数。
- 覆盖率集合中唯一骨架占比越高,说明同一骨架下的冗余分子越少,骨架多样性越好。
分子指纹:给分子办一张身份证
要比较两个分子是否相似,得先有一套“特征记录”。分子指纹就是分子的“特征身份证”:把分子的结构信息编码成固定长度的二进制向量。老板不需要记住每颗苹果的每一处细节,只需要记录“红色、圆形、有果柄”等关键特征;分子指纹做的也是类似的事——把原子类型、化学键、环结构等关键信息哈希成 0/1 向量。
常见的指纹有三类:MACCS 指纹是 166 个预定义的结构键,每个键对应一个特定子结构是否存在;ECFP(扩展连通性指纹)以每个原子为中心,对周围环境进行圆形扩展并哈希,能捕捉更细微的局部结构;此外还有路径指纹等。有了指纹,分子之间的相似度就变成向量之间的距离问题。除 Tanimoto 外,也常用余弦相似度:
指纹选择直接影响多样性度量的质量。ECFP 对局部结构敏感,适合捕捉细微差异;MACCS 偏重官能团层面,语义更清晰。实际项目中通常两者都算,分别评估内部多样性与骨架多样性。回到比喻:指纹就是老板手中的商品登记簿,登记得越细致,判断“相似”和“不同”就越准确。
- 向量点积$A \cdot B$ 是两个指纹向量的内积,衡量对应位共同为 1 的程度。
- 向量模长$\|A\|$ 和 $\|B\|$ 分别表示两个向量的长度,用于归一化。
- 比值点积除以模长乘积,结果为 -1 到 1 之间的相似度分数。
- 几何意义夹角越小、余弦值越接近 1,两个分子越相似。
覆盖质量:丰富与新鲜都要兼顾
货架上的水果种类再多,如果一半已经腐烂,顾客也不会买单。同样的道理,分子集合多样性高不代表每个分子都有价值。覆盖质量讨论的是:在追求化学空间覆盖的同时,如何保证分子的可合成性、药效或特定物理化学性质。多样性是“广度”,质量是“高度”,两者缺一不可。
化学空间覆盖率是另一种覆盖度量:将化学空间划分成网格,统计生成分子占据了多少网格。覆盖率越高,代表集合分布越广。公式上可以写成:
在实际评估中,研究者会把覆盖率和分子质量指标(如药物相似性 QED、合成可及性 SA)放在一起看。一个高分分子集合必须是“既广又好”:利用帕累托前沿可视化,横轴是多样性或覆盖率,纵轴是平均质量分数,位于前沿上的点才是兼顾两者的最优候选。这就像老板进货时既要品类丰富,也要每颗水果都新鲜可口。
- 网格总数$M_{total}$ 是化学空间划分出的所有网格数量。
- 占据网格$M_{occupied}$ 是至少包含一个分子的网格数量。
- 比例计算占据网格占比越高,生成分子在空间中的分布越均匀。
- 与多样性关系覆盖率与多样性正相关但不是同一概念——覆盖率关注空间分布范围,多样性关注分子间差异程度。
生成策略:有方法地选品进货
知道了“多样性很重要”,接下来要回答“怎么让生成模型产出多样的分子”。直接采样往往倾向于产出高频、相似的分子——就像老板凭直觉进货,总是顺手拿同一批畅销货。温度采样是控制随机性的经典手段:在 softmax 分布中引入温度参数 $\tau$,温度越高,低概率分子的出场机会越大:
除了调节温度,更结构化的策略包括条件生成(在生成时指定目标骨架或分子性质标签)和去重聚类(生成后按指纹聚类,从每个簇中挑选代表分子)。条件生成像是有计划地进货:老板明确知道“我要进香蕉和橙子”;去重聚类则像收货后的质检:把同一批货里长得太像的挑出来,只保留一个代表。多种策略叠加,才能让生成集合既有广度又有组织性。
- 模型输出$z_i$ 是模型对第 $i$ 个候选分子的原始打分(logits)。
- 温度缩放$z_i / \tau$ 将分数按温度缩放,$\tau$ 越大,分数差异被压缩。
- 指数归一化$\exp(z_i / \tau)$ 将缩放分数转成正数,再做归一化得到概率。
- 采样按概率 $p_i$ 随机抽取分子,温度高时低分分子也有机会被选中。
平衡方法:丰盛与品质的博弈
多样性和质量往往存在张力:追求极致的多样性,就可能混入大量质量低劣的分子;只盯着质量,又会退回“全是红富士”的老路。多样性-质量平衡的核心思路是:不要二选一,而是用多目标优化的思想寻找折中方案。
帕累托优化是常用的理论框架:一个解(分子集合)如果无法在不降低多样性的前提下提升质量,就称为帕累托最优。实际操作中更常见的是加权评分:
更多的工程做法还包括多目标奖励:在强化学习生成分子时,奖励函数同时包含“质量得分”和“多样性得分”,让模型在训练过程中自己学会兼顾两者;以及筛选策略:先生成大规模候选,再用“最大多样性优先”的子模选择算法(如贪心挑选与已选集合最不相似的分子)筛出代表性子集。这就像老板进货时既不会只进一种水果,也不会把烂果子摆上货架——先定品质底线,再追求品类丰富。
- 质量分数$Q$ 是分子集合的质量指标,如平均 QED 或可合成性得分。
- 多样性分数$D$ 是内部多样性或骨架覆盖率,衡量集合丰富程度。
- 权重参数$\alpha \in [0,1]$ 控制质量与多样性的相对重要性。
- 加权和最终分数 $S$ 越大,代表该集合在质量-多样性权衡下越优。
评估工具:店面月度盘点
有了度量指标和平衡策略,最后一步就是落地评估。RDKit 是化学信息学的瑞士军刀:它提供 MurckoScaffold 提取骨架、MACCSkeys 生成指纹、Descriptors 计算物化性质,几乎所有多样性指标都能在几十行代码内实现。评估流程的标准做法是:生成分子集合 → 标准化(去重、去盐) → 计算指纹与骨架 → 计算内部多样性、骨架覆盖率、质量指标 → 汇总成报告。
评估还需要直观的可视化。TSNE/UMAP 可以将高维指纹降到二维,让研究者“看见”分子集合的分布:理想的集合在图上应该均匀铺开,而不是挤成一团。一个完整的评估报告通常包含三部分:多样性指标数值表、骨架分布饼图、化学空间散点图。这三者结合,才能回答“这个生成模型到底值不值得用”。
回到水果店:多样性和质量的各项指标就像是店长的月度盘点表——进货渠道(骨架覆盖率)、单品差异度(内部多样性)、顾客满意度(质量分数)一览无余。有了这样一套标准流程,AI 生成分子就不再是“盲盒开箱”,而是一门可度量、可优化、可复盘的科学。
AI 应用场景
药物虚拟筛选中的候选库精简
阶段:数据集构建与过滤
解决的问题:生成模型常输出数千个高度相似的候选分子,逐一实验成本极高。传统方法按质量分数排序则会忽略结构冗余,导致实验重复验证同一化学骨架。AI 多样性评估可以先计算内部多样性和骨架覆盖率,从候选集中选出“彼此差异最大”的分子子集,大幅节省实验资源。
具体案例:某药物发现团队用基于 Transformer 的分子生成模型产出 5000 个候选分子,通过 Tanimoto 相似度计算和 Bemis-Murcko 骨架聚类,筛选出 200 个互相差异最大的分子进入活性实验。结果显示,这 200 个分子覆盖了原始候选集 90% 以上的骨架类型,且实验命中率提升了约 3 倍。
新能源材料的组合筛选
阶段:模型训练与评估
解决的问题:材料生成需要同时满足带隙、稳定性、合成可行性等多重目标,传统排序只保留“最优”分子,忽略候选集合在功能空间中的覆盖。借助多样性-质量平衡方法(如帕累托前沿筛选),可以保证材料库覆盖多个晶体结构家族,为后续实验提供更多备选方案。
具体案例:一个固态电解质筛选项目中,研究团队为生成模型设置多样性奖励项:每次迭代优先采样与已选材料指纹差异最大的候选,同时要求带隙落在目标区间。最终材料库覆盖了钙钛矿、石榴石、NASICON 等多个结构家族,其中 3 个新结构在实验中展现出超出基线的离子电导率。
组合化学库的智能扩充
阶段:数据增强与库设计
解决的问题:企业自有的组合化学库规模有限,传统扩充方式是在已有母核上添加取代基,导致新分子与旧分子高度相似。AI 可以从外部化学空间采样并以“最大增量多样性”为目标扩充库,使库中每个新分子都带来新的结构信息。
具体案例:某化工企业使用条件变分自编码器生成新分子,将“与现有库最小 Tanimoto 相似度 > 0.3”作为硬约束,同时保证 QED 大于 0.6。扩充后的库规模扩大 40%,而骨架覆盖率从 55% 提升至 82%。
Python 演示
import itertools class MolecularSet: """一个只依赖标准库的分子集合多样性计算器。""" def __init__(self, smiles_list): self.smiles_list = list(smiles_list) self.fingerprint_list = [self._fingerprint(s) for s in self.smiles_list] @staticmethod def _fingerprint(smiles): """将 SMILES 转成简化字符特征集,近似分子指纹。""" features = set(smiles) features.add("len:%d" % len(smiles)) features.add("ring:%d" % smiles.count("1")) features.add("cis:%d" % smiles.count("c")) return features def jaccard_distance(self, i, j): fp_i = self.fingerprint_list[i] fp_j = self.fingerprint_list[j] inter = len(fp_i & fp_j) union = len(fp_i | fp_j) return 1.0 - inter / float(union) def internal_diversity(self): n = len(self.smiles_list) if n < 2: return 0.0 total = 0.0 for a, b in itertools.combinations(range(n), 2): total += self.jaccard_distance(a, b) return 2.0 * total / (n * (n - 1)) if __name__ == "__main__": demo_molecules = [ "CCO", "CCC", "CCN", "c1ccccc1", "c1ccncc1", "C1CCCCC1", "C(=O)O", "CC(=O)C", "CC=CC", "c1ccc(cc1)O", ] mset = MolecularSet(demo_molecules) print("分子数量:", len(mset.smiles_list)) print("内部多样性: %.3f" % mset.internal_diversity())
features = set(smiles)将 SMILES 字符串拆成字符集合,模拟指纹特征。features.add("ring:%d" % smiles.count("1"))统计环结构数量,作为补充特征。inter = len(fp_i & fp_j)求两个指纹特征集的交集大小。union = len(fp_i | fp_j)求并集大小,用于 Tanimoto 分母。return 1.0 - inter / float(union)返回 Jaccard 距离,即 1 减去 Tanimoto 相似度。itertools.combinations(range(n), 2)枚举所有不重复的分子对,避免重复计算。return 2.0 * total / (n * (n - 1))所有分子对距离求和后取平均,得到内部多样性。
常见误区
误区我生成了 10 万个分子,多样性指标肯定比 1000 个分子高。数量多 = 覆盖广?
正解多样性衡量的是集合中分子之间的差异程度,与数量没有必然关系。10 万个同一母核的取代物,内部多样性可能还不如 100 个来自不同骨架的分子。就像水果店摆 100 箱苹果,也不如苹果、香蕉、橙子各一箱来得丰富。评估时一定要看的是“两两差异”和“骨架覆盖”,而不是总数。
为何常见:直观上“多”容易让人联想到“丰富”,但统计上数量庞大且高度相关的样本并不会增加信息量。
误区模型生成了一批 Tanimoto 相似度很低的分子,说明生成质量很好。
正解多样性只回答“分子间有多不同”,不回答“分子本身好不好”。随机拼接的原子团可能彼此差异极大,但既不可合成也没有药效。一个负样本集合也可以拥有极高的多样性分数。正确的做法是同时评估质量指标(QED、SA 等)和多样性指标,再用帕累托前沿选择平衡点。
为何常见:初学者容易把“多样性”这个单一指标当成生成模型的全部评价,忽略了它是多维度评估中的一个维度。
误区我的内部多样性指标已经很高了,所以骨架覆盖肯定也没问题。
正解内部多样性对骨架并不敏感。两个分子共享同一个 Bemis-Murcko 骨架,只要取代基差异足够大,指纹相似度可能很低,内部多样性照样高。要评估骨架层面的丰富度,必须单独计算骨架覆盖率或骨架聚类簇数。两者是互补维度,不能互相替代。
为何常见:因为内部多样性计算起来最简单,很多人把它当成“多样性”的全部含义,忽略了骨架这一更宏观的层面。
误区把温度参数调到最大,生成出来的分子就会五花八门,多样性直接拉满。
正解过高的温度会让采样分布接近均匀随机,生成大量不可合成、无意义的分子。温度是一个权衡旋钮:太低会坍缩到少数高频分子,太高会让质量崩塌。真正的高质量多样性需要结合条件生成、质量过滤和去重聚类,温度只是工具箱中的一件工具。
为何常见:温度参数很直观,初学者容易把它当成“多样性开关”,忽略了它同时影响生成质量的本质。
面试题
Q1. 分子集合的内部多样性主要用于衡量()
- A.分子平均质量的高低
- B.分子之间的相似程度← 正确答案
- C.分子与蛋白的结合力
- D.生成过程的计算效率
答案:B。内部多样性 = 1 − 平均两两 Tanimoto 相似度,核心是衡量集合中分子彼此有多不同。质量、结合力和计算效率都不属于多样性度量的范畴。
Q2. 骨架多样性关注的核心对象是()
- A.分子的全部取代基
- B.去除侧链后的核心骨架← 正确答案
- C.分子的三维空间构象
- D.分子的氧化还原电位
答案:B。骨架多样性基于 Bemis-Murcko 骨架,即去除侧链后保留的环与连接链核心结构。取代基、构象和电位都不影响骨架分类。
Q3. Tanimoto 相似度的计算基础是()
- A.分子间的质量差
- B.指纹特征的交集与并集← 正确答案
- C.SMILES 字符串长度
- D.生成模型的损失值
答案:B。Tanimoto 系数定义为 $J(A,B) = |A \cap B| / |A \cup B|$,其中 A、B 是分子指纹的特征集合,与质量、字符串长度和模型损失无关。
Q4. 提高采样温度的主要作用是()
- A.使模型推理速度更快
- B.增大采样随机性获得更丰富结构← 正确答案
- C.让生成结果更集中于高分分子
- D.减少生成过程的资源消耗
答案:B。温度参数 $\tau$ 越大,softmax 分布越平坦,低概率分子被采样的机会越大,从而增加结构多样性。降低温度才会让结果更集中于高分分子。
Q5. 化学空间覆盖率描述的是()
- A.候选分子占据空间网格的比例← 正确答案
- B.生成分子数与训练数据的比值
- C.分子集合的平均分子量
- D.GPU 显存的使用比例
答案:A。覆盖率 = 被分子占据的网格数 / 总网格数,衡量集合在化学空间中的分布广度。它与分子数量、分子量和硬件资源无关。
Q6. 多样性-质量平衡的核心思路是()
- A.完全放弃质量只求多样性
- B.在保证基本质量前提下最大化结构差异← 正确答案
- C.将所有分子按质量大小排序
- D.只保留与已知药相似的分子
答案:B。平衡方法(如帕累托优化和加权评分)的目标是兼顾质量与多样性,在质量不塌陷的前提下提升覆盖范围,而不是二选一或简单排序。
Q7. 以下哪个工具常用于计算分子指纹()
- A.RDKit← 正确答案
- B.PyTorch
- C.NumPy
- D.HDFS
答案:A。RDKit 是化学信息学标准库,提供 MACCS、ECFP 指纹、MurckoScaffold 等功能。PyTorch 是深度学习框架,NumPy 是数值计算库,HDFS 是分布式文件系统,均不直接提供分子指纹计算。
Q8. 下列哪些属于提升生成分子多样性的策略()
- A.降低采样温度
- B.使用条件生成控制目标骨架← 正确答案
- C.对生成结果进行去重聚类← 正确答案
- D.只保留质量最高的单个分子
答案:BC。条件生成可指定目标骨架、去重聚类可避免同簇冗余,两者都能提升多样性。降低温度会让采样更集中,反而降低多样性;只保留单个分子则完全放弃集合多样性。
Q9. 关于骨架多样性与内部多样性的关系,正确的是()
- A.骨架多样通常内部分散大← 正确答案
- B.内部多样未必骨架多样← 正确答案
- C.两者都依赖分子指纹计算
- D.两者含义完全等价
答案:AB。骨架差异通常会带来指纹差异,因此骨架多样时内部多样性往往较高,A 正确;但同一骨架上不同取代基也能造成内部多样性高,B 正确。骨架多样性基于骨架提取而非指纹,C 错误;两者是互补而非等价的概念,D 错误。
Q10. 在多样性-质量联合筛选中,常见的做法包括()
- A.帕累托前沿选择← 正确答案
- B.多目标加权评分← 正确答案
- C.直接按分子量排序
- D.基于指纹做子模选择← 正确答案
答案:ABD。帕累托优化、加权评分和子模选择(如最大最小相似度贪心)都是兼顾质量与多样性的经典策略。按分子量排序既不反映质量也不反映多样性,无法用于该场景。