AI制药必备公开数据集全解析:从MoleculeNet到PDBbind的实战指南

AI制药必备公开数据集全解析:从MoleculeNet到PDBbind的实战指南

1. 项目概述:AI制药的数据基石

在AI制药这个前沿交叉领域,数据是驱动一切算法模型运转的燃料。无论是预测药物与靶点的结合活性,还是生成全新的分子结构,抑或是评估药物的吸收、分布、代谢、排泄和毒性(ADMET),都离不开高质量、大规模的数据集。对于刚入行的研究者或工程师来说,面对海量的公开数据,常常感到无从下手:哪些数据集是业界公认的“金标准”?它们各自解决了什么问题?又该如何获取和使用?今天,我们就来系统性地梳理一下AI制药领域那些你必须知道的公开数据集,并分享一些在实际项目中处理这些数据的实战心得。

简单来说,这些公开数据集就像是药物研发的“公共图书馆”,它们由学术界、工业界或非营利组织发布,旨在降低研究门槛,促进算法公平比较。理解并善用这些数据集,不仅能帮你快速验证想法、复现前沿工作,更是构建可靠AI模型的第一步。无论你是计算化学背景的研究员,还是机器学习工程师转型进入生物医药领域,这份指南都将为你提供一个清晰的导航。

2. 核心数据集分类与深度解析

AI制药的流程漫长,从靶点发现到临床前研究,不同阶段需要不同类型的数据。因此,公开数据集也呈现出多样化的特点。我们可以将其大致分为以下几类,每一类都对应着药物研发流程中的关键环节。

2.1 分子表征与性质预测数据集

这类数据集是AI制药的入门基石,主要用于训练模型理解分子的“语言”,并预测其各种物理化学或生物活性性质。

1. MoleculeNet这堪称是分子机器学习领域的“ImageNet”。它不是一个单一数据集,而是一个基准测试集合,囊括了多个子数据集,覆盖了量子力学、物理化学、生物物理和生理学性质。

  • 核心子集举例:
    • QM9: 包含约13.4万个有机小分子的量子化学计算数据,如能量、偶极矩、极化率等。常用于测试模型对分子3D几何和电子性质的预测能力。
    • ESOL: 包含1128个化合物在水中的溶解度数据。溶解度是口服药物吸收的关键参数。
    • FreeSolv: 包含642个小分子在水中的水合自由能实验和计算数据。
    • HIV: 包含超过4万个分子对HIV病毒复制能力的抑制活性数据(二分类任务)。
    • BBBP (Blood-Brain Barrier Penetration): 关于分子能否穿透血脑屏障的数据,对中枢神经系统药物研发至关重要。
  • 使用价值:MoleculeNet的最大优势在于其标准化和广泛的接受度。当你开发一个新的分子图神经网络(GNN)模型时,首先在MoleculeNet的多个任务上进行测试,是证明其泛化能力的常规操作。它提供了统一的数据划分(训练/验证/测试集)和评估指标,使得不同研究之间的比较成为可能。
  • 实操注意:下载和使用时,务必注意各个数据集的许可证。通常可以通过DeepChem库(一个专门用于深度学习化学的Python库)非常方便地加载这些数据集。例如,deepchem.molnet.load_hiv()一行代码即可完成HIV数据集的下载、Featurization(分子特征化)和数据分割。

2. ZINC这是一个庞大的商业可用化合物虚拟数据库,提供了超过2.5亿个类药分子的购买信息和3D结构。对于虚拟筛选和生成模型训练极具价值。

  • 核心特点:ZINC中的分子都标注了可购买性、价格、供应商等信息,并且提供了多种格式的分子文件(如SDF, MOL2)。研究人员常从中抽取子集(例如ZINC250k,包含25万个分子)用于分子生成模型(如JT-VAE, GCPN)的预训练或评估。
  • 使用场景:当你需要构建一个分子生成模型,并希望其生成的分子是“可合成”或“可购买”的时候,使用ZINC作为训练数据或参考库是非常自然的选择。它的分子结构多样性极高,能很好地覆盖化学空间。
  • 避坑指南:ZINC数据库有不同的版本和子集。新手容易混淆的是“ZINC15”、“ZINC20”以及各种子集名称。建议直接从其官方网站或相关论文中确认使用的具体版本和下载链接。处理超大规模数据时,需要考虑存储和读取效率,通常需要编写脚本进行批处理。

