首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MEHC-Curation:一个让所有研究者都能用好的分子数据清洗开源框架

MEHC-Curation:一个让所有研究者都能用好的分子数据清洗开源框架

作者头像
DrugIntel
发布2026-04-13 17:48:58
发布2026-04-13 17:48:58
620
举报

文献来源:Pham et al. J. Chem. Inf. Model.2026, 66, 2451–2457 DOI:10.1021/acs.jcim.5c02754 发表时间:2026 年 2 月 26 日 开源地址:https://github.com/biochem-data-sci/mehc-curation


📌 一句话总结

本文提出了 MEHC-Curation,一个基于 Python 的开源分子数据集清洗框架。它将领域内被引用超过 1000 次、却从未有完整代码实现的 Fourches 协议首次系统落地,通过"验证 → 清洗 → 规范化"三阶段自动化流水线,让任何研究者都能以一行命令完成高质量的分子 SMILES 数据集清洗,无需深厚的编程背景。

🧪 背景与动机

药物发现的数据困境

药物发现是一个极其昂贵的过程。据统计,单个治疗性化合物的研发成本已从 2003 年的约 11.55 亿美元攀升至 2016 年的约 28.26 亿美元(以 2019 年价格计算)。为降低成本,基于计算方法的分子性质预测虚拟筛选越来越成为现代药物研发的核心手段。

其中,QSAR(定量构效关系,Quantitative Structure-Activity Relationship)建模是最为成熟的预测范式之一。它通过建立分子结构特征与生物活性之间的数学关系,在分子合成之前就预测其 ADMET(吸收、分布、代谢、排泄与毒性)等关键性质,从而大幅缩短研发周期。

数据质量:被忽视的致命短板

然而,QSAR 模型的预测能力在根本上受制于训练数据的质量。研究表明,即便是广泛使用的公开分子数据库,也可能有高达 10% 的条目存在错误——包括无效的 SMILES 结构、混合物、无机化合物、有机金属化合物,以及活性标签冲突的重复条目。这些"数据杂质"会导致:

  • • 模型偏差与预测性能下降
  • • 交叉验证中的数据泄漏问题
  • • 特征重要性计算偏斜
  • • 结果难以复现

💡 关键洞见:低质量的数据输入会产生"沉默错误"(silent errors)——模型看似正常运行,却在实际应用中给出错误预测,而研究者往往难以察觉根源所在。

现有工具的三大痛点

目前领域内最权威的清洗规范是 Fourches 等人(2010)提出的四步协议(去除问题结构 → 脱盐与中性化 → 化学类型规范化 → 去重),该论文被引超过 1000 次,已成为 QSAR 数据清洗的行业标准。然而,该协议长期停留在概念层面,从未有过系统性的代码实现。

现有工具(如 RDKit、CDK)虽然功能强大,但存在明显缺陷:

问题

具体表现

缺乏集成

各工具功能分散,无法形成端到端流水线

门槛偏高

需要用户手动编写代码串联各步骤

追踪能力弱

缺乏细粒度的拒绝记录与跨数据集重复检测

可扩展性差

难以高效处理现代大规模数据集

正是这一"实现鸿沟",催生了 MEHC-Curation 的诞生。


🔧 方法:三阶段清洗流水线

MEHC-Curation 以 RDKit 为底层引擎,接受 pandas.DataFrame 格式的 SMILES 数据集作为输入,经过三个顺序阶段的处理后,输出一个高质量的清洗后数据集。每个阶段结束后都会自动执行去重操作,确保数据一致性。

代码语言:javascript
复制
SMILES 数据集 (pandas.DataFrame)
         │
         ▼
┌─────────────────────────────────────────────┐
│           Stage 1: Validation(验证)         │
│  结构验证 → 去混合物 → 去无机物 → 去有机金属 → 去重  │
└─────────────────────────────────────────────┘
         │
         ▼
┌─────────────────────────────────────────────┐
│           Stage 2: Cleaning(清洗)           │
│         脱盐处理 → 电荷中性化 → 去重            │
└─────────────────────────────────────────────┘
         │
         ▼
