☰
espsim 本地部署实测: 给生物电子等排体一个静电势相似度打分
2026/10/4 18:38:28 网站建设 项目流程

本文收录于专栏<CADD 中的机器学习模型>—— 专栏覆盖机器学习打分函数、描述符与相似度方法在药物设计中的落地部署,点击订阅可跟踪后续更新。

你做骨架跃迁或等排体替换时,2D 指纹经常"结构对了分数反而低",对接打分又说不清静电互补。这篇把开源库 espsim 从检索、本地部署到官方测试脚本全流程跑通,附 4 对经典等排体加自对照的实测分数表、Carbo/Tanimoto/MC 积分参数对比,以及 pkg_resources 崩溃等 5 条实测踩坑。你读完可直接照抄命令,给自己手里的类似物系列批量打形状加静电势双相似度分,让假相似分子现形。

关键字:espsim、静电势相似度、ESP、生物电子等排体、骨架跃迁、RDKit、Carbo 指数、虚拟筛选

目录

  • §1. 场景:什么时候你需要 ESP 相似度
  • §2. 原理:三 Gaussian 展开 + Carbo 指数
  • §3. 本地部署(Ubuntu,纯 CPU)
  • §4. 安装测试:官方三个脚本
  • §5. 实战:4 对经典等排体打分
  • §6. API 参数与 5 条实测踩坑
  • §7. 局限与展望
  • §8. 结语

相关教程与核心文献

资源链接与本文关系
GitHub 仓库 hesther/espsimgithub.com/hesther/espsim本文部署与测试的出处(实测 239 star / MIT / 最近更新 2025-08)
官方 README 安装与用法README.md安装命令、API 语义、目标值 0.85 的出处
espsim 论文:Bolcato G, Heid E, Boström J.JCIM62(6):1388-1398, 202210.1021/acs.jcim.1c01535工具本身的出处,含 DeepFMPO v3D 骨架跃迁基准
Good AC 等,Gaussian 快速分子相似度,JCICS32:188-191, 199210.1021/ci00007a002三 Gaussian 拟合库仑势方法的原始文献
Carbo R 等,LCAO–MO 相似度度量,Int. J. Quantum Chem.32:517-545, 198710.1002/qua.560320412Carbo 相似度指数的原始文献

§1. 场景:什么时候你需要 ESP 相似度

先导化合物优化走到骨架跃迁或等排体替换时,最常遇到的困境是:两个分子 2D 结构差很远,但药效团和静电谱几乎一样(这正是替换成功的前提);或者反过来,2D 指纹高度相似但关键位点的静电分布已经变了。2D Tanimoto 对这两类情况都无能为力——它根本不看三维空间里的电子分布。

ESP(静电势)相似度就是为这个场景设计的打分:它把两个分子按共同骨架叠合后,比较周围空间静电势场的重叠程度。典型用途:

  • 等排体验证:COOH→四氮唑、酰胺→三唑、磺酰胺→磺酰脲,替换后 ESP 谱是否保持;
  • 骨架跃迁打分:生成模型或你自己的设计给出大量候选,用 shape + ESP 双分数快速过滤;
  • 虚拟筛选精排:对接打分排在 shape/ESP 相似度之后做第二道过滤器;
  • 老药新用检索:以已知活性配体为参照,比较库内分子的三维静电谱。

商业工具里这套逻辑的代表是 OpenEye 的 ROCS/EON;espsim 是 MIT Esther Heid 组开源的轻量替代——纯 Python、RDKit 生态、几秒一个分子,适合批量前处理和教学复现。

§2. 原理:三 Gaussian 展开 + Carbo 指数

一句话:把静电势的 1/r 项用三个 Gaussian 函数拟合展开,两个分子 ESP 场的重叠积分就有了解析解,再归一化成相似度指数。

具体分两步(对应上面两篇原始文献):

  1. ESP 重叠积分:每个原子视为点电荷,库仑势 1/r 用三组 Gaussian 线性组合逼近(Good 1992 的经典做法,也是 shape-only 打分 ROCS 的数学基础)。两个分子 A、B 的 ESP 乘积在全空间的积分就变成一堆双中心 Gaussian 积分的求和——全是解析式,不用数值格点,速度极快。
  2. 归一化成指数:Carbo 指数 = ∫VA·VB / √(∫VA²·∫VB²),范围 [-1, 1];Tanimoto 变体 = ∫VA·VB / (∫VA²+∫VB²−∫VA·VB),对静电差异惩罚更重。分子完全相同 = 1。

形状分数直接调 RDKit 的ShapeTanimotoDist取 1−d。整个过程在消费级 CPU 上毫秒级完成,不需要 GPU。