2.2 蛋白质相关数据集

药物研发的核心是“锁钥模型”,蛋白质(靶点)就是那把锁。理解蛋白质的结构、功能和作用界面至关重要。

1. Protein Data Bank (PDB)这是结构生物学的核心资源,一个全球性的数据库,收录了通过X射线晶体学、核磁共振、冷冻电镜等实验方法解析出的蛋白质、核酸等生物大分子的三维结构。

  • 核心价值:PDB是几乎所有蛋白质结构预测、蛋白质-配体对接、结合位点预测研究的数据来源。每个条目(如“7T9L”)不仅包含原子坐标,还包含相关的实验信息、序列、文献引用等。
  • 如何使用:可以通过RCSB PDB网站进行搜索、浏览和下载。在AI场景下,我们通常需要从PDB文件中提取特定信息,比如蛋白质的氨基酸序列、原子坐标、二级结构、结合的小分子配体等。常用的处理工具有Biopython、OpenBabel、RDKit(结合PDBFixer处理蛋白质)等。
  • 实战心得:原始PDB文件很“脏”。直接使用会遇到诸多问题:缺失氢原子、残基不完整、原子命名不规范、存在结晶水分子等。在用于深度学习模型(如3D-CNN或图网络)前,必须进行严格的预处理流程:加氢、补全缺失侧链、去除水分子、能量最小化等。可以使用软件如UCSF Chimera、PyMOL或开源工具PDBFixer/OpenMM来完成这些步骤。这一步的质量直接决定了模型性能的上限。

2. UniProt这是蛋白质序列和功能信息最全面、注释最权威的数据库。如果说PDB是蛋白质的“三维照片”,UniProt就是它的“详细档案”。

  • 核心内容:包含蛋白质的氨基酸序列、功能描述(如酶活性、结合位点)、翻译后修饰、亚细胞定位、与疾病的关系以及与其他数据库(如PDB, Pfam)的交叉引用。
  • AI应用:常用于蛋白质序列的预训练(类似NLP中的BERT)。通过在海量的UniProt序列上训练语言模型(如ESM, ProtTrans),模型可以学习到蛋白质进化和结构的内在规律,得到的序列嵌入(Embedding)可以极大地提升下游任务(如稳定性预测、功能注释)的性能。
  • 注意事项:UniProt数据量极大(数亿条序列),下载和处理需要强大的计算和存储资源。通常我们会使用其提供的API或FTP服务来按需获取数据。对于大多数研究,使用预训练好的蛋白质语言模型及其产生的嵌入向量,是更高效的做法。

2.3 蛋白质-配体相互作用数据集

这是AI制药最核心的战场之一,目标是精准预测小分子(配体)与蛋白质靶点如何结合、结合得有多强。

1. PDBbind这是目前最权威的蛋白质-配体复合物结合亲和力数据库。它从PDB中筛选出高质量的复合物结构,并手工收集了实验测得的结合常数(Kd/Ki/IC50),并将其统一转化为负对数形式的pKd/pKi/pIC50值,作为结合亲和力的标准度量。

  • 版本与划分:PDBbind每年更新,常用的是“精炼集”(Refined Set,约5千个复合物)和“核心集”(Core Set,约300个复合物,用于盲测)。其数据划分(训练集、测试集)被广泛用于评估打分函数和深度学习模型的预测精度。
  • 数据处理难点:PDBbind提供的复合物结构同样需要预处理。更大的挑战在于,如何从复合物结构中构建有效的分子表示。常见方法包括:将结合口袋视为一个3D网格,计算每个格点的理化性质(如疏水性、电荷);或者将蛋白质和配体分别表示为图,再研究图之间的相互作用。工具如DGL-LifeSci、PyTorch Geometric (PyG) 提供了相关的数据处理管道。
  • 重要提醒:务必使用官方划分的数据集进行模型训练和评估,自行随机划分会导致数据泄露(因为相似蛋白或配体可能出现在训练和测试集中),从而得到过于乐观、不可靠的结果。

