

文献来源: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 数据集作为输入,经过三个顺序阶段的处理后,输出一个高质量的清洗后数据集。每个阶段结束后都会自动执行去重操作,确保数据一致性。
SMILES 数据集 (pandas.DataFrame)
│
▼
┌─────────────────────────────────────────────┐
│ Stage 1: Validation(验证) │
│ 结构验证 → 去混合物 → 去无机物 → 去有机金属 → 去重 │
└─────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ Stage 2: Cleaning(清洗) │
│ 脱盐处理 → 电荷中性化 → 去重 │
└─────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ Stage 3: Normalization(规范化) │
│ 去立体异构体 → 互变异构标准化 → 去重 │
└─────────────────────────────────────────────┘
│
▼
高质量 SMILES 数据集 (pandas.DataFrame)
调用 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),因其描述符计算往往失效。
⚠️ 注意事项:若研究对象本身为金属配体药物(如抗癌铂类药物)或催化剂,建议关闭步骤③④。工具的模块化设计允许用户灵活跳过任意子步骤。
调用 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。
调用 NormalizationStage 模块,将分子表示统一为标准形式:

① 去立体异构体(destereoisomerize())
将数据集中的所有立体异构体(包括手性中心和顺反异构)转换为去除立体化学注释的唯一标准表示。这一步对于防止立体异构体导致的重复条目、以及避免某些分子描述符软件对大体积立体异构体的处理失败至关重要。
💡 若研究关注手性对活性的影响(如手性药物),可禁用此步骤。
② 互变异构标准化(detautomerize())
将所有互变体(tautomers)规范化为唯一的标准表示(canonical tautomer),确保同一物质不会以不同互变体形式重复出现,从而提升重复检测的准确性和描述符计算的一致性。
⚠️ 处理顺序的重要调整:原始 Fourches 协议建议先做互变异构标准化,再做去立体异构体。然而作者发现此顺序会在 RDKit 中引发算法错误。MEHC-Curation 将顺序调整为先去立体异构体,再做互变异构标准化,在保证数据质量的同时避免了处理错误。 若互变体对于研究目标(如代谢稳定性、特定结合模式)具有功能差异性,可禁用此步骤。详见 Supporting Information Section S2。
deduplicate() 函数在每个阶段末尾强制执行,采用以下两条规则处理重复条目:
函数同时返回:(1) 清洗后的数据集;(2) 被删除条目的索引列表(完整可追溯);(3) 操作日志文件。
重复条目的危害不容小觑:它们会虚增交叉验证性能、制造训练集与测试集之间的数据泄漏、扭曲特征重要性,并导致模型对特定结构的过拟合。
# 方式一: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 列须位于第一列,并在输入前移除序号、名称等标识列,以确保去重基于纯结构信息。
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 # 生成详细的清洗报告
)
# 仅执行验证阶段
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(默认,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)。
原始 Fourches 协议规定先做互变异构标准化(detautomerization),再做去立体异构体(destereoisomerization)。然而,在 RDKit 实现中,这个顺序会导致某些 SMILES 的处理错误。MEHC-Curation 将顺序调整为先去立体异构体,再标准化互变体,经验证可有效避免此类错误,同时维持了规范化目标的完整性。
这反映了真实的化学复杂性:O'Boyle 方法激进(全面中性化,可能产生净电荷分子),RDKit Uncharger 保守(避免产生净电荷)。不同研究目标(如针对离子通道的研究 vs 中性小分子筛选)对电荷处理有不同需求,灵活选择比强制统一更符合科学实践。
标签不同的重复条目会产生"矛盾训练信号",强行保留任一条都会引入噪声,因此直接删除是最安全的选择。而标签相同的重复条目则可安全去冗,避免模型对特定结构的记忆偏向(memorization bias)。这一设计体现了工具对机器学习统计原理的深刻理解。
MEHC-Curation 的意义并不仅仅在于提供了一个"方便用"的工具。它做到了三件真正重要的事:
第一,消除了领域内长期存在的"最后一公里"鸿沟。 Fourches 协议被引超过千次,说明领域共识早已形成——但没有代码,意味着每个研究组都在重复造轮子,质量参差不齐。MEHC-Curation 的出现,让"高质量数据清洗"从概念变为可复用的基础设施。
第二,降低了严谨科研的准入门槛。 实验化学家、生物学家不应因为缺乏编程能力而不得不使用未经清洗的数据。工具的易用性设计,是对整个科研生态的正向贡献。
第三,内建了可追溯性。 科学的可重复性危机部分源于数据处理过程的黑盒化。完整的日志记录、拒绝追踪和报告生成,让数据清洗过程本身变得透明、可审计。
对于任何从事计算药物学、化学信息学或相关 AI for Science 方向的研究者而言,这篇文章及其对应工具都值得认真关注。