信息速览

CrossDocked2020 — 蛋白-配体交叉对接构象数据集 AI-Ready Wikipedia
INFOBOX
| 数据集名称 | CrossDocked2020 |
| 英文全称 | The CrossDocked2020 Data Set(论文亦称 CrossDocked2020 set) |
| 别名/简称 | CrossDocked2020、CD2020、crossdocked_v1.1/v1.3、crossdocked_pocket10(社区处理版)、ReDocked2020(其重对接子集) |
| 疾病分类 | 非疾病专病库——覆盖全治疗领域药物靶点。ICD-11 示例映射:2A00–2F9Z 恶性肿瘤(激酶等靶点)/ 1C62 HIV 病(HIV 蛋白酶)/ 5A11 2 型糖尿病(DPP-4、GLP-1R)/ 8A00 痴呆(BACE1 等,详见 §2.1) |
| SNOMED CT | 363346000 Malignant neoplastic disease / 86406008 HIV infection / 73211009 Diabetes mellitus / 52448006 Dementia(详见 §2.2) |
| 数据模态 | 3D 结构(受体 PDB / 配体 SDF 原子坐标,全部为计算对接构象)+ 结构化文本(types 文件:pose 标签、pK、RMSD、Vina 分数) |
| AI 任务类型 | 二分类(pose 好/坏)、排序(pose 选择)、回归(亲和力)、口袋条件 3D 分子生成、ensemble docking 研究 |
| 样本总数 | 22,584,102 个 pose(论文 v1.0:2,922 口袋 / 18,450 口袋-配体对 / 13,839 配体);v1.3:22,566,449 pose / 2,900 口袋 / 17,815 对;内含 ReDocked2020 重对接子集 786,960 pose |
| 数据大小 | v1.3 全量 tarball 含 52,126,979 个文件(数十 GB 级);molcache2 全量训练加载约 22 GB 内存;downsampled 版约 5 GB;社区 HF 镜像 SDF 部分 23.8 GB |
| 数据格式 | PDB(受体)/ SDF.gz(配体 pose)/ .gninatypes(libmolgrid 二进制)/ molcache2 / 纯文本 types 文件(tgz 打包) |
| 许可证 | 官方未随数据附加单独数据许可(服务器直接开放下载);论文预印本 CC BY-NC-ND 4.0;上游 PDBbind v2017 学术使用需注册、结构源自 wwPDB |
| 访问级别 | 开放(直接下载,无需注册) |
| DUO 标签 | NRES(无限制——官方未附加注册、用途或地理限制;引用论文即可;上游 PDBbind 数据使用条款需另行遵守) |
| 语言 | 英文(文件名、types 文件与 README 均为英文) |
| 首发日期 | 2020-02-20(ChemRxiv 预印本 v1,随文发布数据);2020-08-31 JCIM 正式版(2020-09-10 在线刊出) |
| 最后更新 | v1.3(现行推荐版本;gnina/models 仓库最后提交 2023-09-18) |
| 发布机构 | 美国匹兹堡大学计算与系统生物学系(David R. Koes 实验室,GNINA 团队) |
| 官方主页 | https://github.com/gnina/models(data/CrossDocked2020 目录为官方数据说明) |
| 下载地址 | http://bits.csb.pitt.edu/files/crossdock2020/ |
| DOI | 10.1021/acs.jcim.0c00411(原始论文) |
| 引用次数 | 374+(OpenAlex,截至 2026-09;2024 年 87 次 / 2025 年 103 次,持续上升) |
| AI 就绪度评分 | ⭐⭐⭐⭐(4/5)— 官方 CCV 划分 + types/molcache2 预处理 + 可运行训练脚本齐备;扣分项:全量 5,213 万文件解压工程量大、约 58% pose 无亲和力标签、PyTorch 生态需自行格式转换、多版本与第三方再分发并存易混淆 |
| 页面状态 | published |
§0 E-E-A-T 信任声明与免责声明
医学审核者:千方病案医学编辑部交叉审核:§2 药物发现背景(靶点-疾病映射、交叉对接方法学定位、金标准描述)、§7 偏倚分析。
数据工程审核者:千方病案医学编辑部交叉审核:§4 DAIMS 数据字典(types 文件字段、pose 文件组织)、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
审核日期:2026-09-05
审核方式:交叉审核
利益冲突声明:千方病案医数集与美国匹兹堡大学、ACS 出版集团及 wwPDB 合作机构无任何商业利益关联。本页面不销售 CrossDocked2020 数据本身,仅提供 AI 就绪指南与学术信息服务。编辑者未接受上述机构任何形式的资助。
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。CrossDocked2020 由匹兹堡大学服务器直接开放下载,官方未附加单独数据许可;其上游 PDBbind v2017 亲和力数据学术使用需在 PDBbind-CN 注册,结构数据遵循 wwPDB 相关政策。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 📌 30 秒速览
CrossDocked2020 是什么? 它是全球最大的蛋白-配体交叉对接构象数据集,由匹兹堡大学 David Koes 实验室(GNINA 团队)于 2020 年发布。团队先按结合口袋相似性把 PDB 数据库中的蛋白结构聚成约 2,900 个"口袋",然后把每个口袋里的所有药物样小分子,逐一交叉对接(cross-docking)到该口袋的每一个受体构象上——即"别人的药放进我的口袋"——最终产出约 2,256 万个对接构象(pose),每个都带有"离真实晶体结合模式多远"的 RMSD 标注。
为什么重要? 深度学习打分函数与分子生成模型最缺的就是大规模三维训练样本:实验解析的复合物(PDBbind)只有约 2 万个,而 CrossDocked2020 用计算方法把规模放大了三个数量级,同时保留了"受体换了、药也换了"的真实对接难度——论文证明用它训练能显著改善模型对新靶点的泛化(原始论文在 OpenAlex 已被引 374+ 次,截至 2026-09)。
你能用它做什么? 训练一个 3D 卷积神经网络做对接 pose 分类与亲和力预测(GNINA 路线)、训练口袋条件的三维分子生成模型(TargetDiff、GraphBP 路线,采用社区标准协议:RMSD<1 Å 过滤 + 序列一致性 <30%,得 10 万训练对 + 100 个测试口袋)、或研究受体柔性与 ensemble docking。但请先读 §6.5 的 8 个坑点——这是一个"坑点密度"极高的数据集。
一个容易忽视的细节:数据集名字里的"2020"指发布年份,而非"2020 年版 PDBbind"——其受体结构来自 Pocketome v17.12(2017 年 12 月快照),pK 标签来自 PDBbind v2017;引用版本时请写"CrossDocked2020(数据 v1.3)",避免与 PDBbind 年份版本混淆。
§1.1 摘要
CrossDocked2020 的构建流水线(Francoeur et al., 2020, JCIM):以 Pocketome v17.12 为骨架,将 PDB 中结合位点相似的受体结构按口袋分组(v1.0 论文口径 2,922 个口袋),用 ProDy 清洗受体(去水与 HETATM、保留识别出的离子)并按口袋做结合位点对齐;口袋内每个配体经 smina(AutoDock Vina 打分函数、autobox 定义搜索盒、每对至多 20 pose)交叉对接到同口袋每个非同源受体上;晶体配体另经 RDKit UFF 精修后再以 smina/Vina 相对受体最小化(tt_min pose)一并纳入。每个 pose 相对晶体构象计算对称性校正 RMSD,RMSD ≤2 Å 记 label 1 否则 0;pK 亲和力标签取自 PDBbind v2017(Kd/Ki/IC50 不区分),并假设同一口袋内该配体亲和力恒定。为提升模型对能量最小化的鲁棒性,团队又用"预测错误但得分高"的 pose 作为迭代反例(it1/it2)再生成两轮,最终 22,584,102 个 pose 中反例占约 52%。官方提供 ProBiS 聚类(z-score 3.5)3 折 **clustered cross-validation(CCV)**划分、types 文件与 molcache2 预处理缓存,模型、权重与数据全部托管于 github.com/gnina/models 与 bits.csb.pitt.edu;现行 v1.3 修复了 v1.1 的芳香环键级缺失、结构错位等问题并重新生成约 60% 数据。
§1.2 战略价值分析
规模范式维度:在 CrossDocked2020 之前,结构基深度学习只有 PDBbind(v2016 全量约 1.3 万个蛋白-配体复合物)一个数量级的语料;CrossDocked2020 用"口袋聚类 × 组合交叉对接"把可用 pose 一举推到 2,256 万,且每个受体构象都有数十至上百个"换药不换口袋"的平行样本,使 3D-CNN 打分函数第一次可以在 pose 分类与亲和力两任务上做大规模训练。它把"结构药物发现的 ImageNet 时刻"从亲和力数据库(PDBbind)延伸到了构象层面——这是后续所有 3D 生成模型能够起飞的前提。
难度校正维度:重对接(redocking,药放回自己的口袋)对现代算法已近乎解决,而交叉对接(药放进同靶点不同构象的口袋)才贴近真实虚拟筛选场景——受体是柔性的、口袋是会动的。在这个口径下,传统物理打分已经明显失灵:AutoDock Vina 的 Top1 pose 选择准确率仅 41.3%,意味着"换一个受体构象"就足以让经典算法一半以上的时候选错构象。论文系统证明:用重对接数据训练的模型在交叉对接测试上性能显著下滑(Core → CCV:Pearson R 0.78→0.56、pose 选择 77%→62%),而 CrossDocked2020 训练显式注入了对受体构象变化的鲁棒性。这一"难度设计"使它成为评估模型真实泛化能力的天然考场。
可复现性维度:与许多"只发数据不发脚手架"的学术数据集不同,CrossDocked2020 的整个生产链路是开源可重建的——对接用 smina、口袋聚类用 Pocketome/ProBiS、受体清洗用 ProDy、训练用 gnina/scripts、降采样用 dkoes/cnnaffinitypaper 的 intelligent_downsample.py,官方连 5 个随机种子共用的 3 折划分文件都直接给出。对做方法学研究的团队而言,这意味着从"拿到数据"到"跑出论文级基线"之间几乎不存在隐藏工程;对数据工程团队而言,这也意味着每一步的失败模式都是可定位、可复现的(见 §6.5)。
生态杠杆维度:围绕它形成了两级生态:上游是 GNINA/libmolgrid/gnina-scripts 全家桶(官方 types、molcache2、训练脚本、预训练权重一应俱全);下游是结构基药物设计(SBDD)生成模型的社区标准协议——RMSD<1 Å + 序列一致性 <30% 过滤得 10 万训练对 + 100 测试口袋,TargetDiff(ICML 2023)、GraphBP(ICML 2022)、AR(NeurIPS 2021)、liGAN(Chem Sci 2022)等几乎全部主流 SBDD 生成模型都沿用该协议发表,使跨论文比较第一次成为可能。衍生数据集 BigBind(将 ChEMBL 活性映射到 CrossDocked 口袋)进一步把它接入活性预测生态。
§1.3 同类数据集横向对比
| 数据集 | 规模 | 模态/标注 | 与 CrossDocked2020 的差异 |
|---|---|---|---|
| PDBbind v2020(general/refined/core) | 23,496 / 5,316 / 285 个复合物 | 实验晶体结构 + 实测 Kd/Ki/IC50 | cognate 重对接、真实但规模小;CrossDocked2020 的 pK 标签即源自 PDBbind v2017,规模是它的约 1,000 倍(pose 计) |
| CASF-2016 core set | 285 个复合物 | 打分函数标准考卷(scoring/ranking/docking/screening 四力) | 静态金标准测试集;CrossDocked2020 是训练集而非考卷,两者互补 |
| DUD-E | 102 靶点、22,886 活性物 + 约 140 万 decoy | 2D/3D 配体 + 人工 decoy | 面向虚拟筛选的"活性 vs 假分子"分类;无受体构象多样性,decoy 偏倚问题著名 |
| BigBind(drorlab) | 11,430 结构 / 851,359 活性 / 531,560 化合物 | CrossDocked 口袋 + ChEMBL 活性 | 直接把 CrossDocked 口袋映射到真实活性标签(口袋 2,922→1,067),牺牲口袋数换取活性监督 |
| Binding MOAD / DockGen | 万级复合物 / 223 个新靶点口袋 | 晶体结构 + 亲和力 | DiffDock 等新一代对接模型的主基准;CrossDocked2020 则是生成模型训练的主力语料 |
§1.4 版本时间轴
| 时间 | 版本/事件 | 说明 |
|---|---|---|
| 2020-02-20 | ChemRxiv 预印本 v1(2020-03-04 v2) | 数据集随预印本首次发布(v1.0 口径) |
| 2020-08-31 | JCIM 正式发表(60(9):4200-4215;2020-09-10 在线刊出) | 论文口径 22,584,102 poses;模型与权重发布于 gnina/models |
| 2020-2021 | v1.1(首个公开原始数据版) | 存在受体"压平"、配体芳香环被移除等已知缺陷 |
| v1.2 | 芳香环键级修复 | 官方建议重新下载 types 文件 |
| 约 2022 | v1.3(现行推荐) | 新口袋下载 schema(一配体一 cognate 受体)+ Pocketome 非冗余集 + 错位结构修复,约 60% 数据重新生成;规模 22,566,449 pose |
| 2023-09-18 | gnina/models 仓库最后提交 | 数据与模型此后冻结,无官方更新计划 |
§1.5 典型应用场景
- 3D-CNN 打分函数训练:用官方 types + molcache2 直接训练 GNINA 系模型,做 pose 分类、pose 选择与亲和力预测(论文路线)。
- 口袋条件 3D 分子生成:采用社区协议(RMSD<1 Å + 序列一致性 <30%)训练 TargetDiff/GraphBP 类模型,在 100 个测试口袋上以 Vina Score/Min/Dock 评测。
- 受体柔性/ensemble docking 研究:同一靶点数十个受体构象天然构成 ensemble,可研究 pose 稳定性与口袋动态。
- 活性标签迁移:借助 BigBind 把口袋映射到 ChEMBL 活性,构建活性预测或筛选模型。
- 方法学基准:反例迭代(it0/it1/it2)与 cdonly/redocked 子集为"训练数据质量 vs 模型鲁棒性"研究提供受控变量。
§2 医学背景
§2.1 ICD-11 疾病分类锚定
CrossDocked2020 不是疾病专病库——它覆盖的是 Pocketome v17.12(2017 年 12 月快照)中可结晶、有共晶配体的全人类药物靶点空间。其价值锚点不在"某种疾病的数据",而在"几乎所有疾病领域的药物发现都可能用到它"。库内高频靶点家族与 ICD-11 疾病领域的示例映射如下:
| 库内代表性靶点家族/类别 | 代表靶点 | 对应治疗领域 | ICD-11 示例锚点 |
|---|---|---|---|
| 蛋白激酶(可溶性、可结晶比例最高) | CDK2、p38 MAPK、 Src 家族 | 恶性肿瘤、炎症 | 2A00–2F9Z 恶性肿瘤 |
| 病毒蛋白酶 | HIV 蛋白酶、HCV NS3/4A | 感染性疾病 | 1C62 HIV 病 |
| 代谢酶与受体(DPP-4、GLP-1R 相关复合物) | DPP-4、HMG-CoA 还原酶 | 内分泌代谢 | 5A11 2 型糖尿病 |
| 神经靶点(AChE、BACE1 等) | 乙酰胆碱酯酶、β-分泌酶 | 神经退行性疾病 | 8A00 痴呆 |
§2.1b SNOMED CT 映射
| 库内靶点场景 | ICD-11 | SNOMED CT | SNOMED CT 术语 |
|---|---|---|---|
| 激酶类抗肿瘤靶点 | 2A00–2F9Z | 363346000 | Malignant neoplastic disease(恶性肿瘤) |
| HIV 蛋白酶抑制剂研发 | 1C62 | 86406008 | HIV infection(HIV 感染) |
| DPP-4/GLP-1 相关代谢靶点 | 5A11 | 73211009 | Diabetes mellitus(糖尿病) |
| AChE/BACE1 神经靶点 | 8A00 | 52448006 | Dementia(痴呆) |
§2.2 背景简介:交叉对接与结构基药物设计
结构基药物设计(SBDD)的核心假设是:小分子的生物活性由其与靶蛋白三维结合口袋的相互作用决定。SBDD 的基本工作单元是"蛋白-配体复合物三维结构"——分子对接算法把配体"装进"口袋并预测其结合模式与强度。其中的关键难点是受体柔性:同一靶点在 PDB 中往往有数十个晶体结构,口袋形状各不相同;把同一个配体对接到这些非同源构象上,就是交叉对接(cross-docking),它比把配体放回自己晶体的**重对接(redocking)**难得多,也更贴近真实虚拟筛选——因为筛选新药时,你手里的受体结构几乎从来不是"为这个药准备的"。
从流行病学视角看,CrossDocked2020 的"人群"即 PDB 的结构人口:可溶性胞内蛋白(激酶、蛋白酶、代谢酶、核受体)占绝对多数,膜蛋白因结晶困难而稀少;这种结构人口偏倚会直接传导给以其训练的模型(详见 §7.1)。对医学 AI 而言,该数据集的角色是"药物发现上游的基础设施"——它不直接诊断或治疗任何疾病,但影响后续进入临床的候选分子质量。
为什么交叉对接是"更真实的考试"? 把配体放回自己的晶体(重对接)相当于"开卷考试":口袋形状天然适配该配体。而交叉对接相当于"同题异卷"——考题(配体)不变,但考场(受体构象)换成了同一靶点在另一种生理状态下的样子。对结合口袋构象敏感的模型会在换卷后暴露真实水平;对口袋动力学建模良好的模型则保持稳定。这种"受控变难"的设计使 CrossDocked2020 成为衡量结构模型鲁棒性的天然标尺:同一模型在重对接与交叉对接两个口径下的性能落差,本身就是受受体柔性影响程度的量化指标。
§2.3 临床任务定义
数据集服务的"临床任务"是药物发现流水线中的计算环节,可与经典医学任务类比理解:
| 药物发现计算任务 | 类比临床任务 | 定义 | 本数据集的支持方式 |
|---|---|---|---|
| 结合模式预测(pose prediction) | 影像病灶定位 | 给定受体与配体,预测配体在口袋中的三维结合位置 | 2,256 万级 pose + RMSD≤2 Å 好坏标签 |
| Pose 选择/打分(pose ranking) | 病变分级 | 在多个候选 pose 中挑出最接近真实结合的构象 | 每个 pocket-ligand 对数十至千余个带 RMSD 的候选 pose |
| 亲和力预测(affinity regression) | 预后评分 | 预测结合强度 pK(pKd/pKi/pIC50) | 41.9% pose 带 PDBbind v2017 pK 标签 |
| 结构基分子生成 | "设计"新药分子 | 在固定口袋条件下生成高结合倾向的新配体 | 社区协议:10 万训练对 + 100 测试口袋 |
§2.4 靶点人群描述
| 维度 | 描述 |
|---|---|
| 结构来源 | wwPDB 全球提交(考古式纳入至 2017-12,Pocketome v17.12 快照) |
| 口袋/靶点规模 | v1.0:2,922 个口袋;v1.3:2,900 个口袋(Pocketome 非冗余口径) |
| 配体 | 13,839 个药物样小分子(>1,000 Da 与歧义配体已剔除) |
| 靶点家族构成 | 以可结晶可溶性蛋白为主:激酶、蛋白酶、水解酶、核受体、激酶-抑制剂复合物等;膜蛋白与多跨靶点占比低(结晶偏倚) |
| 亲和力标签覆盖 | v1.0 口径 41.9% 复合物有 pK(源自 PDBbind v2017);v1.3 口径 58.9% pose 无标签 |
| 就医类型/年龄/性别 | 不适用(非患者数据) |
§2.5 临床与转化价值
该数据集的医学价值通过"降低药物发现成本"间接传导至患者:虚拟筛选与生成模型越准,进入湿实验与临床前验证的候选分子命中率越高,研发周期与成本越低。CrossDocked2020 生态(GNINA 已集成进多个开源对接工作流;TargetDiff 协议被后续 MolPilot、DrugFlow 等模型沿用)已成为计算药物设计事实上的训练标准之一。需要强调的是:本数据集不含任何人体数据,其"金标准"是计算生成的——因此任何走向临床的模型都必须在真实活性和细胞数据上做外部验证(§7.8)。
从转化链条看,它处于"靶点结构确认 → 先导化合物发现 → 先导优化 → 临床前"的最上游两环:交叉对接训练的打分函数服务虚拟筛选(从百万化合物库中缩小候选集),生成模型服务全新分子设计(直接在口袋里"画"分子)。两环的输出都会进入后续的生化实验验证——数据集标签的计算属性决定了它的产出是"假设生成器"而非"结论",这一边界在向临床团队汇报模型结果时必须明确传达。
§2.6 金标准对照表
| 项目 | 内容 |
|---|---|
| 参照真值 | wwPDB 实验解析的配体晶体构象(经 UFF + Vina 最小化后的 tt_min pose,详见坑点 2) |
| 划分方式 | 官方:ProBiS(z-score 3.5)口袋聚类 3 折 CCV;社区:RMSD<1 Å + 序列一致性 <30%(10 万训练对 + 100 测试口袋) |
| 标注方式 | 全自动:smina 对接生成 pose → 对称性校正 RMSD 计算 → 阈值 2 Å 二值化;pK 从 PDBbind v2017 查表 |
| 标注者 | 算法(无人工标注、无标注者间一致性概念);标签噪声由论文作者自认"inherently noisier" |
| 标注性质 | 计算生成标签(非实验测量);亲和力为实验测量值但跨受体共享 |
§3 数据集规格
§3.0 版本抉择矩阵
| 你的需求 | 推荐版本/形态 | 大小(加载/磁盘) | 理由 |
|---|---|---|---|
| 复现论文或训练 GNINA 打分函数 | v1.3 types + molcache2(rec/lig) | 内存约 22 GB,无需解压 5,213 万文件 | 官方推荐组合,加载快、省内存 |
| 资源受限的原型实验 | downsampled_CrossDocked2020_v1.3(每对 10 好 + 20 坏 pose) | 内存约 5 GB | 官方降采样版;注意各折独立采样、不可跨折混用 |
| 复现 2020 论文精确数字 | 论文 Supporting Information + crossdocked_paper 模型权重 | 与 v1.3 相近 | 论文全部表格基于 v1.0 口径(22,584,102 poses),现行官方服务器仅提供 v1.3 数据 |
| 训练 SBDD 生成模型(TargetDiff 路线) | 社区 crossdocked_pocket10(TargetDiff 仓库经 Google Drive 分发) | 数 GB | 已按 RMSD<1 Å 过滤 + 10 Å 口袋提取,与已发表数字直接可比 |
| 只想快速浏览数据结构 | HuggingFace 镜像 kohbanye/crossdocked2020 | 23.8 GB(SDF 全量 pose 超集) | WebDataset 化镜像,含 manifest 与元数据 |
| 做活性标签学习 | BigBind(drorlab) | 视子集 | CrossDocked 口袋 + ChEMBL 活性,监督信号更真实 |
§3.1 数据模态详情
- 受体三维结构:PDB 格式(
*_rec.pdb),来自 wwPDB,ProDy 清洗(去水、去 HETATM、保留离子),同一口袋内的受体已按结合位点做刚体对齐——因此口袋坐标系共享,可直接做网格化或图构建。 - 配体三维构象:SDF 格式(gzip 压缩),每个文件含一个或多个 pose,文件名后缀编码 pose 来源:
tt_min(Vina 最小化晶体 pose)、tt_docked(smina 对接)、it1_tt_docked/it2_tt_docked(CNN 迭代优化/反例 pose)。 - 结构化标注文本:types 文件,每行一条 pose 记录(label、pK、RMSD、受体文件、配体文件、Vina 分数),是模型训练的"索引层"。
- 二进制缓存:molcache2(libmolgrid 专用)与
.gninatypes(单 pose 二进制),用于高速网格化训练。
§3.2 按子集样本数统计
| 子集(论文 v1.0 Table 2 口径) | 口袋数 | 复合物(口袋-配体对) | Poses | 配体数 | 有亲和力标签比例 |
|---|---|---|---|---|---|
| CrossDocked2020(完整版) | 2,922 | 18,450 | 22,584,102 | 13,839 | 41.9% |
| ─ 其中迭代反例(it1/it2) | — | — | 11,892,173 | — | — |
| CrossDocked It0(无反例) | 2,922 | 18,450 | 10,691,929 | 13,839 | 39.9% |
| CrossDocked Only(cdonly,仅交叉对接) | 2,767 | 18,293 | 21,797,142 | 13,786 | 42.2% |
| ReDocked2020(重对接子集) | 2,916 | 18,369 | 786,960 | 13,780 | 32.7% |
| PDBbind Core(redocking 对照) | — | 280 | 4,618 | 280 | 100% |
| PDBbind Refined(redocking) | — | 3,805 | 66,953 | 2,972 | 100% |
| PDBbind General(redocking) | — | 11,324 | 201,839 | 8,757 | 100% |
| v1.3(现行数据版) | 2,900 | 17,815 | 22,566,449 | — | 41.1%(58.9% 无标签) |
§3.3 数据格式表
| 文件/格式 | 内容 | 使用者 |
|---|---|---|
*_rec.pdb |
受体结构(ProDy 清洗、口袋对齐) | 通用(RDKit/ProDy/PyG 均可读) |
*_lig.pdb / *_uff2.sdf |
晶体配体原始 pose / UFF 精修版 | RMSD 参照、预处理 |
*_tt_min.sdf.gz 等 |
Vina 最小化晶体 pose / 对接 / 迭代 pose(多 conformer) | 深度学习输入 |
*.gninatypes |
单 pose 二进制(libmolgrid 快速加载) | GNINA/Caffe/P training |
molcache2(rec/lig) |
全库受体/配体预处理缓存 | GNINA 训练(官方强烈推荐) |
*.types |
文本索引:label pK RMSD 受体 配体 #Vina 分 | 全部训练流程的入口 |
§3.4 存储大小
- v1.3 全量 tarball:官方 README 明确警告包含 52,126,979 个文件,解压耗时长、inode 消耗巨大(官方未公布解压后确切大小;按社区镜像推算数十 GB 级,解压前请预留数据本体 2 倍以上磁盘空间)。
- molcache2 路线:
crossdock2020_1.3_rec.molcache2+crossdock2020_1.3_lig.molcache2+ types,全量训练加载约 22 GB 内存。 - downsampled 版:加载约 5 GB。
- HuggingFace 社区镜像:2,533,288 个 sdf.gz、23.8 GB(含全部迭代 pose 的超集)。
§3.5 标注方式
全自动标注,无人工环节。三条标注轴:(1) pose 质量标签:smina 对接后相对晶体 pose 计算对称性校正 RMSD,≤2 Å → 1,否则 → 0;(2) 亲和力标签 pK:从 PDBbind v2017 按配体查表(Kd/Ki/IC50 不区分、单位统一取 -log10),同口袋共享;RMSD>2 Å 的行 pK 被故意置为负值(hinge loss 技巧),未知亲和力记 0;(3) Vina 分数:types 行尾注释列。注意:该数据集不使用 MM/GBSA 或任何能量重打分过滤——质量过滤仅有配体分子量(>1,000 Da 剔除)与歧义配体名剔除,常见误传需澄清。
§3.6 标注者资质与一致性
不适用人工标注者资质——全部标签由确定性算法产生(smina、ProDy、对称性校正 RMSD 计算)。由此带来两个一致性特征:复现一致性高(同版本同参数可精确重跑)与系统性偏倚继承(smina 的构象偏好、Pocketome 聚类口径、PDBbind 的实验异质性全部注入标签层)。论文作者明确承认交叉对接 pose 的标签"inherently noisier"(§7.2 详述)。
§3.7 采集周期
静态快照数据集:受体与口袋构成冻结于 Pocketome v17.12(2017-12);对接与反例生成完成于 2019-2020(论文)并经 v1.2/v1.3 两次修复(约 60% 数据在 v1.3 重新生成);2023-09-18 后仓库冻结,官方无增量更新。
口袋构成的平均画像(由官方规模数字推算):平均每个口袋约 6.3 个 cognate 配体(18,450 对 / 2,922 口袋)、数十个受体构象;热门靶点(如激酶 ATP 位点)的口袋可聚合上百个 PDB 结构,而孤儿口袋可能只有 2-3 个构象与 1 个配体——这种长尾分布直接影响每折训练数据的靶点覆盖均衡度,是 §7.5 公平性议题的数据根源。
§3.8 地域覆盖
非地域性数据集:受体结构来自全球 wwPDB 提交者;数据托管于美国匹兹堡大学(bits.csb.pitt.edu),全球可下载。
§3.9 生成"设备"与算法规格
| 环节 | 规格 |
|---|---|
| 口袋定义 | Pocketome v17.12 结合位点相似性聚类(非冗余集,v1.3) |
| 受体处理 | ProDy 去水 + 去 HETATM(识别离子保留);口袋内刚体对齐 |
| 对接引擎 | smina(AutoDock Vina 打分函数),默认设置,autobox 以晶体配体定义搜索盒 |
| 每对 pose 数 | 至多 20(默认输出)+ 1 个 tt_min |
| 迭代反例 | 2 轮:模型打分 >0.9 且 RMSD>2 Å,或 <0.5 且 RMSD<2 Å;新反例与已有 pose 需相差 >0.25 Å |
| RMSD 计算 | 对称性校正(spyrmsd 同类算法),相对晶体 pose |
| 官方划分 | ProBiS z-score 3.5 聚类 3 折 CCV |
§3.10 深度溯源链
wwPDB(实验结构)→ Pocketome v17.12(口袋聚类与对齐)→ ProDy(受体清洗)→ PDBbind v2017(pK 标签源)→ smina(交叉对接与最小化)→ 对称性校正 RMSD(pose 标签)→ CNN 迭代反例生成(it1/it2)→ types/CCV 划分(v1.0 论文口径)→ v1.2/v1.3 修复链(芳香键、错位、去冗余)。每一环都有公开软件或脚本对应(gnina/scripts、dkoes/cnnaffinitypaper),可完整重建。
§4 数据结构
§4.0 目录树
crossdock2020/ # 数据根目录(示例命名 data_root)
├── types/ # CrossDocked2020_v1.3_types.tgz 解压
│ ├── crossdock2020_it2_CCV_train0.types
│ ├── crossdock2020_it2_CCV_test0.types
│ ├── ...(train1/test1、train2/test2,共 3 折)
│ ├── crossdock2020_it0_CCV_*.types # 无反例版本
│ ├── cdonly_*、redocked_* # 仅交叉对接 / 仅重对接子集
│ ├── mod_* # DenseNet 版(去除 RMSD 列)
│ └── *_completeset_* # 全量单文件版
├── pockets/ # CrossDocked2020_v1.3.tgz 解压(52,126,979 个文件)
│ └── <PDBid>_<chain>/ # 每个 Pocketome 口袋一个目录
│ ├── <PDBid>_<chain>_rec.pdb # 受体
│ ├── <PDBid>_<chain>_lig.pdb # 晶体配体
│ ├── <PDBid>_<ligname>_uff2.sdf # UFF 精修晶体 pose
│ ├── <rec>_<chain>_rec_<lig>_<ligname>_lig_tt_min.sdf.gz
│ ├── <rec>_<chain>_rec_<lig>_<ligname>_lig_tt_docked.sdf.gz
│ ├── ..._it1_tt_docked.sdf.gz # 第一轮迭代 pose
│ ├── ..._it2_tt_docked.sdf.gz # 第二轮迭代 pose
│ └── <prefix>_<pose>.gninatypes # 单 pose 二进制
├── crossdock2020_1.3_rec.molcache2 # 受体缓存(libmolgrid)
└── crossdock2020_1.3_lig.molcache2 # 配体缓存(libmolgrid)
§4.1 DAIMS 数据字典(types 文件层)
| 字段名 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| label | Integer | pose 质量:RMSD≤2 Å 为 1 | 1 |
pose 分类目标(cr:Label) | 参照 pose 经 Vina 最小化(坑点 2) | 无 | |
| pK | Float | -log10(Kd/Ki/IC50),源自 PDBbind v2017 | 6.41 |
亲和力回归目标 | Kd/Ki/IC50 混型;跨口袋受体共享(坑点 4) | 0 = 未知;<0 = 该 pose RMSD>2 Å 的占位负值 |
约 -12 ~ 14 |
| rmsd | Float | pose 相对晶体构象的对称性校正 RMSD(Å) | 1.23 |
回归/排序监督、过滤条件 | 最小化参照自洽偏差 | 无 | ≥0 |
| receptor | Text | 受体文件名(口袋目录内) | a2a2_A_rec.pdb |
键、受体质心分组 | 文件名含链与 PDB 编号,解析需小心 | 无 | 文件名 |
| ligand | Text | 配体 pose 文件名 | a2a2_A_rec_3kk8_4HJ_lig_tt_docked.sdf.gz |
键、pose 来源解析 | 后缀编码 pose 类型 | 无 | 文件名 |
| vina_score | Float(行尾 # 注释) |
该 pose 的 AutoDock Vina 分数 | -8.31 |
基线打分、分析 | 旧版 Vina 打分函数 | 缺失该列时行为未定义 | — |
| pose_type | 派生(文件名后缀) | tt_min / tt_docked / it1 / it2 | it2 |
区分反例与自然 pose(坑点 7) | — | 无 | 枚举 4 类 |
| pocket_id | 派生(目录名) | Pocketome 口袋标识 | 1a30_A |
聚类划分、防泄漏(坑点 3) | v1.3 为非冗余口径 | 无 | 文件夹名 |
| (SDF 内部)conformer | 结构 | 同一 SDF 内多个 pose conformer | — | 批量网格化/图构建 | conformer 顺序即 types 行对应关系 | 无 | 每文件 1-20 个 |
§4.2 标签分布
- pose 二分类标签:官方训练 batch 按类别均衡采样(每口袋正负样本均匀),数据本体中正负比例随子集不同(论文报告测试口径约 1:1 附近;downsampled 版强制每对 10 好 + 20 坏)。
- 亲和力标签:v1.0 口径 41.9% 复合物有 pK(v1.3 口径 58.9% pose 无标签);pK 分布继承 PDBbind 药物样强结合偏倚(多数在 4-12 区间),且 RMSD>2 Å 行的 pK 为负占位值——负值与零值都不是亲和力。
- 口径提醒:label 的均衡性是"训练采样策略"而非"数据自然分布"——若自建采样器,需复现官方"按口袋分层 + 正负类平衡"的双重均衡(gnina/scripts 的 train.py 已实现),否则小口袋会被大口袋的样本量淹没,模型指标将系统性偏向高频靶点。
§4.3 关键统计
| 统计项 | 数值 | 说明 |
|---|---|---|
| 总 pose 数 | 22,584,102(v1.0)/ 22,566,449(v1.3) | 摘要中"22.5 million"即此口径 |
| 口袋数 | 2,922(v1.0)/ 2,900(v1.3) | Pocketome 结合位点聚类 |
| 平均每口袋配体数 | 约 6.3 | 18,450 对 / 2,922 口袋 |
| 平均每口袋-配体对 pose 数 | 约 1,200 | = 口袋内受体构象数 × 每次对接至多 20 pose |
| 配体数 | 13,839 | 药物样小分子 |
| 反例占比 | 约 52%(11,892,173/22,584,102) | it1/it2 两轮迭代 |
| 官方划分折数 | 3 折 CCV | 5 个随机种子共用同一划分 |
| 下游生成协议训练集 | 100,000 对 | RMSD<1 Å + 序列一致性 <30% 过滤 |
| 下游生成协议测试集 | 100 个口袋 | 与参考配体对照评测 |
| 单次对接 pose 输出上限 | 20 | smina 默认输出 |
§4.4 数据层级
Pocketome 口袋(≈靶点)→ 受体构象(PDB 条目+链,同口袋数十至上百个)→ 配体(口袋 cognate 配体集合)→ pose(受体 × 配体 × 对接来源,每对至多 20 + 1 tt_min)。注意复合物的定义:论文中"complex"指口袋-配体对(一个口袋内全部受体共享该配体的全部 pose),而非单一 PDB 复合物。
§4.5 缺失值与信息性缺失编码
| 情形 | 编码 | 处理建议 |
|---|---|---|
| 配体无亲和力数据 | pK = 0 | 回归任务中过滤或按论文在损失中忽略 |
| RMSD>2 Å 的坏 pose | pK 置为负值(如 -6.4) | 分类任务可用;回归任务必须过滤(坑点 4) |
| 配体名歧义 / 分子量>1,000 Da | 构建期已剔除 | 无需处理 |
| 受体侧辅因子/水缺失 | 无编码(物理性缺失) | 依赖辅因子的口袋需自行过滤或回 PDB 重处理(坑点 5) |
§5 划分与使用建议
§5.1 官方划分
官方提供 ProBiS(z-score 3.5)口袋聚类 3 折 cluster cross-validation(CCV):整个口袋聚类到折,同折内所有受体/配体不跨 train/test 出现(it2_CCV_train0-2/test0-2)。PDBbind 对照分区另用"序列一致性 >50%,或 >40% 且配体相似性 >90%"聚类。论文的 5 个随机种子共用同一 3 折划分(计算成本考虑)。
§5.2 社区惯例划分
SBDD 生成模型的事实标准协议(源自 Luo et al. 2021,GraphBP/TargetDiff 沿用):从 2,256 万 pose 中仅保留对接 pose 与参考构象 RMSD<1 Å 的对,并按蛋白序列一致性 <30% 划分,得 100,000 个训练复合物与 100 个新口袋测试参考。TargetDiff 的 crossdocked_pocket10 预处理版(口袋提取半径 10 Å)经其仓库 Google Drive 分发,是实际流传最广的"训练快照"。
§5.3 泄漏风险(重点)
- 口袋内冗余:同一靶点数十个受体构象高度相似——任何随机划分都会同靶点同时进 train/test(官方 CCV 即为此设计,勿用随机划分)。
- 序列一致性 ≠ 口袋相似性:<30% 序列一致性过滤后,同家族(如激酶)口袋在形状与药效团层面仍可能高度相似,生成模型评测中"新靶点"并不新。
- 配体重叠:下游协议只控蛋白侧;同一配体骨架仍可能跨口袋出现(PDBbind 配体族常见)。
- Affinity 共享假设:同口袋 pK 恒定,若以口袋分组划分则无泄漏,若按 pose 划分则标签泄漏。
§5.4 交叉验证与外部验证建议
- 复现论文:使用官方 it2 CCV 3 折;资源受限用 downsampled 版并遵守"各折独立采样、不可跨折混用"的官方警告。
- 生成模型:沿 TargetDiff 协议并公开你的预处理脚本;测试口袋报告 bootstrap 置信区间(仅 100 个口袋,方差可观)。
- 外部验证:Apo 受体测试(论文 CDonly 集中的无配体构象)、DockGen(新靶点口袋)、PoseBusters(物理合理性)、LIT-PCBA(真实虚拟筛选)。
§5.5 划分完整性自查代码
无论采用官方 CCV 还是社区协议,训练前都应机械化验证"口袋不跨集"——这是本数据集最廉价也最有效的泄漏防火墙:
# 前置目录约定:data_root/types/ 下有 it2_CCV_train0.types 与 it2_CCV_test0.types
# 加载函数 load_types 复用 §6.1 的实现(返回含 receptor/ligand 列的 DataFrame)
from pathlib import PurePosixPath
def pocket_key(receptor_filename):
"""口袋目录名 = 受体文件名去掉 _rec.pdb 后缀(见 §4.0 目录树命名规则)"""
stem = PurePosixPath(receptor_filename).stem
return stem.split("_rec")[0]
train = load_types("data_root/types/crossdock2020_it2_CCV_train0.types")
test = load_types("data_root/types/crossdock2020_it2_CCV_test0.types")
train_pockets = {pocket_key(r) for r in train["receptor"]}
test_pockets = {pocket_key(r) for r in test["receptor"]}
overlap = train_pockets & test_pockets
assert not overlap, f"口袋泄漏!{len(overlap)} 个口袋同时出现在 train/test"
print(f"train 口袋 {len(train_pockets)} 个 / test 口袋 {len(test_pockets)} 个 / 交集 {len(overlap)}")
# 若走社区协议(<30% 序列一致性),同法可按配体 SMILES 去重后统计配体骨架交集
§6 AI 就绪指南 ⭐
§6.0 云端快速启动
数据集托管在匹兹堡大学裸服务器(无桶存储/无 API),云端最省事的路径是"molcache2 + types 轻量路线"(免解压 5,213 万文件)或直接用社区 pocket10 快照。以下命令在任意 Linux + Python 3.10 环境可跑通轻量路线:
mkdir -p data_root && cd data_root
# 轻量路线:types 索引 + molcache2(约 22 GB 内存可全量训练)
wget http://bits.csb.pitt.edu/files/crossdock2020/CrossDocked2020_v1.3_types.tgz
wget http://bits.csb.pitt.edu/files/crossdock2020/crossdock2020_1.3_rec.molcache2
wget http://bits.csb.pitt.edu/files/crossdock2020/crossdock2020_1.3_lig.molcache2
mkdir types && tar -xzf CrossDocked2020_v1.3_types.tgz -C types
环境依赖(三条路线所需的最小集合):
# 轻量路线(解析/统计):仅需 pandas + PyYAML
pip install pandas pyyaml
# GNINA 训练路线:安装 gnina(含 libmolgrid)或仅 Python 端网格化
pip install molgrid rdkit-pypi # molgrid 提供官方 molcache2 读取
# 生成模型路线(TargetDiff 协议):
pip install torch rdkit-pypi spyrmsd biopython scipy
§6.1 快速上手:解析 types 文件
# 目录结构预期(data_root 与 §6.2 下载命令的拼接关系):
# data_root/
# ├── types/crossdock2020_it2_CCV_train0.types # 3 折 CCV 第 0 折训练集
# ├── crossdock2020_1.3_rec.molcache2
# └── crossdock2020_1.3_lig.molcache2
# 最小可用子集:任一 *_CCV_train0.types + *_test0.types 即可训练/评测
import pandas as pd
COLS = ["label", "pK", "rmsd", "receptor", "ligand", "vina_score"]
def load_types(path):
rows = []
with open(path) as f:
for line in f:
parts = line.split()
if len(parts) < 6: # 跳过空行/残行
continue
rows.append({
"label": int(parts[0]), "pK": float(parts[1]),
"rmsd": float(parts[2]), "receptor": parts[3],
"ligand": parts[4], "vina_score": float(parts[-1]),
})
return pd.DataFrame(rows)
df = load_types("data_root/types/crossdock2020_it2_CCV_train0.types")
print(len(df), df["label"].value_counts().to_dict())
valid = df[(df["pK"] > 0)] # 回归任务先过滤:pK>0 才是真实亲和力
§6.2 数据获取
| 文件 | 内容 | 建议 |
|---|---|---|
CrossDocked2020_v1.3.tgz |
全量原始数据(52,126,979 个文件) | 仅在需要重新解析 SDF 时下载;预留充足磁盘与数小时解压时间 |
CrossDocked2020_v1.3_types.tgz |
全部 types 索引文件 | 必下(数十 MB 级) |
crossdock2020_1.3_{rec,lig}.molcache2 |
libmolgrid 全库缓存 | 训练 GNINA 类模型必下 |
downsampled_CrossDocked2020_v1.3.tgz + 对应 types/caches |
官方降采样(每对 10 好 + 20 坏) | 内存仅约 5 GB;各折独立采样,不可跨折混用 |
HuggingFace kohbanye/crossdocked2020 |
社区镜像(2,533,288 个 sdf.gz,23.8 GB,pose 超集) | 快速浏览/流式读取 |
# 全量原始数据(谨慎!官方 README 原文警告:
# "WARNING -- CrossDocked2020_v1.3.tgz contains 52,126,979 files!!")
wget http://bits.csb.pitt.edu/files/crossdock2020/CrossDocked2020_v1.3.tgz
mkdir CrossDocked2020
tar -C CrossDocked2020 -xzf CrossDocked2020_v1.3.tgz
§6.3 预处理全流程
从原始数据到 PyTorch 可用张量需要四步:types 解析 → 口袋提取 → 配体加载 → 网格化/图构建。
# 第 1 步已在 §6.1;第 2-3 步:口袋提取与配体加载
from rdkit import Chem
from pathlib import Path
def pocket_residues(rec_path, lig_path, radius=10.0):
"""以晶体配体为中心提取半径 radius Å 内的受体残基(crossdocked_pocket10 口径)。"""
from rdkit import Chem
lig = Chem.MolFromPDBFile(lig_path, removeHs=False)
conf = lig.GetConformer().GetPositions()
pocket = []
with open(rec_path) as f:
for line in f:
if line.startswith(("ATOM", "HETATM")):
x, y, z = float(line[30:38]), float(line[38:46]), float(line[46:54])
d2 = ((conf - [x, y, z]) ** 2).sum(1).min()
if d2 < radius ** 2:
pocket.append(line)
return pocket
mol = Chem.SDMolSupplier("data_root/pockets/1a30_A/1a30_A_rec_1a30_5RS_lig_tt_docked.sdf.gz",
removeHs=False)[0] # 一个 SDF 可含多个 pose conformer
print(mol.GetNumConformers(), "poses in this file")
# 第 4 步(GNINA/libmolgrid 路线):单 pose 转 gninatypes 后用 molcache 批量网格化
gnina --receptor data_root/pockets/1a30_A/1a30_A_rec.pdb \
--ligand data_root/pockets/1a30_A/1a30_A_rec_1a30_5RS_lig_tt_docked.sdf.gz \
--score_only --autobox_ligand data_root/pockets/1a30_A/1a30_A_lig.pdb
# 或直接按官方文档用 gnina/scripts 的 train.py + molcache2 训练(见 §6.4 末尾)
# 第 4 步(PyTorch 网格化路线):用 libmolgrid 把 receptor+ligand 转为 3D 网格张量
# 前置:pip install molgrid;types 文件 + molcache2 与 GNINA 训练完全同构
import molgrid
import torch
# 官方同款配置:24 Å 盒、0.5 Å 分辨率、14+14 原子类型高斯基(论文 Def2018/Dense 均此口径)
gmaker = molgrid.GridMaker(resolution=0.5, dimension=24.0)
provider = molgrid.ExampleProvider(
data_root="data_root/pockets", # types 内为相对路径,指向口袋目录
balanced=True, # 官方同款:正负类均衡
shuffle=True)
provider.populate("data_root/types/crossdock2020_it2_CCV_train0.types")
batch = next(iter(molgrid.PythonExamplesIterator(provider, batch_size=8, gmaker=gmaker)))
examples, grids, labels = batch
print(grids.shape) # (8, n_channels, 48, 48, 48) -> 直接接 3D-CNN
§6.4 PyTorch DataLoader 完整代码
import torch
from torch.utils.data import Dataset, DataLoader
from rdkit import Chem
import numpy as np
ATOM_TYPES = {"C": 0, "N": 1, "O": 2, "S": 3, "P": 4, "F": 5, "Cl": 6, "Br": 7, "I": 8}
class CrossDockedTypesDataset(Dataset):
"""按 types 文件组织的最小 Dataset:返回点云(受体+配体)与标签。
预期目录:data_root/{types, pockets},见 §4.0 目录树;
types 行的 receptor/ligand 字段是 pockets/<口袋>/ 下的文件名,
口袋目录需从 receptor 文件名解析(前缀 <PDBid>_<chain>)。"""
def __init__(self, types_path, pockets_root, max_atoms=4000):
self.rows = [self._parse(l) for l in open(types_path) if len(l.split()) >= 6]
self.rows = [r for r in self.rows if r is not None]
self.root, self.max_atoms = Path(pockets_root), max_atoms
@staticmethod
def _parse(line):
p = line.split()
try:
return {"label": int(p[0]), "pK": float(p[1]), "rmsd": float(p[2]),
"rec": p[3], "lig": p[4], "vina": float(p[-1])}
except ValueError:
return None
def _load_rec(self, path):
xyz, types = [], []
for line in open(path):
if line.startswith(("ATOM", "HETATM")):
el = line[76:78].strip()
if el in ATOM_TYPES:
xyz.append([float(line[30:38]), float(line[38:46]), float(line[46:54])])
types.append(ATOM_TYPES[el])
return torch.tensor(xyz, dtype=torch.float32), torch.tensor(types, dtype=torch.long)
def _load_lig(self, path, idx=0):
supp = Chem.SDMolSupplier(str(self.root / path), removeHs=False)
mol = list(supp)[idx]
pos = torch.tensor(mol.GetConformer().GetPositions(), dtype=torch.float32)
types = torch.tensor([ATOM_TYPES.get(a.GetSymbol(), 9) for a in mol.GetAtoms()])
return pos, types
def __getitem__(self, i):
r = self.rows[i]
pocket_dir = r["rec"].split("_rec")[0]
rec_xyz, rec_t = self._load_rec(self.root / pocket_dir / r["rec"])
lig_xyz, lig_t = self._load_lig(r["lig"])
return {"rec_xyz": rec_xyz[:self.max_atoms], "rec_t": rec_t[:self.max_atoms],
"lig_xyz": lig_xyz, "lig_t": lig_t,
"label": r["label"], "pK": r["pK"], "rmsd": r["rmsd"]}
def __len__(self):
return len(self.rows)
def collate(batch):
return {k: [b[k] for b in batch] for k in batch[0]}
loader = DataLoader(CrossDockedTypesDataset(
"data_root/types/crossdock2020_it2_CCV_train0.types", "data_root/pockets"),
batch_size=8, shuffle=True, num_workers=4, collate_fn=collate)
走 GNINA 官方训练路线(网格化 CNN)时,不必自己写加载器:直接用 gnina/scripts 的
train.py+ 官方 molcache2 + types 文件,训练脚手架、batch 平衡(按类别与口袋分层采样)都已内置。
§6.5 坑点 8 个(真实特有失败模式)
⚠️ 坑点 1:所有构象都是"算出来的",模型会继承对接引擎的偏见(分类:偏倚陷阱)
问题:数据集中没有一个 pose 来自实验解析——全部由 smina 对接生成或 CNN 迭代优化而来,受体也是 Pocketome 对齐的静态结构。以它训练的模型学到的是"smina 认为合理的结合模式",而非物理真实;论文自己证明用 docked pose 训练会给亲和力预测注入 pose sensitivity。
症状:数据集内指标漂亮(Top1 68.4%),但把模型输出当"构象预测"用于新靶点时,构象系统性偏向 Vina 势阱(平面堆叠、特定氢键取向);换一个对接引擎评估,优势明显缩水。
解决:
- 简单方法:只把数据集当 pose 分类/排序与生成模型训练集,不对构象真实性做外推声明;生成结果加 PoseBusters 物理合理性检查。
- 进阶方法:训练集混入晶体 pose(tt_min / redocked 子集)平衡"自然构象"分布,论文 Figure 2 的 pose 选择策略对比可作配比起点。
- SOTA 方法:用论文的迭代反例机制(it1/it2)提升对能量最小化的鲁棒性;或生成后用力场松弛再复核(DiffDock 官方 FAQ 亦建议对接结果与 MM/GBSA/自由能计算联用时先松弛)。
参考:Francoeur et al., 2020, JCIM(训练数据与 pose sensitivity 讨论)
⚠️ 坑点 2:RMSD"真值"本身被 Vina 最小化过——tt_min 自洽偏差(分类:预处理陷阱)
问题:作为参照的"晶体 pose"并非原始 PDB 坐标,而是先经 RDKit UFF 精修、再以 smina/Vina 打分函数相对受体最小化后的
tt_minpose;所有 label 与 RMSD 都相对它计算。质量标签因此部分反映"与 Vina 最优构象的一致性"。
症状:正样本天然聚集在 Vina 势阱附近;在其上训练的生成模型产出"Vina 味"几何;用非 Vina 打分函数或实验数据复核时优势衰减;直接用*_lig.pdb原始晶体坐标重算 RMSD 会得到与 types 列不同的数字。
解决:
- 简单方法:理解两种参照的差异,报告指标时注明 RMSD 相对哪种参照。
- 进阶方法:需要实验参照时以
<PDBid>_<chain>_lig.pdb(原始晶体配体)重算,用 spyrmsd 做对称性校正。- SOTA 方法:对参照做多力场敏感性分析(Vina/UFF/GAFF 各最小化一次),仅保留三种参照下结论一致的子集做严格评测。
参考:gnina/models data/CrossDocked2020 README(UFF + smina 最小化流程)
⚠️ 坑点 3:同口袋多构象导致的目标级泄漏——必须用相似性划分(分类:数据泄漏)
问题:每个口袋聚集了同一靶点的数十至上百个受体构象,同一配体在该靶点的每个受体上都有 pose;随机划分几乎必然让同靶点同配体同时进入 train/test。论文用 Core→CCV 的对照给出了教科书级的教训:Pearson R 0.78→0.56、pose 选择 77%→62%。
症状:随机 split 下指标异常好;换成官方 CCV 或新靶点测试立刻崩塌;生成模型在"新口袋"上生成的分子与训练集同家族分子高度相似。
解决:
- 简单方法:无条件使用官方 ProBiS CCV types(train0-2/test0-2),禁止随机划分。
- 进阶方法:走社区生成协议(<30% 序列一致性)后,再用 ProBiS 或口袋形状描述符对测试口袋二次聚类,报告"新靶点家族"子集指标。
- SOTA 方法:按靶点家族分层评测(激酶/蛋白酶/其他),并引入 DockGen 这类结构新颖性受控的外部基准。
参考:Francoeur et al., 2020(split 影响专章);TargetDiff(社区协议)
⚠️ 坑点 4:pK 列的负值与零值不是亲和力——标签语义三重陷阱(分类:标签理解)
问题:types 文件的 pK 有三种语义:正数 = PDBbind v2017 实验亲和力的 -log10;负数 = 该 pose RMSD>2 Å 的占位标记(hinge loss 技巧);0 = 未知亲和力。且同一口袋内所有受体共享该配体的 pK,Kd/Ki/IC50 不区分。数据集不使用 MM/GBSA 或任何能量重打分过滤——"过滤"只发生在 RMSD 阈值与配体剔除层面,网上常见误传会误导预处理设计。
症状:直接把 pK 当回归目标,模型学到一批"亲和力 -8"的超强结合假样本;把 pK=0 的行纳入回归后指标被大量伪标签污染。
解决:
- 简单方法:回归前过滤
pK > 0的行;分类任务可使用全部行。- 进阶方法:按论文方式做双任务(pose 分类 + 有标签子集回归),损失中忽略无标签样本(论文原文:无亲和力复合物 omitted from the loss calculation)。
- SOTA 方法:对"同口袋共享 pK"假设做敏感性分析——只用 cognate 受体行的 pK 训练回归头,对比跨受体共享版差异。
参考:types 文件格式说明;Francoeur et al., 2020
⚠️ 坑点 5:受体口袋的水分子、辅因子与糖基全部缺失(分类:预处理陷阱)
问题:受体清洗用 ProDy 去除了水分子与全部 HETATM(仅保留算法识别出的离子),且口袋内保留哪些离子由 ProDy 判定。依赖结构水的靶点(丝氨酸蛋白酶、激酶 Mg²⁺ 桥接)、依赖辅因子的靶点(NAD、血红素、PLP)的真实结合环境被系统性抹除。
症状:金属酶口袋出现悬空配位堆叠;生成模型在含辅因子口袋产出错误取向;同一靶点不同受体构象间"口袋变小/变形"的一部分其实是辅因子被删导致。
解决:
- 简单方法:按受体文件名/靶点注释过滤掉已知依赖辅因子或结构水的口袋。
- 进阶方法:回 wwPDB 原始结构重新处理(保留辅因子),沿用 Pocketome 的口袋对齐坐标替换受体文件,并同步更新 types 路径。
- SOTA 方法:迁移到保留更完整环境的衍生/平行数据做外部验证——BigBind(CrossDocked 口袋 + ChEMBL 活性)、Binding MOAD;或对比受体加水(如 WaterDock 类工具)前后的模型行为。
参考:Francoeur et al., 2020(方法学:ProDy 清洗);github.com/drorlab/bigbind
⚠️ 坑点 6:版本地狱——v1.0/v1.1/v1.2/v1.3 与第三方再分发并存(分类:工程陷阱)
问题:论文全部数字(22,584,102 poses、41.9% 标签)对应 v1.0;现行 v1.3 重新生成约 60% 数据(22,566,449 poses、2,900 口袋);v1.1 存在芳香环被移除、受体"压平"等已知缺陷;HuggingFace 镜像是 3,800 万 pose 的超集;TargetDiff 的 pocket10 又是另一版预处理。另有对应关系易错点:结构来自 Pocketome v17.12 + PDB,而 pK 标签来自 PDBbind v2017(不是 v2016)。
症状:按 v1.3 数据复现论文表格对不上数;混用 v1.1 的 SDF 与 v1.3 的 types 报路径错误或出现芳香键断裂分子;论文间"22.5M / 100k / 38M"三个规模数字互相矛盾。
解决:
- 简单方法:统一使用 v1.3 的 types + 配套 molcache2 组合,并在论文/报告中注明数据版本。
- 进阶方法:解压前校验文件数(官方 README 明示 52,126,979);记录 types 文件的 sha256 入 DVC/LakeFS,训练与评测严格绑定同版本。
- SOTA 方法:为跨版本对齐建立"口袋 ID → v1.0/v1.3 口径"映射表(GitHub issues 中有社区讨论可参考),实验报告双口径数字。
参考:官方 Changelog(v1.2/v1.3 修复清单);ACS Omega 2023(v1.3 规模口径)
⚠️ 坑点 7:52% 的 pose 是"迭代反例",分数分布被人为扭曲(分类:偏倚陷阱)
问题:it1/it2 迭代反例共 11,892,173 个(约占总 pose 52%)——它们由"模型预测错误"的样本专门生成(打分 >0.9 但 RMSD>2 Å,或 <0.5 但 RMSD<2 Å),目的是训练鲁棒性,不是自然对接输出。
症状:用 it2/completeset 训练的打分器,其分数分布与真实对接输出的分布形状不同;把 CNN 分数直接当亲和力或置信度解释会失真;论文显示反例训练在无反例测试集上 pose 选择 AUC 略降(0.885→0.845),收益集中在"对最小化的鲁棒性"。
解决:
- 简单方法:评测用 it0(无反例)types 训练的模型或官方预训练权重,并在报告里注明训练是否含反例。
- 进阶方法:按论文设置 batch 平衡(每口袋均匀采样 + 正负类平衡),避免反例主导梯度。
- SOTA 方法:把反例当课程学习第二阶段(先 it0 后 it2 微调),并在分布外测试集(apo 受体、cdonly)复核鲁棒性收益。
参考:Francoeur et al., 2020(Table 2 与反例分析)
⚠️ 坑点 8:生成模型评测协议碎片化,100 个测试口袋方差不小(分类:评估误用)
问题:社区协议(RMSD<1 Å + <30% 序列一致性 → 10 万训练对 + 100 测试口袋)虽统一了"切法",但各论文的口袋提取半径、氢化与电荷处理、Vina 版本(AutoDock Vina vs QVina2)各不相同;测试集只有 100 个口袋,指标方差可观。
症状:同一模型在不同复现中 Vina Dock 相差 0.5 kcal/mol 量级;liGAN、GraphBP 因 Vina 无法解析其生成原子类型而改用 QVina2(论文表中标 *),与其余行不可直接比较;SA 指标与分子大小强负相关(Pearson R=-0.56),跨模型 SA 排名可能是尺寸伪象。
解决:
- 简单方法:引用/比较任何生成基准行时,先确认它用的是 Vina 还是 QVina,以及预处理快照来源(pocket10 与否)。
- 进阶方法:用 TargetDiff 官方预处理 + 同一 Vina 二进制重评所有基线;报告 100 口袋上的 bootstrap 95% 置信区间。
- SOTA 方法:补报 JSD 键长分布与力场松弛后的 Vina Min,并对照参考配体(Reference 行)而非只比模型间相对值。
参考:TargetDiff(arXiv 2303.03543)附录 G(QVina 口径与 SA 伪象分析)
§6.6 数据增强
- ✅ 安全:整体复合物刚体旋转/平移(网格 CNN 的标准增强);按口袋分层重采样 pose;对分类任务随机弃用部分反例;TTA(多 pose 取最优)。
- ❌ 危险:对配体单独施加随机扰动——会破坏 RMSD 标签与 pose 的对应关系;对同一行"换受体"——违反同口袋 pK 共享假设的边界;跨版本混用(v1.1 SDF + v1.3 types);在测试前用与生成引擎不同的对接算法重新生成 pose 再与旧标签对齐。
判断一条增强是否安全的三问:(1) 它是否改变了 pose 与晶体参照的几何对应?(旋转整体可以,单动配体不行);(2) 它是否让同一口袋的标签语义漂移?(换受体不行);(3) 它是否依赖了某个特定版本才成立的文件内容?(跨版本混用不行)。三问全"否"才可上。
§6.7 模型推荐
| 任务 | 推荐模型/工具 | 起步方式 |
|---|---|---|
| Pose 分类/打分(CNN) | GNINA Dense / Default2018(官方权重) | gnina/models crossdocked_paper 目录直接加载 |
| Pose 分类/打分(PyTorch 自研) | libmolgrid + molcache2 | §6.4 代码 + 官方 train.py 改写 |
| 亲和力回归 | Dense CNN 亲和力头 / Pafnucy 式基线 | 先过滤 pK>0(坑点 4) |
| 口袋条件分子生成 | TargetDiff、GraphBP、Pocket2Mol、AR | 用 crossdocked_pocket10 快照按原论文协议训练 |
| Pose 质量(RMSD 预测) | DeepBSP 式回归头 | 以 types 的 rmsd 列为监督 |
| 评测工具 | spyrmsd、PoseBusters、AutoDock Vina | §6.9 指标代码 |
§6.8 硬件需求
| 场景 | CPU/内存 | GPU | 磁盘 |
|---|---|---|---|
| types 解析与统计 | 8 核 / 32 GB | 无 | <10 GB |
| downsampled 训练(GNINA 系) | 16 核 / 32 GB | 1× 24 GB(如 RTX 4090) | 约 50 GB |
| 全量 molcache2 训练 | 32 核 / ≥64 GB 内存(缓存约 22 GB + 训练开销) | 1-4× 24-48 GB | 约 100 GB(免解压路线) |
| 全量原始数据解析 | 32 核 / 64 GB | 视下游 | 预留 ≥500 GB(5,213 万文件 + tar 中间态) |
| 生成模型(TargetDiff 协议) | 16 核 / 32 GB | 1× 32 GB(约 60 小时/20 epoch,V100 参考) | 约 50 GB |
§6.9 评估指标代码
import numpy as np
from sklearn.metrics import roc_auc_score
from scipy.stats import pearsonr
def topn_pose_accuracy(df, n=1, threshold=2.0):
"""Top-N pose 选择准确率:每个(口袋,配体)组内按 vina_score(或模型分)排序,
检查 Top-N 中是否有 RMSD <= threshold 的 pose。"""
hits, groups = 0, 0
for _, g in df.groupby(["receptor", "ligand"]):
top = g.nsmallest(n, "vina_score") # 用模型分数替换排序键即可
hits += int((top["rmsd"] <= threshold).any()); groups += 1
return hits / groups
auc = roc_auc_score(df["label"], -df["rmsd"]) # 示例:以 rmsd 为代理分数
r, p = pearsonr(df.loc[df.pK > 0, "pK"], df.loc[df.pK > 0, "vina_score"])
print(f"AUC={auc:.3f} Top1={topn_pose_accuracy(df):.3f} Pearson R={r:.3f}")
def median_rmsd_at_topn(df, n=1):
"""Top-N 选中 pose 的 RMSD 中位数:pose 选择的连续型补充指标。"""
vals = [g.nsmallest(n, "vina_score")["rmsd"].min()
for _, g in df.groupby(["receptor", "ligand"])]
return float(np.median(vals))
def high_affinity_rate(generated_scores, reference_scores):
"""High Affinity:生成分子的 Vina Dock 优于参考配体的比例(TargetDiff 口径)。"""
import numpy as np
gen, ref = np.asarray(generated_scores), np.asarray(reference_scores)
return float((gen < ref).mean()) # Vina 越负越好
# 生成模型指标(TargetDiff 协议骨架):Vina Score / Min / Dock + QED/SA/多样性
import subprocess, tempfile, os
from rdkit import Chem
from rdkit.Contrib.SA_Score import sascorer
from rdkit.Chem import QED
def vina_dock(rec_pdb, lig_sdf):
with tempfile.TemporaryDirectory() as d:
out = os.path.join(d, "out.pdbqt")
subprocess.run(["vina", "--receptor", rec_pdb, "--ligand", lig_sdf,
"--out", out, "--center_x", "0", "--center_y", "0",
"--center_z", "0", "--size_x", "20", "--size_y", "20",
"--size_z", "20"], check=True, capture_output=True)
return min(float(l.split()[3]) for l in open(out)
if l.startswith("REMARK VINA RESULT"))
def prop_stats(smiles_list):
mols = [Chem.MolFromSmiles(s) for s in smiles_list]
mols = [m for m in mols if m]
return {"QED": np.mean([QED.qed(m) for m in mols]),
"SA": np.mean([sascorer.calculateScore(m) for m in mols])}
§6.10 MLOps 笔记
- 数据版本绑定:types/molcache/SDF 三者必须同版本(v1.3),用 DVC 或至少 sha256 清单固化;训练配置里显式记录
dataset_version=1.3与 types 文件哈希。 - 划分即资产:把 CCV types 或 pocket10 划分单独入库(Git LFS/S3),禁止训练时动态重切。
- 标签口径监控:训练循环中记录 pK>0 比例、label 均值、反例比例(pose_type 分布)三项曲线——漂移即数据版本错误。
- 评测留痕:保存每个测试 pose 的 receptor/ligand 文件名与分数明细(types 行天然带文件名,可完美回溯)。
- 可复现性:smina/Vina 版本、gninatypes 生成参数写入环境锁文件;Vina 分数随二进制版本变化,评测一律锁版本。
- 成本控制:全量 molcache2 常驻约 22 GB 内存——多组并行实验建议共享只读缓存进程或使用 downsampled 版做超参搜索,仅最终 run 上全量。
- 归档策略:types 文件(数十 MB)随代码入库,原始 SDF不入库只存哈希清单——这既满足可复现审查,又避开 5,213 万小文件的版本系统性能陷阱。
§7 质量评估与局限性
§7.1 已知偏倚表
| 偏倚类型 | 描述 | 严重程度 | 缓解措施 |
|---|---|---|---|
| 计算构象偏倚 | 全部 pose 为 smina 生成/最小化产物,标签参照亦经 Vina 最小化(坑点 1/2) | 高 | 混入晶体 pose、外部物理合理性校验、多引擎交叉评估 |
| 口袋级冗余 | 同靶点数十至上百受体构象,有效独立"靶点数"远小于 2,922 | 高 | 官方 ProBiS CCV、下游 <30% 序列一致性 + 二次口袋聚类 |
| 靶点家族偏倚 | 继承 PDB 结晶偏倚:可溶性激酶/蛋白酶多,膜蛋白少 | 中高 | 训练时按家族分层采样;外部用膜蛋白口袋集验证 |
| 亲和力标签噪声 | 同口袋共享 pK、Kd/Ki/IC50 混型、58% 无标签(坑点 4) | 中高 | 回归仅用 pK>0 cognate 行;敏感性分析 |
| 反例分布扭曲 | 52% pose 为迭代反例,非自然对接输出(坑点 7) | 中 | it0/it2 对照实验;评测锁训练口径 |
| 结构处理缺失 | 水/辅因子/HETATM 被删(坑点 5) | 中 | 依赖口袋过滤或回 PDB 重处理 |
| 版本碎片化 | v1.0 论文口径与 v1.3 数据、第三方镜像并存(坑点 6) | 中 | 版本绑定与哈希管理 |
§7.2 标注质量评估
标签质量的三层结构:pose 标签(RMSD≤2 Å)算法确定性强,但参照系含 Vina 最小化偏差(坑点 2);亲和力标签是真实实验值,但经三层弱化——同口袋共享假设、Kd/Ki/IC50 混型、实验条件(温度/pH/构建体)未记录,论文作者自认交叉对接 pose 标签"inherently noisier";Vina 分数列仅供分析,不应作为监督目标。整体而言:分类监督可靠、回归监督需谨慎过滤、任何"构象正确性"结论都需外部实验佐证。
§7.3 泛化性风险表
| 场景 | 失效风险 | 证据 |
|---|---|---|
| 新靶点(无同口袋训练样本) | 高——口袋外推是弱项 | 论文 Core→CCV:R 0.78→0.56、Top1 0.77→0.62 |
| Apo 受体(无结合构象) | 高——口袋形状与 holo 差异大 | 论文 apo 测试:Top1 仅 31.7%(holo 明显更高),交叉对接训练可小幅提升(28.9%→31.7%) |
| 膜蛋白/多跨靶点 | 中高——训练分布中稀缺 | PDB 结晶偏倚传导(§7.1) |
| 新化学型配体 | 中——PDBbind 配体偏倚传导 | 配体-only 消融显示化学信息贡献显著 |
| 金属/辅因子依赖口袋 | 中高——环境缺失 | ProDy 清洗行为(坑点 5) |
§7.4 伦理考量
数据不含人体、动物或个人可识别信息(公开蛋白结构 + 药物样小分子),无隐私风险;无双重用途风险(常规药物发现工具)。主要伦理注意点:模型输出不得直接替代实验验证进入临床声称;对生成模型"设计新药"的能力应如实披露其计算性质。
§7.5 公平性评估
非人类受试者数据集,无人群公平性问题;对应的"公平性"议题是靶点空间公平:被忽视的热带病靶点、GPCR/离子通道等难结晶家族在该数据集中欠代表,以其训练的模型会把研发资源进一步导向"易结晶"靶点。缓解方式:与 GPCRmd、膜蛋白口袋数据等互补语料联合训练,并在论文中报告靶点家族分层指标。
分层评测的最小实现(口袋级分组统计,家族映射需另行挂接外部注释表):
# 前置:df 含 pocket_id(由 receptor 文件名解析,见 §5.5)、label、预测分数 pred
import pandas as pd
def per_pocket_metrics(df):
"""按口袋分组报告 AUC 与正样本占比——识别模型在哪些靶点上系统性失效。"""
from sklearn.metrics import roc_auc_score
rows = []
for pid, g in df.groupby("pocket_id"):
if g["label"].nunique() < 2 or len(g) < 30: # 小口袋统计功效不足,单列
rows.append({"pocket_id": pid, "n": len(g), "auc": None, "pos_rate": g["label"].mean()})
continue
rows.append({"pocket_id": pid, "n": len(g),
"auc": roc_auc_score(g["label"], g["pred"]),
"pos_rate": g["label"].mean()})
out = pd.DataFrame(rows)
print("口袋级 AUC 中位数:", out["auc"].median(), "(<0.7 的口袋数:", (out["auc"] < 0.7).sum(), ")")
return out
§7.6 数据漂移
数据集为冻结快照(2023-09 后无官方更新),自身无漂移;漂移风险在应用侧:PDB 每年新增数万结构(尤其 AlphaFold 时代的新构象类型)、新化学型不断出现,模型对新靶点/新化学型的性能衰减应通过定期在 DockGen、PoseBusters 等更新型基准上重评来监控。版本层面注意 v1.0→v1.3 已构成一次"口径漂移"(约 60% 数据重生成),跨时间论文比较需对齐版本。
建议的漂移监控节奏:每年跑一次"冻结模型 × 当年新基准"回归测试,记录三个哨兵指标——口袋级 AUC 中位数、新靶点子集 Top1、生成模型的 JSD(C-C);任一指标同比下滑超过 2 个标准差即触发训练语料更新评估(此时应考虑混入新 PDB 结构重建口袋,或迁移到官方后继数据)。
§7.7 DAIMS 数据质量 24 项评估
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 宽格式 | ✅ | types 行式索引 + 文件系统层级,天然宽格式 |
| 2 | 唯一标识 | ✅ | receptor+ligand 文件名对全库唯一,可作主键 |
| 3 | 特殊字符 | ⚠️ | 文件名长且下划线分段,链名/配体名解析易错位 |
| 4 | 重复行 | ⚠️ | 口袋内近重复受体构象多;v1.3 已去冗余但未根除 |
| 5 | 缺失编码 | ✅ | pK=0 表示未知亲和力,语义明确 |
| 6 | 标签标识 | ✅ | label/pK/rmsd 三轴标签在 types 行内显式给出 |
| 7 | 罕见类分组 | ⚠️ | 小口袋(少受体/少配体)统计功效弱,需分组报告 |
| 8 | 偏倚评估 | ✅ | 论文以 Core vs CCV、apo、cdonly 等系统自评 |
| 9 | 数据字典 | ✅ | 官方 README 完整定义 types 格式与文件命名 |
| 10 | 信息性缺失解释 | ✅ | pK 负值(RMSD>2 Å)与 0(未知)语义均有文档 |
| 11 | 设备记录 | ⚠️ | 对接参数仅"默认设置",未逐行记录 smina 版本 |
| 12 | 共线性 | ✅ | 不适用特征共线性场景;网格/图输入无共线问题 |
| 13 | 编码映射 | ✅ | molcache2 与 atom maps 提供原子类型映射 |
| 14 | 时间戳处理 | ✅ | 静态快照,版本号即时间戳(Pocketome v17.12 锁定) |
| 15 | 划分建议 | ✅ | 官方 CCV types 直接可用 |
| 16 | 泄漏讨论 | ✅ | 论文专章量化 split 影响,社区协议成熟 |
| 17 | 标签分布 | ✅ | Table 2 报告各子集标签覆盖比例 |
| 18 | 测量偏倚 | ⚠️ | 亲和力跨受体共享 + 混型测量,偏倚已知但未逐条校正 |
| 19 | 外部验证建议 | ✅ | 提供 apo/cdonly 交换测试集与 downsampled 对照 |
| 20 | 版本记录 | ✅ | 官方 Changelog 逐版说明修复内容 |
| 21 | 预处理脚本 | ✅ | gnina/scripts + dkoes/cnnaffinitypaper 公开全部生成/降采样脚本 |
| 22 | 合规要求 | ⚠️ | 官方未声明数据许可;上游 PDBbind 需注册使用 |
| 23 | 多模态对齐 | ✅ | 口袋内受体已对齐,rec/lig 坐标系一致 |
| 24 | 去标识化 | ✅ | 无人体数据,无需去标识化 |
DAIMS 评分:21 / 24(18 项 ✅ + 6 项 ⚠️)
评分解读:优秀——这是一个为机器学习而生、文档与工具链齐备的数据集:标签语义、官方划分、预处理缓存、生成脚本全部公开,泄漏问题被论文正面量化而非回避。扣分集中在系统性设计选择而非疏忽:计算构象与最小化参照的固有偏差、口袋冗余、亲和力标签的弱化链,以及无正式数据许可的治理空白。
对你意味着什么:(1) 它可以放心作为 pose 分类与分子生成的训练主力,但请把每一个内部指标都打七折看待——Core→CCV 的泛化落差(R 0.78→0.56)就是官方给出的折价率;(2) 做回归必须先过滤 pK>0,做分类优先用官方 CCV,任何随机划分都是错误;(3) 想要"实验级"结论时,把它当预训练语料而非最终考场——在 BigBind、DockGen、PoseBusters 或你自己的湿实验数据上做外部验证;(4) 工程上走 molcache2 轻量路线,避免 5,213 万文件的全量解压。
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| PDBbind Core 280(redocking pose) | 匹兹堡大学(论文内部对照) | 亲和力回归 | Dense Gen Ensemble RMSE 1.35 / R 0.79 | 高于 CCV(0.612)约 0.18 | 传统 Core 测试显著乐观,CCV 更接近真实泛化 |
| Apo 受体(CDonly 集内无配体构象) | 匹兹堡大学 | pose 选择/亲和力 | R 0.398 / AUC 0.891 / Top1 31.7% | 较 holo 大幅下降 | 交叉对接训练比重对接训练更能迁移到 apo(Top1 28.9%→31.7%) |
| 无反例测试集 | 匹兹堡大学 | pose 分类 | AUC 0.885→0.845(反例训练 vs 无) | 略降 | 反例的收益在最小化鲁棒性而非纯分类 |
| BigBind(ChEMBL 活性映射口袋) | 斯坦福 Dror 实验室 | 活性建模 | 口袋 2,922→1,067;851,359 活性/531,560 化合物 | 口袋数缩减 64% | 活性标签可成功映射到 CrossDocked 口袋,但需接受口袋大幅子集化 |
| PDBBind time split(DiffDock 基准,363 复合物) | MIT(Corso et al.) | 对接 pose | 独立口径(非本数据集划分) | 不可直接比较 | 新一代扩散对接模型主基准已转向 PDBBind/PoseBusters,与本数据集互为补充 |
§8 基准性能与生态
§8.1 排行榜
任务一:pose 选择与亲和力(官方 CCV 口径,3 折聚类交叉验证)。数值为各配置在同一数据与划分下的表现,可比性最好:
| 排名 | 模型 | Top1 pose 选择 | AUC | RMSE / Pearson R | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|---|---|
| 1 | Dense CNN ×5 ensemble | 68.4% | 0.956 | 1.42 / 0.612 | 2020 | 双任务稠密 3D-CNN + 集成 | Francoeur et al., 2020, J Chem Inf Model. DOI: 10.1021/acs.jcim.0c00411 | gnina/models |
| 2 | Dense CNN 单模型 | 61.5% | — | — / 0.547 | 2020 | 稠密连接 3D-CNN | Francoeur et al., 2020, J Chem Inf Model. DOI: 10.1021/acs.jcim.0c00411 | gnina/models |
| 3 | Def2018 单模型 | 53.7% | — | — / 0.577 | 2020 | 经典 3D-CNN 架构 | Francoeur et al., 2020, J Chem Inf Model. DOI: 10.1021/acs.jcim.0c00411 | gnina/models |
| 4 | AutoDock Vina(基线) | 41.3% | — | — / — | 2013 | 经验打分物理对接 | Koes et al., 2013, J Chem Inf Model. DOI: 10.1021/ci300384c(smina 实现) | smina |
任务二:口袋条件 3D 分子生成(TargetDiff 协议:RMSD<1 Å + <30% 序列一致性,100 测试口袋)。⚠️ liGAN 与 GraphBP 行因 AutoDock Vina 无法解析其生成原子类型而使用 QVina2 对接,与其余行不可直接比较;SA 与分子大小强负相关(R=-0.56),跨模型 SA 差异可能是尺寸伪象:
| 排名 | 模型 | Vina Dock(均值/中位,kcal/mol) | High Affinity(均值) | QED / SA / Diversity | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|---|---|
| 1 | TargetDiff | -7.80 / -7.91 | 58.1% | 0.48 / 0.58 / 0.72 | 2023 | E(3) 等变扩散 + 亲和力头 | Guan et al., 2023, ICML. arXiv: 2303.03543 | github |
| 2 | Pocket2Mol | -7.15 / -6.79 | 48.4% | 0.56 / 0.74 / 0.69 | 2022 | E(3) 等变自回归 | Peng et al., 2022, ICML. PMLR 162 | github |
| 3 | AR | -6.75 / -6.62 | 37.9% | 0.51 / 0.63 / 0.70 | 2021 | 3D 体素去噪自回归 | Luo et al., 2021, NeurIPS 34 | github |
| 4 | liGAN(QVina2) | -6.33 / -6.20 | 21.1% | 0.39 / 0.59 / 0.66 | 2022 | 条件 VAE 体素生成 | Ragoza et al., 2022, Chem Sci 13:2701. DOI: 10.1039/D1SC06934G | github |
| 5 | GraphBP(QVina2) | -4.80 / -4.70 | 14.2% | 0.43 / 0.49 / 0.79 | 2022 | 图扩散逐原子生成 | Liu et al., 2022, ICML. PMLR 162 | github |
| — | Reference(参考配体) | -7.45 / -7.26 | — | 0.48 / 0.73 / — | — | 晶体配体对照 | Guan et al., 2023, ICML. arXiv: 2303.03543 | — |
数值不可直接比较的原因:两表分属不同任务与协议;任务二各行的预处理快照、对接二进制(Vina vs QVina2)与口袋提取细节存在实现差异,100 个测试口袋的样本量使差异的统计显著性有限——引用时务必注明协议来源与对接工具。
§8.2 SOTA 总结与选型建议
- 打分函数路线:官方 Dense ensemble 仍是该数据集上的参考基线(Top1 68.4%);新方法请直接与它对齐协议后比较,而不是与 Vina。
- 生成路线:TargetDiff 是当前社区默认基线与协议定义者;后续工作(DecompDiff、MolPilot、DrugFlow 等)沿用其 100 口袋评测框架。
- 选型建议:做打分/对接鲁棒性研究用官方全家桶;做生成用 pocket10 快照 + TargetDiff 协议;做活性导向筛选优先考虑 BigBind 口袋口径。
不同研究目的下的"评测口径选择"对照:
| 你的研究目的 | 应对齐的口径 | 与谁可比 | 主要陷阱 |
|---|---|---|---|
| 打分函数/pose 分类 | it2 CCV 3 折 | 论文 Table 4 全部行 | 忘记 batch 双重均衡;混入 it0 结果 |
| 亲和力回归 | CCV + 仅 pK>0 行 | 论文 RMSE/R 列 | 把负 pK 当真值(坑点 4) |
| 口袋条件生成 | TargetDiff 协议(10 万对 + 100 口袋) | §8.1 任务二全部行 | Vina vs QVina2 口径混杂;无置信区间 |
| 新靶点泛化 | CCV held-out + DockGen | 论文 Figure 5、§7.8 | 用 Core set 冒充新靶点测试 |
| 活性导向筛选 | BigBind 口袋口径 | BigBind 论文 | 跨回 CrossDocked 口袋数口径比较 |
§8.3 评测协议要点
- 复现论文:it2 CCV 3 折、batch 按类别与口袋平衡、亲和力损失忽略无 pK 行。
- 生成评测:Vina Score / Vina Min / Vina Dock 三档 + High Affinity(优于参考配体比例)+ QED/SA/Diversity + JSD 键长分布;报告 100 口袋 bootstrap 置信区间。
- RMSD 一律对称性校正(spyrmsd);注明参照系(tt_min vs 原始晶体)。
- 统计严谨性:100 口袋测试集报告 bootstrap 95% CI;跨模型比较用配对检验(同口袋配对差)。
- 基线齐全:打分研究至少含 Vina 与官方 Dense ensemble 两档;生成研究至少含 Reference(参考配体)行,否则"优于基线"无从谈起。
- 报告口径附录:写明数据版本(v1.3/v1.0)、types 文件哈希、Vina 二进制版本与预处理脚本链接。
§8.4 相关数据集
| 数据集 | 关系 | 适用场景 |
|---|---|---|
| PDBbind v2020 | pK 标签上游;实验金标准 | 亲和力精调、CASF 评测 |
| CASF-2016 core | 标准考卷 | 打分函数四力评测 |
| BigBind | CrossDocked 口袋 + ChEMBL 活性 | 活性预测/虚拟筛选 |
| Binding MOAD | 平行大规模复合物库 | DiffDock 系评测、互补训练 |
| DockGen | 结构新颖性受控的测试集 | 新靶点泛化评测 |
| PoseBusters | 物理合理性基准 | 生成/对接结果质检 |
§8.5 关键论文 Top 8
- Francoeur et al., 2020, JCIM 60:4200-4215. DOI: 10.1021/acs.jcim.0c00411 —— 数据集原始论文:构建协议、CCV 划分与 CNN 基线。
- Ragoza et al., 2017, JCIM 54:1941-1951. DOI: 10.1021/acs.jcim.7b00634 —— GNINA 3D-CNN 打分函数的开山之作(本数据集的方法前传)。
- Koes et al., 2013, JCIM 53:1893-1904. DOI: 10.1021/ci300384c —— smina:交叉对接与最小化所用引擎。
- Kufareva & Abagyan, 2012, Bioinformatics 28:751. DOI: 10.1093/bioinformatics/btr770 —— Pocketome:口袋聚类与结构对齐的骨架。
- Liu et al., 2017, Acc Chem Res 50:302-309. DOI: 10.1021/acs.accounts.6b00491 —— PDBbind v2017:pK 标签来源。
- Luo et al., 2021, NeurIPS 34(AR)—— 定义社区生成协议(RMSD<1 Å + <30% 序列一致性)。
- Liu et al., 2022, ICML PMLR 162(GraphBP)—— 图扩散生成,协议的首批大规模沿用者。
- Guan et al., 2023, ICML(TargetDiff). arXiv: 2303.03543 —— E(3) 等变扩散 + 完整评测框架,SBDD 生成模型事实标准。
§8.6 社区活跃度
- 引用曲线:OpenAlex 口径 2024 年 87 次、2025 年 103 次、2026 年前 9 个月 65 次(截至 2026-09)——发布六年仍处引用上升期,FWCI 15.64(全球前 1% 水平)。
- 代码生态:gnina/gnina(对接主程序)、gnina/libmolgrid、gnina/scripts(训练)、gnina/models(权重+数据)四仓库联动;TargetDiff/DiffDock 等下游仓库衍生大量 issue 讨论。
- 数据本身无官方 issue 渠道(大学服务器直发),社区问题集中在 gnina/models 与 TargetDiff 仓库;HuggingFace 镜像提供了替代分发渠道(月下载量级为数十次,属小众备份而非主流入口)。
- 论文传播度:ChemRxiv 预印本累计约 9,475 次浏览 / 3,611 次下载(截至 2026-09 检索),正式版经 PMC 绿色开放获取(PMCID PMC8902699)长期可及。
§8.7 生态快照
| 资源 | 类型 | 链接 | Star(截至 2026-09) | 推荐理由 |
|---|---|---|---|---|
| gnina/gnina | 对接软件(CNN 打分) | https://github.com/gnina/gnina | 700+ | 数据集的"消费端"旗舰 |
| gnina/models | 官方权重+数据说明 | https://github.com/gnina/models | 200+ | 本数据集权威文档所在 |
| gnina/libmolgrid | 网格化库 | https://github.com/gnina/libmolgrid | 100+ | molcache2 依赖 |
| guanjq/targetdiff | 生成模型+预处理 | https://github.com/guanjq/targetdiff | 300+ | pocket10 快照与评测协议实现 |
| gcorso/DiffDock | 扩散对接 | https://github.com/gcorso/DiffDock | 800+ | 平行基准(PDBBind time split)参照 |
| drorlab/bigbind | 衍生活性数据 | https://github.com/drorlab/bigbind | 100+ | 活性标签映射 |
| HuggingFace kohbanye/crossdocked2020 | 社区镜像 | https://huggingface.co/datasets/kohbanye/crossdocked2020 | — | 23.8 GB WebDataset 化镜像 |
Star 数为量级参考(检索时点快照),以仓库实时数据为准。
§9 相关资源与引用
§9.1 官方资源
- 数据下载(官方唯一渠道):http://bits.csb.pitt.edu/files/crossdock2020/
- 官方文档:https://github.com/gnina/models(data/CrossDocked2020/README.md 含 types 格式、changelog、molcache 说明)
- 训练脚本:https://github.com/gnina/scripts ;网格库:https://github.com/gnina/libmolgrid
- 论文全文(免费):https://pmc.ncbi.nlm.nih.gov/articles/PMC8902699/ ;ACS 页:https://pubs.acs.org/doi/10.1021/acs.jcim.0c00411
- 论文配套模型:https://github.com/gnina/models/tree/master/crossdocked_paper ;降采样脚本:https://github.com/dkoes/cnnaffinitypaper
- 上游依赖:Pocketome(http://pocketome.org)、PDBbind(http://www.pdbbind.org.cn)、ProDy(http://prody.csb.pitt.edu)
- 社区预处理快照:https://github.com/guanjq/targetdiff(crossdocked_pocket10,Google Drive 分发)
- 口袋聚类上游:http://pocketome.org/(Pocketome 入口;配合 ProBiS 算法论文理解 z-score 3.5 口径)
- 生成模型协议参照:https://github.com/gcorso/DiffDock(平行基准与数据划分思想对照)
- 衍生活性数据:https://github.com/drorlab/bigbind(ChEMBL 活性映射 CrossDocked 口袋)
§9.2 BibTeX 引用
@article{francoeur2020threedimensional,
title = {Three-Dimensional Convolutional Neural Networks and a Cross-Docked Data Set for Structure-Based Drug Design},
author = {Francoeur, Paul G. and Masuda, Tomohide and Sunseri, Jocelyn and Jia, Andrew and Iovanisci, Richard B. and Snyder, Ian and Koes, David R.},
journal = {Journal of Chemical Information and Modeling},
volume = {60},
number = {9},
pages = {4200--4215},
year = {2020},
doi = {10.1021/acs.jcim.0c00411}
}
@article{kufareva2012pocketome,
title = {Pocketome: an encyclopedia of small-molecule binding sites in 4D},
author = {Kufareva, Irina and Ilatovskiy, Andrey V. and Abagyan, Ruben},
journal = {Bioinformatics},
volume = {28},
number = {5},
pages = {751},
year = {2012},
doi = {10.1093/bioinformatics/btr770}
}
@article{liu2017forging,
title = {Forging the Basis for Developing Protein-Ligand Interaction Scoring Functions},
author = {Liu, Zhihai and Su, Minyi and Han, Liyan and Liu, Jie and Yang, Qifan and Li, Yan and Wang, Renxiao},
journal = {Accounts of Chemical Research},
volume = {50},
number = {2},
pages = {302--309},
year = {2017},
doi = {10.1021/acs.accounts.6b00491}
}
@article{koes2013lessons,
title = {Lessons Learned in Empirical Scoring with smina from the CSAR 2011 Benchmarking Exercise},
author = {Koes, David Ryan and Baumgartner, Matthew P. and Camacho, Carlos J.},
journal = {Journal of Chemical Information and Modeling},
volume = {53},
number = {8},
pages = {1893--1904},
year = {2013},
doi = {10.1021/ci300384c}
}
@article{ragoza2017origin,
title = {Origin of the Efficiency of Protein-Ligand Binding Revealed by 3D Convolutional Neural Networks(Molecular Docking with Convolutional Neural Networks)},
author = {Ragoza, Matthew and Hochuli, Joshua and Idrobo, Elisa and Sunseri, Jocelyn and Koes, David Ryan},
journal = {Journal of Chemical Information and Modeling},
volume = {57},
number = {4},
pages = {942--957},
year = {2017},
doi = {10.1021/acs.jcim.7b00634}
}
@article{mcnutt2021gnina,
title = {GNINA 1.0: molecular docking with deep learning},
author = {McNutt, Andrew T. and Francoeur, Paul and Aggarwal, Rishal and Masuda, Tomohide and Meli, Rocco and Ragoza, Matthew and Sunseri, Jocelyn and Koes, David Ryan},
journal = {Journal of Cheminformatics},
volume = {13},
number = {1},
pages = {43},
year = {2021},
doi = {10.1186/s13321-021-00522-2}
}
@inproceedings{luo20213d,
title = {A 3D Generative Model for Structure-Based Drug Design},
author = {Luo, Shitong and Shi, Chence and Xu, Minkai and Tang, Jian},
booktitle = {Advances in Neural Information Processing Systems 34 (NeurIPS)},
year = {2021}
}
@inproceedings{liu2022generating,
title = {Generating 3D Molecules for Target Protein Binding with Graph-based Diffusion},
author = {Liu, Meng and Luo, Youzhi and Uchino, Kanji and Maruhashi, Koji and Ji, Shuiwang},
booktitle = {Proceedings of the 39th International Conference on Machine Learning (ICML)},
series = {PMLR},
volume = {162},
year = {2022}
}
@inproceedings{guan20233d,
title = {3D Equivariant Diffusion for Target-Aware Molecule Generation and Affinity Prediction},
author = {Guan, Jiaqi and Qian, Wesley Wei and Peng, Xingang and Su, Yufeng and Peng, Jian and Ma, Jianzhu},
booktitle = {Proceedings of the 40th International Conference on Machine Learning (ICML)},
year = {2023},
note = {arXiv:2303.03543}
}
@inproceedings{corso2023diffdock,
title = {DiffDock: Diffusion Steps, Twists, and Turns for Molecular Docking},
author = {Corso, Gabriele and St{\"a}rk, Hannes and Jing, Bowen and Barzilay, Regina and Jaakkola, Tommi},
booktitle = {International Conference on Learning Representations (ICLR)},
year = {2023}
}
@article{meli2020spyrmsd,
title = {spyrmsd: symmetry-corrected RMSD calculations in Python},
author = {Meli, Rocco and Biggin, Philip C.},
journal = {Journal of Cheminformatics},
volume = {12},
number = {1},
pages = {49},
year = {2020},
doi = {10.1186/s13321-020-00455-2}
}
§9.3 引用指南
使用该数据集至少引用 Francoeur et al. 2020;若使用 Pocketome 聚类细节引用 Kufareva et al. 2012,若使用 pK 标签语义引用 Liu et al. 2017;走社区生成协议请同时引用 Luo et al. 2021 与 Guan et al. 2023;RMSD 计算建议引用 Meli & Biggin 2020(spyrmsd)。
§10 AI 使用声明卡
§10.1 本页面使用的 AI 模型列表
| 模型 | 用途 | 版本/说明 |
|---|---|---|
| CodeBuddy(fast-model) | 初稿撰写、结构组织、代码示例生成 | 2026-09 版本 |
§10.2 AI 参与范围
AI 完成了:检索结果汇总与事实初步整理、全部章节初稿撰写、代码示例编写、表格组织。人工完成了:关键数字逐条溯源核实(论文全文、官方 README、OpenAlex、下游论文)、口径裁决(如 MM/GBSA 误传的排除、v1.0 与 v1.3 数字区分)、医学背景与偏倚审读、最终编辑定稿。
§10.3 输入来源
- Francoeur et al. (2020), J Chem Inf Model 60:4200-4215(DOI: 10.1021/acs.jcim.0c00411;PMC 全文核实构建协议与 Table 2/3/4 数字)
- PubMed 32865404(作者、机构、摘要核实)
- OpenAlex API(DOI: 10.1021/acs.jcim.0c00411;引用数 374,截至 2026-09 检索)
- ChemRxiv 预印本 10.26434/chemrxiv.11833323.v2(首发日期、资助信息、预印本许可)
- gnina/models 仓库 data/CrossDocked2020/README.md(types 格式、文件命名、changelog、52,126,979 文件警告、molcache 与 downsampled 说明)
- gnina/models 仓库主页(目录结构、最后提交 2023-09-18、crossdocked_paper 权重清单)
- DeepWiki gnina/models CrossDocked2020 条目(版本修复摘要交叉核对)
- Expanding Training Data…(ACS Omega 2023, DOI: 10.1021/acsomega.3c05931;v1.3 口径 2,900 口袋/17,815 对/22,566,449 poses/58.9% 无标签;版本修复史)
- The Impact of Data on Structure-Based Binding Affinity Predictions…(IJMS 2023, 24:16120;反例构成 11,892,173/重对接 786,960/BigBind 规模数字)
- TargetDiff 论文(arXiv 2303.03543;社区协议、Table 1 全部生成基准数字、附录 G QVina 口径与 SA 伪象)
- bio.rodeo/models/targetdiff(TargetDiff 协议影响与 Google Drive 分发事实交叉核对)
- DiffDock 论文(arXiv 2210.01776)与官方仓库(363 测试复合物归属 PDBBind time split 的口径澄清)
- Concept-Driven Deep Learning…(ACM/AR5iv 2025;下游协议沿用证据)
- Addressing docking pose selection with structure-based deep learning(PMC11141151;领域综述定位)
- PDBbind 官方网站(上游许可条款)
§10.4 人工校验记录
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| §1 概览与战略价值(规模数字、生态表述) | 千方病案医学编辑部 | 与论文摘要及 OpenAlex 交叉比对 | ✅ 已验证 |
| §2 药物发现背景(靶点-疾病映射、金标准描述) | 千方病案医学编辑部 | 交叉审核 | ✅ 已通过 |
| §3 数据集规格(版本矩阵、子集统计表) | 千方病案医学编辑部 | 与论文 Table 2、官方 README、ACS Omega 2023 逐数比对 | ✅ 已验证 |
| §4 数据结构(目录树、DAIMS 字典) | 千方病案医学编辑部 | 与官方 README 文件命名逐行核对 | ✅ 已验证 |
| §5 划分策略 | 千方病案医学编辑部 | 与论文 CCV 描述及 TargetDiff 协议核对 | ✅ 已通过 |
| §6 就绪指南与 8 坑点 | 千方病案医学编辑部 | 坑点逐条溯源(论文/README/附录 G) | ✅ 已通过 |
| §7 质量评估与 DAIMS 评分 | 千方病案医学编辑部 | 交叉审核 | ✅ 已通过 |
| §8 排行榜与引用数 | 千方病案医学编辑部 | 与原文表格及 OpenAlex 快照交叉比对 | ✅ 已验证 |
| §C JSON-LD @graph | 千方病案医学编辑部 | Schema v3.9 字段逐项校验 | ✅ 已通过 |
§10.5 AI 生成章节标注
以下章节由 AI 生成初稿并经人工审核:§1.0 30 秒速览、§3.0 版本抉择矩阵、§6.1-§6.4 与 §6.9 代码示例、§6.5 八个坑点、§7.7 DAIMS 评估表与评分、§8.1/§8.7 表格、§C JSON-LD。
§10.6 最后人工审核日期
2026-09-05(与 §0 审核日期一致)
页面状态:published(全部内容已完成审核并发布)