2. BindingDB这是一个主要收录蛋白质(尤其是药物靶点)与小分子配体之间相互作用测量数据的数据库,侧重于结合亲和力数据。

  • 与PDBbind的区别:BindingDB的数据量更大(超过200万条结合数据),但并非所有条目都有对应的三维复合物结构。它更侧重于结合亲和力数值的广度覆盖。
  • 使用策略:BindingDB常被用于训练不需要精确三维结构、只基于配体或蛋白序列/简单结构进行亲和力预测的模型。也可以用它来扩充PDBbind的数据。在下载时,需要注意过滤实验类型(如荧光法、SPR、放射性配体结合法等),不同方法测得的数据可能存在系统偏差。

2.4 ADMET性质预测数据集

“成药性”是药物能否成功的关键。ADMET性质不佳是临床失败的主要原因。因此,预测这些性质的数据集具有极高的实用价值。

1. Tox21由美国NIH发起的数据挑战赛数据集,旨在利用体外检测方法评估化合物对一系列核受体和应激反应通路的影响,从而预测其体内毒性。

  • 特点:包含约1.2万个化合物在12个不同毒性通路上的实验活性数据(二分类或多任务分类)。这是一个典型的多任务学习数据集。
  • 实战意义:训练一个模型同时预测多种毒性终点,可以共享不同任务间的知识,提高数据利用效率,特别是对于数据稀缺的毒性终点。这要求模型架构具备多任务学习的能力。

2. ClinTox对比药物上市药物和因毒性原因失败化合物的数据集,旨在区分药物和具有毒性的化合物。

  • 核心任务:二分类(药物/毒性化合物)以及毒性具体类型的多标签分类。
  • 价值:这个数据集直接关联药物研发的成功与失败,具有明确的转化意义。模型在此数据集上的表现,能一定程度上反映其“嗅出”潜在临床毒性的能力。

3. 其他:像SIDER(药物副作用)、L1000(基因表达谱扰动)等数据集,也从不同侧面反映了药物的生物效应和潜在风险。

重要提示:ADMET数据通常存在严重的类别不平衡问题(例如,有肝毒性的化合物远少于无肝毒性的)。在训练模型时,必须采用重采样、调整损失函数权重等策略来处理不平衡,否则模型会简单地偏向预测多数类,失去实用价值。

3. 数据获取、处理与特征工程实战

知道了有哪些数据集只是第一步,如何将它们“喂”给模型才是真正的挑战。这个过程充满了“坑”。

3.1 数据获取渠道与工具

  1. 官方源与社区工具

    • MoleculeNet/ZINC/PDBbind:优先通过DeepChem库加载。它自动处理下载、缓存和初步格式化。
    • PDB:使用BiopythonPDB.PDBList模块或直接通过RCSB PDB的API进行编程化下载。
    • UniProt:通过其FTP站点批量下载,或使用requests库调用其REST API进行特定查询。
    • 通用化学数据RDKit是一个不可或缺的瑞士军刀。它不仅能读取SDF、SMILES等格式,还能进行大量的分子操作和描述符计算。
  2. 数据版本管理:这是极易被忽视的一点。在科研中,必须记录你所使用数据集的具体版本号或发布日期。例如,PDBbind 2020和2023版本差异很大。记录版本号是保证实验结果可复现性的生命线。建议在项目根目录使用data_version.txt文件或在代码中用注释明确记录。