§3. 本地部署(Ubuntu,纯 CPU)

仓库自带的environment.yml把 psi4(QM 电荷)、resp、chemprop-atom-bond(ML 电荷)、pytorch 全列进去了,全套 conda solve 又重又慢。核心 ESP + shape 打分只需要 rdkit/numpy/scipy,QM/ML 电荷是可选增强,先跑通再按需补。

# 1. 克隆仓库 cd ~/Desktop/M3 git clone --depth 1 https://github.com/hesther/espsim cd espsim
#2. 独立 conda 环境(Python 3.10) conda create -n espsim python=3.10 -y conda install -n espsim -y -c conda-forge rdkit "numpy<2" scipy scikit-learn tqdm

说明:环境里的 rdkit 由 conda-forge 提供;如果 conda solve 卡住,
拆开装或用 pip 补:pip install "numpy<2" scipy scikit-learn tqdm

#3. 源码安装 espsim 本体 conda run -n espsim pip install -e .
#4. 关键一步:压 setuptools(见 §6 踩坑 1) conda run -n espsim pip install "setuptools<81"

装完的版本清单(实测):Python 3.10 / rdkit 2026.03.5 / numpy 1.26.4 / scipy 1.15.3 / espsim 0.0.1 / setuptools 80.10.2。

Windows 用户:rdkit 走conda install -c conda-forge rdkit同样可用,其余命令不变;本文所有测试在 Ubuntu 22.04 完成。

§4. 安装测试:官方三个脚本

仓库scripts/下自带三个测试脚本,装完先跑它们确认环境健康:

cd ~/Desktop/M3/espsim python scripts/test_esp_function.py # ESP 相似度主测试 python scripts/test_imports.py # 导入完整性 python scripts/test_embedalignscore.py # 嵌入+叠合+打分全链路

实测结果(Ubuntu 22.04,纯 CPU):

脚本实测输出判定
test_esp_function.pymol / mol2 / sdf 三种格式读入全部0.85与 README 声明的 target: 0.85 精确一致
test_imports.pyTest passed, imports work fine.通过
test_embedalignscore.py8 个苹果酸类似物 shape/ESP 打分表正常输出(如 CCC(C(=O)O)O → 0.95 / 0.77)通过

test_esp_function.py的 0.85 是最好的环境健康指标——它验证的不只是 import,而是 Gaussian 积分、电荷读取、叠合全链路的数值正确性。

§5. 实战:4 对经典等排体打分

环境通过后,用真实等排体对验证打分行为。以苯甲酸为参照,测 4 个替换方向 + 自对照:

import numpy as np from rdkit import Chem from rdkit.Chem import AllChem from espsim import EmbedAlignScore def prep(smi): m = Chem.AddHs(Chem.MolFromSmiles(smi)) # 必须加氢! AllChem.EmbedMultipleConfs(m, numConfs=10, randomSeed=42) return m ref = prep("O=C(O)c1ccccc1") # 苯甲酸 prb = prep("c1ccc(cc1)c2nnn[nH]2") # 5-苯基四氮唑 shape, esp = EmbedAlignScore(prb, ref) # 返回的是 list! print(f"shape={max(shape):.3f} esp={max(esp):.3f}")

实测分数表(Gasteiger 电荷,中性形式,10 构象取最优):

对比组shapeESP (carbo)
苯甲酸 vs 5-苯基四氮唑(COOH→四氮唑)0.8590.496
苯甲酸 vs 烟酸(间位 CH→N)0.9870.782
苯甲酸 vs 硝基苯(COOH→NO₂,弱等排)0.9880.544
苯甲酸 vs 阿司匹林(酰化 + 邻位取代)0.7050.421
苯甲酸 vs 自身(sanity check)1.0001.000

三个行为值得注意:

  • shape 和 ESP 明显解耦:硝基苯形状 0.988 几乎完美重叠,ESP 却只有 0.544——这正是 2D/shape-only 打分看不见、ESP 打分能抓住的差异;
  • 自对照 1.000说明叠合和积分管线无系统偏差;
  • 四氮唑的 ESP 分数偏低是电荷模型的锅,不是方法失效:四氮唑作 COOH 等排体的关键在去质子化态的负电分布,而 Gasteiger 在中性形式上算电荷(见 §7)。

同一对分子还能切换积分方式和指标(已叠合构象直接调GetEspSim):

配置实测值说明
metric="carbo"(默认,gauss 积分)0.519解析积分,毫秒级
metric="tanimoto"0.348对静电差异惩罚更重
integrate="mc", nMC=50.579Monte Carlo 数值积分,可交叉验证
renormalize=True0.759重标到 [0,1],跨批次比较友好

