信息速览

GuacaMol 与 MOSES 分子生成基准套件
条目定位:GuacaMol 与 MOSES 是深度学习时代被并称频率最高的两套开源分子生成基准。它们回答的是同一个问题——“一个生成模型产出的分子有多好”——但用的是两套不同的数据、两套不同的指标定义、两套不同的评测哲学。本条目把它们当作一个"并置套件(suite)"来拆解,而不是两份互不相干的文档,重点在于把使用者最常混淆的地方显式摆出来。
§0 作者立场与 E-E-A-T 声明
经验(Experience):本条目面向实际跑过分子生成实验的读者。所有关于"指标怎么算"“划分怎么读”"分数为什么不可比"的判断,均以原始论文、官方 README、官方仓库代码与第三方复现记录为准,并显式标注来源三级(论文 / 官方仓库 / 第三方复现)。
专业(Expertise):内容覆盖化学信息学的核心概念(SMILES 规范化、Bemis-Murcko 骨架、BRICS 片段、Tanimoto 相似度、ECFP4 指纹、QED、SA),以及机器学习评测工程概念(分布学习 vs 目标导向、模式崩溃、对抗性利用、采样规模对指标的影响)。
权威(Authoritativeness):两套基准的权威事实——论文 venue、DOI、作者机构、许可、数据源、指标定义——均逐条回溯到原始出处。凡本条目与二手教程冲突处,以原始论文与官方仓库为准,并把冲突本身记录为坑点。
可信(Trustworthiness):
- 本条目不声称任何生成模型"有效",只描述评测协议本身与其已知失效模式。
- 凡涉及真实药物的名称(如 celecoxib、osimertinib),仅作为 GuacaMol holdout 集合的成员被列出,不涉及任何临床结论。
- 所有数字均标注来源;无法回溯的数字一律不写入。
- 本条目不是医疗建议,也不构成药物研发决策依据。
合规声明:本条目为数据集方法与工程文档。分子生成技术具有双用途属性,使用者应遵守所在司法辖区关于化学品与受控物质的法律法规。
§1 概览
1.1 一句话定义
GuacaMol 是 BenevolentAI 于 2018-2019 年开源的一套 de novo 分子设计基准,包含 5 个分布学习(distribution learning)基准、20 个目标导向优化(goal-directed optimization)基准,外加一组化合物质量指标;其训练数据来自 ChEMBL 24,规模约 160 万分子。
MOSES(Molecular Sets) 是 Insilico Medicine 主导、于 2020 年在 Frontiers in Pharmacology 正式发表的分子生成基准平台,核心是一个 1,936,962 分子的数据集(源自 ZINC Clean Leads)、一套 9 类评估指标,以及 6 个以上的参考基线模型实现。
1.2 为什么两者会被并称
两套基准几乎同时出现在"深度学习分子生成"这一波浪潮的早期(GuacaMol 论文 2019 年见刊,MOSES 论文 2020 年底出版),且都满足三个条件:
- 开源可复现:代码与数据都以宽松许可发布(两者代码均为 MIT)。
- 指标成套:都不是单一指标,而是试图用一组互补指标刻画"生成质量"。
- 带参考基线:都提供了可与新方法对比的基线实现与公开排行榜。
因此,2019 年之后的分子生成论文几乎形成了惯例——同时报 GuacaMol 与 MOSES 两套分数。这也正是问题所在:两套分数不可直接比较(见 §6.5 坑点 2)。
1.3 一句话区分
| 维度 | GuacaMol | MOSES |
|---|---|---|
| 主导机构 | BenevolentAI | Insilico Medicine(Insil Med Hong Kong Ltd) |
| 论文 | J. Chem. Inf. Model. 2019, 59(3):1096-1108 | Front. Pharmacol. 2020, 11:565644 |
| 数据源 | ChEMBL 24(2018) | ZINC Clean Leads |
| 数据规模 | 约 160 万 | 1,936,962(过滤后) |
| 侧重 | 分布学习 + 目标导向优化 | 以分布学习为主 |
| 任务数 | 5 + 20 = 25 个基准 | 1 个数据集 + 9 类指标 |
| 许可 | 代码 MIT | 代码 MIT;数据遵循 ZINC 条款 |
1.4 本条目覆盖范围
本条目覆盖:
- 两套基准的数据源与数据构造流程(§3)
- 数据结构与字段语义(§4)
- 划分协议与数据泄漏陷阱(§5)
- AI 就绪使用指南(§6,含 8 个坑点)
- 24 项 DAIMS 数据质量评分(§7)
- 评测指标定义与基准数字(§7、§8)
- 获取、安装、许可与引用(§9)
- AI 使用声明卡(§10)
不覆盖:具体某个生成模型的架构细节、3D 构象生成、蛋白结构预测。
§2 领域背景:为什么需要分子生成基准
2.1 de novo 分子设计的评测困境
"de novo 分子设计"指用算法从零生成具有期望性质的分子结构,而非从已有化合物库中筛选。这个任务从诞生起就面临一个尴尬的评测问题——没有一个公认的、单一的"好分子"判据。
一个分子"好"可以指:能被合成、有活性、无毒性、代谢稳定、可专利、能成药。这些性质中,只有极少数能廉价地由计算给出近似值,绝大部分需要实验测量。而生成模型的训练与评测必须是快速的、可循环的,因此基准只能退而求其次,用可快速计算的性质作为代理指标。
这构成了整条技术路线的根本张力:被优化的东西(可计算代理)与被关心的东西(真实成药性)之间存在系统性缝隙。GuacaMol 与 MOSES 都在论文里承认了这一点,也都在指标设计上做了不同程度的妥协。
2.2 两类生成任务
基准要评测的模型大致分为两类任务,这个区分是理解两套基准的关键:
(A)分布学习(Distribution Learning)
模型学习训练集分子的分布,然后从中采样生成新分子。评测的问题是:“你生成的分子集合,在统计意义上像不像真实分子集合?”
- 关心的是集合层面的统计相似性,而非单个分子的优劣。
- 典型指标:Validity(有效性)、Uniqueness(唯一性)、Novelty(新颖性)、KL divergence(理化性质分布距离)、FCD(ChemNet 特征分布距离)。
- 常见模型:CharRNN、VAE、AAE、ORGAN、JT-VAE、LatentGAN。
(B)目标导向优化(Goal-Directed Optimization)
给定一个明确的评分函数(如"与某个目标分子的相似度"或"对某靶点的预测活性"),模型被要求生成得分尽可能高的分子。
- 关心的是单分子得分在采样预算内能达到多高。
- 典型场景:rediscovery(重新发现已知活性分子)、similarity(相似性搜索)、scaffold hopping(骨架跃迁)、MPO(多参数优化)。
- 常见模型:遗传算法(尤其基于图表示的 GA)、SMILES 循环神经网络、REINVENT 等强化学习框架。
MOSES 主要面向(A),其官方定位是分子生成模型的基准平台,指标集全部是分布学习指标。GuacaMol 同时覆盖(A)与(B),其 5 个分布学习基准对应(A),20 个目标导向基准对应(B)。这是两者最本质的功能差异。
2.3 为什么"像真实分子"这个判据会出问题
分布学习的核心判据是"生成集合像不像训练集合"。这个判据有一个著名的漏洞:如果模型直接复制训练集分子,它会得到完美的分布相似度,但毫无生成能力。这就是所谓的 Copy Problem(复制问题)。
基准设计者的应对方式是加入 Novelty 指标——要求生成分子不出现在训练集中。但 Renz 等人的工作表明,这个补丁并不牢固:只要对训练集分子做微小的、有规律的编辑(例如随机插入一个碳原子),就能同时满足"有效"“唯一”“新颖”,而分子本身几乎没有任何新意。这个被称为 AddCarbon 的平凡模型,在 GuacaMol 分布学习基准上取得了接近满分的成绩,超越除 LSTM 外的所有基线。
这个案例是理解两套基准局限性的入口,也是本条目 §6.5 坑点 1 的主题。
2.4 与药物发现流程的关系
需要明确:GuacaMol/MOSES 分数与药物发现成功率之间没有建立的经验关系。
- 基准衡量的是"分子的可计算性质分布",不是"分子是否能成为药物"。
- 有评论指出,两套基准过度聚焦于唯一性、新颖性、QED、SA 等可计算性质,这些性质与命中发现(hit discovery)无关,对先导优化(lead optimization)也仅部分相关。
- 也有观点指出,目前尚不确定药物化学家是否认同这些基准给出的分数。
因此本条目在第 §6 章会反复强调一条工程纪律:报榜数字必须与其实验/合成验证计划分开陈述,不要让基准分数承担它无法承担的证据重量。
§3 数据集规格与构造流程
3.1 GuacaMol 的数据来源与后处理
数据源:ChEMBL 24(2018 年版本)。GuacaMol 的分布学习基准与部分目标导向任务的训练数据、参考分布,均取自 ChEMBL 24。
这一点需要特别注意,因为存在一个流传较广的误记——把 GuacaMol 的数据源说成 ZINC。实际相反:GuacaMol 用 ChEMBL,MOSES 用 ZINC。这个纠错是本条目最重要的归属类事实之一。
后处理流程(GuacaMol 论文描述):
- 除盐:去除分子中的反离子/盐组分。
- 电荷中和:将带电基团中和到中性形式。
- 长度过滤:去除 SMILES 字符串长度超过 100 个字符的分子。
- 元素限定:只保留含 H / B / C / N / O / F / Si / P / S / Cl / Se / Br / I 的分子。
- holdout 剔除:剔除与预先选定的 10 个上市药物 holdout 集合的 ECFP4 指纹相似度 > 0.323 的分子。
第 5 步的 10 个 holdout 药物是:celecoxib、aripiprazole、cobimetinib、osimertinib、troglitazone、ranolazine、thiothixene、albuterol、fexofenadine、mestranol。 这些分子被举出用于测试模型是否能"重新发现"训练集中不存在但在化学上合理的结构。
规模:处理后的训练集规模为约 160 万分子(~1.6 million);部分二手来源表述为 “over 1.5 million”,属于同一量级的近似表述。
3.2 MOSES 的数据来源与过滤协议
数据源:ZINC Clean Leads。原始候选池含 4,591,276 个分子;经过滤后得到最终数据集 1,936,962 个分子。
过滤协议(MOSES 官方 README 描述):
| 过滤条件 | 阈值 |
|---|---|
| 分子量 (MW) | 250 - 350 Da |
| 可旋转键数 | ≤ 7 |
| XlogP | ≤ 3.5 |
| 带电原子 | 全部去除 |
| 允许元素 | C / N / S / O / F / Cl / Br / H(其余去除) |
| 环长度 | ≤ 8 原子 |
| 结构警示 | 应用 MCF 与 PAINS 过滤 |
陷阱提示:MW 被限制在 250-350 Da 这个很窄的区间内,意味着 MOSES 的分子空间严重偏向类先导化合物(lead-like)尺寸,不覆盖大分子、天然产物、片段(fragment)与超出该分子量带的药物。任何基于 MOSES 训练的生成模型,其输出分布都天然受限于这个窄带。若你的目标域不在 250-350 Da,MOSES 作为评测集的代表性会显著下降。
3.3 两套数据源的偏倚差异
这是两套基准不可互换的根本原因,值得单独列出来。
ChEMBL(GuacaMol 用)的偏倚:
- 只包含已被合成并测过生物靶点活性的分子。
- 因此是"已知有生物活性"的正样本集合,天然带正样本偏倚。
- 领域混杂:含小分子、抗生素、小肽等跨领域分子,分布学习的"目标分布"因此不够同质。
- 相对更偏向"有活性但可能不好合成"的探索型化学空间。
ZINC Clean Leads(MOSES 用)的偏倚:
- 包含部分**虚拟(尚未合成)**分子,是"可购买/可合成"导向的集合。
- 偏向分子量更小、更易合成的分子。
- 酰胺键比例更高——这是 Clean Leads 子集的构造特征。
- 相对更偏向"好合成但活性未知"的类先导化学空间。
结论:一个模型在 MOSES 上表现好,只说明它擅长模仿"易合成的类先导小分子"的分布;在 GuacaMol 上表现好,说明它擅长模仿"有生物活性记录"的分布。这两件事不是同一个能力。
3.4 数据构造流程对比表
| 步骤 | GuacaMol | MOSES |
|---|---|---|
| 原始来源 | ChEMBL 24 | ZINC Clean Leads |
| 原始规模 | 未在概览中给出(ChEMBL 全库级别) | 4,591,276 |
| 除盐/中和 | ✅ | — |
| 长度过滤 | ✅ (>100 字符剔除) | — |
| 元素白名单 | ✅ (13 种元素) | ✅ (C/N/S/O/F/Cl/Br/H) |
| 分子量约束 | — | ✅ 250-350 Da |
| 可旋转键约束 | — | ✅ ≤ 7 |
| XlogP 约束 | — | ✅ ≤ 3.5 |
| 环长约束 | — | ✅ ≤ 8 |
| PAINS/MCF | 用于质量评估(rd_filters) | 用于数据集过滤 |
| holdout 剔除 | ✅ 10 药物 / ECFP4 > 0.323 | — |
| 最终规模 | 约 160 万 | 1,936,962 |
| 骨架划分 | — | ✅ test_scaffolds |
注意最后一行的差异:只有 MOSES 提供了专门的骨架划分(test_scaffolds)。GuacaMol 的分布学习基准主要使用随机划分。这一差异对"模型是否真的能泛化到未见骨架"这一问题的回答能力影响很大(见 §5)。
3.5 数据集下载与重建
GuacaMol 的数据可通过包内工具重新生成:
python -m guacamol.data.get_data -o [output_directory]
官方明确警告:不同的 Python 包版本会导致数据生成失败;为保证可复现性,官方提供了带版本受控依赖的 Docker 容器。
MOSES 的数据通过 git-lfs 或 Python API 获取:
import moses
train = moses.get_dataset('train')
test = moses.get_dataset('test')
test_scaffolds = moses.get_dataset('test_scaffolds')
数据集直链为 media.githubusercontent.com/media/molecularsets/moses/master/data/dataset_v1.csv,官方记录的 md5 为 6bdb0d9526ddf5fdeb87d6aa541df213。
HuggingFace 上存在镜像版本,记录为 71.5 MB 下载文件 / 34.2 MB parquet,共 1,936,962 行,与官方数字一致。
工程建议:无论用哪一套,都应在首次拉取后记录 md5 或 parquet 行数,并在实验记录中固定该哈希。两套数据都存在"从上游重建导致内容漂移"的风险,GuacaMol 尤其(因为它依赖包版本)。
§4 数据结构与字段语义
4.1 MOSES 数据集字段
MOSES 的 dataset_v1.csv 是一张分子表,每行一个分子。核心字段如下:
| 字段 | 类型 | 语义 | 备注 |
|---|---|---|---|
SMILES |
string | 分子的线性表示 | 主键;需 RDKit 可解析 |
split |
string | train / test / test_scaffolds |
划分标签 |
logP |
float | 辛醇-水分配系数(计算值) | 常用作分布相似性指标 |
SA |
float | 合成可及性分数 | 越低通常越易合成 |
QED |
float | 类药性定量估计 | 0-1 |
Molecular Weight |
float | 分子量(Da) | 受 250-350 过滤约束 |
字段命名陷阱:不同镜像与不同库(moses / molsets / torchdrug / HuggingFace)对列名的大小写与拼写不完全一致(如
SMILESvssmiles、Molecular Weightvsmolecular_weight)。在写代码前先df.columns打印一次,不要照抄教程里的列名。
4.2 torchdrug 中的 MOSES
MOSES 被 torchdrug 收录为内置数据集,记录为 #Molecule 1,936,963(含表头行的行数口径)。加载方式:
from torchdrug import datasets
dataset = datasets.MOSES("~/molecule-datasets/")
数字口径提示:
1,936,963与1,936,962的差异来自是否把表头或索引计入。这类"差 1"的差异在数据工程里非常常见,报告时应说明是"数据行数"还是"文件行数"。
4.3 MOSES 的 Python 接入
MOSES 提供 StringDataset 与 CharVocab,可直接接入 torch 的 DataLoader:
from moses.utils import CharVocab, StringDataset
from torch.utils.data import DataLoader
vocab = CharVocab.from_data(train)
dataset = StringDataset(vocab, train)
loader = DataLoader(dataset, batch_size=256, shuffle=True)
CharVocab 把 SMILES 当作字符序列处理,而非把分子当作图。这意味着 MOSES 的基线模型族(CharRNN、VAE、AAE、ORGAN 等)大多工作在"字符串生成"范式下,其有效性(Validity)问题主要来自"生成的字符序列能否被 RDKit 解析"。
4.4 GuacaMol 的数据结构
GuacaMol 不是以"一张 CSV"的形式组织,而是以基准任务 + 参考数据集的形式组织。接入方式是通过两个抽象接口:
| 接口 | 用途 | 配对评测函数 |
|---|---|---|
DistributionMatchingGenerator |
分布学习 | assess_distribution_learning |
GoalDirectedGenerator |
目标导向优化 | assess_goal_directed_generation |
模型只需实现这两个接口之一(或两者),即可接入官方评测流程。基线实现在独立仓库 BenevolentAI/guacamol_baselines 中。
设计优点:以接口而非固定数据格式接入,降低了适配成本,也让评测逻辑与模型实现解耦。代价:正因为数据不落成一张可直接检查的 CSV,使用者更容易忽略"训练集到底长什么样",从而踩到数据泄漏的坑(见 §5)。
4.5 安装
GuacaMol:
pip install guacamol
依赖 RDKit ≥ 2018.09.1.0 与 FCD 库 1.1;仓库根目录可用 pytest 运行自测。
MOSES:
pip install molsets # PyPI 包名是 molsets,不是 moses
提供 Docker 镜像 molecularsets/moses(约 4.1 GB),官方建议运行时加 --shm-size 10G(因为训练与评测涉及大批量采样,共享内存不足会导致崩溃)。
包名陷阱:PyPI 上的包名是
molsets,而导入名与 GitHub 仓库名是moses。写pip install moses会装到不相关的包。这是新手最常踩的安装坑之一。
§5 划分协议与数据泄漏陷阱
5.1 MOSES 的三种划分
MOSES 提供三个划分:
- train:训练集。
- test:随机划分的测试集,与训练集同分布。
- test_scaffolds:骨架划分测试集,其 Bemis-Murcko 骨架在训练集与普通测试集中均未出现。
这是 MOSES 相对 GuacaMol 最有价值的设计之一:test_scaffolds 直接检验模型能否泛化到未见骨架,而不仅仅是"能不能模仿见过的骨架"。对于药物发现的实际需求(探索新化学空间),骨架泛化能力比随机划分上的表现更有意义。
5.2 划分规模的三套口径冲突
这是本条目必须显式记录的一个坑。MOSES 的划分规模存在至少三套数字:
| 口径来源 | train | test | test_scaffolds |
|---|---|---|---|
| 官方 README(实验用) | 250,000 | 10,000 | 10,000 |
| 数据集直链实测 | 1,584,664 | 176,075 | 176,226 |
| 第三方重划分(TDC 口径) | 1,355,874 | valid 193,696 | test 387,392 |
如何理解这三套数字:
- 官方 README 的 250k/10k/10k:这是论文实验中实际使用的子采样规模。为了让基线的训练成本可控,论文实验从完整数据集中采样了较小的子集。它描述的是"论文怎么跑的",不是"数据集里有什么"。
- 数据集实测的 1.58M/176k/176k:这是从
dataset_v1.csv按split列统计得到的真实行数,反映完整数据集的划分。 - TDC 口径:Therapeutics Data Commons 等第三方在整合时做了自己的重划分(含独立 valid 集),数字与 MOSES 原始划分不同。
实践含义:
- 论文里引用的 “MOSES train 250k” 与 “MOSES 数据有 190 万分子” 并不矛盾——前者是实验子集,后者是数据集总量。
- 当你要复现论文基线时,必须搞清楚你复现的是哪一套划分。用完整 1.58M 训练去对论文的 250k 基线数字,是没有可比性的。
- 当你要报榜时,必须显式声明划分口径(“MOSES, official README 250k/10k/10k split” 或 “MOSES, full dataset split”)。
5.3 GuacaMol 的划分与 holdout
GuacaMol 的分布学习基准采用随机划分的参考集。评测时,Validity/Uniqueness/Novelty/FCD 的参考分布通常来自从 ChEMBL 随机抽取的 10,000 个分子。
此外,GuacaMol 通过 holdout 机制避免"训练集里已有答案":
- 10 个上市药物(celecoxib 等)构成 holdout 集。
- 训练数据中,与这 10 个药物 ECFP4 相似度 > 0.323 的分子已被剔除。
这一步的设计意图是:当任务要求模型"重新发现 celecoxib"时,训练集里不存在与 celecoxib 高度相似的结构,因此成功重发现不能靠记忆。而这恰恰使得 AddCarbon 式的平凡策略在某些任务上也能拿分(见坑点 1)。
5.4 数据泄漏的四种常见来源
分子生成基准的数据泄漏不像 NLP 那样被广泛讨论,但同样存在,且更隐蔽。
(1)训练/测试集重叠
若在完整数据集上训练、又在同一划分的 test 上评测,随机划分的 test 与 train 同分布,模型可能只是"记住了相邻结构"。
(2)Novelty 的精确匹配漏洞
Novelty 检查的是"生成的 canonical SMILES 是否精确出现在训练集中"。做过微小编辑的分子会通过检查。这就是 Copy Problem 的机制。
(3)参考分布与训练分布同源
FCD 与 KL 的参考分布取自测试集(或 ChEMBL 随机子集)。若模型过拟合训练集,而训练集与测试集同分布,则 FCD 会自动变好——FCD 降低不等于生成能力提升。
(4)骨架泄漏
随机划分下,test 集中的分子可能与 train 集中的分子共享 Bemis-Murcko 骨架。此时在 test 上的好表现可能只是骨架记忆。只有 MOSES 的 test_scaffolds 系统性排除了这一点。
5.5 划分选择的决策建议
| 你的目标 | 建议划分 | 理由 |
|---|---|---|
| 复现论文基线 | 论文所用的划分(多数是 250k/10k/10k) | 只有同口径才可比 |
| 评估泛化能力 | MOSES test_scaffolds | 唯一系统排除骨架泄漏的划分 |
| 与新方法横向比较 | 与对比方法使用同一划分 | 划分不同则分数无意义 |
| 生产环境选型 | 自建目标域 holdout | 公开测试集可能已被"刷"过头 |
一条硬纪律:任何跨论文的分数对比,都必须先确认三件事——数据集版本、划分口径、采样规模。三者任一不同,比较即无效。
§6 AI 就绪使用指南
本章是本条目的核心。§6.1-§6.4 给出可直接执行的工作流与检查清单;§6.5 用四段式拆解 8 个高频坑点。
6.1 上手路径:从零到第一条基准分数
路径 A:评测你自己的分布学习模型(MOSES)
# 1. 取数据
import moses
train = moses.get_dataset('train')
test = moses.get_dataset('test')
test_scaffolds = moses.get_dataset('test_scaffolds')
# 2. 记录口径(重要!)
print(len(train), len(test), len(test_scaffolds))
# 3. 训练你的模型 ...
# 4. 采样 —— 官方建议至少 30,000 个分子
generated = my_model.sample(30000)
# 5. 评测
from moses.metrics import get_all_metrics
metrics = get_all_metrics(
gen=generated,
test=test,
test_scaffolds=test_scaffolds,
n_jobs=8,
)
路径 B:评测你自己的目标导向模型(GuacaMol)
from guacamol.assess_goal_directed_generation import assess_goal_directed_generation
from guacamol.goal_directed_generator import GoalDirectedGenerator
class MyGenerator(GoalDirectedGenerator):
def generate_optimized_molecules(self, scoring_function, number_molecules, starting_population=None):
# 实现你的采样逻辑
...
assess_goal_directed_generation(MyGenerator(), json_output_file="results.json")
路径 C:评测你的分布学习模型(GuacaMol)
from guacamol.assess_distribution_learning import assess_distribution_learning
from guacamol.distribution_matching_generator import DistributionMatchingGenerator
class MyGenerator(DistributionMatchingGenerator):
def generate(self, number_samples: int):
...
assess_distribution_learning(MyGenerator(), chembl_file_path=..., json_output_file="results.json")
6.2 评测前的 12 项检查清单
在任何报榜之前,逐项确认:
- 数据版本:GuacaMol 用 ChEMBL 24;MOSES 用
dataset_v1.csv(md5 记录了吗?)。 - 包版本:GuacaMol 的数据生成对 Python 包版本敏感;锁定环境或使用官方 Docker。
- 划分口径:你用的是 250k/10k/10k 还是完整划分?写在实验记录里。
- 采样规模:GuacaMol 用 10,000;MOSES 建议 ≥ 30,000。不要混用。
- 参考集:FCD/KL 的参考分布取自哪个集合?(test 还是 test_scaffolds?)
- 随机种子:跑了几种种子?报告均值 ± 标准差了吗?
- Validity 计算口径:是"生成 10,000 个分子中可解析的比例",还是"生成直到 10,000 个可解析分子的过程中尝试了多少"?
- Uniqueness 计算口径:分母是 10,000 还是实际采样数?
- Novelty 的匹配粒度:用的是 canonical SMILES 精确匹配吗?
- 是否使用了 PAINS 过滤后的分子:MOSES 数据集已过滤 PAINS,这会影响 Filters 指标的基线水平。
- 可合成性复核:分数之外,是否做了独立的可合成性检查?
- 用途审查:生成分子的用途是否通过了机构层面的合规审查?
6.3 指标计算口径的三个细节
细节 1:Validity / Uniqueness / Novelty 是链式依赖的
GuacaMol 的定义方式不是各自独立计算:
- Validity:在 10,000 个生成分子中,可被 RDKit 解析的比例。
- Uniqueness:采样直到得到 10,000 个合法分子,去重后除以 10,000。
- Novelty:生成直到得到 10,000 个不同的 canonical SMILES,其中不在 ChEMBL 训练集中的比例。
这是一个顺序采样过程:Uniqueness 的采样池是在 Validity 通过后的分子中取的;Novelty 又在 Uniqueness 通过后取。这意味着采样效率低的模型会被隐式惩罚(要尝试更多次才能凑够 10,000 个),但报告的分数本身看不到这个代价。
含义:一个 Validity 只有 0.5 的模型与一个 Validity 1.0 的模型,如果都能凑到 10,000 个不同分子,报告的 Uniqueness/Novelty 可能是可比的——但前者的实际计算成本高一倍。报榜时应同时记录达到 10,000 个不同分子所需的生成次数。
细节 2:FCD 是单值压缩
FCD(Fréchet ChemNet Distance)把生成集与参考集在 ChemNet 末层激活上的分布差异压成一个标量。
- 优点:便于排序,官方将其推荐为总体模型排序指标。
- 缺点:单值无法定位具体失败模式。FCD 变差,你无法从中得知是"分子太小"“环太少"还是"官能团分布不对”。
工作流建议:用 FCD 做初筛与排序,用 Frag / Scaff / SNN / 性质分布图做诊断。MOSES 官方脚本会输出 logP/SA/QED/分子量的属性分布可视化,用于这类诊断。
细节 3:SNN 与 IntDiv 的方向相反
- SNN(Similarity to Nearest Neighbor):生成分子到测试集最近邻的平均 Tanimoto 相似度。高 SNN = 生成的分子在训练集附近。
- IntDiv(Internal Diversity):生成分子两两之间的平均相似度。高 IntDiv = 生成集合内部多样。
这两个指标构成一对张力:只追求高 SNN 会生成保守的、类似训练集的分子(可能低 Novelty);只追求高 IntDiv 会生成混乱、不合理的分子。健康的模型应在两者间取得平衡,而不是单指标最大化。
6.4 采样规模对指标的影响
官方给出的采样规模建议是不同的:
| 基准 | 采样规模 |
|---|---|
| GuacaMol 分布学习 | 10,000 |
| MOSES 评测建议 | ≥ 30,000 |
这个差异有实际后果:
- Unique@1k 与 Unique@10k 是两个不同指标。MOSES 的 Unique@1k 是"前 1,000 个采样中唯一的比例",Unique@10k 同理。采样越多,Unique@Nk 通常越低(因为模型会重复)。
- 因此,Unique@10k 的性质与 Unique@1k 不同:前者对模式崩溃更敏感。
- 若你的模型在某规模上表现好,在另一规模上可能显著退化——这是模式崩溃的典型表现(见坑点 6)。
纪律:报榜时同时给出采样规模与两个 Unique 指标,不要只给其中一个。
6.5 八个高频坑点
⚠️ 坑点 1:Copy Problem —— 平凡模型刷满分布学习基准(分类:评测失效 / 指标设计缺陷)
问题:MOSES 与 GuacaMol 的分布学习指标(Validity、Uniqueness、Novelty)设计上只检查生成分子与训练集分子的精确匹配。一个完全不学习分布的模型,只要对训练集分子做微小编辑,就能同时通过"有效"“唯一”"新颖"三项检查,且因为编辑幅度极小,KL divergence 与 FCD 也表现得很好。
症状:你训练了一个正常模型,指标看起来不错,但当你用 Renz 等人提出的 AddCarbon 基线(从训练集随机取一个分子,插入一个碳原子)做对照时,发现它的成绩超过了你(除 LSTM 外的所有基线都被它超过),具体为 Validity 1.000 / Uniqueness 0.999 / Novelty 1.000 / KL 0.982 / FCD 0.871。这时你会意识到:你的模型只是在做一件比"插碳原子"更复杂的事,却没有赢得相应的指标回报。
解决:
- 补充似然评估:在 hold-out 测试集上评估模型对真实分子的对数似然,这是 AddCarbon 无法作弊的指标(它没有概率模型)。
- 看 SNN 分布而非只看精确匹配:AddCarbon 的 SNN 会接近饱和(生成分子几乎就是训练分子),健康模型的 SNN 应明显低于饱和值。
- 报告新增指标的对照:在论文/报告中必须包含 AddCarbon 之类平凡基线作为 sanity check,否则指标数字无法解释。
- 若你的目标是评估"生成新化学空间的能力",考虑改用骨架层面的指标(MOSES 的 Scaff、test_scaffolds 划分上的表现)。
参考:Renz et al., “On Failure Modes in Molecule Generation and Optimization”, Drug Discovery Today: Technol. 2019, 32-33, 55-63;
⚠️ 坑点 2:GuacaMol 与 MOSES 分数不可直接比较(分类:跨基准误用)
问题:两套基准在数据集(ChEMBL 24 vs ZINC Clean Leads)、划分协议(随机 vs 随机+骨架)、指标定义(部分同名指标口径不同)、采样规模(10k vs 30k)与设计意图(兼顾优化 vs 侧重分布学习)上均不同。把 GuacaMol 分数与 MOSES 分数放在同一张表里排名,会得出系统性错误的结论。
症状:你在论文里看到"Model A 在 GuacaMol 得 0.9,Model B 在 MOSES 得 0.9,两者相当"这类表述,或者自己做了类似对比;审稿人或同事据此选择了一个实际表现更差的模型。更隐蔽的症状是:两个模型都报"GuacaMol 分数",但数据源/划分/采样规模不同,数字被并列在一个表格里。
解决:
- 基准确认三件套:数据集版本、划分口径、采样规模。三者任一不同 → 不比较。
- 若必须同时报告两套分数,分开成两张表,并各自注明口径,不做跨表合并排名。
- 在同一基准内部比较时,也需确认对比方法用的是同一份数据与划分(MOSES 的 250k/10k/10k 是论文实验口径,不是唯一口径)。
- 若你的目标是比较"哪个模型更适合你的任务",自建目标域 holdout 比任何公开基准都更可靠。
参考:
⚠️ 坑点 3:MOSES 划分口径文档与实测不一致(分类:文档/数据不一致)
问题:MOSES 官方 README 描述的实验划分为 train 250k / test 10k / scaffold test 10k,但从官方数据集直链下载
dataset_v1.csv后按split列统计,实际得到的是 train 1,584,664 / test 176,075 / scaffold test 176,226。第三方(TDC)口径又是 train 1,355,874 / valid 193,696 / test 387,392。三套数字同时存在于文献与代码库中。症状:你想复现某篇论文的 MOSES 基线,用完整划分训练后,发现自己的指标与论文数字相差很远;或者你在方法部分写"MOSES 数据集含 250k 训练分子",被指出与数据集实际内容矛盾。
解决:
- 区分"论文实验口径"与"数据集内容口径":前者是子采样,后者是全集。引用时明确说"论文实验使用 250k 子集"而非"MOSES 数据集含 250k 分子"。
- 实测并记录:
把输出写进实验记录。import moses for s in ['train', 'test', 'test_scaffolds']: print(s, len(moses.get_dataset(s)))- 复现论文时,严格使用论文所述的子采样规模与种子;若要展示完整数据集上的表现,另开一节并明确标注"full split, 不可与论文基线直接比较"。
- 使用 TDC 版本时,注意它引入了独立 valid 集,划分逻辑与 MOSES 原始版本不同。
参考:
⚠️ 坑点 4:目标导向评分函数可被对抗性利用(分类:评测失效 / 代理指标缝隙)
问题:GuacaMol 的 20 项目标导向优化任务使用计算型评分函数(相似度、预测活性、QED 等)。这些函数不覆盖可合成性、成药性与反应性亚结构,因此可被对抗性分子利用——优化器找到的是"评分函数的高分区域",而非"化学上合理的分子"。文献明确指出,ML 评分函数尤其容易被对抗性利用。
症状:你的模型在某 GuacaMol 目标导向任务上拿到了 0.85+ 的高分,发表时被审稿人指出生成分子中包含大量无法合成或不稳定的结构(如过多累积的环张力、异常官能团组合)。
解决:
- 独立可合成性复核:对高分输出跑一个独立的逆合成/合成可行性评估(如 Gao & Coley 方法的实现),而不是依赖训练时用的 SA 分数。
- 反应性/稳定性筛查:用 rd_filters 或类似工具排查高反应性亚结构(PAINS、不稳定基团)。
- 人工审查样本:随机抽 20-50 个高分分子,让化学家目视检查——这一步成本不高,但能捕获自动化评分漏掉的明显荒谬。
- 解释使用限制:在结果中明确写"分数反映的是评分函数定义的优化程度,不代表分子可用性"。
参考:Gao & Coley, “The Synthesizability of Molecules Proposed by Generative Models”, J. Chem. Inf. Model. 2020, 60(12), 5714-5723;
⚠️ 坑点 5:GuacaMol 的 Validity 是"隐式假定"(分类:指标语义误解)
问题:GuacaMol 的默认设定假定模型输出的分子是有效的,Validity 以"隐式"方式处理;当有效性出现问题时,缺陷往往源自解码器或后处理,而非"模型本身生成了无效 SMILES"。这一点与 MOSES 显著不同——MOSES 把 Validity 作为显式的一级指标报出。
症状:你在 GuacaMol 上报了一组漂亮的分数,但检查原始输出时发现大量 SMILES 无法被 RDKit 解析;或者你发现自己的 Validity 计算方式与 MOSES 文献中的口径不一致,导致两个数字被误认为可比。
解决:
- 区分"生成的有效性"与"后处理后的有效性":明确你的流水线中,规范化/过滤发生在评测的哪一步。
- 显式计算并报告 Validity:即使 GuacaMol 不强制,也要自己统计"原始生成中可解析比例"与"后处理后有效比例"两个数字。
- 检查解码器:若 Validity 异常低,先怀疑解码器实现(如采样长度截断、非法字符输出),而不是怀疑模型表达力。
- 跨基准时注意口径:GuacaMol 与 MOSES 的 Validity 分母定义不同,不要混用。
参考:
⚠️ 坑点 6:MOSES Unique@10k 偏低 = 模式崩溃(分类:模型诊断)
问题:MOSES 的 Unique@1k 与 Unique@10k 衡量不同采样规模下的唯一性。Unique@10k 显著低于 Unique@1k,意味着模型在增加采样量时开始重复自己——这是**模式崩溃(mode collapse)**的典型信号,即模型只学会了数据分布中少数几个模式,反复采样这几个模式。
症状:你的模型 Unique@10k 只有 0.6-0.8,而基线 CharRNN 接近 1.0;或者不同随机种子之间的 Unique@10k 波动极大(说明采样落入不同模式)。
解决:
- 提高采样温度 / 使用核采样(nucleus sampling):降低温度会加剧崩溃,提高温度或使用 top-p 采样通常能提升多样性(代价是 Validity 可能下降——需要权衡)。
- 增加多样性奖励:在训练目标中加入 IntDiv 或熵正则项,直接鼓励输出多样性。
- 检查训练数据与模式数:若训练集本身高度同质(MOSES 的 250-350 Da 窄带),模式数天然有限,此时低 Unique@10k 可能是数据属性而非模型缺陷——需要对照数据集本身的多样性上限。
- 报告多指标组合:Unique@10k 下降时,同时看 IntDiv 与 SNN。若 IntDiv 也下降,确认是崩溃;若 IntDiv 正常而 Unique 低,可能是采样重复。
参考:
⚠️ 坑点 7:MOSES Filters 指标低分的归因(分类:指标诊断)
问题:MOSES 的
Filters指标衡量生成分子通过一系列结构/性质过滤的比例。低分有两个完全不同的原因,需要区分:PAINS 类警示结构 vs MW/logP 等理化性质越界。两者对应完全不同的修复手段。症状:你的模型 Filters 只有 0.7 左右,但不知道问题出在哪一类过滤上;盲目调参后无改善。
解决:
- 分解归因:分别统计被 PAINS 规则拦下的比例与被 MW/logP 规则拦下的比例。
- 若 PAINS 是主因:在 RL 微调阶段加入 PAINS 惩罚项,或在采样后做 PAINS 过滤(注意这会影响其他指标,需重新评测)。
- 若 MW/logP 越界:调整生成模型的条件范围(若模型支持条件生成),或在数据侧检查——MOSES 数据集本身已过滤至 MW 250-350 / XlogP ≤ 3.5,若你的生成分子大量越界,说明模型没有很好地学到该分布。
- 注意基线水平:MOSES 数据集已做过 PAINS/MCF 过滤,因此"合格分子的 Filters 基线"本就偏高,低分意味着模型确实产出了大量被过滤的结构。
参考:
⚠️ 坑点 8:VAE 的"高 SNN + 低 Novelty"组合与 ChEMBL 域混杂(分类:结果解读 / 数据偏倚)
问题:VAE 类模型在 MOSES 上常呈现高 SNN + 低 Novelty 的组合,MOSES 论文作者假设这反映了模型对训练集原型的过拟合——但这是假说,不是已证机制。同时,GuacaMol 侧的 ChEMBL 24 含跨领域分子(小分子、抗生素、小肽),域混杂会干扰分布学习指标的可解释性。
症状:你的 VAE 拿到了很高的 SNN(0.6+)但 Novelty 只有 0.5 左右,你在论文里直接写"VAE 过拟合了训练集"——这是一个未经证实的因果断言,容易被审稿人挑战。或者你的 FCD 分数波动很大,找不到原因,实际上是因为 ChEMBL 的目标分布本身不够同质。
解决:
- 把过拟合表述为假说:写"高 SNN + 低 Novelty 的组合与’对训练集原型过拟合’的假说一致",而不是断言因果。
- 补充直接证据:若要支持过拟合假说,可展示生成分子与训练集的逐分子最近邻分布(而非均值),或分析生成分子的骨架是否集中在少数几个训练骨架。
- 处理域混杂:在使用 ChEMBL 作为分布学习目标时,先按目标域做子集筛选(例如只保留类药小分子),再评测;或在报榜时同时给出"全库"与"子集"两个口径。
- 检查数据源差异的影响:ZINC 偏向更小更易合成、酰胺键比例更高的分子;ChEMBL 偏向有活性记录的分子。同一模型在两套数据上的"过拟合特征"可能不同,不要跨数据源套用结论。
参考:
§7 质量评估
7.1 GuacaMol 的指标构成
GuacaMol 的评测由三部分组成:5 个分布学习基准 + 20 个目标导向优化基准 + 化合物质量指标。论文自述其中部分任务"太容易被大多数模型解决",即区分度不足。
7.1.1 分布学习指标(5 项)
| 指标 | 定义 | 参考分布 | 方向 |
|---|---|---|---|
| Validity | 10,000 个生成分子中可被 RDKit 解析的比例 | — | 越高越好 |
| Uniqueness | 采样至 10,000 个合法分子后去重,除以 10,000 | — | 越高越好 |
| Novelty | 生成至 10,000 个不同 canonical SMILES,其中不在 ChEMBL 训练集中的比例 | ChEMBL 训练集 | 越高越好 |
| KL divergence | 理化性质分布的 KL 散度 | 参考集 | 越低越好 |
| FCD | ChemNet 特征分布的 Fréchet 距离 | 从 ChEMBL 随机抽的 10,000 分子 | 越低越好 |
7.1.2 目标导向优化任务(20 项)
20 项任务覆盖五大类场景:
| 类别 | 说明 | 任务示例 |
|---|---|---|
| Rediscovery | 重新发现已知活性分子 | Celecoxib_rediscovery |
| Similarity | 与目标分子的相似度优化 | Similarity_Search |
| Isomer generation | 生成同分异构体 | Isomers |
| Scaffold hopping | 骨架跃迁 | (骨架类任务) |
| MPO | 多参数优化 | Perindopril_MPO、Ranolazine_MPO、Osimertinib_MPO |
| 预测活性 | 单一靶点活性 | JNK3_activity |
| 药物化学 | 综合类药性 | Medicinal_Chemistry |
其中 Median Molecules 任务设计为冲突任务:同时最大化对多个分子的相似度——这是一个典型的"不可能全赢"的设计,用于测试优化器在冲突目标下的折中能力。
7.1.3 化合物质量指标
GuacaMol 使用 Walters 的 rd_filters 做化合物质量评估,规则集来自 SureChEMBL、Glaxo、PAINS 及作者内部规则集。
重要限定:GuacaMol 论文自己指出,生成分子的质量难以客观衡量,且化合物质量规则集本身存在争议——"假定被过滤的分子全部不合适、通过的分子都合理"这种二分法是误导性的。使用 rd_filters 的通过率作为质量证据时,必须带上这条限定。
7.2 MOSES 的 9 类指标
MOSES 的指标集为:Validity、Unique@1k/10k、Filters、Novelty、IntDiv、Frag、Scaff、SNN、FCD。
| 指标 | 定义 | 方向 |
|---|---|---|
| Validity | 生成分子中 RDKit 可解析的比例 | 越高越好 |
| Unique@1k | 前 1,000 个采样中唯一分子的比例 | 越高越好 |
| Unique@10k | 前 10,000 个采样中唯一分子的比例 | 越高越好 |
| Filters | 通过结构/性质过滤规则的比例 | 越高越好 |
| Novelty | 生成集合中不在训练集的比例 | 越高越好 |
| IntDiv | 生成分子两两之间的平均相似度 | 越高越多样 |
| Frag | 生成集与测试集 BRICS 片段频率向量的余弦距离 | 越低越像 |
| Scaff | 生成集与测试集 Bemis-Murcko 骨架频率向量的余弦距离 | 越低越像 |
| SNN | 生成分子到测试集最近邻的平均 Tanimoto 相似度 | 高 = 靠近训练分布 |
| FCD | ChemNet 末层激活分布的差异 | 越低越好 |
官方的排序建议:MOSES 建议用 FCD/Test 作为总体模型排序指标,其余指标用于诊断。
两个关键限定:
- MOSES 仅评估 1D(SMILES)与 2D 分子特征,不含 3D 构象性质。
- FCD 单值压缩多指标信息,无法定位具体失败模式。
7.3 指标诊断矩阵
当你看到某个指标异常时,按下表排查(组合两套基准的指标语义):
| 观察到的现象 | 可能原因 | 下一步动作 |
|---|---|---|
| Validity 低 | 解码器缺陷 / 采样截断 / 非法字符 | 检查解码实现,打印原始输出样本 |
| Unique@10k ≪ Unique@1k | 模式崩溃 | 提高采样温度 / 加多样性奖励(坑点 6) |
| Novelty 低 | 生成分子与训练集高度相似;或过拟合 | 对照 SNN 与骨架分布(坑点 8) |
| SNN 接近饱和(>0.9) | 生成分子几乎是训练分子;或 Copy Problem 类模型 | 检查是否为平凡基线行为(坑点 1) |
| FCD 差但其他指标正常 | 性质分布偏移,而非结构问题 | 看 logP/SA/QED/MW 的分布图 |
| Frag 差、Scaff 好 | 局部片段分布不对,骨架分布 OK | 检查官能团/取代基的生成质量 |
| Scaff 差、Frag 好 | 骨架分布偏移,局部片段 OK | 提示模型未学到全局结构多样性 |
| IntDiv 高但 Validity 低 | 过度追求多样导致不合理结构 | 在多样性与有效性间调参 |
| Filters 低 | PAINS 或 MW/logP 越界 | 分解归因后分别处理(坑点 7) |
| FCD 波动大(跨种子) | 采样随机性大或训练不稳定 | 跑多种子,报告均值±标准差 |
| 目标导向分数高但分子荒谬 | 评分函数被对抗性利用 | 独立可合成性复核(坑点 4) |
7.4 24 项 DAIMS 数据质量评分
DAIMS(Data and AI Maturity/Integrity Scoring)是本百科用于对数据集做结构化质量评估的 24 项检查框架。每项 0-5 分,满分 120 分。
A. 数据可得性与许可(6 项)
| # | 检查项 | 评分 | 说明 |
|---|---|---|---|
| A1 | 数据是否公开可下载 | 5 | 两套基准均完全公开;MOSES 有直链与 HF 镜像,GuacaMol 可本地重建 |
| A2 | 许可条款是否清晰 | 4 | 代码均 MIT 明确;MOSES 数据集遵循 ZINC 条款,需向上游追溯 |
| A3 | 是否需要注册/申请 | 5 | 均无需注册,直接获取 |
| A4 | 是否有校验用哈希 | 3 | MOSES 提供 md5 6bdb0d95...;GuacaMol 未提供数据哈希(依赖包版本) |
| A5 | 数据版本是否可固定 | 3 | MOSES 有 dataset_v1.csv 版本号;GuacaMol 数据随包版本变化,需 Docker 锁定 |
| A6 | 获取是否稳定(非单点) | 4 | GitHub + HF 镜像 + TDC 多渠道;GuacaMol 依赖 GitHub 与 PyPI |
B. 数据规模与代表性(5 项)
| # | 检查项 | 评分 | 说明 |
|---|---|---|---|
| B1 | 规模是否足够训练 | 5 | MOSES 193.7 万;GuacaMol 约 160 万,均属充足量级 |
| B2 | 覆盖化学空间是否广 | 3 | MOSES 受 MW 250-350 窄带限制;GuacaMol 受 ChEMBL 正样本偏倚限制 |
| B3 | 是否含域混杂 | 2 | ChEMBL 24 含小分子/抗生素/小肽,域混杂明显 |
| B4 | 是否符合目标域(类药小分子) | 4 | 两套均面向类药小分子,MOSES 更严格但更窄 |
| B5 | 是否有唯一主键/去重 | 4 | SMILES 作主键;需注意 canonicalization 才能可靠去重 |
C. 标注与字段质量(4 项)
| # | 检查项 | 评分 | 说明 |
|---|---|---|---|
| C1 | 字段语义是否明确 | 5 | MOSES 字段(SMILES/logP/SA/QED/MW)语义清晰 |
| C2 | 是否含预计算属性 | 4 | MOSES 直接给 logP/SA/QED/MW,省去重算 |
| C3 | 是否有划分标签 | 5 | MOSES 显式提供 split 列含 test_scaffolds |
| C4 | 字段命名一致性 | 3 | 跨库/跨镜像列名不一致(大小写、下划线),需先确认 |
D. 划分与评测协议(5 项)
| # | 检查项 | 评分 | 说明 |
|---|---|---|---|
| D1 | 划分是否防泄漏 | 3 | MOSES 的 test_scaffolds 有效防骨架泄漏;GuacaMol 分布学习以随机划分为主 |
| D2 | 划分文档是否一致 | 2 | MOSES 三套口径冲突(README/实测/TDC),是本数据集最大文档缺陷 |
| D3 | 指标定义是否完备 | 4 | 两套均有成套指标;但存在 Copy Problem 等已知漏洞 |
| D4 | 采样规模是否有明确建议 | 5 | GuacaMol 10k、MOSES ≥30k,均有明示 |
| D5 | 是否提供参考基线 | 5 | 两套均提供多模型基线(MOSES 6+,GuacaMol 含基线仓库) |
E. 可复现性与工程支持(4 项)
| # | 检查项 | 评分 | 说明 |
|---|---|---|---|
| E1 | 是否有官方容器 | 4 | MOSES 提供 Docker(4.1 GB,需 --shm-size 10G);GuacaMol 提供版本受控 Docker |
| E2 | 依赖是否可锁定 | 3 | GuacaMol 对 Python 包版本敏感,官方明示需容器 |
| E3 | 是否有预训练权重 | 2 | MOSES 未随仓库打包预训练权重,需自行重训;削弱直接可比性 |
| E4 | 是否有活跃维护 | 2 | GuacaMol 最后推送 2024-02;MOSES 0.2.0 于 2023-04,均属低活跃维护期 |
F. 合规与负责任使用(含在 24 项内的收尾项)
| # | 检查项 | 评分 | 说明 |
|---|---|---|---|
| F1 | 是否声明用途限制 | 3 | 论文提及局限,但未提供结构化的用途限制声明 |
| F2 | 是否有双用途风险提示 | 2 | 两套基准均未显式讨论生成模型的双用途风险 |
| F3 | 是否记录已知失效模式 | 4 | 两套论文均讨论了部分局限(如质量难以衡量、任务过易) |
| F4 | 是否提供社区纠错渠道 | 4 | 均有 GitHub issue 渠道;生态中有多篇批评与复现文献 |
总分与解读
| 维度 | 得分 | 满分 |
|---|---|---|
| A 可得性与许可 | 24 | 30 |
| B 规模与代表性 | 18 | 25 |
| C 标注与字段质量 | 16 | 20 |
| D 划分与评测协议 | 19 | 25 |
| E 可复现性与工程支持 | 11 | 20 |
| F 合规与负责任使用 | 13 | 20 |
| 总计 | 101 | 140 |
评分口径说明:上表按 A-F 六组共 24 项展开,其中 A4/A5/A6 与 E1-E4 等项的分值区间为 0-5,但各组满分因项数不同而不同(A=30, B=25, C=20, D=25, E=20, F=20,合计 140)。A1-A6 + B1-B5 + C1-C4 + D1-D5 + E1-E4 + F1-F4 = 24 项,与 DAIMS 24 项定义一致。
解读:
- 强项(4 分以上):A 组(可得性与许可,24/30)与 D 组(划分与评测协议,19/25)——两套基准之所以成为事实标准,正是因为它们在公开、可获取、有成套指标与基线这几件事上做得足够好。
- 弱项(2 分及以下):D2(划分文档不一致,2/5)、B3(域混杂,2/5)、E3(无预训练权重,2/5)、E4(维护不活跃,2/5)、F2(无双用途提示,2/5)——这五项是使用者在生产环境落地时必须自行补齐的地方。
- 总体定位:101/140(约 72%)属于"研究可用、生产需加固"档。作为方法比较与消融研究的评测协议,两套基准是合格的;作为药物研发决策依据,则完全不充分(见 §10 禁止用途)。
7.5 质量评估的常见误区
- 把"通过过滤"等同于"分子好":GuacaMol 论文自己指出这种二分法是误导性的。
- 把 SA 分数等同于可合成:SA 优化的是"看起来可合成",生成模型仍会产出实际不可合成的分子;高 GuacaMol/MOSES 分数不必然意味着分子可合成,目标导向模型尤其如此。
- 把 FCD 单值当作全面评价:FCD 是排序工具,不是诊断工具。
- 忽视评测口径依赖采样规模:GuacaMol 用 10,000,MOSES 建议 30,000,直接横比会产生偏差。
- 假设基准分数与命中发现相关:目前没有建立这种经验关系;有批评明确指出这些可计算性质与命中发现无关。
§8 基准与生态
8.1 GuacaMol 的基准数字
8.1.1 分布学习对照表(论文口径)
论文报告的分布学习对照涵盖 RS、LSTM、GraphMCTS、AAE、ORGAN、VAE、AddCarbon 等模型,指标为 Validity-Uniqueness-Novelty-KL-FCD。其中 ORGAN 的 Validity 为 0.379、FCD 为 0.000——FCD 为 0 看似"完美",实为模式崩溃(生成集合退化成几乎同质的分子,其 ChemNet 特征分布与参考分布的距离被压缩)。
这是理解 FCD 陷阱的最佳案例:FCD 越低越好,但 FCD=0 在这里不是成功,而是失败的信号。任何单指标都可能被退化解占据,必须组合解读。
8.1.2 论文结论
GuacaMol 论文的主要结论:
- 最佳优化器是基于图表示的遗传算法,其次为 SMILES 循环神经网络,且分数相近。
- 在大型数据集上预训练时,神经模型的化合物质量优于遗传算法。
- 更简单的生成模型(VAE、LSTM)优于更复杂的模型——这是一个反直觉但重要的结论。
- SMILES 表示的效果超出预期,但向图表示的迁移"仍需更多工作"。
8.1.3 第三方复现基准(非官方)
第三方整理的复现数字(非官方,且不同来源间口径不一,不可直接比较):
| 模型 | 报告分数 |
|---|---|
| CharRNN | 0.462 |
| VAE | 0.602 |
| ChemGPT | 0.721 |
| Graph-based | 0.751 |
| Graph-based GA | 0.844 |
| REINVENT | 0.957 |
| JT-VAE | 0.987 |
使用警告:这组数字来自第三方复现,并非官方排行榜数字,且不同模型的评测条件(划分、采样规模、是否调参)不可比。仅可作为"量级参考",不可作为模型排名依据。
8.1.4 影响力指标
OpenAIRE 页面显示 GuacaMol 论文引用数为 714(该数字随时间变动,应视为快照)。
8.2 MOSES 的基准数字
- CharRNN 的 FCD 为 0.073——这是论文报告的最佳 FCD 之一。
- JT-VAE 示例:FCD 0.67 / Validity 0.99 / Unique 0.99。
对照解读:CharRNN 是相对简单的模型却取得最低 FCD,与 GuacaMol 论文"更简单的模型优于更复杂模型"的结论一致。这提示:在两套基准上,模型复杂度不是决定因素,训练数据规模与训练充分度往往更重要。
8.3 参考基线模型
MOSES 实现的基线模型:CharRNN、VAE、AAE、ORGAN、JT-VAE、LatentGAN,以及非神经基线 HMM、NGram、Combinatorial。
工程入口:
- 端到端脚本:
python scripts/run.py - 多种子复现:
sh scripts/run_all_models.sh - 属性分布可视化:logP / SA / QED / 分子量
GuacaMol 的基线:独立仓库 BenevolentAI/guacamol_baselines。
8.4 生态与后续基准
GuacaMol 与 MOSES 之后,分子生成评测生态继续演化,出现了若干后继或补充性工作:
| 后续工作 | 定位 |
|---|---|
| Therapeutics Data Commons (TDC) | 更广的药物发现数据集与基准集合,含重划分的 MOSES 版本 |
| Sample Efficiency Matters | 关注样本效率维度的评测 |
| DrugPose | 面向 3D/对接维度的评测,补足 1D/2D 基准的空白 |
| MolScore | 分子生成的评分-评测-基准框架,J. Cheminform. 2024, 16:64 |
相关综述与批评文献:
- Grant & Sit, “De novo molecular drug design benchmarking”, RSC Med. Chem. 2021, 12, 1273。
- Renz et al., “On Failure Modes in Molecule Generation and Optimization”, Drug Discovery Today: Technol. 2019, 32-33, 55-63。
- Gao & Coley, “The Synthesizability of Molecules Proposed by Generative Models”, J. Chem. Inf. Model. 2020, 60(12), 5714-5723。
- FCD 原始论文:Preuer et al., J. Chem. Inf. Model. 2018, 58(9), 1736-1741。
8.5 生态层面被引用的主要批评
- 过度聚焦可计算性质:两套基准聚焦唯一性、新颖性、QED、SA 等可计算性质,这些与命中发现无关,对先导优化仅部分相关。
- SA 的误导性:SA 优化的是"看起来可合成",生成模型仍产出不可合成分子;高基准分数不等于可合成。
- 缺乏疗效评估:尚不确定药物化学家是否认同这些基准给出的分数。
- 质量规则集的争议:假定被过滤分子全部不合适、通过者全部合理,是误导性的。
- 1D/2D 局限:不含 3D 构象与结合模式,无法评估结构导向的任务。
如何在一篇论文里负责任地使用这些基准:把基准分数定位为"方法内部的相对比较工具",而非"分子质量或药效的证据"。报榜时同时给出:口径声明(数据/划分/采样规模)、平凡基线对照(如 AddCarbon)、可合成性复核、以及明确的使用限制声明。
§9 资源与引用
9.1 官方资源
GuacaMol:
| 资源 | 链接 |
|---|---|
| 主代码仓库 | github.com/BenevolentAI/guacamol |
| 基线模型仓库 | github.com/BenevolentAI/guacamol_baselines |
| 官方排行榜 | benevolent.ai/guacamol |
| PyPI 包 | pip install guacamol |
MOSES:
| 资源 | 链接 |
|---|---|
| 当前维护仓库 | github.com/GT4SD/moses |
| 原始仓库 | github.com/molecularsets/moses |
| PyPI 包 | pip install molsets |
| Docker 镜像 | molecularsets/moses(约 4.1 GB) |
9.2 许可条款
| 对象 | 许可 |
|---|---|
| GuacaMol 代码 | MIT |
| MOSES 代码 | MIT |
| MOSES 数据集 | 遵循 ZINC 条款(需向上游追溯) |
合规提醒:MOSES 数据集源自 ZINC,其使用需遵守 ZINC 自身的条款。虽然 MOSES 代码是 MIT,但代码许可不覆盖数据集许可。在商业部署前应单独确认 ZINC 数据集的使用条件。
9.3 仓库活跃度快照
GuacaMol(截至 2024-03-15 快照):
| 指标 | 数值 |
|---|---|
| 建库日期 | 2018-11-16 |
| 最后推送 | 2024-02-11 |
| Stars | 373 |
| Forks | 81 |
| Open Issues | 14 |
MOSES:最后维护版本 0.2.0,提交日期 2023-04-12,维护位置已迁移至 GT4SD 组织下。
9.4 核心引用(BibTeX)
GuacaMol:
@article{Brown2019GuacaMol,
title = {GuacaMol: Benchmarking Models for de Novo Molecular Design},
author = {Brown, Nathan and Fiscato, Marco and Segler, Marwin H. S. and Vaucher, Alain C.},
journal = {Journal of Chemical Information and Modeling},
volume = {59},
number = {3},
pages = {1096--1108},
year = {2019},
doi = {10.1021/acs.jcim.8b00839},
pmid = {30887799}
}
MOSES:
@article{Polykovskiy2020MOSES,
title = {Molecular Sets (MOSES): A Benchmarking Platform for Molecular Generation Models},
author = {Polykovskiy, Daniil and Zhebrak, Alexander and Sanchez-Lengeling, Benjamin
and Golovanov, Sergey and Tatanov, Oktai and Belyaev, Stanislav
and Kurbanov, Rauf and Artamonov, Aleksey and Aladinskiy, Vladimir
and Veselov, Mark and Kadurin, Artur and Johansson, Simon
and Zhavoronkov, Alex and Aspuru-Guzik, Al{\'a}n and Nikolenko, Sergey},
journal = {Frontiers in Pharmacology},
volume = {11},
pages = {565644},
year = {2020},
doi = {10.3389/fphar.2020.565644}
}
9.5 关键出处汇总
| 事实类别 | 主要来源 |
|---|---|
| GuacaMol 论文与指标定义 | J. Chem. Inf. Model. 2019, 59(3):1096-1108 |
| GuacaMol 数据源与后处理 | 同上;ACS 全文 |
| MOSES 论文与过滤协议 | Front. Pharmacol. 2020, 11:565644 |
| MOSES 数据规模与划分 | MOSES 官方仓库 README |
| MOSES 实测划分 | 第三方复现笔记 |
| Copy Problem / AddCarbon | Renz et al. 2019 |
| 可合成性批评 | Gao & Coley 2020 |
| 评测失效模式 | 第三方评测笔记与 OPIG 博客 |
§10 AI 使用声明卡
10.1 一句话定性
GuacaMol 与 MOSES 是分子生成模型的"内部横向比较工具",不是分子质量的证据,更不是药物有效性的证据。
10.2 推荐用途
| 用途 | 说明 |
|---|---|
| 方法消融研究 | 在固定口径下比较模型变体的相对优劣 |
| 论文报榜 | 提供可复现的评测协议与基线对照 |
| 教学与演示 | 展示分布学习与目标导向两类任务的评测逻辑 |
| 基线对照 | 为自研模型提供公开参照 |
10.3 禁止用途
| 用途 | 理由 |
|---|---|
| 作为药物安全性证据 | 两套基准均不评估毒性、药代、安全性终点 |
| 作为临床有效性证据 | 不涉及任何临床或体内数据 |
| 作为化合物采购/入库的唯一依据 | 不含可合成性与成本的充分评估 |
| 用基准分数直接推断研发成功率 | 基准分数与命中发现之间无经验关系 |
| 单一指标的绝对化解读 | FCD=0 可能是模式崩溃;Validity 高可能是平凡模型 |
10.4 使用前必须声明的四件事
任何引用本基准的工作,都应显式声明:
- 数据口径:ChEMBL 24(GuacaMol)还是 ZINC Clean Leads(MOSES)?数据集版本/哈希?
- 划分口径:MOSES 的 250k/10k/10k 还是完整划分还是 TDC 划分?
- 采样规模:10,000(GuacaMol)还是 30,000+(MOSES)?
- 平凡基线对照:是否跑了 AddCarbon 之类的 sanity check?
10.5 已识别的重大局限(须随结论一并陈述)
- 分布学习指标可被微小编辑的平凡模型刷满(Copy Problem)。
- 两套基准分数不可横向比较。
- MOSES 划分口径三套并存,文档与实测不一致。
- 目标导向评分函数可被对抗性利用,不覆盖可合成性。
- Validity 在 GuacaMol 中为隐式假定。
- FCD 单值无法定位失败模式;FCD=0 可能是崩溃。
- 仅覆盖 1D/2D,无 3D 构象与结合模式。
- 与真实成药性、疗效之间无已建立的经验关系。
10.6 双用途风险提示
分子生成技术具有明显的双用途属性:同一套代码既可以用于设计治疗性分子,也可以被滥用于设计毒性物质或受控物质类似物。两套基准本身未显式讨论这一问题(DAIMS F2 评分 2/5)。
建议措施:
- 在机构层面建立生成分子的用途审查流程。
- 遵守所在司法辖区关于化学品与受控物质的法律法规。
- 对生成模型的权重与采样接口实施访问控制。
- 在公开发表时,避免提供可直接复现的危险分子设计配方。
10.7 引用本条目
本条目由千帆 Hub 医疗数据集百科维护。引用时请同时引用两篇原始论文(见 §9.4)与本条目的规范链接 ``。
§C 结构化数据(JSON-LD)
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "MedicalWebPage",
"@id": "#medicalwebpage",
"name": "GuacaMol 与 MOSES 分子生成基准套件",
"inLanguage": "zh-CN",
"dateModified": "2026-09-15",
"audience": {
"@type": "Audience",
"audienceType": "药物发现机器学习工程师、计算化学家"
},
"about": {
"@type": "Thing",
"name": "分子生成模型基准评测"
}
},
{
"@type": "Dataset",
"@id": "#dataset",
"name": "GuacaMol + MOSES 分子生成基准套件",
"alternateName": ["GuacaMol", "MOSES", "Molecular Sets"],
"creator": [
{"@type": "Organization", "name": "BenevolentAI"},
{"@type": "Organization", "name": "Insilico Medicine"}
],
"license": ["https://opensource.org/licenses/MIT"],
"isAccessibleForFree": true,
"measurementTechnique": ["SMILES canonicalization", "Tanimoto similarity", "ECFP4 fingerprint"],
"variableMeasured": [
"Validity", "Uniqueness", "Novelty", "KL divergence", "FCD",
"IntDiv", "Frag", "Scaff", "SNN", "QED", "SA"
],
"citation": [
"https://doi.org/10.1021/acs.jcim.8b00839",
"https://doi.org/10.3389/fphar.2020.565644"
]
},
{
"@type": "cr:RecordSet",
"@id": "#recordset",
"name": "MOSES dataset_v1 记录集",
"cr:recordCount": 1936962,
"cr:primaryKey": "smiles",
"cr:field": [
{"@type": "cr:Field", "name": "smiles", "cr:dataType": "sc:Text"},
{"@type": "cr:Field", "name": "split", "cr:dataType": "sc:Text"},
{"@type": "cr:Field", "name": "logP", "cr:dataType": "sc:Float"},
{"@type": "cr:Field", "name": "SA", "cr:dataType": "sc:Float"},
{"@type": "cr:Field", "name": "QED", "cr:dataType": "sc:Float"},
{"@type": "cr:Field", "name": "molecular_weight", "cr:dataType": "sc:Float"}
]
},
{
"@type": "rai:DataLimitations",
"@id": "#limitations",
"rai:hasDataLimitation": [
{"@type": "rai:DataLimitation", "name": "Copy Problem 平凡模型刷分"},
{"@type": "rai:DataLimitation", "name": "两套基准不可横向比较"},
{"@type": "rai:DataLimitation", "name": "MOSES 划分口径三套并存"},
{"@type": "rai:DataLimitation", "name": "评分函数可被对抗性利用"},
{"@type": "rai:DataLimitation", "name": "ChEMBL 域混杂"},
{"@type": "rai:DataLimitation", "name": "无 3D 构象评估"},
{"@type": "rai:DataLimitation", "name": "缺少预训练权重"}
],
"rai:recommendedUse": [
"分子生成模型的内部横向排名",
"方法消融研究"
],
"rai:prohibitedUse": [
"药物安全性或临床有效性证据",
"化合物入库决策的唯一依据"
]
},
{
"@type": "FAQPage",
"@id": "#faq",
"mainEntity": [
{
"@type": "Question",
"name": "GuacaMol 和 MOSES 可以放在一起比较吗?",
"acceptedAnswer": {
"@type": "Answer",
"text": "不可以。两者在数据源(ChEMBL 24 vs ZINC Clean Leads)、划分协议、指标定义与采样规模(10,000 vs 30,000)上均不同,直接比较会产生系统性偏差。"
}
},
{
"@type": "Question",
"name": "MOSES 数据集到底有多少分子?",
"acceptedAnswer": {
"@type": "Answer",
"text": "数据集总共有 1,936,962 个分子。官方 README 提到的 train 250k / test 10k / scaffold test 10k 是论文实验使用的子采样规模,而非数据集总量。按 split 列实测为 train 1,584,664 / test 176,075 / scaffold test 176,226。"
}
},
{
"@type": "Question",
"name": "为什么 FCD 越低越好,但 ORGAN 的 FCD=0 却不是好事?",
"acceptedAnswer": {
"@type": "Answer",
"text": "FCD=0 表示生成集合的 ChemNet 特征分布与参考分布几乎重合。ORGAN 的 Validity 仅 0.379,其 FCD=0 是模式崩溃的表现——生成集合退化为同质分子,而非真正学会了数据分布。任何单指标都可能被退化解占据。"
}
},
{
"@type": "Question",
"name": "GuacaMol 的数据源是 ZINC 吗?",
"acceptedAnswer": {
"@type": "Answer",
"text": "不是。GuacaMol 的数据源是 ChEMBL 24(2018),规模约 160 万分子;MOSES 的数据源是 ZINC Clean Leads。这是一个常见误记。"
}
}
]
}
]
}
附录 A:术语表
| 术语 | 英文 | 释义 |
|---|---|---|
| SMILES | Simplified Molecular-Input Line-Entry System | 分子的线性文本表示 |
| Canonical SMILES | 规范化 SMILES | 经 RDKit 规范化后,同一分子对应唯一字符串 |
| de novo 设计 | de novo design | 从零生成分子结构 |
| 分布学习 | distribution learning | 学习训练集的分子分布并采样 |
| 目标导向优化 | goal-directed optimization | 针对评分函数最大化生成分子得分 |
| Bemis-Murcko 骨架 | Bemis-Murcko scaffold | 去除侧链后的分子核心环系 |
| BRICS | Breaking of Retrosynthetically Interesting Chemical Subsets | 一种把分子切成片段的规则 |
| ECFP4 | Extended Connectivity Fingerprint (radius 2) | 常用的分子指纹 |
| Tanimoto 相似度 | Tanimoto similarity | 两个指纹之间的相似度度量 |
| QED | Quantitative Estimate of Drug-likeness | 类药性定量估计 |
| SA | Synthetic Accessibility | 合成可及性分数 |
| PAINS | Pan-Assay Interference Compounds | 常见干扰化合物警示结构 |
| MCF | 过滤规则集 | MOSES 过滤协议中使用的规则集之一 |
| FCD | Fréchet ChemNet Distance | ChemNet 特征分布距离 |
| SNN | Similarity to Nearest Neighbor | 到最近邻的平均相似度 |
| IntDiv | Internal Diversity | 生成集合内部多样性 |
| 模式崩溃 | mode collapse | 生成模型只覆盖少数模式 |
| Copy Problem | 复制问题 | 平凡模型通过复制训练分子取得高分 |
附录 B:快速决策树
问:我该用哪一套?
- 我要评测"模型能否生成统计上像真实分子的集合" → 用 MOSES(指标齐全,含骨架划分)。
- 我要评测"模型能否针对特定目标优化分子" → 用 GuacaMol(20 项目标导向任务)。
- 我要同时报告两者 → 可以,但分成两张表,各自注明口径。
- 我要评估泛化到新骨架 → 用 MOSES 的 test_scaffolds。
- 我要在生产环境选型 → 两套都只作参考,务必自建目标域 holdout。
- 我要报榜 → 先确认对比方法的口径三件套(数据版本/划分/采样规模),跑 AddCarbon 对照。
问:指标异常时先看什么?
| 异常 | 先看 |
|---|---|
| Validity 低 | 解码器实现(坑点 5) |
| Unique@10k 低 | 模式崩溃(坑点 6) |
| FCD 好但分子荒谬 | 是否退化解(§8.1.1) |
| Novelty 高但分数虚 | 是否 Copy Problem(坑点 1) |
| Filters 低 | PAINS 还是 MW/logP(坑点 7) |
| 目标导向分高 | 可合成性复核(坑点 4) |
条目结束。 本条目由千帆 Hub 医疗数据集百科维护,归类于「九、药物发现与化学信息学」,production_order = 319。规范链接:``。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- PubChem-PCBA — 共享标签:药物发现与化学 / 医学问答与基准 / 评测基准
- OpenI — 共享标签:药物发现与化学 / 分子生成 / 评测基准
- MoleculeNet — 共享标签:药物发现与化学 / 医学问答与基准 / 评测基准
- LIT-PCBA — 共享标签:药物发现与化学 / 医学问答与基准 / 评测基准
- pcqm4mv2 — 共享标签:药物发现与化学 / 医学问答与基准 / 评测基准
- QM9 — 共享标签:药物发现与化学 / 医学问答与基准 / 评测基准
- kiba — 共享标签:药物发现与化学 / 医学问答与基准 / 评测基准
- I2B2-n2c2 NLP — 共享标签:医学问答与基准 / 评测基准
- cblue — 共享标签:医学问答与基准 / 评测基准
- gdb-17 — 共享标签:药物发现与化学 / 分子生成
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。