3.2 分子特征化:从结构到数字

如何将一个分子结构(如SMILES字符串或SDF文件)转化为模型可以理解的数值向量?这就是特征化。

  1. 基于描述符的方法
    • 是什么:计算一系列预定义的物理化学描述符,如分子量、脂水分配系数(LogP)、氢键供受体数量、可旋转键数等。RDKit可以轻松计算数百种这样的描述符。
    • 优点:可解释性强,每个描述符都有明确的化学意义。
    • 缺点:特征工程依赖领域知识,可能无法捕捉复杂的非线性结构和活性关系;特征之间可能存在高度共线性。
    • 实操代码片段
      from rdkit import Chem from rdkit.Chem import Descriptors mol = Chem.MolFromSmiles(‘CCO’) # 乙醇 mol_weight = Descriptors.MolWt(mol) logp = Descriptors.MolLogP(mol) # 可以计算一个描述符列表 descriptor_names = [name for name in dir(Descriptors) if not name.startswith(‘_’)]
  2. 基于指纹的方法
    • 是什么:将分子结构哈希化为一个固定长度的比特向量。最常用的是摩根指纹(Morgan Fingerprints),它是一种圆形指纹,通过考虑每个原子周围特定半径内的拓扑环境来生成。
    • 优点:能够捕捉子结构信息,计算速度快,是传统机器学习模型(如随机森林、SVM)的标配输入。
    • 缺点:比特位与具体子结构的对应关系模糊(由于哈希),可解释性低于描述符;固定长度可能造成信息损失。
    • 实操代码片段
      from rdkit.Chem import AllChem morgan_fp = AllChem.GetMorganFingerprintAsBitVect(mol, radius=2, nBits=2048) # radius=2 表示考虑原子周围两键以内的环境,nBits决定指纹向量的长度。
  3. 基于图的方法(深度学习时代主流)
    • 是什么:将分子表示为图(Graph),其中原子是节点,化学键是边。节点特征可以包括原子类型、杂化方式、形式电荷等;边特征可以包括键类型、是否共轭等。
    • 优点:最自然、最全面的分子表示方式,能够完整保留拓扑和连接信息,非常适合图神经网络(GNN)处理。
    • 缺点:需要更复杂的模型架构,计算成本相对较高。
    • 实操工具:使用DGLPyTorch Geometric (PyG)库来构建分子图数据对象。这些库与RDKit结合紧密,可以方便地进行转换。

3.3 数据清洗与标准化流程

原始数据几乎不可能是完美可用的。一个稳健的数据处理管道必须包含以下步骤:

  1. 去重:基于分子的规范SMILES或InChIKey,移除完全相同的重复条目。
  2. 异常值处理:检查活性值(如pIC50)的分布。对于明显超出物理合理范围(例如,溶解度数据中出现极大负值)或实验误差可能极大的数据点,需要根据领域知识进行审查或剔除。
  3. 不平衡处理(针对分类任务):如前所述,使用SMOTE(合成少数类过采样技术)、随机欠采样或为不同类别在损失函数中赋予不同权重。
  4. 特征标准化/归一化:对于连续型特征或描述符,必须进行标准化(StandardScaler)或归一化(MinMaxScaler),使其均值为0、方差为1,或缩放到[0,1]区间。这能加速模型收敛,并防止某些特征因量纲过大而主导训练过程。关键点:拟合scaler时只能使用训练集数据,然后用这个scaler去转换验证集和测试集。绝对不能用全部数据来拟合scaler,否则会造成数据泄露。

4. 模型训练中的数据集应用策略

有了干净的数据,如何设计实验来验证模型的有效性?这里面的门道很多。

4.1 数据分割的艺术