§6. API 参数与 5 条实测踩坑

GetEspSim的完整签名(源码实测):GetEspSim(prbMol, refMol, prbCid, refCid, prbCharge, refCharge, metric, integrate, partialCharges, renormalize, customrange, marginMC, nMC, basisPsi4, methodPsi4, gridPsi4, ...)。想用 QM 电荷时传partialCharges="psi4"(需另装 psi4),或用chemprop-atom-bond的 ML 电荷模型(需 pytorch)。

踩坑清单(全部实测复现):

#症状根因修复
1ModuleNotFoundError: No module named 'pkg_resources'espsim 0.0.1 的helpers.py用了被 setuptools 81 移除的旧 APIpip install "setuptools<81"(实测装 80.10.2 通过)
2分子没加氢,结果异常 + RDKit 警告Gasteiger 电荷和 shape 都依赖显式氢Chem.AddHs(mol)必须在嵌入前调用
3TypeError: unsupported format string passed to list.__format__EmbedAlignScore返回的是构象列表不是标量max(shape)/max(esp)取最优构象
4GetEspSim() got unexpected keyword 'prbConfId'构象参数名是prbCid不是prbConfId;且GetShapeSim没有metric参数(shape 固定用 RDKit Tanimoto 距离)按源码签名传参
5conda 按environment.yml全家桶 solve 超时/卡死psi4 + pytorch + resp 通道混合求解空间巨大只装 rdkit/numpy/scipy 核心件,QM 电荷后补

§7. 局限与展望

  • Gasteiger 电荷是默认天花板:对中性小分子 SAR 排序够用,但带电物种(羧酸/四氮唑的生理态就是阴离子)的 ESP 谱会系统性失真。要过硬结论需换psi4(RESP 级 QM 电荷)或 chemprop-atom-bond 的 ML 电荷——这也是作者组自己论文里 ML 电荷模型的动机。带电分子务必先用小测试集校验电荷敏感性。
  • 单构象叠合假设:EmbedAlignScore用 RDKit 嵌入 + 对齐,柔性分子需要多构象取最优(本文 10 构象),高柔性大分子的构象采样会成为瓶颈。
  • 版本停滞风险:0.0.1 是 PyPI 唯一版本,仓库最近一次推送 2025-08,issue 只有 3 个 open——小而稳,但pkg_resources这类依赖腐烂要自己扛(好在修复只要一行)。

结语

espsim 的定位很清楚:ROCS/EON 的开源轻量平替,一条 pip 命令就能给你的等排体和骨架跃迁候选加一道静电维度过滤。核心管线三行代码出分数,官方测试 0.85 精确复现说明数值可信。下一步建议:把你手头类似物系列的参照配体挑出来,先跑EmbedAlignScore批量打分,发现 shape 高 ESP 低的"假相似"分子时再上 psi4/ML 电荷复核——这个两段式流程能覆盖大多数先导优化的静电评估需求。


参考来源

  1. hesther/espsim 仓库:github.com/hesther/espsim(实测 2026-09:239 star / 53 fork / MIT / espsim 0.0.1)
  2. espsim 论文:Bolcato G, Heid E, Boström J.On the Value of Using 3D Shape and Electrostatic Similarities in Deep Generative Methods. JCIM 62(6):1388-1398, 2022. DOI
  3. Good AC 等 Gaussian 相似度方法:JCICS32:188-191, 1992. DOI
  4. Carbo 相似度指数:Carbo R, Arnau M, Leyda L.Int. J. Quantum Chem.32:517-545, 1987. DOI
  5. 本文全部实测命令与输出:随文资产包espsim-资产包.zip(demo 脚本 + 实测输出记录,路径已脱敏)

更多专栏:

蛋白 / 多肽分子模拟 / 动力学分子对接 / CADD / 工具其他
开源蛋白结构推理预测分子模拟基础UCSF DOCK系列agent智能体系列
开源蛋白生成方法实践分子动力学模拟-AmberrDock系列化学大模型介绍(2025)
蛋白药物设计-原理与案例剖析分子动力学模拟-GromacsLeDock系列我胡师兄说药
开源多肽设计模型和方法实践結合自由能CADD中的机器学习模型siRNA药物设计模型
开源多肽性质预测高效计算基本配置小分子药物设计-原理与案例剖析ASO药物设计模型
多肽药物设计-原理与案例剖析作用于DNA/RNA的药物设计实践开源小分子生成和设计实践开源药代动力学模拟软件

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询