┌─────────────────────────────────────────────┐
│         Stage 3: Normalization(规范化)       │
│       去立体异构体 → 互变异构标准化 → 去重         │
└─────────────────────────────────────────────┘
         │
         ▼
  高质量 SMILES 数据集 (pandas.DataFrame)

Stage 1:验证(Validation)

调用 ValidationStage 模块,依次执行四项过滤:

① 结构合法性验证(validate_smi() 检查每条 SMILES 字符串的语法正确性与化学合理性,剔除无效结构(如 O##(=O)C(=O)O)。

② 混合物去除(rm_mixture() 识别并去除由多个有机片段组成的混合物(SMILES 中含多个"."分隔片段的条目),保留化学上纯一的分子实体。

③ 无机化合物去除(rm_inorganic() 剔除不含碳骨架的无机化合物(如硫酸 OS(=O)(=O)O),这类分子通常无法用有机化学的分子描述符有效表征。

④ 有机金属化合物去除(rm_organometallic() 去除含金属元素(如 Pt、Fe、Cu 等)的有机金属化合物(如顺铂类似物 N[Pt](N)(Cl)Cl),因其描述符计算往往失效。

⚠️ 注意事项:若研究对象本身为金属配体药物(如抗癌铂类药物)或催化剂,建议关闭步骤③④。工具的模块化设计允许用户灵活跳过任意子步骤。


Stage 2:清洗(Cleaning)

调用 CleaningStage 模块,解决分子形式不统一的问题:

① 脱盐处理(cl_salt() 识别 SMILES 中的盐类成分(通常为较小的离子片段),保留最大有机片段作为目标分子。例如,磷酸钠盐 [Na+][O-]C(=O)P... 经处理后还原为中性磷酸骨架。

② 电荷中性化(neutralize() 消除分子上的形式电荷,因为带电状态会显著影响分子描述符的计算和 QSAR 模型的预测精度。工具提供两种可选算法

算法

来源

行为特点

"boyle"

Noel O'Boyle(2019)

尝试中性化每一个带电原子,即便结果导致整体净电荷不为零

"RDKit"

RDKit rdMolStandardize.Uncharger

若中性化会产生净电荷则不执行操作,更为保守

用户可根据研究目的选择适合的算法(neutralizing_method 参数)。详细的化学原理与适用场景分析见原文 Supporting Information Section S1。


Stage 3:规范化(Normalization)

调用 NormalizationStage 模块,将分子表示统一为标准形式:

① 去立体异构体(destereoisomerize() 将数据集中的所有立体异构体(包括手性中心和顺反异构)转换为去除立体化学注释的唯一标准表示。这一步对于防止立体异构体导致的重复条目、以及避免某些分子描述符软件对大体积立体异构体的处理失败至关重要。

💡 若研究关注手性对活性的影响(如手性药物),可禁用此步骤。

② 互变异构标准化(detautomerize() 将所有互变体(tautomers)规范化为唯一的标准表示(canonical tautomer),确保同一物质不会以不同互变体形式重复出现,从而提升重复检测的准确性和描述符计算的一致性。

⚠️ 处理顺序的重要调整:原始 Fourches 协议建议先做互变异构标准化,再做去立体异构体。然而作者发现此顺序会在 RDKit 中引发算法错误。MEHC-Curation 将顺序调整为先去立体异构体,再做互变异构标准化,在保证数据质量的同时避免了处理错误。 若互变体对于研究目标(如代谢稳定性、特定结合模式)具有功能差异性,可禁用此步骤。详见 Supporting Information Section S2。


去重机制(Duplicate Removal)

deduplicate() 函数在每个阶段末尾强制执行,采用以下两条规则处理重复条目:

  • 若重复条目的活性标签不同:全部删除,避免引入相互矛盾的数据点(防止模型学习冲突信息)。
  • 若重复条目的活性标签相同:保留其中一条,删除其余冗余条目。

函数同时返回:(1) 清洗后的数据集;(2) 被删除条目的索引列表(完整可追溯);(3) 操作日志文件。

重复条目的危害不容小觑:它们会虚增交叉验证性能、制造训练集与测试集之间的数据泄漏、扭曲特征重要性,并导致模型对特定结构的过拟合。


⚙️ 使用指南

安装

代码语言:javascript
复制
# 方式一:PyPI 标准安装(推荐,仅需 RDKit 依赖)
pip install mehc-curation

# 方式二:从 GitHub 源码安装(获取最新开发版)
git clone https://github.com/biochem-data-sci/mehc-curation.git
cd mehc-curation
pip install -e .

输入格式

工具接受 pandas.DataFrame 作为唯一输入类型,可从 .csv.xls.xlsx.txt 文件读取。SMILES 列须位于第一列,并在输入前移除序号、名称等标识列,以确保去重基于纯结构信息。

Python API 调用

代码语言:javascript
复制
import pandas as pd
from mehc_curation.validation import ValidationStage
from mehc_curation.cleaning import CleaningStage
from mehc_curation.normalization import NormalizationStage
from mehc_curation.refinement import RefinementStage

# 加载数据
df = pd.read_csv("your_data.csv")

# 分步调用(适合需要逐阶段检查的场景)
validated_df = ValidationStage(df).complete_validation()
cleaned_df   = CleaningStage(validated_df).complete_cleaning()
normalized_df = NormalizationStage(cleaned_df).complete_normalization()

# 一键完整清洗(推荐)
refiner = RefinementStage(df)
refined_df = refiner.complete_refinement(
    output_dir="./output",   # 指定输出目录,自动保存 .csv
    get_report=True          # 生成详细的清洗报告
)

命令行接口(CLI)

代码语言:javascript
复制
# 仅执行验证阶段
python -m mehc_curation.validation -i input.csv -o output/ -c 5

# 仅执行清洗阶段
python -m mehc_curation.cleaning -i input.csv -o output/ -c 3

# 仅执行规范化阶段
python -m mehc_curation.normalization -i input.csv -o output/ -c 3

# 完整三阶段清洗 + 生成报告(推荐)
python -m mehc_curation.refinement -i input.csv -o output/ --get_report

CPU 并行控制

代码语言:javascript
复制
# 自动使用所有可用 CPU(默认,n_cpu=-1)
refiner.complete_refinement(n_cpu=-1)

# 指定使用 4 个 CPU 核心
refiner.complete_refinement(n_cpu=4)

# 单核运行(调试模式)
refiner.complete_refinement(n_cpu=1)

主要参数速查表

参数

默认值

说明

validate

True

是否在每阶段执行结构验证

neutralizing_method

"boyle"

中性化算法("boyle" 或 "RDKit")

param_deduplicate

True

是否执行去重

n_cpu

-1

并行 CPU 数(-1 为全部使用)

get_report

False

是否生成清洗报告

output_dir

None

输出目录路径

rm_mixtures

True

是否去除混合物

rm_inorganic

True

是否去除无机物

rm_organometallic

True

是否去除有机金属化合物

destereoisomerize

True

是否去立体异构体

detautomerize

True

是否进行互变异构标准化


📊 实验验证

基准测试数据集

作者在 15 个多样化基准数据集上进行了系统测试,涵盖分类任务(SIDER、ClinTox、BACE、BBBP、Tox21、ToxCast、HIV、MUV、PCBA)和回归任务(FreeSolv、ESOL、Lipophilicity、QM8、QM9)。

主要结论

  1. 1. 数据清洗普遍提升模型可靠性:在测试的数据集中,经过 MEHC-Curation 处理后训练的模型展现出更高的性能稳定性,并有效避免了"沉默错误"(模型训练时无报错,但预测结果存在系统性偏差)。
  2. 2. 性能提升幅度与初始数据质量负相关:原始数据质量越差,清洗带来的收益越显著——这也说明数据清洗对于来源复杂的公开数据集尤为重要。
  3. 3. 计算效率出色:并行处理机制使工具在大规模数据集上展现出优秀的可扩展性,适合处理包含数十万至百万级分子的现代大型数据集。
  4. 4. 消融实验验证了各步骤的必要性:针对每个清洗子步骤的消融分析(FreeSolv、ESOL、Lipophilicity 等数据集)表明,各阶段对最终数据质量均有独立贡献,省略任一步骤都可能引入特定类型的数据质量问题。

💡 关键设计决策解读

为何调整 Fourches 协议的步骤顺序?

原始 Fourches 协议规定先做互变异构标准化(detautomerization),再做去立体异构体(destereoisomerization)。然而,在 RDKit 实现中,这个顺序会导致某些 SMILES 的处理错误。MEHC-Curation 将顺序调整为先去立体异构体,再标准化互变体,经验证可有效避免此类错误,同时维持了规范化目标的完整性。

为何提供两种中性化算法?

这反映了真实的化学复杂性:O'Boyle 方法激进(全面中性化,可能产生净电荷分子),RDKit Uncharger 保守(避免产生净电荷)。不同研究目标(如针对离子通道的研究 vs 中性小分子筛选)对电荷处理有不同需求,灵活选择比强制统一更符合科学实践。

去重的双规则设计有何深意?

标签不同的重复条目会产生"矛盾训练信号",强行保留任一条都会引入噪声,因此直接删除是最安全的选择。而标签相同的重复条目则可安全去冗,避免模型对特定结构的记忆偏向(memorization bias)。这一设计体现了工具对机器学习统计原理的深刻理解。


📝 适用场景与注意事项

推荐使用场景

  • • ✅ QSAR/QSPR 建模前的数据预处理
  • • ✅ 虚拟筛选化合物库的质量控制
  • • ✅ 整合来自多个公开数据库的分子数据集时的去重与规范化
  • • ✅ 需要可重复、可审计的数据清洗流程的研究

需要注意的边界条件

  • • ⚠️ 金属药物研究:若研究铂类抗癌药、金属有机框架等,应禁用无机物/有机金属移除步骤
  • • ⚠️ 手性活性研究:若手性对活性有决定性影响,应禁用去立体异构体步骤
  • • ⚠️ 互变体敏感端点:研究代谢稳定性或特定结合模式时,互变体可能包含关键结构信息,应禁用互变异构标准化
  • • ⚠️ 输入格式要求:务必在输入前移除非 SMILES 列(如 ID、名称),否则会影响去重结果

写在最后

MEHC-Curation 的意义并不仅仅在于提供了一个"方便用"的工具。它做到了三件真正重要的事:

第一,消除了领域内长期存在的"最后一公里"鸿沟。 Fourches 协议被引超过千次,说明领域共识早已形成——但没有代码,意味着每个研究组都在重复造轮子,质量参差不齐。MEHC-Curation 的出现,让"高质量数据清洗"从概念变为可复用的基础设施。

第二,降低了严谨科研的准入门槛。 实验化学家、生物学家不应因为缺乏编程能力而不得不使用未经清洗的数据。工具的易用性设计,是对整个科研生态的正向贡献。

第三,内建了可追溯性。 科学的可重复性危机部分源于数据处理过程的黑盒化。完整的日志记录、拒绝追踪和报告生成,让数据清洗过程本身变得透明、可审计。

对于任何从事计算药物学、化学信息学或相关 AI for Science 方向的研究者而言,这篇文章及其对应工具都值得认真关注。


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DrugIntel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 📌 一句话总结
  • 🧪 背景与动机
    • 药物发现的数据困境
    • 数据质量:被忽视的致命短板
    • 现有工具的三大痛点
  • 🔧 方法:三阶段清洗流水线
    • Stage 1:验证(Validation)
    • Stage 2:清洗(Cleaning)
    • Stage 3:规范化(Normalization)
    • 去重机制(Duplicate Removal)
  • ⚙️ 使用指南
    • 安装
    • 输入格式
    • Python API 调用
    • 命令行接口(CLI)
    • CPU 并行控制
    • 主要参数速查表
  • 📊 实验验证
    • 基准测试数据集
    • 主要结论
  • 💡 关键设计决策解读
    • 为何调整 Fourches 协议的步骤顺序?
    • 为何提供两种中性化算法?
    • 去重的双规则设计有何深意?
  • 📝 适用场景与注意事项
    • 推荐使用场景
    • 需要注意的边界条件
  • 写在最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档