如何划分训练集、验证集和测试集,直接决定了你对模型泛化能力评估的可信度。

  1. 随机分割:最简单的方法,适用于数据量大且样本间独立同分布的理想情况。但在化学数据中,分子之间常有相似性,随机分割可能导致相似的分子同时出现在训练集和测试集,使评估结果虚高。
  2. 按支架分割:这是药物化学中更严格、更受推荐的分割方式。它基于分子的Bemis-Murcko骨架(将侧链剥离后的核心环系结构)进行划分。确保训练集和测试集中的分子具有不同的核心骨架。这能更好地测试模型对新结构类型的预测能力,模拟真实场景中面对全新化学实体的挑战。
  3. 按时间分割:模拟现实世界中的时序信息。用较早时间发布的数据训练,用较新时间的数据测试。这能评估模型对未来的预测能力。
  4. 按蛋白分割:在蛋白质-配体相互作用任务中,按蛋白质进行划分。即,测试集中的蛋白质在训练集中从未出现过。这是评估模型跨靶点泛化能力的金标准,难度极大。

核心建议:在论文或报告中,必须明确说明你采用了哪种数据分割方式。仅仅说“我们采用了80/10/10的分割”是远远不够的。对于旨在解决实际问题的研究,按支架分割应作为默认的基线分割方法,并报告其结果。

4.2 评估指标的选择

不同的任务需要不同的评估指标,选错了指标可能会完全误导结论。

任务类型常用评估指标说明与注意事项
回归任务
(如预测pIC50)
均方误差 (MSE)
平均绝对误差 (MAE)
决定系数 (R²)
MSE对异常值敏感,MAE更稳健。能直观反映模型解释方差的比例。在药物发现中,我们常更关心预测值的排序是否正确(即哪个分子活性更高),而非绝对误差。
分类任务
(如活性/非活性)
准确率 (Accuracy)
精确率/召回率/F1分数
ROC-AUC
PR-AUC
准确率在不平衡数据上毫无意义。ROC-AUC综合考察模型在不同阈值下的表现,对类别不平衡相对不敏感,是首选。在极端不平衡时(如毒性预测,阳性样本极少),PR-AUC比ROC-AUC更具信息量。
排名任务
(如虚拟筛选)
富集因子 (EF)
早期识别率
例如,EF10%表示在前10%的预测结果中,找到的真正活性分子是随机筛选的多少倍。这直接反映了模型在虚拟筛选中的实用价值。

4.3 利用公开数据集的常见陷阱与对策

  1. 数据泄露:这是新手最容易犯的致命错误。除了前述的scaler泄露,还包括:

    • 特征泄露:不小心使用了未来信息或与标签直接强相关的特征。例如,用包含了某种毒性终点的综合评分去预测该毒性本身。
    • 分割泄露:在分割前进行了需要全局信息的操作,如基于所有样本进行特征选择或降维。
    • 对策:严格遵守“训练集-only”原则。任何从数据中学习参数的操作(特征缩放、特征选择、降维),其参数都必须仅从训练集学习,然后固定这些参数应用于验证集和测试集。将整个数据处理流程封装成Pipeline是避免泄露的好方法。
  2. 基准过拟合:在某个公开数据集(如PDBbind核心集)上反复调参、试错,直到得到一个很高的分数。但这可能只是对这个特定测试集过拟合了,模型并不具备真正的泛化能力。

    • 对策:使用交叉验证在训练集/验证集上调整超参数,并保留一个完全独立的测试集(或使用官方测试集)仅做最终一次性评估。更好的做法是,在多个不同的数据集上验证你的模型。
  3. 忽视数据质量:盲目相信数据库中的所有数据。实验数据本身有误差,数据库收录时也可能有错误。

    • 对策:对关键数据(尤其是作为模型金标准的数据)进行人工抽查。查阅原始文献,了解实验条件。对于明显偏离群体分布的数据点,要持怀疑态度。

5. 从数据到应用:构建端到端项目示例

让我们以一个具体的项目思路来串联上述知识:“构建一个预测化合物肝毒性(Hepatotoxicity)的分类模型”

