小明的“AI分子蛋糕坊”最近订单爆满。店里的AI大厨只要按一下按钮,就能噼里啪啦吐出上千张“分子配方卡”——每张卡上都写着一串化学家才能看懂的构造密码(SMILES串)。可配方卡一多,问题就来了:有的卡按化学规则根本拼不成蛋糕,有的卡明明是一模一样的却重复递交,有的卡只是把老菜单原样抄了一遍,还有的卡虽然造型天马行空,但后厨现有的食材和模具根本做不出来。小明急得团团转,直到他请来四位全职质检员:V小姐、U先生、N姑娘和S博士。她们排成一条“质检流水线”,从四个角度为每张配方卡把关。这四位质检员,就是分子生成模型最常用的四个评估指标——Validity(有效性)、Uniqueness(唯一性)、Novelty(新颖性) 和 SA(合成可及性)。本文就带你去这条流水线上参观一圈,看看每位质检员如何工作,最后如何把四张分数表合成一张“综合体检单”。
一句话价值:掌握这四个指标,你就能像老师傅一样一眼看出AI生成的分子到底是宝藏还是废纸,这是AI药物发现从业者的必备“质检尺”。
可视化演示
展示分子生成模型的四个核心评估指标(有效性、唯一性、新颖性、合成可及性)雷达对比与柱状图分布,支持雷达与柱状两种模式切换。
本节配有交互动效(进入视口后自动加载,约 3KB)。
四指标雷达对标 Validity:生成的SMILES能被解析为有效分子的比例 Uniqueness:去重后唯一分子占有效分子的比例 Novelty:训练集中不存在的分子占生成集的比例 Score = Σ(w_i × m_i) / Σw_i VAE模型Validity高但Novelty低,强化学习模型反之。
评估体系引入
小明把四位质检员召集到蛋糕坊的流水线旁,给她们每人发了一张工位牌。AI大厨在传送带一头疯狂出卡,每位质检员按顺序抽查卡片,最后把打分汇总到一张“配方体检单”上。这个场景,正是分子生成模型评估体系的缩影。
分子生成模型(如基于深度学习的VAE、GAN、强化学习Agent)能够以前所未有的速度“吐”出大量SMILES字符串。SMILES是一种用ASCII字符描述分子结构的线性表示法,就像配方卡上的“构造密码”。然而,生成速度快不等于生成质量高,生产线上必然混杂大量次品。如果没有一套科学的评估机制,后续的药物筛选、材料设计就会浪费大量算力和实验成本。
评估体系通常围绕四个维度展开:有效性回答“这串密码能不能解出一个合法分子”,唯一性回答“一堆卡里有多少张是不同的”,新颖性回答“这张卡是不是照抄老菜单”,合成可及性回答“这张卡在真实实验室里能不能被做出来”。四个维度共同构成一份“质检报告”:
就这样,四位质检员各就各位,流水线开始运转。接下来我们逐一拜访她们的工作台。
- Score 综合体检单用来概括一批生成分子整体质量的信息载体。
- 四元组括号表示括号内四个分量分别对应四个评估维度,后续各节会逐一给出计算方法。
有效性评估
V小姐是流水线上最严格的“化学校对员”。她手里拿着一把化学规则尺,凡是写着“碳原子长出五个键”“某个环根本连不上”之类的卡片,直接扔进废纸篓。用她的话说:“蛋糕首先得是蛋糕,不能是一团乱麻。”
在分子生成评估中,Validity(有效性) 衡量的是生成分子是否符合化学价键规则,能否被解析成一个合法的分子。常用的计算方式是用化学信息学工具(如RDKit)解析SMILES:如果MolFromSmiles能成功返回分子对象,就认为该分子是有效的;解析失败则无效。无效的原因包括SMILES语法错误、原子价不合法、电荷不平衡等。
当然,有效性也有它的“边界感”。一个分子合法,只说明它在纸面上能够成立,不代表这个分子稳定、容易合成,更不代表它有生物活性。它更像一场考试的“及格线”,先把大量拼不出来的次品挡在外面。有效性计算公式如下:
V小姐的检查结束后,通过她审核的卡片才会流向下一道工序。虽然这个指标很基础,但恰恰是它先筛掉了大半垃圾,让后续的质检员工作轻松许多。
- N_total 分子总数AI大厨一次性吐出的所有配方卡数量,不论好坏。
- N_valid 有效分子数能通过化学规则检查、被解析为合法分子的配方卡数量。
- 计算百分比用有效分子数除以分子总数,再乘以100,得到有效率的百分数。
唯一性评估
U先生的工作台前堆着一摞V小姐放行的卡片。他不看分子是否合法,只看卡片之间是否“撞脸”。他说:“同一款草莓蛋糕,客人只需要一张配方,重复递十次就是浪费纸。”
Uniqueness(唯一性) 衡量的是有效分子中互不相同的分子所占比例。一个只会反复生成同几种分子的模型,哪怕单看每个分子都合法,也无法提供丰富的候选结构,探索能力等于零。因此唯一性直接反映了生成模型的多样性。
计算时要注意一个关键细节:同一分子往往有多种SMILES写法。比如乙醇可以写成CCO,也可以换一张旋转姿势写出来,但它们是同一个分子。直接拿原始字符串去重会漏掉“变装重复”的分子,所以必须先对SMILES做标准化,通常使用RDKit的MolToSmiles生成规范SMILES,或使用InChI Key进行比对,再去重。唯一性公式为:
U先生这番“去重”之后,剩下的卡片虽然每张都不重复,但他还没办法判断这些卡片是不是从旧菜单上抄来的。这个任务,得交给下一位质检员。
- N_valid 有效分子数通过V小姐“有效性”检查的分子总数,是唯一性的基础分母。
- N_unique 唯一分子数标准化后用集合去重得到的互不相同分子数量。
- 计算唯一率唯一分子数除以有效分子数并乘100%,得到多样性百分比。
新颖性评估
N姑娘抱着一个厚厚的“老菜单”——训练集记录册。她比对着U先生递来的每张卡片,凡是能在老菜单里找到一模一样的,就盖章“旧配方”;找不到的,才盖上“新创意”的章。
Novelty(新颖性) 衡量的是生成分子中那些不在训练集中出现的比例。训练集是生成模型学习时所见过的大量已知分子,如果模型只是把训练集里的分子“背”出来,新颖性就会很低。计算新颖性时,需要把生成的每个分子与训练集中的分子进行比对:比较规范SMILES是否相同,或者用InChI Key、分子指纹(如ECFP)判断是否高度相似。通常,与训练集中任何分子完全相同或相似度超过阈值(如Tanimoto系数>0.7),就不算新颖。
这里特别容易和唯一性混淆:唯一性是“这批生成结果自己跟自己比”,新颖性是“这批生成结果跟历史训练集比”。一个模型可以做出100个所有不同的分子,但如果这100个都是训练集的“默写”,唯一性很高但新颖性为0。新颖性公式如下:
N姑娘的“新创意”章一盖,剩下的卡片确实都是没见过的新款。但小明又犯愁了:这些新款式,后厨真的能做出来吗?于是最后一位质检员——S博士登场了。
- N_valid 有效分子数同前两道工序一样,继续使用有效分子作为分母,保证指标可比。
- N_novel 新颖分子数在训练集中找不到相同或高度相似分子的有效分子数量。
- 计算新颖率新颖分子数除以有效分子数乘100%,得到原创占比。
可合成性评估
S博士是化学合成的行家,他拿着放大镜研究卡片上的结构:环多了、手性中心多了、官能团太活泼……他都会摇头叹气:“创意很好,但咱们厨房现有条件做不出来,等于零。”他给出的不是“通过/不通过”,而是一张1到10分的难度评分。
SA(Synthetic Accessibility,合成可及性) 用于量化一个分子在真实实验室中被成功合成的难易程度。最常用的量化工具是SAscore,其值域为1到10,分数越低表示越容易合成,分数越高表示合成越困难。SAscore的估算基于分子结构的多种特征,比如分子碎片是否存在常见反应、环的复杂度、手性中心数量、分子大小、稀有官能团等。在RDKit中,可以通过sascorer.calculateScore(mol)方便地计算。
需要注意的是,SAscore的方向与前三个指标正好相反:Validity、Uniqueness、Novelty都是越高越好,而SAscore是越低越好。因此在做综合评分时,通常要将它变换成“可合成得分”,例如使用10 - SAscore,让方向与其他指标统一。SAscore的数值范围可以写成:
S博士的评分尽管犀利,但小明知道,只有把四位质检员的判断合在一起看,才能决定哪些配方卡值得真正交给化学家试做。
- SAscore 合成难度分对分子可合成性进行打分的量化指标,由结构特征回归估算得到。
- 下界1分数最小时表示分子非常简单,比如小分子醇类,实验室轻松合成。
- 上界10分数最大时表示分子高度复杂,现有合成手段难以实现。
综合运用
四位质检员各报出一张成绩单,小明反而更纠结:有的卡新颖性极高,但SAscore高达9,几乎没法合成;有的卡很容易合成,却只是老分子的微调。他意识到,评价分子生成质量不能只看单项,必须根据任务目标做综合权衡。
在真实AI药物发现中,不同任务对四个指标的权重不同。例如先导化合物优化阶段,更看重Validity和SA,因为最终要能合成出来;而在探索全新化学骨架阶段,Novelty的权重会提高。一种常见的综合方法是加权求和,把SAscore也转成同向得分:
除了加权求和,实际工作中也常用“门槛法”:先要求Validity≥90%、Uniqueness≥80%、Novelty≥50%、SAscore≤5,再在达标后的分子里继续做对接筛选。借助RDKit等工具,这些指标可以批量计算,并作为奖励信号反馈给生成模型,引导模型迭代优化。
小明把四张分数表钉在墙上,终于不再被满桌的配方卡淹没。他明白了:生成分子只是起点,科学评估才是把“AI脑洞”变成“可用候选药”的关键一步。
- V U N 三个正向指标分别带权相加,分数越高贡献越大。
- 可合成得分变换把SAscore从1到10映射到1到0附近,使用(10-SA)/9,让“越易合成得分越高”。
- 权重系数α β γ δ 控制各指标的影响力,可根据实际任务调整。
AI 应用场景
场景一:虚拟筛选前的“四关体检”
阶段:候选分子筛选
解决的问题:传统筛选往往直接在对接评分上排序,但大量生成分子根本合法、不新颖或不可合成,白白消耗算力。AI生成百万分子后,先用Validity、Uniqueness、Novelty、SAscore四关并行过滤,把不合法、重复、无新意、难合成的分子提前剔除,留下一小组“高质量候选”再做分子对接。
具体案例:某药物研发团队用强化学习生成5万个候选分子,经RDKit批量计算后发现Validity仅62%,Uniqueness 55%,Novelty 78%,SAscore中位数8.4。他们调低生成器探索温度、加入SAscore惩罚项,迭代两轮后Validity升到91%,SAscore中位数降到4.2,随后将过滤后的3000个分子交给对接流程。
场景二:强化学习奖励函数设计
阶段:模型训练与优化
解决的问题:分子生成模型(如强化学习Agent)如果只奖励“能生成新分子”,会倾向于产出不可合成的怪物。把四指标纳入奖励函数,引导生成器在有效、多样、新颖且可合成的方向上探索。
具体案例:研究人员在奖励函数中设置reward = w1*Validity + w2*Uniqueness + w3*Novelty + w4*(10-SA)/9,权重先均匀分配,再根据专业化学家反馈调高SA权重。实验显示,加入SA项后生成分子的平均SAscore从7.1降至3.8,同时Novelty仍保持70%以上。
Python 演示
import osimport sysfrom rdkit import Chemfrom rdkit.Chem import RDConfig sys.path.append(os.path.join(RDConfig.RDContribDir, 'SA_Score'))import sascorer def evaluate(generated, training): valid_mols = [] for smi in generated: mol = Chem.MolFromSmiles(smi) if mol is not None: valid_mols.append(mol) total = len(generated) n_valid = len(valid_mols) validity = n_valid / total if total else 0.0 canon_smiles = set() for mol in valid_mols: canon_smiles.add(Chem.MolToSmiles(mol)) uniqueness = len(canon_smiles) / n_valid if n_valid else 0.0 train_smiles = set() for smi in training: mol = Chem.MolFromSmiles(smi) if mol is not None: train_smiles.add(Chem.MolToSmiles(mol)) novel_count = 0 for mol in valid_mols: if Chem.MolToSmiles(mol) not in train_smiles: novel_count += 1 novelty = novel_count / n_valid if n_valid else 0.0 sa_scores = [sascorer.calculateScore(mol) for mol in valid_mols] sa_avg = sum(sa_scores) / len(sa_scores) if sa_scores else 10.0 return { 'total': total, 'valid': n_valid, 'validity': validity, 'uniqueness': uniqueness, 'novelty': novelty, 'sa_avg': sa_avg } if __name__ == '__main__': generated = ['CCO', 'CCO', 'c1ccccc1', 'C1CCCCC1', 'CCN', 'bad_smiles'] training = ['CCO', 'c1ccccc1'] result = evaluate(generated, training) for k, v in result.items(): if isinstance(v, float): print(f'{k}: {v:.4f}') else: print(f'{k}: {v}')
Chem.MolFromSmiles(smi)解析SMILES,能解析则返回分子对象,否则返回None。Chem.MolToSmiles(mol)生成规范化SMILES,用于去重和比对。canon_smiles.add(...)用Python集合对有效分子去重,得到唯一分子数。if Chem.MolToSmiles(mol) not in train_smiles逐一看生成分子是否出现在训练集中,统计新颖数。sascorer.calculateScore(mol)调用RDKit贡献包计算每个分子的合成难度分数。
常见误区
误区我一直以为Uniqueness和Novelty是一回事,都是说“生成的新分子多不多”,所以平时只看其中一个就够。
正解这是两个维度截然不同的指标。Uniqueness是“生成集内部去重”,衡量这批结果自己重复了多少;Novelty是“生成集与训练集外部比对”,衡量有没有跳脱学习过的旧分子。通俗说,Uniqueness是“蛋糕坊今天做的蛋糕是否有花样”,Novelty是“这个花样是不是从老菜单上抄的”。
为何常见:两个指标都涉及“去重/比较”,且分母都是有效分子数,初学者很容易从名字上产生“都是看新不新”的错觉。
误区只要Validity高于95%,我生成的分子质量就很高,可以放心进下游实验。
正解Validity只说明SMILES能拼凑成一个“纸面合法”的分子,相当于“蛋糕外形能成型”。但蛋糕可能难吃、有毒性、难以保存——对应分子可能不稳定、无活性、难合成。真正的可用性还需要综合Novelty、SA以及活性筛选来判断。
为何常见:Validity是最容易算、最直观的指标,很多人把它当成了质量的全部,忽略了它只是底线检查。
误区我用Python集合对SMILES字符串去重,为什么Uniqueness还是偏低?是不是模型真的只会生成同一类分子?
正解同一分子可以有多种等效SMILES写法(例如原子书写顺序不同),直接比较原始字符串会误判为不同分子,或者反过来因为带氢方式不同而误判?实际上规范化SMILES和InChI Key才是标准的去重依据,必须先标准化再入集合。
为何常见:不了解化学表示法中存在“同分子多种写法”的现象,把字符串相等当成了分子相同。
误区SAscore是10分制,所以我习惯性地认为分数越高代表分子质量越高,应该优先选SAscore接近10的分子。
正解SAscore衡量的是合成难度,1分代表极易合成,10分代表极难甚至不可能合成。对于实际药物开发,我们希望选分数低的分子。在综合评分中,也要记得把SAscore转换成“易合成得分”再与其他三个指标同向相加。
为何常见:大多数评分指标(准确率、新颖率)都是越高越好,考生容易把这种惯性套到SAscore上,忽视了它的方向性。
面试题
Q1. 在分子生成评估中,Validity衡量的是什么?
- A.分子是否合法可解析← 正确答案
- B.分子是否独一无二
- C.分子是否从未出现
- D.分子是否容易合成
答案:A。Validity即有效性,核心是判断生成的SMILES能否解析为一个符合化学规则、价键合法的分子。B是Uniqueness,C是Novelty,D是SAscore考察的内容。
Q2. Uniqueness的计算分母通常是什么?
- A.生成分子总数
- B.有效分子总数← 正确答案
- C.去重分子总数
- D.新颖分子总数
答案:B。Uniqueness = 唯一分子数 / 有效分子总数 × 100%。它只统计通过有效性检查的分子,因为无效分子本来就不该进入多样性讨论。A是Validity的分母,C和D没有对应指标。
Q3. Novelty与Uniqueness的核心区别是什么?
- A.前者是内部去重,后者是外部比对← 正确答案
- B.前者看价键,后者看原子数
- C.前者看数量,后者看质量
- D.前者用SMILES,后者用分子量
答案:A。Uniqueness在生成集内部去重,是“自己和比自己”;Novelty把生成分子与训练集比对,是“和教科书比”。两者方向不同,不能互相替代。
Q4. SAscore的取值范围是?
- A.0到1且越大越好
- B.1到10且越小越好← 正确答案
- C.1到10且越大越好
- D.0到100且越大越好
答案:B。SAscore用于量化合成难度,值域为1到10。1代表极容易合成,10代表极难合成,因此是越小越好。A和D弄错了量程,C弄反了方向。
Q5. 若一个模型总是生成同一种有效分子,最可能的表现是什么?
- A.Validity偏高但Uniqueness偏低← 正确答案
- B.Uniqueness偏高但Novelty偏低
- C.Novelty偏高但SAscore偏高
- D.Validity偏低但SAscore偏低
答案:A。模型总生成同一种分子,意味着每个分子都能合法解析(Validity正常偏高),但有效集合里只有一种分子,去重后Uniqueness会很低。B中Uniqueness偏高与题干矛盾,C、D与“同一种分子”没有直接因果关系。
Q6. 用RDKit计算Uniqueness时,为什么要先生成规范化SMILES?
- A.消除同一分子的不同表示差异← 正确答案
- B.提高分子生成速度
- C.降低分子对接的打分误差
- D.将分子转换为二维图形
答案:A。同一分子可能因原子写入顺序不同而有多个SMILES字符串,直接去重会漏掉“变装重复”。规范化SMILES给出该分子的唯一字符串,去重才准确。B、C、D均与去重目的无关。
Q7. 综合评估中,若希望筛选出的分子更容易被合成,应优先关注哪个指标?
- A.Validity
- B.Uniqueness
- C.Novelty
- D.SAscore← 正确答案
答案:D。SAscore直接量化合成难度,分数越低越容易合成。Validity只保证合法,Uniqueness管多样性,Novelty管创新性,都不能替代对可合成性的直接判断。
Q8. 下列哪些指标越高代表生成质量越好?
- A.有效性指标← 正确答案
- B.唯一性指标← 正确答案
- C.新颖性指标← 正确答案
- D.可合成性指标
答案:ABC。Validity、Uniqueness、Novelty都是越高越好,分别代表“合法比例高”“多样性好”“原创性强”。SAscore则是越低越易合成,因此“可合成性指标”若用SAscore度量,并非越高越好,所以不选D。
Q9. 计算Novelty时,常用的与训练集比对方式包括哪些?
- A.比较规范化SMILES← 正确答案
- B.比较InChI Key← 正确答案
- C.比较分子指纹相似度← 正确答案
- D.比较分子量大小
答案:ABC。判断新颖性要确认“这个分子是否在训练集中见过”。规范SMILES、InChI Key可以精确判断是否相同;分子指纹(如ECFP)可以判断是否高度相似。分子量太粗疏,无法区分不同结构的分子。
Q10. 在综合评估分子时,下列哪些做法合理?
- A.设定各指标阈值← 正确答案
- B.根据任务调整权重← 正确答案
- C.只关注有效性指标
- D.忽略合成难度评估
答案:AB。综合评估通常先设门槛(如Validity≥90%),再按任务需求调整权重(如易合成目标下加大SA权重)。只关注有效性或忽略合成难度都会把大量实际做不出来的分子送进下游,因此C、D不合理。