3. 多模态数据采集与预处理工程

多模态分子蛋白建模的第一步不是搭模型,而是把散落在不同数据库里的“原料”变成可对齐、可复现、可追溯的统一数据集。ChEMBL、PDB、UniProt、BindingDB 四类来源分别承载了活性、结构、序列与结合亲和力信息,它们的标识体系、量纲、精度和缺失模式各不相同。本节围绕“采集—清洗—对齐—标准化”这条工程主线,说明每一步实际要处理的对象、判断依据和可交付结果。

一、四类数据源各自提供什么

ChEMBL 以化合物—靶点—活性三元组为核心,主要字段包括 molecule_chembl_id、target_chembl_id、standard_type(如 IC50、Ki、Kd)、standard_value、standard_units 和 pchembl_value。它适合提供小分子结构与活性标签,但同一化合物对同一靶点常有多条记录,需要聚合。

PDB 提供实验解析的三维结构,关键字段是 PDB ID、分辨率、实验方法(X-RAY、CRYO-EM、NMR)、链 ID、配体代码和缺失残基。它给出的是“构象证据”,但结构中的配体、辅因子、水分子和突变需要甄别。

UniProt 提供蛋白序列与功能注释,核心是 UniProtKB AC、Entry Name、序列、Gene Name、物种和可变剪接异构体。它是序列层面的权威锚点,但一个 UniProt 条目可能对应多个 PDB 结构、多个 ChEMBL 靶点。

BindingDB 侧重结合亲和力,字段包括 Ligand SMILES、Target Chain、Affinity Type、Affinity、PMID 和 DOI。它与 ChEMBL 有大量重叠,但补充了部分文献来源的 Kd/Ki 数据。

二、采集:以标识符为骨架建立索引

采集阶段的核心不是“下载全部”,而是建立跨库映射。推荐以 UniProt AC 作为蛋白主键,以标准化 InChIKey 作为化合物主键,再通过 PDB 的 UniProt 交叉引用、ChEMBL 的 target_components 和 BindingDB 的 UniProt (SwissProt) Primary ID 字段做连接。实际操作中,可先拉取目标蛋白集合(例如 50 个激酶 UniProt AC),再分别向四个库发起定向查询,而不是全库下载。

采集时需要记录来源、版本和抓取时间。例如 ChEMBL 33、PDB 2024-05-01 快照、UniProt 2024_04、BindingDB 2024-05 版本。没有版本记录的数据集无法复现,也无法判断后续差异来自数据更新还是处理逻辑。

三、清洗:处理缺失、重复与量纲

清洗要解决四类问题。第一是缺失值:ChEMBL 中 standard_value 为空或 standard_relation 为 “>” 的记录,不能直接当作精确值使用,应标记为删失数据或剔除。第二是重复:同一化合物—靶点对可能有多条 IC50,需按中位数或几何均值聚合,并保留记录数 n 作为置信度参考。第三是量纲:nM、μM、pM 必须统一到 nM,再转换为 pActivity = 9 − log10(value/nM)。第四是单位与类型混用:Ki、Kd、IC50 不可直接混为同一标签,应分别建模或明确转换假设。

若把 IC50 与 Ki 直接合并为同一回归目标,会引入系统性偏差。建议至少保留 standard_type 字段,并在训练时按类型分层或加权。

四、对齐:序列、结构与活性的三方映射

对齐是本节最容易出错的环节。蛋白侧要处理 UniProt 序列与 PDB 结构的残基编号差异:PDB 常从成熟蛋白或截短构建体开始编号,与 UniProt 全长编号不一致。做法是以 UniProt 序列为参考,用结构解析工具(如 pdb-tools、Bio.PDB)提取 PDB 链序列,做全局比对,得到“PDB 残基号 ↔ UniProt 位置”的映射表。若结构存在缺失残基,需在映射中显式标注 gap。

化合物侧要处理 SMILES 与 InChIKey 的对应。同一分子可能有盐型、立体化学未指定、互变异构等差异。建议先做去盐、标准化电荷、生成标准 InChIKey,再以 InChIKey 前 14 位(骨架层)做粗匹配,后 10 位做精确匹配。对于手性药物,必须保留立体层,否则会把 R/S 对映体错误合并。