步骤1:问题定义与数据获取

  • 目标:二分类模型,输入化合物结构,输出其有/无肝毒性的概率。
  • 数据源:选择Tox21数据集中的NR-AHR(芳烃受体)任务?不,这不够直接。更好的选择是专门针对肝毒性的数据集,如来自文献或ToxCast数据库的肝毒性数据。假设我们从某个研究论文的补充材料中找到了一个包含SMILES和肝毒性标签的数据集。

步骤2:数据预处理与探索性分析

  • 去重:基于SMILES去重。
  • 检查不平衡:计算阳性/阴性样本比例。假设是1:9,严重不平衡。
  • 可视化:用RDKit绘制一些有/无肝毒性的典型分子结构,直观感受一下。计算一些简单的描述符(如LogP,分子量)并绘制分布图,看两类分子是否有明显差异。

步骤3:特征化与数据分割

  • 方案选择:我们决定尝试两种主流方案做对比:
    • 方案A(传统ML):使用摩根指纹(2048位)作为特征。
    • 方案B(深度学习):将分子表示为图,使用GNN(如GCN或GAT)。
  • 数据分割:采用按支架分割(Scaffold Split),使用RDKit的Scaffold模块生成Bemis-Murcko骨架,并按骨架ID进行分层划分,确保训练/测试集骨架不同。

步骤4:模型构建与训练

  • 方案A:使用随机森林或XGBoost分类器。因为数据不平衡,在模型初始化时设置class_weight=‘balanced’
  • 方案B:构建一个简单的GNN模型。使用PyTorch Geometric定义网络层。在损失函数中使用加权交叉熵损失,给少数类(肝毒性阳性)更高的权重。
  • 训练技巧:使用验证集进行早停(Early Stopping),防止过拟合。记录训练过程中的损失和AUC曲线。

步骤5:评估与迭代

  • 评估指标:主要看测试集上的ROC-AUCPR-AUC。同时输出混淆矩阵,查看精确率和召回率的具体数值。
  • 结果分析:发现方案B(GNN)的ROC-AUC比方案A(指纹+RF)高3个百分点。分析错误案例:哪些有毒分子被预测为无毒(假阴性)?这些分子是否有共同的结构特征?这可能是模型学习的盲区,也可能是数据标注的问题。
  • 迭代:根据错误分析,可以尝试引入更丰富的原子/键特征,或使用更先进的GNN架构。也可以考虑将传统描述符作为额外的节点特征输入GNN中(混合模型)。

步骤6:模型部署与应用(简化示例)

  • 封装:将训练好的最佳模型(假设是GNN)和特征化流程用Python类封装起来。
  • 接口:提供一个简单的函数,输入SMILES字符串,输出肝毒性概率和二元分类结果。
    class HepatotoxicityPredictor: def __init__(self, model_path): self.model = load_model(model_path) self.device = torch.device(‘cuda’ if torch.cuda.is_available() else ‘cpu’) self.model.to(self.device) self.model.eval() def smiles_to_graph(self, smiles): # 使用RDKit和PyG将SMILES转换为图数据 ... return graph_data def predict(self, smiles_list): predictions = [] for smi in smiles_list: graph = self.smiles_to_graph(smi).to(self.device) with torch.no_grad(): prob = self.model(graph) predictions.append({‘smiles’: smi, ‘probability’: prob.item(), ‘toxic’: prob.item() > 0.5}) return predictions

在整个过程中,对公开数据的理解、清洗、合理分割和评估,是比模型调参更基础、也更能决定项目成败的环节。公开数据集是宝贵的公共资源,但也是一把双刃剑,用得好能加速研究,用不好则会得出误导性的结论。希望这份梳理和这些实战中的细节点,能帮助你在AI制药的数据海洋中,更稳健地扬帆起航。记住,高质量的数据处理流程,其价值不亚于一个精巧的模型架构。