活性侧要把 ChEMBL 的 target_chembl_id 和 BindingDB 的靶点映射到同一 UniProt AC。若一个靶点对应多个 UniProt 条目(如异构体),需明确选择策略:优先选 canonical,或按实验构建体匹配。

多模态数据采集与预处理:四源对齐与标准化链路 ChEMBL 化合物–靶点–活性 IC50 / Ki / Kd PDB 三维结构 / 链 / 配体 分辨率 / 缺失残基 UniProt 序列 / 注释 / 异构体 UniProtKB AC BindingDB 亲和力 / 文献来源 Kd / Ki / PMID 清洗层 缺失值标记(relation > / 空值) · 重复聚合(中位数 / 几何均值,保留 n) · 量纲统一(nM) · 类型分离(IC50 / Ki / Kd) 对齐层(三方映射) 蛋白:UniProt AC 为主键 PDB 残基号 ↔ UniProt 位置 化合物:InChIKey 为主键 去盐 / 电荷标准化 / 立体层保留 活性:靶点映射到 UniProt ChEMBL target ↔ BindingDB target 标准化输出:统一多模态样本表 uniprot_ac · pdb_id · chain · residue_map · inchikey · smiles · standard_type · value_nM · pActivity · source · version 每条记录可追溯到原始来源与版本,缺失与删失显式标注

五、标准化:统一字段与可追溯输出

标准化后的样本表建议至少包含以下字段:uniprot_ac、pdb_id、chain_id、residue_map、inchikey、canonical_smiles、standard_type、value_nM、pActivity、source、source_version、relation、n_records。其中 residue_map 可用 JSON 字符串保存,例如 {"PDB":101,"UniProt":85},便于后续结构—序列联合建模时直接取用。

一个可执行的检查清单如下:

  • 每个 uniprot_ac 是否至少有一条序列记录?
  • 每个 pdb_id 是否能映射到目标 UniProt AC,且映射覆盖率是否记录?
  • 每个 inchikey 是否通过标准化流程生成,盐型与立体化学是否处理?
  • value_nM 是否全部为正数,relation 是否区分 “=” 与 “>”?
  • 是否存在同一化合物—靶点对的多条记录,聚合方式是否记录?
  • 所有记录是否带有 source 与 source_version?

六、常见坑与判断依据

第一,UniProt 异构体与 PDB 构建体不一致。若 PDB 结构只覆盖激酶结构域,而 UniProt 是全长,残基编号会整体偏移。判断方法是先做序列比对,若比对覆盖率低于 80%,应标记为“部分映射”,不要强行使用。

第二,ChEMBL 的 pchembl_value 已做转换,但并非所有记录都有。若自行从 standard_value 计算,需确认单位是 nM,且 standard_relation 为 “=”。对于 “>” 记录,可保留为删失标签,或统一剔除并在数据卡中说明。

第三,BindingDB 与 ChEMBL 重复记录。建议以 ChEMBL 为主,BindingDB 补充缺失的 Kd/Ki,并在合并时用 PMID 与 inchikey 去重。若同一实验在两边数值差异超过 0.5 log 单位,应标记为冲突记录,供人工复核。

第四,PDB 配体代码与化合物 InChIKey 的对应。PDB 的 HETATM 配体代码是 3 字符,不能直接当化合物主键。需通过 Chemical Component Dictionary 或 PDBeChem 映射到 InChIKey,再与 ChEMBL/BindingDB 连接。

建议把清洗与对齐逻辑写成可重跑的脚本,输入是四个来源的原始快照,输出是带版本号的标准化样本表。每次数据更新只改版本号,不手工改中间文件,这样才能保证多模态建模的数据基础稳定可复现。

完成上述步骤后,得到的不只是一张表,而是一条可追溯的数据链路:从原始数据库条目,到清洗规则,到对齐映射,再到标准化字段。后续的分子表示、蛋白结构编码和多模态融合,都建立在这条链路的可靠性之上。