Mendelevium
Drug Design
Field Knowledge
Biology
Physics
Machine Learning & AI
Active Learning
Boltz-2
Interpretability
Mol2Image
Representations
Molecular Dynamics
Free Energy Calculation
Modeling Tools
QM
Nano Polymers
Software & Tools
Techniques
about
Home
Contact
Copyright © 2025 Xufan Gao | Academic Research Blog
Home
> Machine Learning & AI
A Bunch of Biophysics is Loading ...
Machine Learning & AI
Optimized Molecular Descriptor Sets for ADMET Prediction: A Literature-based Meta-analysis and Design Approach
针对ADMET预测的分子描述符优化集:一项基于文献的元分析与设计方案 I. 引言:策划描述符集的理论依据 1.1 QSAR中高维度的挑战 在现代计算药物发现中,定量构效关系(Quantitative Structure-Activity Relationship, QSAR)和定量构性关系(Quantitative Structure-Property Relationship, QSPR)模型是评估候选药物吸收(Absorption)、分布(Distribution)、代谢(Metabolism)、排泄(Excretion)和毒性(Toxicity),即ADMET性质的核心工具 1。RDKit、PaDEL-Descriptor、Dragon和MOE等先进的化学信息学软件的出现,使得从单一分子结构中生成成百上千个分子描述符变得轻而易举 3。这些描述符涵盖了从简单的物理化学性质(如分子量、脂溶性)到复杂的拓扑和三维结构信息。 然而,这种特征生成能力的极大提升也带来了一个严峻的统计学挑战,即“维度灾难” 5。在典型的药物发现项目中,用于建模的数据集规模通常是中小型(几百到几千个化合物),而描述符的数量( p)远远超过化合物的数量(n),即所谓的“p≫n”问题。在这种高维场景下,直接使用全部描述符进行模型构建会引发一系列严重问题: 模型过拟合(Overfitting):模型会学习到训练数据中的随机噪声而非真实的构效关系,导致其在预测新分子时的泛化能力极差。 特征冗余与共线性(Redundancy and Collinearity):许多描述符之间存在高度相关性。例如,不同的方法计算出的分子体积或表面积描述符往往高度共线。这不仅增加了计算负担,还会使模型变得不稳定,难以解释 7。 计算成本高昂:训练一个包含数千个特征的模型需要大量的计算资源和时间,这在需要快速迭代的高通量虚拟筛选中是不可接受的。 可解释性降低:一个包含数千个变量的模型几乎不可能被人类理解,使得从模型中提取化学直觉和指导分子优化的过程变得异常困难。 大量研究表明,简单地将所有可用描述符“暴力”地输入机器学习算法,不仅效率低下,而且其预测性能往往不如经过精心特征选择后的简约模型 5。因此,从庞大的原始描述符池中筛选出一个信息量丰富、非冗余且具有普适性的子集,是构建稳健、高效且可解释的ADMET预测模型的关键前提。 1.2 “黄金描述符集”的价值主张 为了应对上述挑战,本报告旨在通过对已发表的成功研究案例进行系统性的元分析,设计出一系列经过精心策划的、非冗余的、信息量丰富的“黄金描述符集”。这些预定义的描述符集具有巨大的科学价值和实践意义: 标准化与可复现性:为ADMET建模提供一个标准化的、经过验证的起点,减少了研究人员在特征工程上的主观性和随意性,从而提高了研究的可复现性 2。 效率提升:通过预先筛选掉大量冗余和不相关的特征,极大地降低了模型训练的计算成本和时间,使研究人员能够更快速地进行模型迭代和评估。 性能与稳健性:这些集合基于大量成功案例的经验总结,旨在捕获对ADMET性质最关键的分子信息,从而在保证模型性能的同时,避免因维度过高而导致的过拟合风险,提升模型的稳健性。 知识提炼:本研究的核心目标是将过去5-10年间,发表在顶级期刊上的众多QSAR研究中蕴含的集体智慧,提炼并固化为一套具体、可操作的实践指南和工具 9。 本报告将首先系统性地回顾和整理近期ADMET建模研究中最终使用的描述符列表,然后通过元分析揭示其中的规律和模式,最后基于这些洞察,提出三套分别面向不同应用场景的、经过优化的分子描述符预设集合。 II. 当代ADMET建模中特征选择后描述符的系统性回顾 2.1 文献调研方法 为了构建一个坚实的证据基础,本次调研遵循了严格的文献筛选标准。调研范围限定在过去5-10年内,发表于主流化学信息学和药物化学期刊上的研究论文,包括但不限于《Journal of Chemical Information and Modeling》、《Journal of Medicinal Chemistry》、《Molecular Pharmaceutics》和《Bioinformatics》。筛选的论文必须是使用分子描述符构建用于ADMET性质预测(如溶解度、渗透性、血浆蛋白结合率、hERG抑制、细胞毒性等)的回归或分类模型,并且明确报告了经过特征选择后,最终用于构建模型的描述符列表 1。本研究只关注分子描述符,排除了分子指纹等其他特征表示方法。 2.2 证据基础:已发表ADMET QSAR模型中的最终描述符集 以下表格(表1)系统性地整理了从代表性研究中提取的关键信息。该表格是后续元分析的数据基础,它将零散发表的研究成果整合为一个统一的、可供分析的数据集。每一行代表一个已发表的、成功的QSAR模型,详细列出了其研究目标、数据规模、所用软件以及最核心的——最终被选入模型的描述符。 表1:已发表ADMET QSAR模型中使用的最终描述符集(代表性研究摘要) 参考文献 (作者, 年份, 期刊, DOI) 机器学习任务 数据集规模 描述符计算软件 最终使用的描述符列表 (经过特征选择后) Delaney, J.S. (2004), J. Chem. Inf. Comput. Sci., doi:10.1021/ci034243x 水溶性 (logS) 回归预测 ~2,874 In-house/Daylight clogP (计算的辛醇/水分配系数), MWT (分子量), RB (可旋转键数), AP (芳香原子比例) 12 Ghamali, M., et al. (2012), Mol. Divers., doi:10.1007/s11030-012-9416-8 血浆蛋白结合率 (%PPB) 回归预测 ~662 MOE, ACD/logD LogP, Q_VSA_NEG (总负范德华表面积), FiB7.4 (pH 7.4下碱性基团电离分数), GCUT_SLOGP_3, GCUT_PEOE_3 (电荷相关的GCUT描述符), FU7.4 (pH 7.4下未电离分数), Q_VSA_PPOS (总正极性范德华表面积), VAdjEq (顶点邻接信息) 13 Poongavanam, V., et al. (2022), Pharmaceutics, doi:10.3390/pharmaceutics14102046 Caco-2 细胞渗透性 (logPapp) 回归预测 ~4,900 RDKit (in KNIME) slogP (辛醇/水分配系数), TPSA (拓扑极性表面积), SMR (分子摩尔折射率), HallKierAlpha (Hall-Kier alpha值), Kappa3 (Kappa形状指数3) 14 Delre, P., et al. (2022), Front. Pharmacol., doi:10.3389/fphar.2022.951083 hERG 通道抑制 (分类) ~7,963 Dragon 7.0 由VSURF方法筛选出的79-86个描述符。类别包括:nCIC (环数), GATS1p (Geary自相关-滞后1/加权原子极化率), MATS2m (Moran自相关-滞后2/加权原子质量), Mor15v (3D-MoRSE-滞后15/加权原子范德华体积), HATS2u (GETAWAY-滞后2/未加权) 等。(注:完整列表见原文补充材料) 15 Arab, I., et al. (2023), J. Chem. Inf. Model., doi:10.1021/acs.jcim.3c01301 hERG 通道抑制 (分类) >12,000 RDKit/Custom 用于基准测试的大量描述符,最终模型常依赖组合。关键物理化学描述符被强调:MolWt, MolLogP, TPSA, NumHDonors, NumHAcceptors, NumRotatableBonds, NumAromaticRings, FractionCSP3 16 Ingle, B. L., et al. (2016), J. Chem. Inf. Model. (as cited in 18) 血浆蛋白结合率 (fu) 回归预测 ~1,045 未明确指定 强调了疏水性指数(如 LogP)作为最重要的特征 18。另一项研究分析了该模型,指出阳性极性表面积、碱性官能团数量和脂溶性是关键描述符 19。 Wang, J., et al. (2020), RSC Adv. (as cited in 20) Caco-2 细胞渗透性 (logPapp) 回归预测 ~1,000+ PaDEL-Descriptor 经过MDI和HQPSO选择后,强调了“H E-state”和氢键相关描述符的重要性 20。 Low, Y. S., et al. (2011), Chem. Res. Toxicol. (as cited in 21) 药物性肝损伤 (DILI) 分类 ~127 未明确指定 使用了化学描述符和毒理基因组学数据。仅使用化学描述符的模型外部验证正确率为61% 21。 2.3 关键研究的叙述性分析 表1中的数据揭示了ADMET建模领域从简单到复杂的发展轨迹和核心思想。 Delaney在2004年提出的ESOL模型是一个里程碑式的研究 12。尽管年代稍早,但其影响深远,至今仍被广泛引用和用作基准 22。该模型的卓越之处在于其极致的简约和强大的可解释性。仅使用四个基本且易于计算的描述符( clogP, MWT, RB, AP),通过简单的多元线性回归,就对数千种药物分子的水溶性给出了相当准确的预测。这四个描述符分别代表了分子的脂溶性、大小、柔性和芳香性,这四个方面构成了理解分子在水相中行为的基础。ESOL的成功证明,对于某些ADMET性质,抓住最核心的物理化学驱动力比堆砌大量复杂的描述符更为有效。 相比之下,对更复杂的生物过程的建模则需要更精细的描述符。例如,Poongavanam等人(2022)在预测Caco-2细胞渗透性时,除了经典的slogP和TPSA外,还引入了分子形状描述符(HallKierAlpha, Kappa3)和分子摩尔折射率(SMR) 14。这反映了分子要穿过细胞膜,不仅与其极性和脂溶性有关,还与其整体的形状、大小和柔性密切相关,这些因素共同决定了分子能否有效地“挤”过磷脂双分子层 14。 对于血浆蛋白结合率(PPB)*的预测,Ghamali等人(2012)的研究则突显了*分子电离状态的重要性 13。他们的模型中包含了在生理pH 7.4下的电离分数( FiB7.4, FU7.4)和电荷相关的表面积描述符(Q_VSA_NEG, Q_VSA_PPOS)。这是因为药物在血液中与血浆蛋白(主要是白蛋白和α1-酸性糖蛋白)的结合,在很大程度上取决于药物在该pH下的电荷状态——酸性药物倾向于与白蛋白结合,而碱性药物则与α1-酸性糖蛋白结合 13。这一发现被多项后续研究证实,强调了在模拟体内过程时考虑生理环境(如pH)的必要性 19。 而对于hERG钾通道抑制这一关键的心脏毒性终点,情况则更为复杂。hERG通道以其巨大而“混杂”(promiscuous)的结合口袋而闻名,能够容纳多种化学结构差异巨大的药物分子 26。因此,简单的物理化学性质往往不足以捕捉导致结合的关键特征。Delre等人(2022)的研究体现了这一点,他们从数千个Dragon描述符中,使用复杂的特征选择方法(VSURF),最终筛选出多达79-86个描述符,涵盖了拓扑、几何、3D-MoRSE和GETAWAY等多种类别 15。这表明,要准确预测hERG抑制,需要一个更丰富、更多样化的特征空间来描述分子的形状、静电势分布和原子间复杂的空间关系。Arab等人(2023)的研究也支持这一观点,他们通过对多种特征表示(包括描述符)进行基准测试,发现虽然基础的物理化学描述符(如 MolLogP, MolWt等)仍然重要,但高性能模型往往需要更复杂的特征组合 16。 III. 元分析:提炼描述符选择的指导原则 在系统性地整理了文献数据之后,本节将进行深入的元分析,旨在从这些看似零散的信息中发现普适性规律、总结核心趋势,并为后续的描述符集设计提炼出可操作的洞察。 3.1 “核心”物理化学描述符集的存在性 通过对表1及相关文献中“最终使用的描述符列表”进行横向比较,一个非常清晰的模式浮现出来:无论研究的ADMET终点是什么(溶解度、渗透性、PPB或毒性),一个由少数几个基本物理化学描述符组成的集合几乎总是出现。这个发现强烈地支持了一个“核心描述符集”的存在,它捕获了分子在任何生物系统中最基本的行为特征。 这个核心集通常包括: 脂溶性描述符(Lipophilicity): 以logP(辛醇/水分配系数)及其各种计算变体(如MolLogP, slogP, clogP)为代表。logP是QSAR领域中最常用、最重要的描述符之一,它直接量化了分子在极性(水)和非极性(脂质)环境中的分配倾向。这一性质主导了药物的膜通透性、与疏水性蛋白口袋的结合以及水溶性 12。 分子尺寸描述符(Size): 最常见的代表是分子量(Molecular Weight, MolWt)。它虽然简单,却是衡量分子大小、体积和扩散速率的一个有效代理。分子大小直接影响其能否通过细胞间隙、跨膜转运以及是否符合药物结合口袋的空间限制 12。 极性与氢键能力描述符(Polarity & Hydrogen Bonding): 这一类通常由拓扑极性表面积(Topological Polar Surface Area, TPSA)、氢键供体数(Number of Hydrogen Bond Donors, NumHDonors)和氢键受体数(Number of Hydrogen Bond Acceptors, NumHAcceptors)共同表征。TPSA衡量了分子表面极性区域的总和,是预测渗透性的关键参数。HBD和HBA的数量则决定了分子与水以及生物大分子(如蛋白、核酸)形成氢键的能力,这对于溶解、结合和转运至关重要 14。 分子柔性描述符(Flexibility): 主要由可旋转键数(Number of Rotatable Bonds, NumRotatableBonds)来量化。它描述了分子的构象灵活性。高柔性会带来熵罚,可能不利于受体结合,但适度的柔性又是分子适应结合口袋构象所必需的 12。 这组描述符并非偶然出现。它们正是构成利平斯基“五规则”(Lipinski’s Rule of Five)等经典药物相似性(drug-likeness)规则的基石 14。这表明,这些描述符所代表的物理化学性质——脂溶性、大小、极性和柔性——是决定一个分子能否成为药物的四个最基本的、不可或缺的维度。因此,任何通用的ADMET预测模型都应将这个核心集作为其特征空间的基础。 3.2 任务导向的描述符选择模式:超越核心集 尽管核心描述符集具有普适性,但高精度的预测模型往往需要在核心集的基础上,增加针对特定ADMET终点的“任务特异性”描述符。这些描述符能够捕捉到特定生物过程背后独特的物理或化学机制。 溶解度(Solubility)与渗透性(Permeability): 这两个性质都与分子如何与水和脂质环境相互作用密切相关。因此,除了核心集之外,模型常常受益于能够更精细地描述分子形状和饱和度的描述符。 形状描述符:Poongavanam等人的研究表明,Kappa形状指数(如Kappa3)和HallKierAlpha的加入显著提升了Caco-2渗透性模型的性能 14。Kappa指数能够量化分子的线性度、支链化和环状程度,这些都影响分子在膜中的排列和通过效率。 饱和度描述符:sp3杂化碳原子分数(FractionCSP3)是近年来备受关注的一个描述符。高FractionCSP3值通常意味着分子具有更三维的、非平面的结构,这与更好的溶解度和更低的脱靶毒性相关 16。 极性表面积:TPSA是预测渗透性的黄金标准之一,因为它直接关联到分子穿过极性头部进入非极性核心时需要克服的脱溶剂化能垒 14。 血浆蛋白结合(Plasma Protein Binding, PPB): PPB预测模型的一个显著特点是对分子在生理pH下的电离状态高度敏感。 电离相关描述符:Ghamali等人的模型明确包含了FiB7.4(pH 7.4下的碱性电离分数)和FU7.4(未电离分数) 13。其他研究也反复强调,使用在生理pH(7.4)下计算的描述符,特别是那些反映分子电荷的描述符(如 charge_at_pH7_4),对于准确预测与带电的血浆蛋白(白蛋白、α1-酸性糖蛋白)的结合至关重要 19。这是因为静电相互作用是药物-蛋白结合的主要驱动力之一。 hERG抑制(hERG Inhibition): hERG预测的挑战在于其结合口袋的“混杂性”,能够适应多种化学骨架 26。 复杂的拓扑和电子描述符:为了捕捉这种复杂的相互作用,模型需要超越简单的物理化学性质。Delre等人的研究表明,3D-MoRSE描述符(如Mor15v,编码分子三维结构信息)、GETAWAY描述符(如HATS2u,编码分子几何与原子属性的空间分布)以及自相关描述符(如GATS1p, MATS2m,描述原子属性在拓扑距离上的分布)等高级描述符是必要的 15。这些描述符能够更全面地刻画分子的静电场、形状和化学环境,从而识别出导致hERG结合的微妙特征。 这些任务特异性模式表明,一个“一刀切”的描述符集是不存在的。一个优秀的设计方案必须是分层的,既要包含一个通用的核心,也要提供针对特定任务的扩展模块。 3.3 维度约减与冗余控制的主流策略 成功的QSAR研究几乎无一例外地都采用了严格的特征选择流程来处理数千个原始描述符带来的高维度和共线性问题 5。这一流程通常是一个多步骤的级联过程,而非单一方法。 第一步:预处理与过滤(Filtering) 这是特征选择的第一道防线,也是最普遍采用的步骤。其目标是快速剔除明显无用或高度冗余的描述符。常见的过滤策略包括 4: 移除低方差特征:剔除那些在整个数据集中值几乎不变(常数或准常数)的描述符,因为它们不包含区分不同分子的信息。 移除高相关性特征:计算所有描述符之间的皮尔逊相关系数矩阵,当一对描述符的相关性超过一个预设阈值(通常是$ R > 0.75$ 到 0.95)时,保留其中一个(通常是与目标变量相关性更高的那个),剔除另一个。这能有效解决共线性问题。 第二步:高级特征选择(Wrapper/Embedded Methods) 经过初步过滤后,研究人员会采用更复杂的、基于算法的策略来筛选出最终的模型特征。 基于随机森林(Random Forest-based)的方法:这是文献中最流行和最成功的方法之一。随机森林算法在构建过程中,可以自然地评估每个特征的重要性。常用的方法有: Gini重要性/平均精度下降:通过计算每个特征对模型决策纯度或准确性的贡献来对其进行排序 6。 VSURF(Variable Selection Using Random Forests):这是一个专门的R包,它通过一个三步过程(筛选、解释、预测)来识别与响应变量相关的特征,并剔除冗余信息。Delre等人在其hERG研究中成功应用了此方法 15。 递归特征消除(Recursive Feature Elimination, RFE):该方法首先用所有特征训练一个模型,然后迭代地移除最不重要的特征,并重新训练模型,直到达到预设的特征数量。Poongavanam等人的研究中提到了RFE的应用 14。 嵌入式方法(Embedded Methods):一些学习算法本身就包含了特征选择的功能。例如,Lasso回归(通过L1正则化将不重要特征的系数压缩至零)和梯度提升机(Gradient Boosting Machines)(如XGBoost)在构建模型的同时也在进行隐式的特征选择。 一个值得注意的细微之处是,一些研究指出,对于像随机森林和支持向量机(SVM)这样本身就很稳健的现代学习算法,外部的特征选择步骤可能不会显著提升模型的预测准确度 5。然而,这种观点需要结合具体情况来看。对于数据集较小、模型较简单(如多元线性回归)或模型可解释性至关重要的场景,特征选择是不可或缺的。特别是对于像hERG抑制或Tox21这类具有高度类别不平衡或复杂构效关系的挑战性任务,有效的特征选择被证明是获得高性能模型的关键 5。 综合来看,最佳实践是一个组合策略:先用简单的过滤器进行快速降维和去相关,再用强大的、基于算法的方法(如VSURF)进行最终的特征精选。 IV. 分层、非冗余描述符集的设计与原理 基于上述文献调研和元分析的深度洞察,本节将所有发现转化为具体、可操作的设计方案。我们提出三套由简到繁、非冗余且经过优化的分子描述符预设集合。每一套集合都有明确的设计理念、理论依据和适用场景,旨在为不同阶段和不同需求的药物发现任务提供最优的起点。 4.1 集合A:“轻量核心集”(The Lightweight Core Set) 设计哲学:追求极致的速度、最高的模型可解释性以及在小数据集上的稳健性。该集合是元分析中发现的“核心描述符集”的直接体现,旨在成为一个快速、可靠、且不易过拟合的基线模型特征集。 适用场景: 对数百万级别化合物库进行超快速的初步虚拟筛选。 构建简单、直观的QSAR模型(如多元线性回归、决策树),以便于化学家理解和提取化学直觉。 处理小规模数据集(例如,化合物数量 < 500),此时避免模型过拟合是首要任务。 描述符列表与理论依据: 描述符名称 类别 描述符含义与入选依据 MolWt 1D-物理化学 分子量。最基本的大小描述符,频繁出现于各类ADMET模型中,如ESOL 12。 MolLogP 1D-物理化学 辛醇/水分配系数。衡量脂溶性的黄金标准,几乎是所有ADMET性质预测的必备描述符 12。 TPSA 1D-物理化学 拓扑极性表面积。衡量分子极性的关键指标,尤其对渗透性和溶解度至关重要 14。 NumHDonors 1D-物理化学 氢键供体数。与TPSA和NumHAcceptors共同定义了分子的氢键能力和极性相互作用潜力 14。 NumHAcceptors 1D-物理化学 氢键受体数。同上,是利平斯基规则的核心组成部分,与脱溶剂化能和受体结合密切相关 14。 NumRotatableBonds 1D-物理化学 可旋转键数。衡量分子构象柔性的标准描述符,影响结合熵和跨膜能力 12。 FractionCSP3 1D-物理化学 sp3杂化碳原子分数。现代药物设计中日益重要的描述符,高FractionCSP3与更好的溶解度、代谢稳定性和更低的脱靶效应相关,代表了分子的三维复杂性 16。 NumAromaticRings 1D-物理化学 芳香环数量。衡量分子的芳香性和平面性,与MolLogP互补,对代谢(CYP酶作用)和一些毒性(如hERG)有重要影响。 4.2 集合B:“均衡性能集”(The Balanced Performance Set) 设计哲学:在“轻量核心集”的基础上,增加一系列经过验证的、针对特定ADMET任务(尤其是渗透性、溶解度和PPB)的“任务特异性”描述符,以在不显著增加计算成本和复杂性的前提下,获得更优的预测性能。 适用场景: 作为大多数通用ADMET建模项目的默认推荐特征集。 适用于中等规模数据集(例如,500-5000个化合物)的建模任务。 当目标是在模型预测精度和计算效率之间取得最佳平衡时。 描述符列表与理论依据: 该集合包含集合A的全部描述符,并额外增加以下描述符: 描述符名称 类别 描述符含义与入选依据 SMR 1D-物理化学 分子摩尔折射率。与分子体积和极化率相关,能够补充MolWt对分子大小的描述,已被证明对渗透性预测有益 14。 Kappa1, Kappa2, Kappa3 2D-拓扑 Kappa形状指数。描述分子的拓扑形状,如线性度、支链度和环状度。对需要穿越生物膜的渗透性预测尤其重要 14。 pKa_strongest_acidic 1D-物理化学 最强酸性pKa。量化分子的酸性强度,是计算生理pH下电离状态的基础。 pKa_strongest_basic 1D-物理化学 最强碱性pKa。量化分子的碱性强度,同上。 charge_at_pH7_4 1D-物理化学 在pH 7.4下的净电荷。直接模拟分子在血浆中的电荷状态,对预测PPB至关重要,因为静电作用是药物与血浆蛋白结合的关键驱动力 13。 BalabanJ 2D-拓扑 Balaban J指数。一个高度不相关的拓扑指数,用于衡量分子的支链程度和中心性,常在特征选择后的模型中出现,能提供独特的拓扑信息。 MaxAbsEStateIndex 2D-电性拓扑 最大绝对E-State指数。E-State指数结合了原子的电子信息和拓扑环境,该描述符反映了分子中电正性或电负性最强的区域,与分子的反应活性位点相关。 MinAbsEStateIndex 2D-电性拓扑 最小绝对E-State指数。同上,反映了分子中电性最中性的区域。 4.3 集合C:“全面特征集”(The Comprehensive Feature Set) 设计哲学:为解决复杂预测任务(如hERG抑制、细胞毒性)或进行探索性特征工程研究,提供一个信息量最大化的起点。该集合并非设计用于直接建模,而是一个经过精心策划和去冗余的“特征池”,用户应在此基础上结合强大的特征选择算法(如VSURF)来构建最终模型。 适用场景: 针对具有复杂或混杂作用机制的靶点(如hERG通道、细胞毒性终点)进行建模。 处理大规模数据集(> 5000个化合物),有足够的数据支撑更复杂的模型。 研究人员希望探索新的构效关系,寻找非经典描述符的重要性。 描述符列表与推荐工作流: 该集合包含集合B的全部描述符,并额外增加约100-150个经过筛选的2D描述符。这些描述符从RDKit和PaDEL等工具生成的数千个描述符中选出,剔除了明显的冗余(如多个软件计算的同一性质)和共线性(预先进行相关性过滤,∣R∣<0.9)。其类别包括: 拓扑描述符:WienerIndex、ZagrebIndex、AvgIpc等,描述分子骨架的连接性。 连接性指数:Chi0v, Chi1n, Chi3v等一系列Chi指数,量化分子的支链和复杂性。 电性拓扑状态(E-State)指数:完整的原子类型E-State指数(如S_ssCH2, S_dO等),以及它们的和、平均值、最大/最小值。这些描述符对模拟分子内电子分布和反应性位点非常有效 20。 自相关描述符:ATS (Moreau-Broto), MATS (Moran), GATS (Geary)等不同权重(如原子质量、极化率、电负性)和不同拓扑距离(lag 1-8)的自相关描述符。这些描述符能捕捉到原子属性在分子内的空间分布规律,对于hERG等复杂靶点尤其重要 15。 电荷描述符:除了charge_at_pH7_4,还包括部分电荷的均值、方差等统计量。 官能团与片段计数:对特定官能团(如fr_nitro, fr_amide)的计数。 推荐工作流: 使用集合C计算所有分子的描述符。 对训练集应用一个强大的特征选择算法,例如VSURF 15 或结合了梯度提升的 递归特征消除(RFE-XGBoost)。 使用筛选出的最优特征子集来训练最终的机器学习模型。 4.4 提议的优化描述符集总结 下表(表2)直观地总结了三套提议的描述符集的内容和递进关系。 表2:为ADMET建模提议的优化描述符集 集合A: 轻量核心集 集合B: 均衡性能集 集合C: 全面特征集 MolWt 包含集合A的全部描述符 包含集合B的全部描述符 MolLogP SMR WienerIndex TPSA Kappa1 ZagrebIndex NumHDonors Kappa2 全套 Chi 连接性指数 NumHAcceptors Kappa3 全套原子类型 E-State 指数 NumRotatableBonds BalabanJ 全套 Moreau-Broto 自相关描述符 FractionCSP3 pKa_strongest_acidic 全套 Moran 自相关描述符 NumAromaticRings pKa_strongest_basic 全套 Geary 自相关描述符 charge_at_pH7_4 各种 BCUT 和 GCUT 描述符 MaxAbsEStateIndex 详细的官能团计数 MinAbsEStateIndex …以及约100个其他经过筛选的2D描述符 (共8个描述符) (共约18个描述符) (约150-200个描述符的特征池) V. 结论与前瞻 本次研究通过对过去十年间ADMET建模领域的权威文献进行系统性的挖掘和元分析,成功地应对了在QSAR研究中普遍存在的特征维度过高和冗余的挑战。分析结果清晰地揭示了几个关键的指导原则: 核心描述符的普适性:存在一个由少数基本物理化学性质(脂溶性、大小、极性、柔性、饱和度)构成的“核心描述符集”,它在各种ADMET性质预测中都表现出高度的相关性。 任务特异性的必要性:对于特定的生物终点,如血浆蛋白结合或hERG抑制,高精度模型必须在核心集的基础上,引入能够捕捉其独特生物物理机制的特异性描述符(如电离状态或复杂的拓扑电子特征)。 特征选择流程的重要性:成功的QSAR建模依赖于一个系统化的特征选择流程,通常始于简单的相关性和方差过滤,继而采用基于机器学习算法(特别是随机森林)的先进方法进行最终的特征精选。 基于这些原则,本报告设计并提出了三套分层的、非冗余的“黄金描述符集”——轻量核心集(A)、均衡性能集(B)*和*全面特征集(C)。这三套集合为不同复杂程度和需求的ADMET建模任务提供了经过验证的、标准化的、且高效的起点。它们将大量分散的文献知识固化为一套可直接应用的工具,旨在提升药物发现流程中计算预测的效率、稳健性和可复现性。 展望未来,化学信息学领域正处在不断演进之中。虽然本报告的设计方案基于当前文献中得到最广泛验证和应用的2D描述符,但未来的“黄金描述符集”无疑将融合新的技术进展。随着计算能力的提升和算法的成熟,三维(3D)描述符(如分子形状和药效团距离)将扮演更重要的角色。更令人兴奋的是,深度学习衍生的“学习”描述符,例如从图神经网络(GNN)或化学自编码器(autoencoder)的潜在空间(latent space)中提取的特征向量,展现出巨大的潜力 22。这些方法能够自动从数据中学习到高度信息化的特征表示,可能超越人类手工设计的描述符。当这些新兴方法的最佳实践在文献中得到更广泛的建立和验证后,将它们整合到下一代的优化描述符集中,将是推动ADMET预测能力迈向新高度的关键一步。
Machine Learning & AI
· 2025-08-08
Boltz-2 vs. FEP? A False Dichotomy. Synergy is the Future
Boltz-2 vs. FEP?这是个伪命题。强强联合才是未来 作者:David “Dap” Pearlman 人工智能模型 Boltz-2 声称在配体亲和力预测方面取得了一些惊人的进步。但它最大的价值可能在于虚拟筛选和亲和力漏斗(Affinity Funneling)领域。 FEP 和 Boltz-2:携手并进! 人工智能/机器学习(AI/ML)的旋风从未停歇。如果你对各种消息都信以为真,会越来越觉得,我们距离用一个足够大的神经网络解决所有生物学难题,只差一篇惊天动地的新闻稿了。好了,收起你的白眼吧。尽管如此,刚刚发布的 Boltz-2 AI/ML 模型所做的声明——尤其是在预测配体与蛋白质的结合亲和力方面——确实引人入胜。 但空口无凭。让我们深入探究。 超越迭代:Boltz-2 带来了什么? 与其前身 Boltz-1 相比,这次的新迭代似乎是向前迈出的重要一步。作者报告称,其在各种分子类型(蛋白质、RNA、DNA-蛋白质复合物等五花八门)上的结构准确性都有所提高。他们特别强调了在抗体-抗原复合物这类出了名的棘手体系上取得的进展。 这些改进似乎部分归功于一些聪明的数据策略,例如使用“大型蒸馏集”(来自其他模型如 AlphaFold 甚至 Boltz-1 自身的高置信度预测)来创造更多的训练样本,特别是对于那些实验数据稀缺的体系,如 RNA 和 DNA-蛋白质复合物。Boltz-2 还着力在训练集中加入了更多的动态信息。它不再局限于 PDB 数据库中静态的晶体学“快照”,而是整合了 NMR 谱学系综和分子动力学(MD)模拟数据。这使得它能够预测并使用像 B-因子(B-factors)这样的性质进行训练,并能根据实验方法类型(如 X 射线、NMR 或 MD)来生成特定条件的结构。此外,它在施加距离约束和多聚体模板方面的功能也有所改进。而且,也许最棒的是,和 Boltz-1 一样,它是开源的,代码和权重都免费提供,这极大地激励了学术界和生物技术界的创新与验证。 入局挑战:Boltz-2 与 AlphaFold3 的阴影 尽管 AlphaFold3 为结构预测领域划下了一条新的起跑线,并声称可以预测配体/蛋白质的结构,但它在评估一组配体的相对结合能力方面并没有提供太多帮助。Bolt-1 也是如此。而这正是 Boltz-2 可能改变游戏规则的地方。当然,它也必将引发巨大的关注。 亲和力的诱惑:为何 Boltz-2 的声明如此引人注目? 这正是 Boltz-2 做出其最大胆声明的地方,也是其论文中所描述的结果“如此诱人”的原因。以 AI 模型的速度获得相当准确的配体结合亲和力估值,这一前景有望为那些可以为了通量而牺牲部分准确性的工作流程带来颠覆性的改变。特别是,计算药物发现领域一直缺少能够处理虚拟筛选活动后产生的数千个多样性化合物的解决方案——这个数量对于今天的计算资源来说,即使是绝对自由能微扰(FEP)也太多了,而快速打分函数(如对接分数、MM/GBSA 等)又无法对它们进行有效排序。作者声称,Boltz-2 “在计算效率上比 FEP 至少高出 1000 倍”,同时在某些基准测试中的表现接近 FEP。他们选对了目标:FEP/TI(热力学积分)无疑是我们目前拥有的用于高精度结合评估的最佳计算工具。 论文展示了一些引人注目的图表。也许最亮眼的就是在 FEP+ 基准测试集的 OpenFE 子集上的结果,其中 Boltz-2 的表现接近 FEP 本身,Boltz-2 的皮尔逊 R² 为 0.38,而 OpenFE 为 0.40,FEP+ 为 0.52(我冒昧地将论文中的 R 值转换为了 R²,因为这是现代自由能文献中更常见的度量方式)。他们还在最近的 CASP16 亲和力挑战赛的化合物上展示了同样诱人的好结果。但必须指出,尽管 Boltz-2 的预测令人印象深刻——考虑到 1000 倍的速度提升,甚至可以说是惊人的——它与 FEP+ 之间的差异仍然相当显著,特别是考虑到 FEP 在药物发现中的应用方式——下文将详细阐述。 但我们别高兴得太早:FEP 并未过时 毫无疑问,Boltz-2 很酷。但在我们开始质疑为何还要做 FEP 之前,让我们先戴上怀疑者的帽子。每个科学家都需要一顶这样的帽子,尤其是在驾驭 AI/ML 炒作这片时常波涛汹涌的水域时。值得称赞的是,Boltz-2 的论文对其目前的局限性保持了相当的透明度。 我认为,这里最大的警示信号是作者报告的,当试图将 Boltz-2 应用于来自其合作伙伴 Recursion 的八个盲测配体/靶标数据集时的结果。对于这些数据集,他们仅在三个集合上实现了皮尔逊 R² > 0.30,而在其他五个集合上表现“有限”。每个集合都包含数百个实验测定点,总体而言,对于这八个集合,平均皮尔逊 R² = 0.15,平均肯德尔 Tau 仅为 0.23。这些数值虽然显著优于其他机器学习方法在这些集合上的表现(如 GAT, BACPI),但对于许多实际应用场景来说,这样的 R² 值实在是太低了。这些在真实的 Recursion 数据集上的结果让人不禁怀疑,在那些预测效果较好的测试/验证集和训练数据之间,是否存在着微妙的数据泄漏——尽管论文作者描述了他们通过排除与验证/测试集有 ≥ 90% 相似性的蛋白质来防止明确泄漏的努力。 图14 来自 Passaro 等人的论文《Boltz-2:迈向准确高效的结合亲和力预测》。这些图表展示了 Boltz-2 在 Recursion Pharmaceuticals 提供的八个未发表的盲测数据集上的预测与实验行为。其中大多数缺乏可指导行动的相关性,这令人警醒。 与 FEP 方法相比,Boltz-2 的一个主要局限性在于它仍然依赖于蛋白质受体位点的结构。与 FEP 和 TI 等自由能方法不同,这种打分方法无法调整结合位点以适应起始配体/蛋白质构象中的微小问题。它也无法反映结合位点为适应不同结合物而进行的调整。因此,尽管这个 AI/ML 模型相当复杂,但归根结底,它仍然建立在那个曾让许多其他打分方法停滞不前的“锁-钥模型”之上。(Boltz-2 试图通过在模型拟合过程中整合动态信息来部分缓解这个问题。)这可能已经接近了该模型所能达到的极限(嘿,对于相对评估来说,它已经比传统的对接分数好太多了!),但到某个点,你终究得为蛋白质的柔性买单。而一旦你这么做,你的计算成本很可能会上升几个数量级,然后,哇哦!你又回到了 FEP 的领域。 Boltz-2 的第二个严重局限性是,它没有包含对溶剂(水)、金属、离子或辅因子的显式模型(溶剂是隐式处理的)。对于许多体系来说,这种简化是个非常、非常糟糕的大问题。作为一名工业界的计算化学家,你只能接受现实,如果你正在研究的体系的结合是由这些因素中的任何一个介导/控制的(很多体系都是如此),那么 Boltz-2 可能帮不了你。但值得注意的是,CASP16 挑战集中的几个体系确实包含了辅因子,而 Boltz-2 在这些体系上似乎表现得相当不错。所以现实情况可能会更微妙,且依赖于具体体系。 Boltz-2 能否解决对接的“漏斗”根本问题? 话虽如此,即使是像我这样在这个领域里cynical old timer,也不禁感到好奇。与其说它能取代 FEP 用于苗头到先导化合物的后期优化,不如说它提供了一种可能在虚拟筛选漏斗的底部提供增量价值的方法,而目前没有任何方法能在该阶段提供必要的准确性和速度组合。(参见 Sindt, Bret, 和 Rognan 最近发表的优秀论文。)在那个阶段应用一种有信号的方法的神奇之处在于,你仍然在玩一个大数游戏,你不必每次都对——你只需要在总体上是正确的,并且能够可靠地富集从(比如说)10,000个化合物到几百个化合物的苗头数量。论文中对此的可行性进行了一些论证,首先是在先前发表的 MF-PCBA 基准测试上(Boltz-2 在此取得了不错的富集效果),然后是通过比较 Boltz-2 如何对潜在的 TYK2 结合物进行打分,这些结合物既包括随机分子,也包括被特别鉴定为具有良好结合能力的分子(来自各种公共来源和他们自己的 SynFlowNet 方法)。经验上,Boltz-2 对非随机化合物的总体排名更好。在对这些化合物的绝对结合自由能计算与 Boltz-2 进行更严格的比较中,获得了 R² = 0.55 的良好相关性。如果这种可靠性能被广泛证实,这将成为一种改变游戏规则的、用于虚拟筛选的重打分方法。 然后是亲和力漏斗(Affinity Funneling):Boltz-2 和 FEP 携手合作 虽然虚拟筛选漏斗是药物化学家最熟悉的,但在药物化学家和计算化学家之间,价值链的更下游还有另一个漏斗。药物化学家非常擅长快速提出想法,而一个优秀的药物化学家可以轻易地提出超出计算化学家现有评估能力的想法数量。因此,我预计 Boltz-2 也将在这里介入这个过程。我正在构想一个工作流程——我称之为“亲和力漏斗”(Affinity Funneling)——化学家带着一长串想法进来,Boltz-2 被用来将其筛选成一个更短的列表,使其与在要求的时间内可用于 FEP 的资源相匹配,然后将 FEP 应用于这个缩减后的列表以获得更可靠的结果。如果这行得通,它可以将当前的模式(化学家的想法清单通常相对较小)转变为一种新模式,即由药物化学家发起的更广泛的自动化枚举(例如“在所有这些 R 位点上进行卤素和甲基取代的所有组合”)输入到 Boltz-2 中,然后最好的结果再通过 FEP 进行计算。Boltz-2 和 FEP 之间的协同作用甚至可能增加 FEP 的整体价值和使用率。不是对抗,而是合作的力量!这种 AI + 物理的混合模式,正如同机器学习正在增强材料科学和气候建模等领域一样。 如果 Boltz-2 在分流筛选中继续显示出信号,它将适用于虚拟筛选和亲和力漏斗工作流程,如图所示。两者都是高价值的应用,而 Boltz-2 催生的新“亲和力漏斗”工作流程可能会增加 FEP 的使用,因为它能将可用的 FEP 计算管线与药物化学家的最大创意产出速率相匹配,同时解放药物化学家进行更广泛的组合思维。 盘点:Boltz-2 最终可能的位置 那么,Boltz-2 在宏伟蓝图中处于什么位置?它似乎是 Boltz-1 的一个显著进步,并且在结合亲和力和模型可控性等领域提出了可信的挑战,旨在相对于 AlphaFold3 和其他竞争者开辟自己的生态位。快速、合理准确的结合亲和力估算的潜力确实引人注目,并可能显著加速药物发现马拉松的某些阶段。 我们或许真的有了一个可以应用于虚拟筛选漏斗底部的工具,这个想法非常令人兴奋,同样令人兴奋的还有参与“亲和力漏斗”的潜力。这些是我将密切关注的应用。 另一方面,作为一种在苗头到先导化合物的后期优化过程中取代 FEP 或 TI 等自由能工具的工具?我看不到 Boltz-2 能取得巨大进展。要理解为什么,你需要考虑这些方法是如何被使用的。FEP(或 TI)通常应用于项目的实验阶段,化学家可能会提出几个(或几十个)想法,然后问:“我有这些想法。我只有几天时间来合成几个。你建议我做哪些?”为了有把握地回答这样的问题,我们需要依赖这样一个事实:现代 FEP 计算通常能精确到 1 kcal/mol 或更好,并伴随着通过 ROC 分析等衡量的相应富集效果。从 FEP 计算被引入至今,我们花了整整 40 年时间,才让采样和力场发展到让化学家和建模者都感到足够放心的地步,认为我们可以以适当的可靠性水平回答这些问题。Boltz-2 的结果,虽然在抽象层面上令人印象深刻,但无疑是一个巨大的退步。对于 OpenFE 基准测试,这是从 R² = 0.52 下降到 0.38。(是的,R² 是一个很差的指标,但在这个范围内如此大的差异通常是实质性的。)对于一个成功依赖于这些结果的化学家来说,这很容易就是“有趣,请继续”和“抱歉,下一个”之间的区别。 毫无疑问,有些人会看到这些充满希望(但较差)的结果,然后想:“我们快成功了。”但我们怎么才能更进一步呢?Boltz-2 已经吞噬了作者能找到的所有结合数据,但受限于 Landrum 和 Riniker 在其论文中戏剧性呈现的不同来源数据的可重复性问题。高质量的实验配体结合数据(IC50、Ki 等)严重落后于配体/受体相互作用的广阔空间,而且这种情况短期内不太可能改变(除非用[合成的]计算结合数据来增强)。AI/ML 还受困于众所周知的可解释性问题,这使得找出需要什么来改进预测变得模糊不清。因此,情况更可能是“我们不只是快到了,我们几乎已经走到了路的尽头”——至少在数据生成或模型架构出现新突破之前是这样。事实上,Boltz-2 的作者自己也承认,解决当前的局限性“将需要在扩展和整理训练数据、改进模型架构以及整合额外的生化背景方面进行未来的工作。”当然,这些都是整个 AI 领域的活跃研究领域,但它们在亲和力预测这个复杂问题上的应用仍然是一个前沿领域。 如果是这样的话,那么,FEP 领域仍然有巨大的改进空间,特别是在更好的力场和更好的采样方面。对于前者,我一直在 QSimulate 参与一项将量子力学带入主流的努力,我们基于 QM/MM 的 FEP 现在已经成为现实,它拓宽了 FEP 计算的适用范围和准确性,超越了即使是最好的经典力场所能达到的水平。通过更快的 GPU 和巧妙的实现思路,采样也在持续改进。与 AI/ML 相比,基于物理的方法的美妙之处在于,我们可以识别缺点并专注于改进它们。 一个强大的工具,如果你知道该指向何方 与所有新工具一样,实践是检验真理的唯一标准——在独立验证中,在真实世界的应用中,以及在它如何应对该领域不可避免地转向下一个大事件时。Boltz-2 最大的影响可能不是作为高精度方法的直接替代品,而是在被巧妙地应用于弥合快速对接打分和更严格的自由能方法之间的差距时,例如用于虚拟筛选苗头化合物的分流筛选,或用于评估那些将要用更准确(但更慢)的 FEP 进行评估的配体。“亲和力漏斗”甚至可能导致对 FEP 的需求增加! 当然,一个大问题依然存在:如果额外结合数据的稀缺性和锁-钥模型意味着我们正在接近静态 AI 受体-配体打分模型所能达到的极限,那么下一次飞跃将来自何方?我相信未来的改进将来自于 AI/ML 技术与那些经过数十年发展和完善的基础性、基于物理的方法之间的智能协同。Boltz-2 的开源性质,以及为特定感兴趣的目标谨慎地向训练集中添加数据的能力,可能使得即使在基础模型在你有(或使用基于物理的方法生成)大量相同或相似系统上的额外数据的情况下信号有限时,也能改进 AI 模型。这表明,即使 Boltz-2 最初在某个目标上表现不佳,通过定制训练和额外数据,进一步的改进也是可能的。 毫无疑问,这是一个激动人心的时代。真正的力量不在于取代数十年的基础科学,而在于智能地整合像 Boltz-2 这样的 AI 工具来开启新的前沿。拥抱这种协同作用以及用目标数据改进模型的能力,才是我们能够现实地期望在长期内加速药物发现的方式。AI 创新与物理理解之间的这种迭代之舞,才是真正突破将要涌现的地方。
Machine Learning & AI
· 2025-06-24
Active Learning + Free Energy Calculation: Efficient Discovery of New Parkinson's Drug Candidates
【JCIM】主动学习+自由能计算,高效发掘帕金森病新药候选分子 导语:面对数以十亿计的潜在药物分子,我们如何才能高效地“大海捞针”?当精准的物理计算遇上聪明的机器学习,一场药物发现的革命正在悄然发生。本文将深度解析一篇发表于Journal of Chemical Information and Modeling的研究,看科学家们如何利用“主动学习”这一AI策略,成功为帕金森病的一个新兴靶点找到了8种全新的抑制剂。 本文基本信息 摘要 富含亮氨酸重复激酶2(Leucine-rich repeat kinase 2, LRRK2)是家族性帕金森病中突变最多的基因,其突变会导致该疾病的病理特征。LRRK2的WDR结构域是一个研究尚浅的帕金森病药物靶点,在计算化学领域寻找苗头化合物的关键评估实验(CACHE)挑战赛的第一阶段之前,没有任何已知的抑制剂。CACHE挑战赛的一个独特优势在于,所有预测的分子都会在内部进行实验验证。在此,我们报告了LRRK2 WDR抑制剂分子的设计和实验确认。我们围绕先前已确认的两个苗头化合物,利用一个基于优化自由能分子动力学(MD)模拟的主动学习(Active Learning, AL)机器学习(ML)工作流程,并结合热力学积分(TI)框架来扩展化学系列。在35个经过实验测试的分子中,我们最终发现了8个经过实验验证的新型抑制剂(命中率高达23%)。这些结果证明了我们基于自由能的主动学习工作流程在快速、高效地探索大型化学空间,同时最大限度地减少昂贵模拟的数量和时长方面的有效性。该工作流程可广泛应用于筛选任何化学空间中具有更高亲和力的小分子类似物,但需遵循相对结合自由能(RBFE)计算的一般限制。相对于命中化合物的实测抑制常数$K_I$,TI MD计算的平均绝对误差为2.69 kcal/mol。 原文引用信息 Gusev, F., Gutkin, E., Gentile, F., Ban, F., Koby, S. B., Li, F., Chau, I., Ackloo, S., Arrowsmith, C. H., Bolotokova, A., Ghiabi, P., Gibson, E., Halabelian, L., Houliston, S., Harding, R. J., Hutchinson, A., Loppnau, P., Perveen, S., Seitova, A., Zeng, H., Schapira, M., Cherkasov, A., Isayev, O., & Kurnikova, M. G. (2025). Active Learning-Guided Hit Optimization for the Leucine-Rich Repeat Kinase 2 WDR Domain Based on In Silico Ligand-Binding Affinities. Journal of Chemical Information and Modeling, 65, 5706-5717. https://doi.org/10.1021/acs.jcim.5c00588 CACHE challenge:http://dx.doi.org/10.1021/acs.jcim.4c01267 https://cache-challenge.org/challenges/predict-hits-for-the-wdr-domain-of-lrrk2 背景 关键科学问题 帕金森病(PD)是全球第二大神经退行性疾病,而LRRK2基因的突变是其重要的遗传风险因素。尽管针对LRRK2激酶结构域的抑制剂已有报道,但其旁边的WDR结构域却是一个几乎未被探索过的“处女地”靶点。在药物研发的早期阶段,最大的挑战之一是如何从包含数十亿甚至更多分子的巨大化学文库中,找到能与特定靶点结合的“苗头化合物”。 图1:在CACHE挑战赛第一阶段发现并用于后续优化的经实验验证的苗头化合物。 传统的虚拟筛选方法速度快但精度有限;而基于物理的自由能计算(如RBFE)虽然被誉为预测结合亲和力的“金标准”,但其计算成本极其高昂,对每个分子进行计算都无异于“用高射炮打蚊子”。因此,核心的科学问题是:如何设计一个智能工作流程,既能利用自由能计算的精确性,又能避免其高昂的成本,从而在广阔的化学空间中高效地进行“苗头到先导”的优化? 创新点 本文最大的创新点在于构建并验证了一个“主动学习-相对结合自由能”(AL-RBFE)计算管线。它巧妙地将两种技术结合起来: 机器学习(ML):训练一个轻量级模型,能够快速、低成本地预测分子的结合能力。 物理模拟(MD-TI):进行精确但耗时的相对结合自由能(RBFE)计算,为ML模型提供高质量的训练数据。 其核心思想是:不再盲目地进行昂贵的物理计算,而是让一个不断学习和进化的ML模型来充当“领航员”,智能地挑选出最有潜力的分子进行精确验证。这种“少即是多”的策略,旨在以最小的计算代价实现最大的科学发现,并在著名的CACHE挑战赛中一举夺魁。 分子筛选漏斗各阶段数量总结 筛选阶段 (Screening Stage) 分子数量 (Number of Molecules) 备注 (Notes) 初始化学空间 ~55亿 来源为 Enamine REAL 数据库 (2022年10月版)。 初步SMARTS搜索 (通用类似物) 341281 基于苗头1和2的骨架进行SMARTS模式搜索,得到的通用类似物总数 (154204 + 187077)。 初步SMARTS搜索 (最相似类似物) 250 采用更严格的SMARTS模式,搜索与苗头1和2最相似的类似物 (58 + 192)。 最终主动学习集 (AL Set) 25171 经过两轮分子对接和过滤后,最终用于主动学习-自由能计算循环的分子库总数 (16101 + 9070)。 预备主动学习集 (Pre-AL Set) 302 包含了所有最相似类似物、最近邻搜索和人工挑选的分子,这些分子都计算了相对结合自由能。 选择进行实验验证的分子 75 从计算结果中挑选出预测活性最好的70个分子,加上为增加化学多样性而挑选的5个分子,送去进行实验测试。 实验确认的苗头化合物 8 在75个被测试的分子中,最终有8个被SPR实验确认为新的LRRK2 WDR结构域抑制剂。 研究内容:四步解锁高效药物发现 研究团队设计了一个精巧的四步计算管线,将理论计算与实验验证紧密结合。 第一步:大海捞针——从55亿分子中筛选候选集 研究的起点是巨大的Enamine REAL数据库,其中包含了约55亿个可合成的化合物。为了从中筛选出与两个已知苗头化合物(Hit 1 和 Hit 2)相似的分子,研究者采用了双管齐下的策略: 近亲筛选(Closest Analogs):使用严格的化学子结构(SMARTS)模式,寻找与苗头化合物结构最相似的“近亲”,共找到约250个分子。 远亲筛选(General Analogs):使用更宽泛的骨架(Murcko scaffold)模式,寻找结构更多样化的“远亲”,初步筛选出约34万个分子。 随后,通过分子对接和一系列过滤条件,研究团队将“远亲”候选集缩小到了一个约2.5万个分子的“主动学习集”(AL set),为下一步的智能筛选做好了准备。 第二步:智能导航——主动学习引导的自由能计算 这是整个研究的“灵魂”所在。传统的做法可能是随机挑选分子进行昂贵的自由能计算,而本文的AL-RBFE工作流则像一个带GPS的智能寻宝系统。 graph LR subgraph 主动学习循环 A(开始:拥有少量<br/>精确自由能数据的<br/>“pre-AL set”) --> B{训练ML模型}; B --> C[**快速预测:**<br/>ML模型为2.5万个<br/>候选分子打分]; C --> D{**智能选择:**<br/>挑选得分最高的<br/>一小批分子}; D --> E[**只对这批分子**<br/>进行高精度的MD-TI<br/>自由能计算]; E --> F(**更新数据集:**<br/>将新的精确数据<br/>加入训练集); F --> B; end F --> G(**结束循环:**<br/>选出最终的<br/>高分候选分子<br/>送去实验验证); style A fill:#f9f,stroke:#333,stroke-width:2px style G fill:#ccf,stroke:#333,stroke-width:2px 这个循环的精髓在于: 训练(Train):用已知的、通过精确物理计算(热力学积分,TI,Pre-AL Set)得到的相对结合自由能(ddG)数据,训练一个机器学习模型。这个模型的目标是学习“分子结构”与“结合强度”之间的复杂关系。 预测(Predict):利用训练好的模型,对2.5万个候选分子进行快速打分。这一步成本极低,可以在短时间内完成。 选择(Select):根据模型的预测分数,贪婪地选出排名最靠前的一小批(例如几十个)最有希望的分子。 计算(Calculate):只对这批被智能选出的“精英分子”进行高精度的MD-TI自由能计算。这确保了宝贵的计算资源被用在刀刃上。 迭代(Iterate):将新获得的精确计算结果加入到训练数据集中,让模型在下一轮循环中变得更“聪明”。 这个“训练-预测-选择-计算”的闭环迭代了8次,每一次都让模型对化学空间的理解更深一步,从而能够更精准地指导后续的探索方向。 图2. 用于苗头化合物优化的计算方法概述。 (A) 用于优化两种苗头化合物的计算流程总图(详见正文描述)。对应于最相似类似物、通用类似物和RBFE计算的模块分别以蓝色、灰色和绿色显示。NNS代表最近邻搜索(nearest neighbors search),CS代表人工选择(curated selection)(详见方法第4节)。(B) 用于苗头1和苗头2的最相似类似物和通用类似物的SMARTS模式。(C) 苗头1和苗头2的通用类似物的虚拟筛选。图中显示了流程中每一步之后,苗头1和苗头2类似物的分子数量。(D) 由主动学习(AL)引导的RBFE计算(AL-RBFE)的自动化计算工作流程总图。该工作流程包括两个主要模块:AutoML和MD TI RBFE,以及四个主要步骤。化学空间以二维t-SNE图的形式展示。计算了ΔΔG的苗头1和苗头2的类似物,以彩色方块和三角形表示,颜色方案与图4一致。 第三步:技术细节——自由能微扰与计算优化 对于计算化学领域的读者,论文中的一些技术细节同样值得关注: 巧妙的微扰路径:在进行炼金术自由能计算(即模拟一个分子“变”成另一个分子)时,研究者发现直接从Hit 1出发进行某些转换会导致结构扭曲和计算失败。为了解决这个问题,他们设计了一个中间体“Ligand X”,通过“Hit 1 → Ligand A → Ligand X → 目标分子”的路径,成功避免了原子碰撞和不合理的构象,保证了自由能计算的稳定性和可靠性。 动态的资源分配:为了进一步节省成本,研究团队采用了一种“动态优化”策略。模拟程序可以自动检测计算是否收敛,并按需增加或停止模拟时长,避免了在已经收敛的计算上浪费机时。 第四步:成果展示——从计算到实验验证 经过8轮主动学习,计算结果令人振奋。 效率的提升:从下方的箱形图(图3)可以看出,随着AL迭代的进行(从AL-1到AL-7),计算出的分子结合自由能(ddG)的分布整体持续向更优(更负)的方向移动,证明AL确实在引导计算走向“富矿区”。 图3. 计算得到的MD TI RBFE值与主动学习迭代次数的关系,以箱形图展示。 在主动学习循环中计算的苗头1(红点)和苗头2(绿点)的类似物展示于图2D中。苗头1和苗头2的RBFE值被设定为0 kcal/mol,并在预备主动学习(pre-AL)步骤中由黑色箭头标出。被选中并提交进行实验评估的两种苗头化合物的类似物,用黑色或品红色的圆圈圈出。品红色显示的是已测得K~D~值的新苗头化合物(见图5和表S3)。 探索的多样性:通过t-SNE降维可视化(图4),可以看到AL选择的分子(彩色点)广泛分布在整个化学空间中,而不是仅仅聚集在初始苗头化合物(紫色圈)周围。这表明AL不仅在“利用”已知的高分区域,同时也在积极“探索”未知的、具有结构多样性的新区域,这对于发现全新骨架的药物至关重要。 图4. 主动学习引导下计算得到的TI ABFE值,以苗头1和苗头2类似物化学空间的t-SNE投影图展示。 (A) 苗头1类似物的每一次独立主动学习迭代的t-SNE图。 (B) 苗头2类似物的每一次独立主动学习迭代的t-SNE图。 (C) 所有主动学习迭代的t-SNE图。每个分子以一个点的形式显示。苗头1和苗头2由黑色箭头标出。分子根据其计算出的ABFE值进行着色,其余分子以灰色显示。初始苗头化合物用紫色的圆圈圈出。被选中进行体外实验验证的分子用黑色的圆圈圈出,而已被实验确认的优化后苗头化合物则用品红色的圆圈圈出。 最终,研究团队从672个经过RBFE计算的分子中挑选了75个进行实验验证。在成功合成并测试的35个化合物中: 8个分子被实验证实具有抑制活性,解离常数$K_D$范围在18 µM到230 µM之间。 实验命中率高达23%,这在针对全新靶点的药物发现项目中是一个非常出色的成绩。 计算预测的结合自由能与实验值的平均绝对误差(MAE)为2.69 kcal/mol,显示了计算方法具有一定的预测能力。 图5. 实验测得的苗头分子的结合特性。 图中展示了SPR传感图、含氟化合物的NMR谱图片段(完整谱图见图S2)(10 μM化合物分别与0 μM [黑色] 和 20 μM [红色] 蛋白质混合),以及化学结构。图中还标明了通过DLS测量的化合物溶解度和聚集情况,以及每个化合物是从哪个集合中被识别出来的。 关键结论与批判性总结 关键结论 AL-RBFE工作流程是真实有效的:该研究成功地将AI驱动的主动学习与高精度的物理计算相结合,为解决实际的药物优化问题提供了一个强大且高效的范例。 成功攻克全新靶点:从零开始,针对一个没有任何已知抑制剂的LRRK2 WDR靶点,该方法不仅找到了苗头化合物,还成功地将其拓展为了一个具有8个活性分子的化学系列。 资源效率最大化:通过智能选择,该方法仅计算了672个分子的自由能,就从一个2.5万个分子的库中识别出了多个活性化合物,极大地节省了计算资源。 为后续研究奠定基础:这8个新发现的抑制剂,尽管活性仍有待提高,但它们结构新颖、理化性质良好,为进一步优化成高活性的帕金森病候选药物提供了坚实的起点。 批判性总结 优势:本研究最突出的优点是其前瞻性和实用性。它不仅提出了一个先进的计算框架,更重要的是在一个公开、公正的竞赛(CACHE Challenge)中前瞻性地验证了其有效性,这比回顾性研究更具说服力。23%的实验命中率充分展示了该方法的强大预测能力。 局限与展望: 活性仍需提升:目前发现的抑制剂活性多处于中低微摩尔(µM)级别,距离成为真正的临床候选药物还有很长的路要走,需要进一步的药物化学优化。 计算精度:2.69 kcal/mol的平均绝对误差在当前领域属于可接受范围,但仍有提升空间。作者也指出,该误差值受到了两个离群值较大的影响,排除后误差可降至1.66 kcal/mol。这提示我们,自由能计算的力场和模拟方案仍需不断完善。 统计显著性:尽管AL选择的分子在命中率上远超“pre-AL”组(8个命中里有7个来自AL),但作者坦诚,由于样本量较小,尚不能从统计学上得出AL优于其他选择策略的结论,尽管趋势非常明显。 小编点评: 方法还是那一套方法,docking部分可以借鉴一些,Schrodinger很多使用那些约束骨架的docking,对FEP计算非常有用。同时也发现他们也手动挑选化合物了 AL+FEP已经很多人在用了,得抓紧时间跟上,加实验发个JCIM没啥问题。 看到人家发文章也都远远500个mutation起步,还是得多算 FEP/TI也越来越讲究动态调整模拟时间和λ windows,得快点有个软件能自己用 本文用的机器学习方法有点太简单了,我还是有机会的。每一轮都可以用不同的模型(最好的那个);每一轮也就100个数据点,看来不用那么多? 最终实验亲和力也不是那么突出,命中率还行。是不是AL的贡献不知道,但感觉ddG几轮下来并没有太降低,可能是在局部最小的往外爬?还没有原始hit亲和力高呢 2.69 kcal/mol的误差有点大,但人家是有些多步mutation的,可能多样性还行 反正基础库和突变体库以后肯定是要自动生成的,不能再手动设计了,这篇还是更偏RBFE能算的变化小的,less偏虚拟筛选 研究方法学(Methods)总结 4.1 数据库筛选与文库准备 本研究的计算流程核心是筛选两个分子集合:pre-AL集(包含与苗头化合物Hit 1和Hit 2最相似的类似物)和AL集(包含结构更多样化的普适类似物)。这两个集合最终都用于主动学习引导的相对结合自由能(AL-RBFE)计算。 4.1.1 最近似物(Closest Analogs)的虚拟筛选 该部分旨在构建一个高质量的初始训练集(pre-AL set)。 SMARTS搜索:首先,在包含55亿化合物的Enamine REAL数据库中,使用基于Hit 1和Hit 2化学结构的SMARTS模式进行搜索。这些模式保留了关键的药效团(如草酰胺、肽键)和芳香性,但允许重原子替换,从而找到结构最相似的“近亲”。此步骤为Hit 1和Hit 2分别找到了58和192个最近似物。 最近邻搜索(NNS):为了增加Hit 1类似物的多样性,研究者将当时已计算出较好结合能的Hit 1类似物作为“查询分子”,在更大的普适类似物库中寻找它们的最近邻(基于ECFP6指纹和Tanimoto距离),额外获得了27个独特的分子。 人工挑选(CS):在完成初步的RBFE计算后,研究者以结合能最佳的“配体A”(Ligand A)为母核,通过人工审视的方式,挑选了一批在1,2,3,4-四氢异喹啉环上有不同取代基的类似物,又增加了49个分子。 pre-AL集的形成:综合以上三个步骤,最终形成的pre-AL集共包含302个分子(134个Hit 1类似物,168个Hit 2类似物),这些分子都经过了RBFE计算,作为主动学习的“种子数据”。 4.1.2 普适类似物(General Analogs)的虚拟筛选 该部分旨在构建一个巨大且多样化的候选池(AL set),供主动学习算法探索。 SMARTS搜索:使用更宽泛的、基于Murcko骨架的SMARTS模式在Enamine REAL数据库中进行搜索,允许任意重原子替换,只要保持芳香性模式。此步骤为Hit 1和Hit 2分别筛选出约15.4万和18.7万个普适类似物。 无模板对接(Template-Free Docking):使用Glide SP软件,将上述分子对接到LRRK2 WDR结构域的晶体结构(PDB ID: 6DLO)上。对接后进行严格筛选,保留满足以下条件的分子:(1) 关键的吲哚环与苗头化合物的MD代表性构象偏差(RMSDindole)小于等于5 Å;(2) Glide对接分数小于等于-6。此步骤将候选库缩小至约2.2万(Hit 1)和2.7万(Hit 2)个分子。 模板对接(Template Docking):为了进一步提高对接姿势的准确性,研究者使用OpenEye HYBRID软件进行模板对接,以Hit 1和Hit 2的MD代表性构象作为模板。对接后再次筛选,保留满足以下条件的分子:(1) 广义Murcko骨架与模板的偏差(RMSDMurcko)小于等于4 Å;(2) OpenEye对接分数小于等于-6;(3) 分子与蛋白的碰撞(clash)分数小于等于0.5。 AL集的形成:经过模板对接和筛选,并去除重复及带电荷的分子后,最终形成了包含25,171个分子的AL集(16,101个Hit 1类似物,9,070个Hit 2类似物),作为主动学习算法的“探索空间”。 4.2 炼金术相对结合自由能(RBFE)计算 4.2.1 分子动力学(MD)模拟 初始结构与参数化:使用先前在CACHE挑战赛第一阶段获得的对接复合物结构作为MD模拟的起始点。 力场与溶剂:蛋白使用FF14SB力场,水分子使用TIP3P模型,配体则使用GAFF2力场和AM1-BCC电荷模型。 模拟流程:使用AMBER 20的pmemd.cuda模块进行GPU加速模拟。标准流程包括:能量最小化、NVT系综下的升温、NPT系综下的密度平衡,以及最终在NVT系综下进行100 ns的生产性模拟。 代表性结构提取:舍弃前10 ns的轨迹,对后90 ns的蛋白Cα原子和配体重原子坐标进行平均,得到一个平均结构。然后从轨迹中提取与该平均结构RMSD最小的一帧,作为后续计算的代表性结构。 4.2.2 配体准备与参数化 使用RDKit进行参照分子和目标分子间的原子映射,并利用FESetup软件包生成蛋白-配体复合物和溶剂化配体体系的拓扑和坐标文件。力场和电荷模型与MD模拟部分保持一致。 4.2.3 热力学积分(TI)模拟 λ调度:所有模拟均采用包含软核势(softcore potentials)的9点高斯求积λ调度。 动态资源优化:这是本研究的一个关键效率优化点。研究者采用了一种“动态飞行中(on-the-fly)”的计算资源优化策略。该方法首先进行一个较短的初始模拟(如2.5 ns),然后通过算法自动检测模拟是否平衡以及计算是否收敛(通过比较前后两半时间序列的Jensen-Shannon距离)。如果未达到收敛标准,则自动增加一小段模拟时长(如0.5 ns),并重复检测,直至收敛。这极大地避免了在已收敛的计算上浪费机时。 多副本处理:当计算资源允许时,会对一些转换(尤其是预测结合能较好的)进行多次重复模拟。最终的ddG通过集合方法计算,即合并所有重复模拟的梯度时间序列数据,以获得更稳健的均值。 4.3 主动学习(AL)文库构建:ML引导的选择 4.3.1 分子表示与ML算法 分子特征化:为了让机器学习模型能“读懂”分子,研究者使用了多种分子指纹技术,包括:RDKit路径指纹、Morgan指纹(ECFP6)、3D分子指纹(E3FP)以及2D和3D的药效团指纹。 机器学习算法:采用了scikit-learn库中的三种经典算法:线性回归、随机森林和高斯过程回归(使用Tanimoto核)。 4.3.2 机器学习建模 迭代训练:在AL的每一次循环中,模型都会在所有已获得精确ABFE(由RBFE转换而来)数据的分子上进行训练。 模型选择:通过留一法交叉验证(LOOCV),在所有分子表示和ML算法的组合中,选择R2分数最高的模型作为当次迭代的最佳模型。 筛选策略 在AL迭代1-6轮,模型仅在Hit 1的衍生物上训练,并仅用于筛选AL集中属于Hit 1的16101个类似物。 在第7轮,模型在Hit 1和Hit 2的所有衍生物上训练,并用于筛选整个AL集。 选择方式为贪婪选择,即直接挑选出模型预测结合能最负(最优)的一批化合物进入下一轮的精确TI计算。 4.4 实验验证分子的选择 根据挑战赛的预算(75个分子或10000美元),研究者挑选了最终提交的分子列表。其中,70个分子完全基于计算出的ABFE值进行贪婪选择(67个Hit 1衍生物,3个Hit 2衍生物),另外5个分子则在具有负ABFE值的Hit 2衍生物中,偏向于化学多样性进行选择。 4.5 实验方法 蛋白表达与纯化:在Sf9昆虫细胞中表达LRRK2 WDR结构域蛋白,并通过亲和层析(Ni-NTA)和尺寸排阻色谱进行纯化,最终通过SDS-PAGE和质谱确认纯度和大小。 表面等离子共振(SPR):使用Biacore 8K仪器评估化合物的结合亲和力。将生物素化的LRRK2蛋白固定在芯片上,然后将一系列稀释的化合物流过芯片表面,通过监测响应信号的变化,使用1:1结合模型拟合动力学曲线并计算解离常数KD。 动态光散射(DLS):用于评估化合物的溶解度和聚集情况,确保SPR信号不是由化合物聚集引起的假阳性。 19F-NMR光谱:对于含氟的化合物,使用19F-NMR作为正交验证方法。通过观察加入蛋白后19F信号的展宽或化学位移变化,来独立地确认化合物与蛋白的结合。
Machine Learning & AI
· 2025-06-21
Token-Mol 1.0 Deep Analysis: Translating 3D Molecular Structures into Discrete Language for Language Models
Token-Mol 1.0 深度解析:将三维分子结构“翻译”为语言模型的离散语言 摘要 随着大型语言模型(LLM)在药物设计领域的应用日益增多,如何有效融合分子的三维(3D)结构信息成为了一大核心挑战 1。传统的化学语言模型(如基于SMILES)本质上无法处理3D信息 2,而基于图的方法虽然可以包含几何信息,却难以与通用的NLP模型集成 3。Token-Mol 1.0 是一篇发表于 Nature Communications 的研究,它提出了一种创新的“纯词元化”(token-only)范式,旨在构建一个统一的AI药物设计基础模型,弥合二维化学语言与三维物理结构之间的鸿沟。 本解析将重点阐述Token-Mol的核心方法论,特别是其分子表征策略、模型架构与关键创新模块,并探讨其与通用大模型技术(如RAG)的潜在整合,为理解和借鉴其设计哲学提供深度视角。 核心方法:Token-Mol的分子表征哲学 Token-Mol的基石在于其独特的输入构建方式,它将复杂的分子信息完全转化为一个离散的词元(token)序列,使得标准的语言模型可以直接处理。 输入构建:融合2D与3D信息的“分子语言” 模型的核心思想是将一个带有三维构象的分子,编码为一个包含二维拓扑和三维几何信息的单一文本序列。这个过程如 图1a 所示,具体步骤如下: 获取二维拓扑信息 (SMILES): 输入:分子的二维连接性图。 处理 :首先,将分子结构转换为化学领域广泛应用的 SMILES(简化分子线性输入规范)字符串 4 。SMILES是一种用ASCII字符串明确描述分子结构的规范。 输出 :一串描述分子图的字符序列,例如 C1=CC(=CC(=C1)O)CN... 5 。这是最终序列的基础部分。 提取三维几何信息 (Torsion Angles): 挑战 :直接将原子的三维笛卡尔坐标(XYZ)作为输入,会导致序列过长且难以处理分子的旋转/平移不变性 6 。 Token-Mol的解决方案 :通过在分子的SMILES表示上进行 深度优先搜索(DFS)遍历 ,来提取决定其三维构象的 关键可旋转键的扭转角(Torsion Angles) 7 。扭转角是描述分子构象的核心内部坐标,具有旋转不变性。 输出 :一系列代表扭转角度数的连续数值,例如 [-0.20, 3.14, 2.18, ...] 8 。 整合为最终的“Token-only”表征: 处理 :将提取出的扭转角数值 也作为独立的词元 ,直接追加到SMILES字符串的末尾 9 。同样,分子的其他理化性质(如在性质预测任务中)也被处理成词元 1010 。 最终输入序列 :一个结合了SMILES和扭转角词元的长序列,能够同时表征分子的2D化学结构和3D空间构象 1111 。 设计哲学 :这种表征方式非常精妙,它 将决定分子3D构象的核心自由度(扭转角)从连续空间映射到了离散的词元空间 ,同时保留了描述2D化学结构的SMILES语言。这使得一个基于Transformer的标准语言模型架构,能够在一个统一的框架内同时“阅读”和“理解”分子的2D和3D信息 1212 。 Token-Mol的核心机制在于其创新的数据表示方式。它使用广泛接受的SMILES(简化分子线性输入规范)字符串来表示分子的2D连接性,即原子类型和化学键排布 。SMILES本身是一种成熟的化学语言,但它本质上缺乏3D空间信息 。为了弥补这一缺陷,Token-Mol引入了扭转角(torsion angles)作为3D构象的关键描述符 。扭转角描述了沿化学键旋转的构象自由度,是决定分子三维形状的核心内部坐标之一 。 该模型的实现流程是,首先通过深度优先搜索(DFS)遍历分子图,提取出所有可旋转键的扭转角。然后,将这些连续的扭转角数值进行离散化处理,并作为特殊的“扭转角令牌”附加到SMILES字符串的相应位置。最终形成一个混合序列,例如 C(C<120.5>)C,其中 <120.5> 就是一个代表特定扭转角度的令牌。这种方式巧妙地将2D拓扑(SMILES骨架)和3D几何(扭转角)编织成一种“3D注释的化学语言”,可以直接输入到Transformer解码器中进行自回归式学习 。 图1: Token-Mol总览。(a) 数据预处理流程,将分子的SMILES字符串与扭转角结合成单一的词元化表示 13。(b) 模型的预训练与微调工作流 14。(c) GCE损失函数的权重分配示意图 15。(d) 用于口袋生成任务的编码器与融合模块 16。 输入表征的优势与劣势 这种将SMILES与扭转角结合的“分子语言”是一种创新的折衷,具有独特的优缺点。 优势: 统一2D与3D信息 :最核心的优势在于,它成功地将2D拓扑信息(SMILES)和3D几何信息(扭转角)编码到一个单一的、离散的词元序列中,从而能够被标准的语言模型架构直接处理 17171717 。 兼容性与速度 :作为一种“纯词元化”模型,它与GPT等通用大语言模型的架构高度兼容,易于集成 18181818 。其推理速度极快,例如在分子生成任务中比基于几何的扩散模型快约35倍 191919191919191919 。 规避XYZ坐标的难题 :该方法避免了直接使用笛卡尔坐标(XYZ)带来的序列过长和缺乏旋转等变性的问题 20 。 ** bridging a gap**:Token-Mol的表征为分子表示范式提供了 第三条路径 ,有效连接了传统的2D序列模型(无法处理3D信息)和3D图模型(难以集成到通用LLM中) 21 。 生成更灵活的分子 :通过引入扭转角信息,模型能够生成比单纯基于2D信息的模型更柔性、更多样化的分子,以更好地适应不同形状的口袋 22 。 劣势与挑战: 对低频信息的学习不足 :模型在学习和准确预测那些 出现频率较低的扭转角 的分布时会遇到困难 23 。 数值敏感性有限 :尽管引入了GCE损失函数,但与基于图神经网络(GNN)的模型相比,Token-Mol对连续数值的敏感度仍然存在局限 24 。 结构有效性风险 :由于模型是自回归地生成序列,对扭转角数量或数值的预测不准确可能会导致最终生成的分子结构无效 25 。 对柔性分子的挑战 :分析表明,随着分子中 可旋转键数量的增加,所有评估指标的性能都呈下降趋势 26 。尽管Token-Mol在这种情况下依然表现出相对优势,但这仍然是一个固有的挑战 27 。 模型架构与训练策略 Token-Mol采用了一系列精心设计的策略来训练模型,以确保其能够从“分子语言”中学习到有用的知识。 模型骨干:Transformer解码器 架构 :模型基于一个包含 12层Transformer解码器 的架构,每层配备8个注意力头 28 。 自回归方法 :采用自回归(Autoregressive)方式进行训练和生成 29 。在训练时,通过掩码矩阵防止信息泄露 30 ;在生成时,模型逐个预测下一个词元,从而构建出完整的分子序列 31 。 关键创新1:随机因果掩码 (Random Causal Masking) 挑战 :传统的从左到右的因果掩码不适合“完形填空”式的任务,限制了模型的灵活性 32 。 Token-Mol的策略 :在预训练阶段,采用 随机因果掩码 策略 33333333 。它会从泊松分布中采样要掩盖的片段数量(1到6个),然后在序列中随机选择位置进行掩码 34 。被掩盖的内容会附加在序列末尾,由特殊词元引导模型进行预测 35 。 目的 :这种策略极大地增强了模型“填空”的能力,使其能适应更多样化的下游任务,例如在分子的特定位置进行修饰或补全 36 。 关键创新2:高斯交叉熵损失函数 (Gaussian Cross-Entropy Loss) 挑战 :传统的交叉熵损失函数主要用于离散分类任务,它对数值大小不敏感 37 。例如,在预测扭转角时,如果真实值是2°,那么预测成3°和80°所产生的损失是完全相同的,这显然不合理 38 。 Token-Mol的解决方案 :针对回归任务(如预测扭转角和分子属性),作者提出了 高斯交叉熵(GCE)损失函数 39393939 。 工作原理 (如图1c):对于每一个要预测的数值标签,GCE会构建一个 以该标签值为中心的高斯分布 40 。这样,离真实标签值越近的词元会被赋予越高的概率权重,而离得远的词元权重则较低 41 。 效果 :这种加权方式使得模型在训练过程中能够 学习到数值之间的相对关系 42 ,显著提升了其在回归任务上的表现。消融实验表明,缺少GCE会导致模型在回归任务上的平均RMSE增加约12% 43 。 下游任务:分子性质预测 分子性质预测是检验模型表征学习能力的关键。在Token-Mol的框架中,这不是预训练阶段的一部分,而是一个下游微调任务。 流程:模型首先在大型无标签分子数据集(GEOM)上进行预训练,学习通用的分子表征 44444444。然后,针对具体的性质预测任务,使用带有标签的特定数据集对模型进行微调(Fine-tuning) 45454545。 预测的性质:研究中评估了一系列分类和回归任务,数据集来源于MoleculeNet和TDC等基准平台 46。 分类任务 (Classification) : BACE :预测分子是否为β-分泌酶1(BACE1)抑制剂 47 。 BBBP (Blood-Brain Barrier Penetration):预测分子是否能穿透血脑屏障 48 。 ClinTox :预测药物是否因毒性而在临床试验中失败 49 。 SIDER :预测药物的副作用 50 。 Tox21 :预测化合物在12条毒性信号通路上的活性 51 。 ToxCast :预测化合物在数百种高通量筛选实验中的毒性 52 。 回归任务 (Regression) : ESOL :预测有机物在水中的溶解度 53 。 FreeSolv :预测小分子在水中的水合自由能 54 。 Lipophilicity :预测分子的亲脂性(油水分配系数) 55 。 Caco-2 :预测药物通过Caco-2细胞的渗透率,用以模拟肠道吸收 56 。 AqSolDB (Aqueous Solubility) :预测分子的水溶性 57 。 Acute Toxicity LD50 :预测化学物质的急性口服毒性(半数致死剂量) 58 。 注意力分析:为了验证模型的可解释性,研究者分析了模型在进行溶解度(ESOL)和毒性(LD50)预测时的注意力权重 59。结果显示,在预测溶解度时,模型会高度关注极性基团(如羟基、氨基)和疏水基团(如氯苯) 60;在预测毒性时,模型会准确地将高注意力分配给已知的毒性基团(toxicophores),如亚硝酰胺和磷酸三酯 61616161。这证明模型不仅能做出准确预测,其决策过程也与化学直觉相符。 核心模块深度解析:基于口袋的分子生成 Token-Mol通过引入特定模块来处理复杂的下游任务,尤其是基于口袋的分子生成。 口袋编码器与融合模块 (Pocket Encoder and Fusion Block) 任务:在给定蛋白质口袋信息的前提下,生成能与之结合的配体分子 62。 输入: 蛋白质口袋信息 :使用一个 预训练好的蛋白质口袋编码器 来提取口袋的3D结构和理化性质特征 63636363 。该编码器在Token-Mol微调阶段其参数被 冻结 ,仅作为特征提取器 64646464 。 部分生成的配体序列(在自回归过程中)。 模型设计与融合机制 (如图1d): 融合机制 :为了将口袋信息与正在生成的配体分子信息相融合,模型采用了一种 多头条件注意力(multi-head condition-attention)机制 6565656565656565 。 工作原理 :这与传统的交叉注意力有所不同。在这里,蛋白质口袋信息被视为一个 静态的“提示(Prompt)” 66666666 。在自回归生成配体的每一步中,注意力机制的 查询(Query)、键(Key)和值(Value)矩阵完全来源于已经生成的配体序列本身 67 。口袋的“提示”信息则被用来调节(condition)这个自注意力计算过程。 通俗解释:可以想象成,在写一个故事时,有一个固定的主题(口袋信息)放在旁边。在写每个新句子(生成新原子/键)时,你不仅要回头看自己已经写过的内容(已生成的配体部分),还要时刻瞟一眼那个主题,确保新写的内容与主题是相关的。这使得生成的分子在每一步都受到口袋环境的约束和引导,从而保证了其结构与目标口袋的高度匹配。 与强化学习(RL)的结合 目的 :针对特定目标(如最大化与某个靶点的结合亲和力),进一步优化生成的分子 68 。 可行性 :Token-Mol的自回归架构与强化学习框架天然契合,因为“生成一个词元”这个动作可以被看作是RL中的一个“行动(action)” 69 。 实施 :研究中使用了 REINVENT算法 对模型进行优化 70 。通过设计一个包含亲和力(Vina Score)和类药性(QED)的奖励函数,模型可以在满足约束条件(如类药性)的同时,逐步生成亲和力更高的分子 717171717171717171 。实验证明,通过RL优化,分子的Vina score得到了显著提升,平均值从-8左右优化到了约-9.5 72 。 未来展望:与通用大语言模型的融合 Token-Mol的“纯词元化”框架使其与前沿的通用大模型技术具有极佳的兼容性,为未来构建更强大的药物设计助手铺平了道路 73737373。 即时交互与提示学习 (Prompt Learning) Token-Mol可以像与ChatGPT对话一样进行交互 74 。通过设计特定的任务提示(如 Predict ESOL )并对模型进行微调后,用户可以直接向模型查询特定分子的性质,模型也能成功返回预测结果 75 。这展示了其作为 化学家对话伙伴 的巨大潜力 76 。 检索增强生成 (Retrieval-Augmented Generation, RAG) 论文明确指出了整合RAG的未来方向 77777777 。 工作流程设想 :当用户向Token-Mol查询一个分子的性质时,系统可以首先将查询(包含分子信息)转换为一个向量,然后在一个包含海量分子数据(如3D结构、其他理化性质、实验数据等)的 向量数据库 中进行检索 78 。 优势 :检索出的最相关的上下文信息,会与原始查询一起被输入到Token-Mol中 79 。这使得模型在生成答案时,不仅依赖其内部学到的知识,还能 参考外部数据库提供的、更丰富和准确的实时信息 ,从而极大地增强其预测的可靠性和信息的全面性。 总结 Token-Mol 1.0 是首个专为药物设计定制的“纯词元化”大型预训练语言模型 80。通过将分子的2D(SMILES)和3D(扭转角)信息统一编码为离散词元序列,并引入高斯交叉熵(GCE)损失函数来处理连续数值,它成功地让一个标准的Transformer架构能够同时理解和生成复杂的分子结构 81。其模块化的设计,以及与强化学习、RAG等前沿AI技术的天然兼容性,为开发“单一基础模型驱动的全面药物设计”提供了一条极具前景的道路 82。
Machine Learning & AI
· 2025-06-20
Comprehensive Guide to Molecular Representation Language Models: From Proteins to Small Molecules
分子表示学习模型全览:从蛋白质到小分子的语言模型 分子表示学习已成为计算化学和生物信息学的核心技术。随着Transformer架构在自然语言处理中的成功,研究者们将其应用到分子数据的表示学习中,取得了显著进展。本文全面介绍从蛋白质到小分子的各种语言模型,为读者提供完整的技术栈和实用代码。 环境配置 基础依赖安装 # PyTorch安装(根据CUDA版本调整) pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126 # HuggingFace Transformers pip install transformers # 检查GPU可用性 python -c "import torch; print(f'CUDA Available: {torch.cuda.is_available()}'); print(f'GPU Count: {torch.cuda.device_count()}')" 可选:设置模型缓存路径 import os os.environ['TORCH_HOME'] = '/your/path/to/model' os.environ['HF_HOME'] = '/your/path/to/hf_model' 一、蛋白质语言模型 1.1 ESM-2系列 模型简介 ESM-2(Evolutionary Scale Modeling)是Meta开发的大规模蛋白质语言模型[1],在进化规模的蛋白质序列数据上进行预训练,能够捕获蛋白质的进化和结构信息。 可用模型规模 模型名称 层数 参数量 模型大小 esm2_t48_15B_UR50D 48 15B ~60GB esm2_t36_3B_UR50D 36 3B ~12GB esm2_t33_650M_UR50D 33 650M 2.5GB esm2_t30_150M_UR50D 30 150M ~600MB esm2_t12_35M_UR50D 12 35M ~140MB esm2_t6_8M_UR50D 6 8M ~32MB 安装和使用 pip install fair-esm import torch import esm # 检查GPU print("Number of GPUs:", torch.cuda.device_count()) # 加载模型(选择合适的规模) model, alphabet = esm.pretrained.esm2_t33_650M_UR50D() batch_converter = alphabet.get_batch_converter() model.eval() # 禁用dropout以获得确定性结果 # 如果有GPU,移动到GPU device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model = model.to(device) # 准备序列数据 data = [ ("protein1", "MKTVRQERLKSIVRILERSKEPVSGAQLAEELSVSRQVIVQDIAYLRSLGYNIVATPRGYVLAGG"), ("protein2", "KALTARQQEVFDLIRDHISQTGMPPTRAEIAQRLGFRSPNAAEEHLKALARKGVIEIVSGASRGIRLLQEE"), ] # 批量转换 batch_labels, batch_strs, batch_tokens = batch_converter(data) batch_tokens = batch_tokens.to(device) batch_lens = (batch_tokens != alphabet.padding_idx).sum(1) # 提取表示 with torch.no_grad(): results = model(batch_tokens, repr_layers=[33], return_contacts=True) # 获取token表示(每个氨基酸的embedding) token_representations = results["representations"][33] # 获取序列级表示(整个蛋白质的embedding) sequence_representations = [] for i, tokens_len in enumerate(batch_lens): # 移除特殊token(开始和结束) seq_repr = token_representations[i, 1 : tokens_len - 1].mean(0) sequence_representations.append(seq_repr) print(f"Token representation shape: {token_representations.shape}") print(f"Sequence representation shape: {sequence_representations[0].shape}") 高级用法:注意力权重和接触预测 # 获取注意力权重和接触预测 with torch.no_grad(): results = model(batch_tokens, repr_layers=[33], return_contacts=True) # 接触预测(用于蛋白质结构预测) contacts = results["contacts"] print(f"Contacts shape: {contacts.shape}") # 注意力权重 attentions = results["attentions"] print(f"Attention shape: {attentions.shape}") 1.2 ESM-C (ESM Cambrian) 模型简介 ESM-C是ESM3模型家族中专注于表示学习的平行模型[2],相比ESM-2在相同参数量下提供更高效的性能和更低的内存消耗。ESM-C设计为ESM-2的直接替代品,具有重大性能优势。 性能对比 ESM-C参数量 对应ESM-2参数量 ESM-C优势 300M 650M 更低内存消耗,更快推理 600M 3B 高效达到甚至超越更大规模ESM-2性能 6B - 性能远超最佳ESM-2模型 安装和使用 pip install esm 方法一:使用ESM SDK API(推荐) from esm.sdk.api import ESMProtein, LogitsConfig from esm.models.esmc import ESMC # 创建蛋白质对象 protein = ESMProtein(sequence="MKTVRQERLKSIVRILERSKEPVSGAQLAEELSVSRQVIVQDIAYLRSLGYNIVATPRGYVLAGG") # 加载模型(如果遇到tokenizer错误,使用方法二) try: client = ESMC.from_pretrained("esmc_600m").to("cuda") # 或 "cpu" # 编码蛋白质 protein_tensor = client.encode(protein) # 获取logits和embeddings logits_output = client.logits( protein_tensor, LogitsConfig(sequence=True, return_embeddings=True) ) print(f"Logits shape: {logits_output.logits.sequence.shape}") print(f"Embeddings shape: {logits_output.embeddings.shape}") # 提取序列级表示 sequence_embedding = logits_output.embeddings.mean(dim=1) # 平均池化 print(f"Sequence embedding shape: {sequence_embedding.shape}") except AttributeError as e: print(f"ESM-C错误: {e}") print("请使用方法二或方法三") If you see ESM-C错误: property 'cls_token' of 'EsmSequenceTokenizer' object has no setter please do this according to https://github.com/evolutionaryscale/esm/issues/214 pip install esm==3.1.1 The output is like Logits shape: torch.Size([1, 67, 64]) Embeddings shape: torch.Size([1, 67, 1152]) Sequence embedding shape: torch.Size([1, 1152]) 方法二:使用远程API(需要注册) from esm.sdk.forge import ESM3ForgeInferenceClient from esm.sdk.api import ESMProtein, LogitsConfig # 需要先在 https://forge.evolutionaryscale.ai 注册获取token forge_client = ESM3ForgeInferenceClient( model="esmc-6b-2024-12", url="https://forge.evolutionaryscale.ai", token="<your_forge_token>" ) protein = ESMProtein(sequence="MKTVRQERLKSIVRILERSKEPVSGAQLAEELSVSRQVIVQDIAYLRSLGYNIVATPRGYVLAGG") protein_tensor = forge_client.encode(protein) logits_output = forge_client.logits( protein_tensor, LogitsConfig(sequence=True, return_embeddings=True) ) print(f"Remote embeddings shape: {logits_output.embeddings.shape}") 1.3 CARP 模型简介 CARP(Contrastive Autoregressive Protein model)是微软开发的蛋白质语言模型[3],采用对比学习和自回归训练目标,在蛋白质序列建模方面表现优异。 安装和使用 在线安装: pip install git+https://github.com/microsoft/protein-sequence-models.git 离线安装: 下载仓库:https://github.com/microsoft/protein-sequence-models 解压并安装: cd /path/to/protein-sequence-models pip install . 代码实现 from sequence_models.pretrained import load_model_and_alphabet # 加载模型和序列处理器 model, collater = load_model_and_alphabet('carp_640M') # 准备序列数据(注意:需要嵌套列表格式) seqs = [['MDREQ'], ['MGTRRLLP'], ['MKTVRQERLKSIVRILERSKEPVSGAQLAEELSVSRQVIVQDIAYLRSLGYNIVATPRGYVLAGG']] # 将序列转换为模型输入格式 x = collater(seqs)[0] # (n, max_len) # 获取表示(第56层的表示) with torch.no_grad(): rep = model(x)['representations'][56] # (n, max_len, d_model) print(f"Input shape: {x.shape}") print(f"Representation shape: {rep.shape}") # 获取序列级表示(平均池化) sequence_repr = rep.mean(dim=1) print(f"Sequence representation shape: {sequence_repr.shape}") 1.4 ProtT5 模型简介 ProtT5是基于T5架构的蛋白质语言模型[4],采用编码器-解码器结构,在大规模蛋白质数据上预训练,支持多种下游任务。 从本地路径加载模型 import torch import re from transformers import T5Tokenizer, T5EncoderModel # 设备配置 device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu') print(f"Using device: {device}") # 本地模型路径(如果已下载) tokenizer_path = '/your/path/to/prot_t5_xl_half_uniref50-enc/' # 加载tokenizer和模型 try: tokenizer = T5Tokenizer.from_pretrained(tokenizer_path, do_lower_case=False) print(f"Tokenizer loaded from local path: {tokenizer_path}") except OSError: # 如果本地路径不存在,从HuggingFace下载 tokenizer = T5Tokenizer.from_pretrained('Rostlab/prot_t5_xl_half_uniref50-enc', do_lower_case=False) print("Tokenizer loaded from HuggingFace") # 加载模型 model = T5EncoderModel.from_pretrained("Rostlab/prot_t5_xl_half_uniref50-enc").to(device) # 示例蛋白质序列 sequence_examples = ["PRTEINO", "SEQWENCE"] # 预处理:替换稀有氨基酸,添加空格 sequence_examples = [" ".join(list(re.sub(r"[UZOB]", "X", sequence))) for sequence in sequence_examples] # Tokenization ids = tokenizer(sequence_examples, add_special_tokens=True, padding="longest", return_tensors="pt") input_ids = ids['input_ids'].to(device) attention_mask = ids['attention_mask'].to(device) # 生成embeddings with torch.no_grad(): embedding_repr = model(input_ids=input_ids, attention_mask=attention_mask) # 提取每个序列的残基embeddings emb_0 = embedding_repr.last_hidden_state[0, :7] # 第一个序列 emb_1 = embedding_repr.last_hidden_state[1, :8] # 第二个序列 print("Shape of embedding for sequence 1:", emb_0.shape) print("Shape of embedding for sequence 2:", emb_1.shape) print("Protein embeddings generated successfully!") 1.5 Ankh 模型简介 Ankh是专门为阿拉伯语蛋白质序列优化的多语言蛋白质模型[5],基于T5架构,支持多种语言和蛋白质表示任务。 实现代码 from transformers import AutoTokenizer, AutoModelForSeq2SeqLM import torch # 本地模型路径 local_model_path = "/your/path/to/ankh-large/" # 加载tokenizer和模型 tokenizer = AutoTokenizer.from_pretrained(local_model_path) model = AutoModelForSeq2SeqLM.from_pretrained(local_model_path) # 示例序列 sequence_examples = ["MKTVRQERLKSIVRILERSKEPVSGAQLAEELSVSRQVIVQDIAYLRSLGYNIVATPRGYVLAGG"] inputs = tokenizer(sequence_examples, return_tensors="pt", padding=True) # 设备配置 device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model = model.to(device) inputs = {key: value.to(device) for key, value in inputs.items()} # 生成编码器embeddings with torch.no_grad(): encoder_outputs = model.encoder(**inputs) embeddings = encoder_outputs.last_hidden_state # 提取有效序列的embeddings(移除padding) emb_0 = embeddings[0, :inputs['attention_mask'][0].sum()] print("Shape of encoder embeddings for sequence 1:", emb_0.shape) print("Model loaded successfully from:", local_model_path) 二、肽语言模型 2.1 PepBERT 模型简介 PepBERT是专门为肽序列设计的BERT模型[6],针对短肽序列进行优化,在肽-蛋白质相互作用预测等任务中表现优异。 模型特点 专门针对肽序列(通常长度较短) 基于BERT架构,采用掩码语言建模 在UniParc数据库的大规模肽序列上预训练 输出维度:320 安装和使用 import os import torch import importlib.util from tokenizers import Tokenizer # 设置环境变量 os.environ['TORCH_HOME'] = '/home/gxf1212/data/local-programs/model' os.environ['HF_HOME'] = '/home/gxf1212/data/local-programs/hf_model' # 本地模型路径 snapshot_path = "/home/gxf1212/data/local-programs/hf_model/hub/models--dzjxzyd--PepBERT-large-UniParc/snapshots/7b0cbb2f925d05c9fca42c63c1712f94200fdb41" def load_module_from_local(file_path): """从本地文件加载Python模块""" module_name = os.path.splitext(os.path.basename(file_path))[0] spec = importlib.util.spec_from_file_location(module_name, file_path) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) return module # 1) 动态加载模型配置 model_module = load_module_from_local(os.path.join(snapshot_path, "model.py")) config_module = load_module_from_local(os.path.join(snapshot_path, "config.py")) build_transformer = model_module.build_transformer get_config = config_module.get_config # 2) 加载tokenizer tokenizer_path = os.path.join(snapshot_path, "tokenizer.json") tokenizer = Tokenizer.from_file(tokenizer_path) # 3) 加载模型权重 weights_path = os.path.join(snapshot_path, "tmodel_17.pt") # 4) 初始化模型 device = "cuda" if torch.cuda.is_available() else "mps" if torch.backends.mps.is_built() else "cpu" config = get_config() model = build_transformer( src_vocab_size=tokenizer.get_vocab_size(), src_seq_len=config["seq_len"], d_model=config["d_model"] ) # 加载预训练权重 state = torch.load(weights_path, map_location=torch.device(device)) model.load_state_dict(state["model_state_dict"]) model.eval() # 5) 生成embeddings def get_peptide_embedding(sequence): """生成肽序列的embedding""" # 添加特殊token [SOS] 和 [EOS] encoded_ids = ( [tokenizer.token_to_id("[SOS]")] + tokenizer.encode(sequence).ids + [tokenizer.token_to_id("[EOS]")] ) input_ids = torch.tensor([encoded_ids], dtype=torch.int64) with torch.no_grad(): # 创建注意力掩码 encoder_mask = torch.ones((1, 1, 1, input_ids.size(1)), dtype=torch.int64) # 前向传播获取token embeddings emb = model.encode(input_ids, encoder_mask) # 移除特殊token的embeddings emb_no_special = emb[:, 1:-1, :] # 平均池化获取序列级表示 emb_avg = emb_no_special.mean(dim=1) return emb_avg # 使用示例 sequence = "KRKGFLGI" embedding = get_peptide_embedding(sequence) print("Shape of peptide embedding:", embedding.shape) # (1, 320) print("Peptide embedding generated successfully!") 三、小分子语言模型 3.1 ChemBERTa系列 模型简介 ChemBERTa是首个大规模的分子BERT模型[7],在7700万PubChem分子上预训练,采用掩码语言建模目标,为分子性质预测提供强大的预训练表示。 主要版本 ChemBERTa-77M-MLM: 在77M分子上用掩码语言建模预训练 ChemBERTa-2: 改进版本,支持多任务预训练 参数量: 约12M-77M参数 安装和使用 # 安装依赖 pip install transformers torch rdkit from transformers import AutoTokenizer, AutoModel import torch from rdkit import Chem # 加载预训练模型 model_name = "DeepChem/ChemBERTa-77M-MLM" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModel.from_pretrained(model_name) # 设备配置 device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model = model.to(device) def get_molecular_embedding(smiles_list): """获取分子的ChemBERTa embedding""" # Tokenization inputs = tokenizer(smiles_list, return_tensors="pt", padding=True, truncation=True, max_length=512) inputs = {key: value.to(device) for key, value in inputs.items()} # 前向传播 with torch.no_grad(): outputs = model(**inputs) # 使用[CLS] token的表示作为分子级表示 molecular_embeddings = outputs.last_hidden_state[:, 0, :] # [CLS] token # 或者使用平均池化 # molecular_embeddings = outputs.last_hidden_state.mean(dim=1) return molecular_embeddings # 使用示例 smiles_examples = [ "CCO", # 乙醇 "CC(=O)O", # 乙酸 "c1ccccc1", # 苯 "CN1C=NC2=C1C(=O)N(C(=O)N2C)C" # 咖啡因 ] # 验证SMILES有效性 valid_smiles = [] for smi in smiles_examples: mol = Chem.MolFromSmiles(smi) if mol is not None: valid_smiles.append(smi) else: print(f"Invalid SMILES: {smi}") # 生成embeddings embeddings = get_molecular_embedding(valid_smiles) print(f"Generated embeddings shape: {embeddings.shape}") print(f"Embedding dimension: {embeddings.shape[1]}") # 单个分子的embedding single_embedding = get_molecular_embedding(["CCO"]) print(f"Single molecule embedding shape: {single_embedding.shape}") 高级用法:微调ChemBERTa from transformers import AutoTokenizer, AutoModelForSequenceClassification, TrainingArguments, Trainer import torch.nn as nn # 加载用于分类任务的模型 model = AutoModelForSequenceClassification.from_pretrained( "DeepChem/ChemBERTa-77M-MLM", num_labels=2 # 二分类任务 ) # 准备数据集和训练参数 class MolecularDataset(torch.utils.data.Dataset): def __init__(self, smiles_list, labels, tokenizer, max_length=512): self.smiles_list = smiles_list self.labels = labels self.tokenizer = tokenizer self.max_length = max_length def __len__(self): return len(self.smiles_list) def __getitem__(self, idx): smiles = self.smiles_list[idx] label = self.labels[idx] encoding = self.tokenizer( smiles, truncation=True, padding='max_length', max_length=self.max_length, return_tensors='pt' ) return { 'input_ids': encoding['input_ids'].flatten(), 'attention_mask': encoding['attention_mask'].flatten(), 'labels': torch.tensor(label, dtype=torch.long) } # 微调代码示例(需要准备训练数据) # training_args = TrainingArguments( # output_dir='./results', # num_train_epochs=3, # per_device_train_batch_size=16, # per_device_eval_batch_size=64, # warmup_steps=500, # weight_decay=0.01, # logging_dir='./logs', # ) 3.2 MolFormer系列 模型简介 MolFormer是IBM开发的大规模化学语言模型[8],在11亿分子上预训练,采用线性注意力机制和旋转位置编码,在多个分子性质预测任务上达到SOTA性能。 模型特点 预训练数据: 11亿分子(PubChem + ZINC) 架构: 线性注意力Transformer + 旋转位置编码 高效性: 线性时间复杂度,支持长序列 性能: 在多个基准数据集上超越GNN模型 安装和使用 git clone https://github.com/IBM/molformer.git cd molformer pip install -e . import torch from molformer.models import MolFormer from molformer.tokenizer import MolTranBertTokenizer # 加载预训练模型和tokenizer model_path = "ibm/MoLFormer-XL-both-10pct" # HuggingFace模型路径 tokenizer = MolTranBertTokenizer.from_pretrained(model_path) model = MolFormer.from_pretrained(model_path) # 设备配置 device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model = model.to(device) model.eval() def get_molformer_embedding(smiles_list, max_length=512): """获取MolFormer分子embedding""" # Tokenization encoded = tokenizer( smiles_list, padding=True, truncation=True, max_length=max_length, return_tensors="pt" ) # 移动到设备 input_ids = encoded['input_ids'].to(device) attention_mask = encoded['attention_mask'].to(device) # 前向传播 with torch.no_grad(): outputs = model(input_ids=input_ids, attention_mask=attention_mask) # 使用最后一层的隐藏状态 hidden_states = outputs.last_hidden_state # 计算分子级表示(掩码平均池化) mask_expanded = attention_mask.unsqueeze(-1).expand(hidden_states.size()).float() sum_embeddings = torch.sum(hidden_states * mask_expanded, 1) sum_mask = torch.clamp(mask_expanded.sum(1), min=1e-9) molecular_embeddings = sum_embeddings / sum_mask return molecular_embeddings # 使用示例 smiles_examples = [ "CCO", "CC(=O)O", "c1ccccc1", "CN1C=NC2=C1C(=O)N(C(=O)N2C)C" ] embeddings = get_molformer_embedding(smiles_examples) print(f"MolFormer embeddings shape: {embeddings.shape}") print(f"Embedding dimension: {embeddings.shape[1]}") MolFormer-XL超大规模版本 # 对于MolFormer-XL(需要更多内存) model_xl_path = "ibm/MoLFormer-XL-both-10pct" tokenizer_xl = MolTranBertTokenizer.from_pretrained(model_xl_path) model_xl = MolFormer.from_pretrained(model_xl_path) # 使用混合精度以节省内存 model_xl = model_xl.half().to(device) # 使用半精度 # 对于大批量处理,建议分批处理 def batch_process_molecules(smiles_list, batch_size=32): """分批处理大量分子""" all_embeddings = [] for i in range(0, len(smiles_list), batch_size): batch = smiles_list[i:i+batch_size] embeddings = get_molformer_embedding(batch) all_embeddings.append(embeddings.cpu()) # 清理GPU缓存 torch.cuda.empty_cache() return torch.cat(all_embeddings, dim=0) 3.3 SMILES Transformer 模型简介 SMILES Transformer是首个专门为SMILES序列设计的Transformer模型[9],采用自编码任务进行预训练,学习分子的潜在表示,适用于低数据量的药物发现任务。 特点 预训练任务: 自编码(去噪自编码器) 数据: 170万ChEMBL分子(不超过100字符) SMILES增强: 使用SMILES枚举增加数据多样性 应用: 低数据药物发现 安装和使用 git clone https://github.com/DSPsleeporg/smiles-transformer.git cd smiles-transformer pip install -r requirements.txt import torch import torch.nn as nn from torch.nn import Transformer import numpy as np from rdkit import Chem class SMILESTransformer(nn.Module): """SMILES Transformer模型""" def __init__(self, vocab_size, d_model=512, nhead=8, num_layers=6, max_seq_len=100): super(SMILESTransformer, self).__init__() self.d_model = d_model self.embedding = nn.Embedding(vocab_size, d_model) self.pos_encoder = PositionalEncoding(d_model, max_seq_len) self.transformer = Transformer( d_model=d_model, nhead=nhead, num_encoder_layers=num_layers, num_decoder_layers=num_layers, dim_feedforward=2048, dropout=0.1 ) self.fc_out = nn.Linear(d_model, vocab_size) def forward(self, src, tgt=None, src_mask=None, tgt_mask=None): # 编码器 src_emb = self.pos_encoder(self.embedding(src) * np.sqrt(self.d_model)) if tgt is not None: # 训练模式(编码器-解码器) tgt_emb = self.pos_encoder(self.embedding(tgt) * np.sqrt(self.d_model)) output = self.transformer(src_emb, tgt_emb, src_mask=src_mask, tgt_mask=tgt_mask) return self.fc_out(output) else: # 推理模式(仅编码器) memory = self.transformer.encoder(src_emb, src_mask) return memory class PositionalEncoding(nn.Module): """位置编码""" def __init__(self, d_model, max_len=100): super(PositionalEncoding, self).__init__() pe = torch.zeros(max_len, d_model) position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1) div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-np.log(10000.0) / d_model)) pe[:, 0::2] = torch.sin(position * div_term) pe[:, 1::2] = torch.cos(position * div_term) pe = pe.unsqueeze(0).transpose(0, 1) self.register_buffer('pe', pe) def forward(self, x): return x + self.pe[:x.size(0), :] class SMILESTokenizer: """SMILES分词器""" def __init__(self): # 基础SMILES字符集 self.chars = ['<PAD>', '<SOS>', '<EOS>', '<UNK>'] + list("()[]1234567890=+-#@CNOSPFIBrClcnos") self.char_to_idx = {char: idx for idx, char in enumerate(self.chars)} self.idx_to_char = {idx: char for char, idx in self.char_to_idx.items()} self.vocab_size = len(self.chars) def encode(self, smiles, max_length=100): """编码SMILES字符串""" tokens = ['<SOS>'] + list(smiles) + ['<EOS>'] indices = [self.char_to_idx.get(token, self.char_to_idx['<UNK>']) for token in tokens] # 填充或截断 if len(indices) < max_length: indices += [self.char_to_idx['<PAD>']] * (max_length - len(indices)) else: indices = indices[:max_length] return torch.tensor(indices, dtype=torch.long) def decode(self, indices): """解码回SMILES字符串""" chars = [self.idx_to_char[idx.item()] for idx in indices] # 移除特殊token chars = [c for c in chars if c not in ['<PAD>', '<SOS>', '<EOS>', '<UNK>']] return ''.join(chars) def get_smiles_embedding(smiles_list, model, tokenizer, device): """获取SMILES的分子embedding""" model.eval() embeddings = [] with torch.no_grad(): for smiles in smiles_list: # 编码SMILES encoded = tokenizer.encode(smiles).unsqueeze(0).to(device) # 获取编码器输出 encoder_output = model(encoded) # 平均池化获取分子级表示 # 忽略padding token mask = (encoded != tokenizer.char_to_idx['<PAD>']).float() pooled = (encoder_output * mask.unsqueeze(-1)).sum(dim=1) / mask.sum(dim=1, keepdim=True) embeddings.append(pooled) return torch.cat(embeddings, dim=0) # 使用示例 def demo_smiles_transformer(): """演示SMILES Transformer的使用""" # 初始化模型和分词器 tokenizer = SMILESTokenizer() model = SMILESTransformer(vocab_size=tokenizer.vocab_size) device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model = model.to(device) # 示例SMILES smiles_examples = [ "CCO", "CC(=O)O", "c1ccccc1", "CN1C=NC2=C1C(=O)N(C(=O)N2C)C" ] # 验证SMILES valid_smiles = [] for smi in smiles_examples: if Chem.MolFromSmiles(smi) is not None: valid_smiles.append(smi) # 获取embeddings(注意:这里使用的是未训练的模型,仅用于演示) embeddings = get_smiles_embedding(valid_smiles, model, tokenizer, device) print(f"SMILES embeddings shape: {embeddings.shape}") return embeddings # 运行演示 # embeddings = demo_smiles_transformer() 3.4 SMILES-BERT 模型简介 SMILES-BERT是Wang等人开发的基于BERT的分子语言模型[10],专门设计用于处理SMILES序列,采用掩码SMILES恢复任务进行大规模无监督预训练。该模型使用基于注意力机制的Transformer层,能够有效捕获分子序列中的长程依赖关系。 模型特点 半监督学习: 结合大规模无标签数据预训练和下游任务微调 注意力机制: 基于Transformer的注意力机制捕获分子内原子关系 可迁移性: 预训练模型可轻松迁移到不同的分子性质预测任务 使用示例 # SMILES-BERT通常需要从源码安装或使用类似的实现 from transformers import AutoTokenizer, AutoModel import torch from rdkit import Chem def create_smiles_bert_embedding(smiles_list, model_name="DeepChem/ChemBERTa-77M-MLM"): """ 使用BERT-like模型生成SMILES embedding 注:这里使用ChemBERTa作为SMILES-BERT的替代实现 """ tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModel.from_pretrained(model_name) device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model = model.to(device) # 验证SMILES valid_smiles = [smi for smi in smiles_list if Chem.MolFromSmiles(smi) is not None] # Tokenization和编码 inputs = tokenizer(valid_smiles, return_tensors="pt", padding=True, truncation=True, max_length=512) inputs = {key: value.to(device) for key, value in inputs.items()} # 生成embeddings with torch.no_grad(): outputs = model(**inputs) # 使用[CLS] token表示或平均池化 embeddings = outputs.last_hidden_state.mean(dim=1) # 平均池化 return embeddings # 使用示例 smiles_examples = ["CCO", "CC(=O)O", "c1ccccc1", "CN1C=NC2=C1C(=O)N(C(=O)N2C)C"] embeddings = create_smiles_bert_embedding(smiles_examples) print(f"SMILES-BERT embeddings shape: {embeddings.shape}") 3.5 Smile-to-Bert 模型简介 Smile-to-Bert是最新发布的BERT架构模型[11],专门预训练用于从SMILES表示预测113个分子描述符,将分子结构和理化性质信息整合到embeddings中。该模型在22个分子性质预测数据集上进行了评估,表现优异。 模型特点 多任务预训练: 同时预测113个RDKit计算的分子描述符 理化性质感知: embeddings包含分子结构和理化性质信息 最新技术: 2024年发布,代表最新的分子BERT技术 使用示例 # Smile-to-Bert的概念实现 from transformers import BertModel, BertTokenizer import torch from rdkit import Chem class SmileToBert: """Smile-to-Bert模型的概念实现""" def __init__(self, model_path="smile-to-bert"): """ 初始化Smile-to-Bert模型 注:实际使用需要从官方仓库获取预训练权重 """ # 这里使用通用BERT作为示例,实际应使用预训练的Smile-to-Bert权重 self.tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') self.model = BertModel.from_pretrained('bert-base-uncased') # 添加分子特定的特殊token special_tokens = ['[MOL]', '[BOND]', '[RING]'] self.tokenizer.add_tokens(special_tokens) self.model.resize_token_embeddings(len(self.tokenizer)) self.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') self.model.to(self.device) def preprocess_smiles(self, smiles): """预处理SMILES字符串""" # 在SMILES中添加空格以便tokenization processed = ' '.join(list(smiles)) return processed def get_molecular_embedding(self, smiles_list): """获取分子的embedding""" # 预处理SMILES processed_smiles = [self.preprocess_smiles(smi) for smi in smiles_list] # Tokenization inputs = self.tokenizer( processed_smiles, return_tensors="pt", padding=True, truncation=True, max_length=512 ) inputs = {key: value.to(self.device) for key, value in inputs.items()} # 获取embeddings with torch.no_grad(): outputs = self.model(**inputs) # 使用[CLS] token或平均池化 embeddings = outputs.last_hidden_state[:, 0, :] # [CLS] token return embeddings # 使用示例 def demo_smile_to_bert(): """演示Smile-to-Bert使用""" # 初始化模型 smile_bert = SmileToBert() # 示例SMILES smiles_examples = [ "CCO", # 乙醇 "CC(=O)O", # 乙酸 "c1ccccc1", # 苯 "CN1C=NC2=C1C(=O)N(C(=O)N2C)C" # 咖啡因 ] # 验证SMILES有效性 valid_smiles = [] for smi in smiles_examples: if Chem.MolFromSmiles(smi) is not None: valid_smiles.append(smi) # 生成embeddings embeddings = smile_bert.get_molecular_embedding(valid_smiles) print(f"Smile-to-Bert embeddings shape: {embeddings.shape}") print("Note: 这是概念实现,实际使用需要官方预训练权重") return embeddings # 运行演示 # embeddings = demo_smile_to_bert() 3.6 MolBERT 模型简介 MolBERT是专门为化学领域定制的BERT模型[12],针对处理SMILES字符串进行了优化,能够提取丰富的上下文分子表示。该模型在大规模化学语料库上预训练,特别适合分子相似性搜索和药物发现任务。 模型特点 化学特异性: 专门为化学SMILES数据定制 双向上下文: 利用BERT的双向注意力机制 迁移学习: 在小数据集上表现优异 使用示例 import os import torch import yaml from typing import Sequence, Tuple, Union import numpy as np # 这里需要根据实际情况修改类的定义,为了代码完整,从原始文件中提取相关部分 class MolBertFeaturizer: def __init__( self, checkpoint_path: str, device: str = None, embedding_type: str = 'pooled', max_seq_len: int = None, permute: bool = False, ) -> None: super().__init__() self.checkpoint_path = checkpoint_path self.model_dir = os.path.dirname(os.path.dirname(checkpoint_path)) self.hparams_path = os.path.join(self.model_dir, 'hparams.yaml') self.device = device or 'cuda' if torch.cuda.is_available() else 'cpu' self.embedding_type = embedding_type self.output_all = False if self.embedding_type in ['pooled'] else True self.max_seq_len = max_seq_len self.permute = permute # load config with open(self.hparams_path) as yaml_file: config_dict = yaml.load(yaml_file, Loader=yaml.FullLoader) # 假设这里有一个简单的 logger 实现,实际使用时需要导入 logging 模块 class SimpleLogger: def debug(self, msg): print(msg) logger = SimpleLogger() logger.debug('loaded model trained with hparams:') logger.debug(config_dict) # 这里假设 SmilesIndexFeaturizer 已经定义,为了简化,省略其实现 class SmilesIndexFeaturizer: @staticmethod def bert_smiles_index_featurizer(max_seq_len, permute): return None # load smiles index featurizer self.featurizer = self.load_featurizer(config_dict) # 这里假设 SmilesMolbertModel 已经定义,为了简化,省略其实现 class SmilesMolbertModel: def __init__(self, config): self.config = config def load_from_checkpoint(self, checkpoint_path, hparam_overrides): pass def load_state_dict(self, state_dict): pass def eval(self): pass def freeze(self): pass def to(self, device): return self # load model from types import SimpleNamespace self.config = SimpleNamespace(**config_dict) self.model = SmilesMolbertModel(self.config) self.model.load_from_checkpoint(self.checkpoint_path, hparam_overrides=self.model.__dict__) # HACK: manually load model weights since they don't seem to load from checkpoint (PL v.0.8.5) checkpoint = torch.load(self.checkpoint_path, map_location=lambda storage, loc: storage) self.model.load_state_dict(checkpoint['state_dict']) self.model.eval() self.model.freeze() self.model = self.model.to(self.device) if self.output_all: self.model.model.config.output_hidden_states = True def load_featurizer(self, config_dict): # load smiles index featurizer if self.max_seq_len is None: max_seq_len = config_dict.get('max_seq_length') # 假设这里有一个简单的 logger 实现,实际使用时需要导入 logging 模块 class SimpleLogger: def debug(self, msg): print(msg) logger = SimpleLogger() logger.debug('getting smiles index featurizer of length: ', max_seq_len) else: max_seq_len = self.max_seq_len return SmilesIndexFeaturizer.bert_smiles_index_featurizer(max_seq_len, permute=self.permute) @staticmethod def trim_batch(input_ids, valid): # trim input horizontally if there is at least 1 valid data point if any(valid): _, cols = np.where(input_ids[valid] != 0) # else trim input down to 1 column (avoids empty batch error) else: cols = np.array([0]) max_idx: int = int(cols.max().item() + 1) input_ids = input_ids[:, :max_idx] return input_ids def transform(self, molecules: Sequence[Any]) -> Tuple[Union[Dict, np.ndarray], np.ndarray]: # 这里假设 self.featurizer.transform 已经实现 input_ids, valid = self.featurizer.transform(molecules) input_ids = self.trim_batch(input_ids, valid) token_type_ids = np.zeros_like(input_ids, dtype=np.long) attention_mask = np.zeros_like(input_ids, dtype=np.long) attention_mask[input_ids != 0] = 1 input_ids = torch.tensor(input_ids, dtype=torch.long, device=self.device) token_type_ids = torch.tensor(token_type_ids, dtype=torch.long, device=self.device) attention_mask = torch.tensor(attention_mask, dtype=torch.long, device=self.device) with torch.no_grad(): # 这里假设 self.model.model.bert 已经实现 outputs = self.model.model.bert( input_ids=input_ids, token_type_ids=token_type_ids, attention_mask=attention_mask ) if self.output_all: sequence_output, pooled_output, hidden = outputs else: sequence_output, pooled_output = outputs # set invalid outputs to 0s valid_tensor = torch.tensor( valid, dtype=sequence_output.dtype, device=sequence_output.device, requires_grad=False ) pooled_output = pooled_output * valid_tensor[:, None] # concatenate and sum last 4 layers if self.embedding_type == 'average-sum-4': sequence_out = torch.sum(torch.stack(hidden[-4:]), dim=0) # B x L x H # concatenate and sum last 2 layers elif self.embedding_type == 'average-sum-2': sequence_out = torch.sum(torch.stack(hidden[-2:]), dim=0) # B x L x H # concatenate last four hidden layer elif self.embedding_type == 'average-cat-4': sequence_out = torch.cat(hidden[-4:], dim=-1) # B x L x 4*H # concatenate last two hidden layer elif self.embedding_type == 'average-cat-2': sequence_out = torch.cat(hidden[-2:], dim=-1) # B x L x 2*H # only last layer - same as default sequence output elif self.embedding_type == 'average-1': sequence_out = hidden[-1] # B x L x H # only penultimate layer elif self.embedding_type == 'average-2': sequence_out = hidden[-2] # B x L x H # only 3rd to last layer elif self.embedding_type == 'average-3': sequence_out = hidden[-3] # B x L x H # only 4th to last layer elif self.embedding_type == 'average-4': sequence_out = hidden[-4] # B x L x H # defaults to last hidden layer else: sequence_out = sequence_output # B x L x H sequence_out = sequence_out * valid_tensor[:, None, None] sequence_out = sequence_out.detach().cpu().numpy() pooled_output = pooled_output.detach().cpu().numpy() if self.embedding_type == 'pooled': out = pooled_output elif self.embedding_type == 'average-1-cat-pooled': sequence_out = np.mean(sequence_out, axis=1) out = np.concatenate([sequence_out, pooled_output], axis=-1) elif self.embedding_type.startswith('average'): out = np.mean(sequence_out, axis=1) else: out = dict(sequence_output=sequence_out, pooled_output=pooled_output) return out, valid # 示例使用 if __name__ == "__main__": # 从 README 中获取预训练模型的下载链接 checkpoint_path = 'path/to/your/downloaded/checkpoint.ckpt' featurizer = MolBertFeaturizer(checkpoint_path=checkpoint_path) # 示例分子的 SMILES 字符串 smiles_list = ['CCO', 'CCN'] features, valid = featurizer.transform(smiles_list) print("Features:", features) print("Valid:", valid) 3.7 通用大语言模型在分子数据上的应用 LLaMA和GPT在SMILES上的应用 最近的研究表明,通用大语言模型如LLaMA和GPT在处理SMILES字符串方面表现出了惊人的能力[13]。这些模型虽然没有专门为化学领域设计,但其强大的语言理解能力使其能够有效处理分子表示。 性能对比 LLaMA: 在分子性质预测和药物-药物相互作用预测中表现优于GPT GPT: 虽然性能略逊于LLaMA,但仍能产生有意义的分子表示 与专用模型对比: LLaMA在某些任务上可与专门的分子预训练模型相媲美 使用示例 # 使用HuggingFace接口调用通用大语言模型 from transformers import LlamaTokenizer, LlamaModel, GPT2Tokenizer, GPT2Model import torch from rdkit import Chem class UniversalLLMForMolecules: """通用大语言模型用于分子表示学习""" def __init__(self, model_type='llama', model_name=None): """ 初始化通用LLM 参数: model_type: 'llama' 或 'gpt2' model_name: 具体模型名称 """ if model_type == 'llama': # 注意:需要申请LLaMA访问权限 model_name = model_name or "meta-llama/Llama-2-7b-hf" self.tokenizer = LlamaTokenizer.from_pretrained(model_name) self.model = LlamaModel.from_pretrained(model_name) elif model_type == 'gpt2': model_name = model_name or "gpt2" self.tokenizer = GPT2Tokenizer.from_pretrained(model_name) self.model = GPT2Model.from_pretrained(model_name) # GPT2需要设置pad_token self.tokenizer.pad_token = self.tokenizer.eos_token else: raise ValueError(f"Unsupported model type: {model_type}") self.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') self.model.to(self.device) self.model.eval() def get_molecular_embeddings(self, smiles_list): """使用通用LLM获取分子embeddings""" # 验证SMILES valid_smiles = [] for smi in smiles_list: mol = Chem.MolFromSmiles(smi) if mol is not None: valid_smiles.append(smi) # 为SMILES添加描述性前缀以提高理解 prompted_smiles = [f"Molecule with SMILES: {smi}" for smi in valid_smiles] # Tokenization inputs = self.tokenizer( prompted_smiles, return_tensors="pt", padding=True, truncation=True, max_length=512 ) inputs = {key: value.to(self.device) for key, value in inputs.items()} # 生成embeddings with torch.no_grad(): outputs = self.model(**inputs) hidden_states = outputs.last_hidden_state # 使用平均池化获取序列级表示 attention_mask = inputs['attention_mask'].unsqueeze(-1) masked_embeddings = hidden_states * attention_mask embeddings = masked_embeddings.sum(dim=1) / attention_mask.sum(dim=1) return embeddings # 使用示例(需要相应的模型访问权限) def demo_universal_llm(): """演示通用LLM在分子数据上的应用""" try: # 使用GPT-2(更容易获取) llm = UniversalLLMForMolecules(model_type='gpt2', model_name='gpt2') smiles_examples = ["CCO", "CC(=O)O", "c1ccccc1"] embeddings = llm.get_molecular_embeddings(smiles_examples) print(f"Universal LLM embeddings shape: {embeddings.shape}") print("注意:通用LLM可能需要更多的提示工程以获得最佳性能") except Exception as e: print(f"Error loading universal LLM: {e}") print("请确保已安装相应的模型和权限") # demo_universal_llm() 四、模型对比与选择指南 4.1 主要模型对比表 类别 模型 参数量 输出维度 预训练数据规模 主要优势 适用场景 蛋白质 ESM-2 8M-15B 320-5120 250M序列 进化信息丰富,多规模选择 蛋白质结构预测、功能注释 ESM-C 300M-6B 1152 >1B序列 更高效率,更强性能 大规模蛋白质分析 CARP 640M 1280 ~1.7M序列 对比学习,自回归建模 蛋白质生成、设计 ProtT5 ~3B 1024 45M序列 T5架构,编码器-解码器 多任务蛋白质预测 Ankh ~3B 1536 多语言数据 多语言支持 跨语言蛋白质研究 肽 PepBERT ~300M 320 UniParc肽序列 专门优化短肽 肽-蛋白质相互作用 小分子 ChemBERTa 12M-77M 384-768 77M分子 首个分子BERT,成熟生态 分子性质预测 MolFormer 47M 512-768 1.1B分子 线性注意力,处理长序列 大规模分子筛选 SMILES Transformer ~10M 512 1.7M分子 自编码,低数据优化 小数据集药物发现 SMILES-BERT ~12M 768 大规模SMILES 掩码语言建模,半监督 分子性质预测 Smile-to-Bert ~110M 768 PubChem+113描述符 多任务预训练,理化性质感知 综合分子性质预测 MolBERT ~12M 768 化学语料库 化学特异性,双向上下文 分子相似性搜索 LLaMA (分子) 7B+ 4096+ 通用+SMILES 强大语言理解,泛化能力 复杂分子推理任务 GPT (分子) 175B+ 12288+ 通用+SMILES 生成能力强,对话式交互 分子生成和解释 4.2 性能与效率对比 计算资源需求 模型类别 内存需求 推理速度 训练复杂度 GPU要求 ESM-2 (650M) ~3GB 中等 高 V100/A100推荐 ESM-C (600M) ~2.5GB 快 中等 GTX 1080Ti可用 ChemBERTa ~500MB 快 低 GTX 1060可用 MolFormer ~1GB 快 中等 RTX 2080可用 SMILES-BERT ~500MB 快 中等 GTX 1060可用 Smile-to-Bert ~1GB 中等 中等 RTX 2080可用 MolBERT ~500MB 快 低 GTX 1060可用 LLaMA (7B) ~14GB 慢 极高 A100推荐 GPT (175B) >350GB 极慢 极高 多卡A100 准确性表现 蛋白质任务 结构预测: ESM-2 > ESM-C > ProtT5 功能预测: ESM-C ≥ ESM-2 > CARP 肽相互作用: PepBERT > 通用蛋白质模型 分子性质预测 通用性能: MolFormer > Smile-to-Bert > ChemBERTa-2 > ChemBERTa 小数据集: SMILES Transformer > SMILES-BERT > 大模型 多任务学习: Smile-to-Bert > MolBERT > ChemBERTa 理化性质: Smile-to-Bert > 传统描述符方法 通用推理: LLaMA > GPT > 专用模型(在某些复杂任务上) 4.3 选择建议 根据应用场景选择 蛋白质研究 结构生物学: ESM-2 (t33或更大) 大规模分析: ESM-C (600M) 蛋白质设计: CARP 多任务预测: ProtT5 小分子研究 药物发现: MolFormer或Smile-to-Bert 新药研发: ChemBERTa-2或MolBERT 分子生成: 结合GPT/LLaMA的方法 概念验证: ChemBERTa或SMILES Transformer 理化性质预测: Smile-to-Bert(专门优化) 肽研究 肽-蛋白质相互作用: PepBERT 抗菌肽设计: PepBERT + 微调 根据资源条件选择 高性能计算环境 推荐: ESM-2大模型、MolFormer-XL、LLaMA/GPT分子应用 优势: 最佳性能,支持复杂推理 标准工作站 推荐: ESM-C、ChemBERTa、MolFormer标准版、Smile-to-Bert 平衡性能与资源需求 资源受限环境 推荐: ESM-2小模型、SMILES Transformer、SMILES-BERT 确保基本功能 根据数据特点选择 大规模数据 使用预训练大模型: MolFormer、ESM-C、LLaMA/GPT 利用规模优势 小规模数据 使用专门优化的模型: SMILES Transformer、PepBERT、SMILES-BERT 或使用预训练+微调 特定领域 理化性质预测: Smile-to-Bert 短肽: PepBERT 分子生成: GPT/LLaMA方法 化学推理: 通用大语言模型 五、最佳实践与技巧 5.1 模型选择策略 原型阶段: 使用小模型快速验证想法 性能优化: 逐步升级到大模型 生产部署: 平衡性能与资源需求 特殊需求: 选择专门优化的模型 5.2 优化技巧 内存优化 # 使用混合精度 model = model.half() # 梯度检查点 model.gradient_checkpointing_enable() # 批处理优化 def batch_inference(data, model, batch_size=32): results = [] for i in range(0, len(data), batch_size): batch = data[i:i+batch_size] with torch.no_grad(): result = model(batch) results.append(result.cpu()) torch.cuda.empty_cache() return torch.cat(results) 速度优化 # 模型编译(PyTorch 2.0+) model = torch.compile(model) # TensorRT优化(NVIDIA GPU) import torch_tensorrt optimized_model = torch_tensorrt.compile(model) 5.3 实用工具函数 def standardize_molecular_input(smiles_list): """标准化分子输入""" from rdkit import Chem standardized = [] for smi in smiles_list: mol = Chem.MolFromSmiles(smi) if mol is not None: # 标准化SMILES canonical_smi = Chem.MolToSmiles(mol, canonical=True) standardized.append(canonical_smi) else: print(f"Invalid SMILES: {smi}") return standardized def validate_protein_sequence(sequence): """验证蛋白质序列""" valid_amino_acids = set('ACDEFGHIKLMNPQRSTVWY') return all(aa in valid_amino_acids for aa in sequence.upper()) def estimate_memory_usage(model_name, batch_size, sequence_length): """估算内存使用量""" memory_map = { 'esm2_t33_650M': lambda b, l: b * l * 1280 * 4 * 1e-9 + 2.5, 'chemberta': lambda b, l: b * l * 768 * 4 * 1e-9 + 0.5, 'molformer': lambda b, l: b * l * 768 * 4 * 1e-9 + 1.0, } if model_name in memory_map: estimated_gb = memory_map[model_name](batch_size, sequence_length) return f"Estimated memory usage: {estimated_gb:.2f} GB" else: return "Memory estimation not available for this model" 参考文献 [1] Lin Z, et al. Evolutionary-scale prediction of atomic-level protein structure with a language model. Science. 2023;379(6637):1123-1130. [2] EvolutionaryScale. ESM Cambrian: Focused on creating representations of proteins. 2024. Available: https://github.com/evolutionaryscale/esm [3] Rao R, et al. MSA Transformer. In: International Conference on Machine Learning. 2021:8844-8856. [4] Elnaggar A, et al. ProtTrans: towards cracking the language of Life’s code through self-supervised deep learning and high performance computing. IEEE Transactions on Pattern Analysis and Machine Intelligence. 2021;44(10):7112-7127. [5] ElNaggar A, et al. Ankh: Optimized protein language model unlocks general-purpose modelling. 2023. Available: https://huggingface.co/ElnaggarLab/ankh-large [6] Zhang H, et al. PepBERT: A BERT-based model for peptide representation learning. 2023. Available: https://github.com/dzjxzyd/PepBERT-large [7] Chithrananda S, Grand G, Ramsundar B. ChemBERTa: Large-scale self-supervised pretraining for molecular property prediction. arXiv preprint arXiv:2010.09885. 2020. [8] Ross J, et al. Large-scale chemical language representations capture molecular structure and properties. Nature Machine Intelligence. 2022;4(12):1256-1264. [9] Honda S, Shi S, Ueda HR. SMILES transformer: Pre-trained molecular fingerprint for low data drug discovery. 2019. Available: https://github.com/DSPsleeporg/smiles-transformer [10] Wang S, Guo Y, Wang Y, Sun H, Huang J. SMILES-BERT: Large scale unsupervised pre-training for molecular property prediction. Proceedings of the 10th ACM International Conference on Bioinformatics, Computational Biology and Health Informatics. 2019:429-436. [11] Barranco-Altirriba M, Würf V, Manzini E, Pauling JK, Perera-Lluna A. Smile-to-Bert: A BERT architecture trained for physicochemical properties prediction and SMILES embeddings generation. bioRxiv. 2024. doi:10.1101/2024.10.31.621293. [12] MolBERT: A BERT-based model for molecular representation learning. GitHub. Available: https://github.com/BenevolentAI/MolBERT [13] Al-Ghamdi A, et al. Can large language models understand molecules? BMC Bioinformatics. 2024;25:347. [14] Molecular Transformer. Schwaller P, et al. Molecular transformer: a model for uncertainty-calibrated chemical reaction prediction. ACS Central Science. 2019;5(9):1572-1583. [15] ST-KD. Li S, et al. Stepping back to SMILES transformers for fast molecular representation inference. 2021. Available: https://openreview.net/forum?id=CyKQiiCPBEv
Machine Learning & AI
· 2025-06-15
Making Black Boxes Transparent: Interpretable pKa Prediction Models via Atomic Sensitivity Analysis
“黑箱”的透明化:BCL-XpKa通过原子敏感性分析实现可解释的pKa预测模型 Title: Interpretable Deep-Learning pKa Prediction for Small Molecule Drugs via Atomic Sensitivity Analysis Authors: Joseph DeCorte,* Benjamin Brown, Rathmell Jeffrey, and Jens Meiler https://doi.org/10.1021/acs.jcim.4c01472 Cite This: J. Chem. Inf. Model. 2025, 65, 101-113 一、 论文整体概览 1. 摘要、背景与科学问题 摘要翻译 机器学习(ML)模型如今在预测药物研发所必需的性质方面扮演着至关重要的角色,例如药物的对数尺度酸解离常数(pKa)。尽管近期在架构上取得了进展,但由于缺乏基准真实数据,这些模型在面对新化合物时常常泛化能力不佳。此外,这些模型也缺乏可解释性。为此,通过精心设计的分子嵌入,可以通过观察模型对输入分子进行原子扰动后的响应,来获取化学结构中的原子级分辨率信息。在此,我们提出了BCL-XpKa,一个基于深度神经网络(DNN)的多任务分类器,用于pKa预测,它通过Mol2D描述符来编码局部原子环境。BCL-XpKa为每个分子输出一个离散分布,该分布存储了pKa预测值以及模型对该分子的不确定性。BCL-XpKa能很好地泛化到新的小分子上,其性能与现代ML pKa预测器相当,在泛化任务中优于多个模型,并能准确模拟常见分子修饰对分子可电离性的影响。然后,我们通过原子敏感性分析(ASA)利用BCL-XpKa的精细描述符集和以分布为中心的输出,该分析无需重新训练模型即可将分子的预测pKa值分解为其各自的原子贡献。ASA揭示了BCL-XpKa已经隐式地学习到了关于分子亚结构的高分辨率信息。我们进一步通过在93.2%的复杂小分子酸和87.8%的碱中识别电离位点,展示了ASA在为蛋白质-配体对接准备结构方面的效用。最后,我们应用带有BCL-XpKa的ASA方法,识别并优化了一款最近发表的KRAS降解PROTAC的物理化学缺陷。 背景 在计算辅助药物研发领域,准确预测化合物在体内的行为(如生物利用度、溶解度等)对于节约研发时间和成本至关重要。其中,分子的酸解离常数(pKa)是一个决定其在生理pH下电离状态的关键物理化学性质,深刻影响着药物的吸收、分布、代谢、排泄和毒性(ADMET)。 传统的预测方法中,量子力学(QM)计算能够提供与实验相当的精度,但其巨大的计算成本使其无法应用于药物发现早期阶段对数以亿计化合物的虚拟高通量筛选(vHTS)。因此,机器学习(ML)方法,特别是定量结构-活性/性质关系(QSAR/QSPR)模型,因其极高的预测速度而成为主流。这些模型通过分子指纹或图神经网络(GNNs)等方式将化学结构转化为数学表示,并学习结构与性质之间的关系。 本文解决的科学问题总结 尽管ML方法取得了巨大成功,但仍面临两大核心挑战,这也是本文着力解决的科学问题: 性能与泛化问题:现有的ML模型大多依赖于数量有限的高质量实验数据进行训练,这常常导致模型在面对训练集中未见过的、新颖的化学骨架时泛化能力差,容易过拟合。 可解释性问题:大多数先进的ML模型(尤其是深度学习模型)如同一个“黑箱”,我们很难理解模型是基于分子的哪些具体结构特征做出某一特定预测的。这种可解释性的缺乏阻碍了我们对模型预测结果的信任,也使得我们难以从模型的“智慧”中获得化学洞见来指导后续的药物设计。 本文旨在通过创新的模型架构(BCL-XpKa)和新颖的可解释性分析方法(ASA)来同时应对这两个挑战。 mindmap root(可解释性pKa预测分析思路) )为可解释性服务的模型架构( ::icon(fa fa-cogs) **多任务分类(MTC)架构** **核心思路**<br/>预测pKa落入离散区间的概率分布 **关键产出**<br/>输出**概率分布**而非单个值<br/>为ASA提供可比较的分布 **附加价值**<br/>分布的标准差可作为**模型不确定度** **局部原子描述符(Mol2D)** **核心思路**<br/>仅编码原子及其一阶邻居<br/>使模型对单原子扰动更敏感 **关键特性**<br/>**可逆性**:描述符可直接映射回化学亚结构<br/>是实现归因分析的基础 )原子敏感性分析(ASA)( ::icon(fa fa-atom) **核心方法:基于扰动的归因** **扰动方式**<br/>将目标杂原子替换为同构的碳原子 **差异量化**<br/>用**KL散度**衡量扰动前后<br/>模型输出的pKa概率分布差异 **分数计算**<br/>通过指数函数放大KL散度<br/>得到最终ASA分数 **应用一:识别关键电离位点** **做法**<br/>寻找分子中ASA分数最高的原子 **结论**<br/>高分原子大概率是主要质子化或去质子化位点 **价值**<br/>快速标注分子质子态<br/>用于对接或MD模拟前的结构准备 **应用二:洞察模型学习到的化学知识** **做法**<br/>分析特定亚结构在不同化学环境下的ASA分数变化 **化学原理验证**<br/>**诱导效应**:邻近吸电子或给电子基团<br/>会相应降低或提高碱性氮的ASA分数 **上下文理解**<br/>模型能区分局部环境相同但整体有别的基团<br/>(如咪唑 vs. 吲哚) **研究启发**<br/>验证模型是否学到真实的化学规则<br/>增加对“黑箱”预测的信任 **应用三:指导先导化合物优化** **完整工作流**<br/>1. **定位缺陷**:用ASA找到导致不良pKa的原子<br/>2. **提出方案**:对高分原子进行生物电子等排替换<br/>3. **快速验证**:用模型预测新分子的pKa<br/>4. **结构确认**:用对接等方法确认活性 2. BCL-XpKa 模型简介 作者首先构建了一个名为 BCL-XpKa 的pKa预测模型,其核心是一个多层感知机(MLP)。该模型的设计巧妙,集成了几个关键特性: 分类而非回归(Multitask Classification, MTC):不同于传统模型直接预测一个连续的pKa值,BCL-XpKa将pKa范围划分为多个离散的“桶”(bins),并预测分子的pKa值落入每个“桶”的概率。最终的pKa值是这个概率分布的期望值。这种做法的好处是: 可以直接从输出分布的标准差中读出模型对预测的不确定度。 通过识别模型在哪些分子上表现出“高不确定性”或“高置信度但高错误率”,可以指导训练数据的优化。 在性能上与回归模型相当,甚至略优。 双模型架构:为了处理既有酸性基团又有碱性基团的复杂分子,作者分别训练了 BCL-XpKaAcid 和 BCL-XpKaBase 两个模型,用于分别预测一个分子中酸性最强和碱性最强的pKa值。 图1:BCL-XpKa的架构评估 (A) BCL-XpKa 使用独立的模型来预测分子的酸性和碱性pKa值。它使用 Mol2D 局部原子环境描述符来嵌入分子,然后使用一个多层感知机(MLP)来对pKa值所属的1-pKa单位区间进行分类。区间边缘交替包含和不包含端点。极值区间(pKa≤0, pKa>12)在其无界的一侧是开放的。 (B) 用于pKa预测的多任务分类误差随“桶”尺寸的增加而变化。小的“桶”允许更高的精度,但每个桶的数据更少;而大的“桶”精度较低,但每个桶的数据更多。 (C) BCL-XpKa与使用相同分子描述符和训练集训练的最佳性能回归架构在两个外部测试集上的性能对比。 (D) “留下一类” (leave-class-out, LCO) 方法,其中一种分子亚结构被从模型训练中移除,并在之后用作结构新颖的测试集。 (E) 模型误差由LCO亚结构和描述符类型决定。 (F) LCO亚结构的误差与包含该亚结构的TS-Acid或TS-Base分子数量的关系。 3. Mol2D 描述符为何对 ASA 至关重要? BCL-XpKa模型选择使用 Mol2D 描述符 而非更复杂的GNN,这是实现原子级别可解释性(ASA)的基石。参考其原始论文 BCL::Mol2D—a robust atom environment descriptor for QSAR modeling and lead optimization,Mol2D 的核心优势在于其设计上的简洁性与可逆性。 核心定义:Mol2D的核心是原子环境(Atom Environment, AE)。一个 AE 是以某个原子为中心,包含其周围一定化学键距离内的原子及其成键信息。BCL-XpKa使用的是 height=1 的AE,这意味着它只考虑中心原子和与它直接相连的邻居原子。 与传统指纹的关键区别: 计数而非存在与否:传统指纹(如 Molprint2D)通常是二进制的,只记录某种AE是否“存在”。而 BCL::Mol2D 是一个计数向量,它记录了分子中每种特定AE出现的次数。这提供了更丰富的信息,例如可以区分五元环和六元环。 细粒度的原子类型:Mol2D 不仅考虑元素类型,还考虑了原子的杂化状态/轨道构型(’Atom type’ 编码),这使得它能够区分同样是氮原子,但在不同化学环境下的细微差别。 通用 AE 库:BCL::Mol2D 的描述符向量的每一个维度都对应一个从大型化合物库(超过90万个类药分子)中预先构建好的“通用AE库”中的特定AE。这意味着描述符的索引是固定的,任何分子都可以被映射到这个统一的向量空间中。 可逆性(Reversibility)——实现ASA的关键: 这是 Mol2D 最重要的特性。由于描述符向量的每个索引都唯一地、固定地对应着一个具体的化学亚结构(即一个AE),我们可以从描述符向量反推回它所代表的化学结构。 这种清晰的“描述符-结构”对应关系,使得当我们扰动一个原子时,我们能精确知道是哪些维度的描述符发生了变化。这为衡量模型对特定原子变化的敏感度提供了直接、无歧义的途径。 相比之下,许多复杂的GNN模型其内部表示(节点嵌入)是经过多轮信息传递后高度抽象化的向量,难以直接映射回具体的、独立的原子或化学键贡献,从而使原子级别的归因分析变得非常困难。 4. BCL-XpKa 模型性能与表现总结 BCL-XpKa模型尽管采用了相对简单的多层感知机(MLP)架构,但在多个基准测试中展现了极具竞争力的性能。 与主流预测器的性能对比:在多个外部标准测试集(如Novartis、SAMPL6-8)上,BCL-XpKa的平均绝对误差(MAE)与包括ChemAxon、QupKake以及基于GNN的MolGpKa和Uni-pKa等在内的多种现代pKa预测器不相上下。例如,在Novartis-Acid测试集上,其MAE为0.79。 优秀的泛化能力:模型的核心优势在于其对新化学骨架的泛化能力。在“留下一类”(Leave-Class-Out, LCO)的交叉验证中,模型需要预测从未在训练集中见过的、特定化学亚结构分子的pKa。结果显示,使用Mol2D描述符的BCL-XpKa显著优于使用传统MACCS和Morgan指纹的同等模型,平均MAE分别为1.1(BCL-XpKa)、1.46(MACCS)和1.20(MFP2)。 准确捕捉化学趋势:模型不仅能预测绝对pKa值,更能准确地再现微小化学修饰所引起的pKa变化趋势。例如,在包含71对仅有细微结构差异的分子测试中,BCL-XpKa能够正确预测pKa变化方向的比例高达81.7%。这对于指导药物化学中的先导化合物优化尤为重要。 数据策略的有效性:该研究还表明,尽管模型主要在预测数据(来自ChEMBL)上进行训练,但其性能全面优于仅使用少量实验数据训练的同等模型(BCL-MLP-MTC-EO),证实了在大规模预测数据基础上进行训练策略的有效性。 二、 原子敏感性分析(ASA)方法细节与应用 这部分是该研究的核心。原子敏感性分析(Atomic Sensitivity Analysis, ASA) 的设计初衷是:在不重新训练模型的情况下,将模型对整个分子的pKa预测值“分解”到每个原子上,从而理解哪个原子或基团对最终的预测贡献最大。 1. ASA的核心原理 ASA的核心思想是“基于扰动的敏感性分析”。它通过系统性地、有物理意义地扰动分子中的每一个原子,并观察模型预测结果的变化剧烈程度,来判断该原子对原始预测的重要性。如果对某个原子的微小改动导致了模型预测结果的巨大变化,那么这个原子就被认为是“敏感的”或“重要的”。 2. ASA的具体实施步骤 graph TD subgraph "ASA 核心流程(针对单个原子)" A["**第1步:父本预测**<br/>将原始分子输入BCL-XpKa<br/>获得pKa概率分布 P_parent"] --> B; B["**第2步:原子扰动**<br/>将分子中的杂原子 a<br/>替换为同构的碳原子<br/>生成'扰动分子'"] --> C; C["**第3步:扰动预测**<br/>将'扰动分子'输入模型<br/>获得新的pKa概率分布 P_perturbed"] --> D; D["**第4步:量化差异**<br/>计算两个分布的差异<br/>使用Kullback-Leibler (KL)散度<br/>D_KL(P_perturbed || P_parent)"] --> E; E["**第5步:计算ASA分数**<br/>通过经验公式放大信号<br/>ASA(a) = exp[S * D_KL] - 1<br/>得到原子 a 的敏感性分数"] end style A fill:#e3f2fd,stroke:#1e88e5,stroke-width:2px style B fill:#fff3e0,stroke:#ef6c00,stroke-width:2px style C fill:#e3f2fd,stroke:#1e88e5,stroke-width:2px style D fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px style E fill:#f3e5f5,stroke:#6a1b9a,stroke-width:2px 第1步:获取父本分子的预测分布:将原始的、未经修改的“父本分子”(parent molecule)输入到BCL-XpKa模型中,获取模型输出的pKa概率分布 Pparent。 第2步:对单个原子进行扰动:遍历分子中的每一个杂原子(非碳、氢原子),将其替换为一个保持价态和杂化状态正确的碳原子。 第3-4步:获取扰动分布并量化差异:将这个新的“扰动分子”输入到同一个BCL-XpKa模型中,获取其pKa概率分布 Pperturbed,并使用Kullback-Leibler(KL)散度来衡量 Pparent 和 Pperturbed 这两个概率分布的差异。 第5步:计算最终的ASA分数:原始的KL散度值需要经过一步经验性的去噪和放大,才能得到最终的ASA分数。其计算公式为: \(\text{ASA}(\text{atom } a) = e^{[S \cdot D_{KL}(P_{\text{perturbed}} || P_{\text{parent}})]} - 1\) 这个公式通过指数函数非线性地放大差异,使得影响显著的原子的分数远高于影响微弱的原子。 3. ASA的分析思路与应用 识别关键功能位点(Ionization Site Identification) 做法是直接找出分子中ASA分数最高的原子。这通常就是模型认为的、决定该分子pKa值的主要电离/质子化位点。论文在Novartis测试集上进行了验证,该测试集中的酸性分子平均有2.93个潜在电离亚结构,碱性分子平均有2.61个。ASA方法在识别最酸性原子时达到了灵敏度96.6%和特异性82.9%,在识别最碱性亚结构时也表现出色。这种方法的直接应用是在药物研发早期,可以快速、批量地为化合物库中的分子标注质子化状态,为后续的对接、MD模拟等步骤提供更准确的输入结构。 图3:用于分子分析的原子敏感性 (A) ASA协议示意图。“扰动pKa分布”和“父本pKa分布”指的是由BCL-XpKa输出的离散分布。 (B) 一个由BCL-XpKaAcid评分的酸的ASA分数示例。在这里,磺酰胺的氮原子被正确地选择为比其他潜在的酸性亚结构更具酸性。 (C) 一个由BCL-XpKaBase评分的碱的ASA分数示例。 (D) 一个碱,其中酰胺的氧原子在存在更具碱性的氮原子的情况下,主导了ASA分数。这种情况在61个含酰胺的碱性化合物中出现了4次。 (E) 用于BCL-XpKaBase分解的阳性(蓝色)和阴性(红色)对照亚结构的ASA分数。 (F) 通过添加一个胺基来调节吡啶氮的ASA分数,示例显示在x轴下方。ns = 不显著。*** = p < 0.001。 洞察模型的“化学知识”与学习机制(Probing Model Learning) 做法是比较同一官能团在不同化学环境下的ASA分数,或比较局部环境相同但整体化学性质迥异的基团。论文发现,邻近的吸电子基团(EWG)会显著降低吡啶氮的ASA分数(即降低其碱性贡献),而给电子基团(EDG)则会提高其分数(见图4F)。例如,在图2D的分子系列中,将哌啶(pKa 11.2,预测10.45)芳构化为吡啶(pKa 5.20,预测5.45),其碱性显著下降,模型准确地捕捉了这一趋势。这证明了模型虽然只学习了局部原子环境,但隐式地捕捉到了上下文依赖的化学规则。这种分析可以用来验证模型是否学到了正确的化学知识,而不是仅仅记住了某些表观特征,从而增加我们对模型预测的信任度。 图4:亚结构的原子敏感性分析 (A-D) 常见亚结构在作为分子的主要电离位点时与存在更主要电离位点时的ASA分数小提琴图。 (E) 常见亚结构在作为主要电离位点时的ASA分数小提琴图。 (F) 相邻的吸电子基团(EWG)和给电子基团(EDG)对吡啶氮ASA分数的影响,通过ASA分数的变化(ΔASA)来衡量。 (G) 分子对称性对ASA分数的“掩蔽效应”。 指导先导化合物的理性优化(Lead Optimization) 这是一个非常实用的应用场景,也是可以借鉴的完整工作流。论文以一个已知的KRAS降解剂PROTAC(P-1, PDB: 8QU8)为例,该分子与靶蛋白形成的复合物中,其连接臂上的一个叔胺与KRAS的Q62残基形成了关键的盐桥相互作用(图5A-B)。 流程: 问题定位:ASA分析显示,这个叔胺氮原子具有最高的ASA分数(12.1),确认了它就是导致PROTAC在生理条件下可能质子化的主要碱性位点(图5C)。而这种质子化状态不利于细胞膜通透性。 提出优化方案:针对这个高分子的叔胺,进行生物电子等排替换,例如将其替换为酰胺,设计出候选分子P-2(图5D)。 快速虚拟验证:BCL-XpKa模型预测P-2的pKa值显著降低至3.23,成功消除了碱性。 结构验证:通过对接模拟发现,新的P-2分子依然能够与KRAS的Q62残基形成一个关键的氢键,保持了必要的结合模式(图5F-H)。 结论:这个流程展示了如何利用ASA精确定位分子的物化性质缺陷来源,并指导进行高效、理性的化学修饰,从而在保持活性的前提下优化类药性。 图5:用于药物设计的原子敏感性分析 (A) 泛KRAS降解PROTAC P-1与VHL和KRAS形成的三元复合物的晶体结构(PDB: 8QU8)。 (B) PROTAC P-1,其pKa由BCL-XpKaBase计算为6.51。 (C) P-1连接臂中氮原子的ASA分数。 (D) 提出的P-1连接臂生物电子等排替换修饰及其由BCL-XpKa预测的pKa值。 (E) P-1和P-2对接到8QU8中VHL-KRAS蛋白-蛋白相互作用界面的三元复合物模型全局视图。 (F-H) 8QU8晶体结构和P-2酰胺修饰的结合位点视图,显示它们支持相似的PROTAC构象,并保留了与KRAS Q62的氢键。 三、 ASA的局限性与未来方向 作者在论文的讨论部分明确提到了当前框架的一些局限性,这对于我们借鉴和改进该方法至关重要。 仅限于原子级别:ASA旨在识别单个原子对预测的贡献,但不能直接输出“官能团级别”的贡献。一个原子的影响往往与它所在的整个官能团或药效团紧密相关,而ASA目前无法直接解耦这种集体效应。 对非直接电离原子的影响处理不完美:一些本身不电离但能显著影响pKa的原子(例如,通过强诱导效应或共振效应)偶尔会得到异常高的分数,从而干扰对真正电离位点的判断。例如,在一个含有酰胺的碱性分子中,有少数情况是酰胺的氧原子(本身不质子化)得到了最高的ASA分数,这可能是因为它被扰动后对分子整体电子云的改变过大,从而“掩盖”了真正的质子化位点。 扰动方式单一:将杂原子替换为碳是一种有意义但简化的扰动方式。对于某些复杂的化学环境,这种替换可能无法完全反映该原子在真实化学修饰中的作用。 未来方向: 指导数据增强:通过ASA识别出模型预测不佳或不确定的化学结构类型,可以指导性地扩充训练集,从而提升模型的性能和泛化能力。 整合到药物发现工作流:作者致力于将ASA整合到更大的药物发现工作流中,例如用于超大规模虚拟筛选(vHTS)的分子库预处理,以确保正确的分子质子化状态,提高筛选的命中率。 拓展到其他性质预测:论文提出,未来可以将ASA的思想应用于ADMET(吸收、分布、代谢、排泄、毒性)等更复杂性质的预测模型中,以理解和优化这些关键的药物属性。
Machine Learning & AI
· 2025-06-12
Deconstructing Blood-Brain Barrier Permeability: An Interpretable Multimodal Deep Ensemble Framework
解构血脑屏障渗透性:一个可解释的多模态深度集成框架 一、 论文整体概览 1. 论文基本信息 标题:Interpretable Multimodal Deep Ensemble Framework Dissecting Blood–brain Barrier Permeability with Molecular Features 中文译名:使用分子特征解构血脑屏障渗透性的可解释多模态深度集成框架 期刊:The Journal of Physical Chemistry Letters DOI: 10.1021/acs.jpclett.5c01077 发表年份:2025 Citation: J. Phys. Chem. Lett. 2025, 16, 5806-5819 2. 摘要、背景与科学问题 摘要翻译 血脑屏障渗透性(BBBP)预测在药物发现过程中扮演着关键角色,特别是对于靶向中枢神经系统(CNS)的化合物。尽管机器学习(ML)已显著推动了BBBP的预测,但目前仍迫切需要能够揭示调控BBB渗透性的物理化学原理的可解释性ML模型。在本研究中,我们提出了一个多模态ML框架,该框架整合了分子指纹(Morgan, MACCS, RDK)和图像特征以改进BBBP预测。分类任务(BBB可渗透 vs. 不可渗透)通过一个结合了多个基础分类器的堆叠集成模型来解决。在可比较的评估设置下,所提出的框架与近期的方法相比,展示了有竞争力的预测稳定性、泛化能力和特征可解释性。除了预测性能,我们的框架还结合了主成分分析(PCA)和沙普利加性解释(SHAP)分析,以突显对预测有贡献的关键指纹特征。回归任务(logBB值预测)则通过一个多输入深度学习框架来解决,该框架包含一个用于处理指纹的Transformer编码器,一个用于提取图像特征的卷积神经网络(CNN),以及一个用于增强特征交互的多头注意力融合机制。从多模态特征中提取的注意力图(Attention maps)揭示了分子表示内部的令牌(token)级关系。这项工作提供了一个可解释的框架,用于以增强的透明度和机理洞察力来建模BBBP,并为未来结合透明描述符和物理信息特征的研究奠定了基础。 背景与科学问题 血脑屏障(BBB)是保护中枢神经系统(CNS)的关键生理屏障,但它也成为CNS药物研发的巨大障碍。准确预测一个候选药物能否穿透BBB,是其成药性的决定性因素之一。传统的实验方法成本高昂且耗时,因此开发快速、准确且可靠的计算模型至关重要。 近年来,机器学习(ML)和深度学习(DL)模型在BBBP预测上取得了很高的准确率。然而,这些高性能的模型往往像一个“黑箱”,研究人员难以理解其做出特定预测的具体依据。这种可解释性的缺失不仅阻碍了我们对模型预测的信任,更重要的是,我们无法从模型学到的知识中提炼出清晰的、指导性的化学规则来辅助新药的理性设计。 因此,本文的核心科学问题是:如何在保证高预测精度的前提下,构建一个透明、可解释的BBBP预测框架,从而不仅“知其然”(预测结果),更能“知其所以然”(揭示分子结构与BBB渗透性之间的构效关系)? mindmap root(可解释性分析思路与实践) )特征集质量初评( ::icon(fa fa-flask) **PCA降维可视化** **核心思路**<br/>在建模之前快速评估特征集的质量与判别能力 **关键发现**<br/>MACCS指纹比Morgan指纹<br/>能更有效地分离BBB正负样本 **研究启发**<br/>这是筛选有效分子表示方法的一种重要且高效的前置步骤 )模型归因分析( ::icon(fa fa-search-plus) **SHAP值分析** **核心思路**<br/>定量计算每个“分子亚结构”对最终预测的贡献度 **高贡献度(高SHAP值)的关键亚结构** MACCS_43<br/>极性官能团(氢键供体/受体、磺酸盐) MACCS_39<br/>亚硫酸(酯) MACCS_37<br/>氨基酰胺(如脲结构) **化学原理验证** **极性表面积(PSA)原理**<br/>极性基团(如MACCS_43)增加PSA从而**降低**穿透脂质血脑屏障的能力<br/>(表现为高的负SHAP值) **卤化效应**<br/>MACCS_46(溴代基团)的负贡献可能源于分子量增加或代谢不稳定 **上下文依赖性** **结论**<br/>亚结构的最终效果受到<br/>分子整体拓扑和周围化学环境的共同调节 **具体表现**<br/>同一亚结构(如MACCS_38)在不同分子中可产生相反的SHAP贡献 **研究启发**<br/>为药物化学家提供**可操作的优化线索**<br/>指导基于构效关系的**理性药物设计** )深度模型内部机制探索( ::icon(fa fa-project-diagram) **注意力图可视化** **核心思路**<br/>揭示Transformer等深度模型在预测时“关注”的特征区域 **两种分析模式** **内部结构注意力**<br/>分析指纹序列内部各部分的重要性 **跨模态注意力**<br/>分析“指纹特征”与“图像空间区域”的关联 **关键发现**<br/>模型注意力会**从模糊逐渐聚焦**<br/>到化学上有意义的区域<br/>(例如`C=C`和`C-O-C`官能团) **研究启发**<br/>验证深度模型是否抓住了**正确的物理化学特征**<br/>为理解复杂模型的**内部工作机制**提供直观窗口 3. 模型框架总结 为解决上述问题,作者提出了一个多模态深度集成框架,其核心是融合不同来源的分子信息来提供更丰富的表征。 多模态特征输入:模型不依赖于单一的分子表示,而是同时整合了多种信息。其中分子指纹(Morgan、MACCS 和 RDK)和2D分子图像特征是两大核心输入模态。 指纹与模型的使用方式:论文中的框架分别针对分类和回归两个任务设计了不同的模型。在评估时,Morgan、MACCS和RDK这三种指纹是分开独立使用的,即用每一种指纹分别训练和评估模型,以比较不同分子表示方法的效果。它们并未融合成一个单一的巨大特征向量。 双任务模型架构:图2中展示的(a)和(b)是针对两个不同任务的两种独立模型。 分类模型(图2a,BBB+ vs. BBB-):该模型仅使用分子指纹作为输入。它采用一个堆叠集成模型(Stacking Ensemble Model)。该模型将多个基础分类器(如逻辑回归、随机森林、XGBoost等)的预测结果作为元特征(meta-features),再由一个最终的分类器进行综合决策,以提高模型的稳定性和泛化能力。 回归模型(图2b,logBB值预测):该模型采用了多模态输入,即同时使用分子指纹和2D分子图像。它是一个更复杂的多输入深度学习网络,使用Transformer处理序列化的指纹特征,用CNN处理图像特征,最后通过多头注意力机制(Multi-Head Attention)将这两种不同模态的特征进行深度融合。 图像特征的价值:论文明确提出,通过多模态融合来丰富分子表示是其核心策略之一。在回归模型中,作者专门设计了CNN和注意力模块来处理和融合图像特征。结论部分也强调,多样化分子模态的融合(即指纹+图像)结合透明的归因技术,能够提供更准确和有意义的预测。PCA分析(图8 e,f)显示,在与MACCS和RDK指纹融合后,特征空间的解释方差有所提升或保持高位,这表明图像特征确实为模型提供了有价值的互补信息,特别是在通过跨模态注意力分析揭示两种特征的关联时,其价值更为凸显。 二、 核心可解释性方法与发现 本文的亮点在于系统性地应用了多种前沿的可解释性技术来剖析其模型,从不同维度揭示了BBBP的分子层面的驱动因素。 1. 特征空间分析:PCA降维可视化 在进行复杂的模型解释之前,作者首先使用了主成分分析(PCA)这一经典的无监督降维方法,来直观地评估不同分子指纹对BBB+/BBB-两类分子的区分能力。 做法与发现: 将所有分子的Morgan指纹和MACCS指纹分别通过PCA降到二维空间进行可视化。 图6(a)显示,在使用Morgan指纹时,BBB+(红色)和BBB-(蓝色)两类分子的数据点严重重叠,难以区分,且前两个主成分仅能解释总方差的极小部分(PC1: 1.36%, PC2: 1.16%)。这表明Morgan指纹生成的特征向量虽然信息量大,但可能过于稀疏或其线性组合难以捕捉到类别间的清晰界限。 相比之下,图6(b)显示,在使用MACCS指纹时,两类分子的数据点形成了相对清晰可分的簇,且前两个主成分解释了更多的方差(PC1: 11.31%, PC2: 8.0%)。这说明MACCS指纹定义的166个预设化学亚结构,能够更有效地捕捉与BBB渗透性相关的结构差异。 应用与价值:PCA分析虽然简单,但它是在建模之前快速评估特征集质量和判别能力的有效手段。通过这种方法,作者在早期就得出结论:MACCS指纹在这种二元分类任务中比Morgan指纹更具信息量,这为后续选择MACCS作为主要特征进行SHAP分析提供了依据。 2. SHAP分析:量化分子指纹的贡献 SHAP(Shapley Additive Explanations)是一种源于合作博弈论的模型解释方法,它可以为单个样本的预测结果计算出每个输入特征的贡献值(SHAP值)。一个正的SHAP值表示该特征将预测推向正类(如BBB+),负值则推向负类(如BBB-)。 做法与发现: 作者对表现最好的分类模型(基于MACCS指纹的堆叠模型)进行了SHAP分析。图6(c)的蜂群图(Beeswarm plot)直观地展示了所有测试样本中,对模型影响最大的前几个MACCS指紋特征。 关键特征识别:分析发现,MACCS_43(通常代表富含氢键供体/受体和磺酸盐的极性官能团)、MACCS_39(O-S(=O)O)、MACCS_37(N-C(=O)N)和MACCS_38(N-C(-C)-N)等特征具有最高的平均SHAP值,表明它们对模型的预测有决定性影响。 化学意义的验证:图6(d)展示了包含这些关键亚结构的具体分子示例。例如,MACCS_43 在一个分子中贡献了+0.130的正SHAP值,而在另一个分子中贡献了-0.169的负SHAP值。这与化学直觉相符:极性基团通常会增加分子的极性表面积(PSA),从而降低其穿透富含脂质的血脑屏障的能力(对应负的SHAP值,预测为BBB-)。MACCS_46(代表溴代亚结构)的SHAP值为负,这可能是因为过度卤化会增加分子量或引入代谢不稳定性,从而整体上降低了渗透性。 上下文依赖性:SHAP分析还揭示了亚结构贡献的上下文依赖性。例如,MACCS_38(对称的二胺结构)在某些分子中贡献为正(+0.108),而在另一些分子中为负(-0.057),这表明其最终效果受到分子整体拓扑结构和周围化学环境的调节。 应用与价值:SHAP提供了一种强大的、定量的手段,可以将抽象的模型预测归因于具体的、化学家可以理解的分子亚结构。这使得模型的决策过程不再是“黑箱”,而是可以被验证和理解的。论文指出,这种由SHAP引导的分析为以结构功能关系为基础的CNS靶向药物设计提供了可操作的见解。虽然本文未直接展示用SHAP结果指导模型调优或新实验,但其揭示的关键特征无疑可以用于指导特征工程(例如,构建仅包含最重要特征的简化模型)或提出需要通过实验验证的化学假说(例如,系统性地修饰MACCS_43代表的基团来验证其对渗透性的影响)。 图6:特征分析与SHAP可解释性 (a) 使用Morgan特征的BBB+/BBB-样本的前两个主成分(PC)的PCA得分图。 (b) 使用MACCS特征的PCA得分图。 (c) 展示了使用MACCS指纹的模型中,样本级别的SHAP值分布的蜂群图。 (d) 包含关键亚结构的代表性分子的结构可视化,并标注了其对应的SHAP值(pos代表正贡献,neg代表负贡献)。 3. 注意力机制可视化:揭示模型内部焦点 对于用于logBB值预测的多输入深度学习模型,作者利用其核心组件——注意力机制(Attention Mechanism)——来探索模型在进行预测时,其“注意力”集中在哪些特征上。 做法与发现: 内部结构注意力(Intra-Structure Attention):图11(a)展示了Transformer编码器内部的注意力热图。这张图揭示了模型在处理一个分子的指纹序列时,不同指纹“令牌”(tokens)之间的相互依赖关系。 跨模态注意力(Cross-Modal Attention):图11(b)展示了从训练的第1个周期到第50个周期,分子指纹特征和CNN提取的图像特征之间的跨模态注意力图的演化。可以清晰地看到,随着训练的进行,模型逐渐学会将指纹中的特定信息(符号/化学特征)与图像中的特定空间区域(视觉特征)对应起来。模型的注意力从最初的模糊、分散状态,逐渐锐化并聚焦于化学上有意义的区域。 具体案例分析:以一个BBB+的分子divinylether为例,模型的高度注意力权重区域,无论是内部结构注意力还是跨模态注意力,都准确地对应于其分子结构中的关键官能团,如烯烃(C=C)和醚键(C-O-C)。 应用与价值:注意力可视化为理解深度学习模型(特别是基于Transformer的模型)的内部工作机制提供了一个直观的窗口。它能告诉我们模型在做决策时“正在看哪里”,从而验证模型是否抓住了正确的物理化学特征,而不是依赖于数据中的某些伪影或噪声。这种方法为以一种更具机理性的方式理解BBB渗透性提供了支持。 图11:注意力权重的可视化 (a) 代表指纹内部结构的注意力热图。 (B) 从第1个训练周期到第50个训练周期,结合图像特征的跨模态注意力热图的演化过程。 三、 本文的局限性与未来展望 作者在论文的结论部分坦诚地指出了当前工作的局限性,并对未来研究方向进行了展望。 需要更先进的特征选择技术:尽管当前框架表现良好,但未来可以引入更先进的特征选择方法(如LASSO、SHAP-RFE)来进一步优化输入特征,可能会提升模型性能和可解释性。 需要更广泛的外部验证:目前模型的验证主要基于B3DB数据集。为了证明其更广泛的适用性,未来需要在更多、更多样化的外部数据集上进行验证。 计算预测与实验验证的鸿沟:模型最终需要与真实的实验结果相结合。未来的工作需要整合实验分析,以弥合计算预测与药理学现实之间的差距。 展望:作者希望这个可解释的框架能够为药物发现早期阶段CNS活性化合物的设计和优先级排序做出贡献,并为未来融合更多透明化描述符和物理信息特征的研究铺平道路。
Machine Learning & AI
· 2025-06-12
1000x Speedup, FEP-level Accuracy: Deep Analysis of Boltz-2's Binding Affinity Prediction
千倍加速,精度接近FEP:深入解析Boltz-2的结合亲和力预测 引言:挑战亲和力预测的“速度-精度”壁垒 在计算机辅助药物发现(CADD)领域,结合亲和力的预测长期以来面临一个核心的权衡困境:速度与精度。一方面,以自由能微扰(FEP)为代表的、基于物理模拟的方法,凭借其严谨的理论基础,能够提供最高的预测精度,被誉为领域的“金标准”;但其高昂的计算成本(通常需要数天GPU时)使其应用场景受限,难以进行大规模筛选。另一方面,以分子对接(Docking)为代表的快速方法,虽然能在数秒内完成计算,但其精度往往不足以在先导化合物优化等阶段提供可靠的指导。 在两者之间,各类机器学习(ML)方法层出不穷,但迄今为止,在公开基准上,鲜有AI模型能在预测准确性上展现出与FEP方法相抗衡的性能。Boltz-2的问世,正是为了正面挑战这一壁垒。 它不仅是一个结构预测模型,其核心突破之一在于构建了一个强大的亲和力预测模块。该模块根植于模型对生物分子相互作用的深层结构表示,通过对海量含噪数据的精细化处理和创新的训练策略,首次在AI模型中实现了接近FEP的精度与远超对接的速度的结合。 本文将深入Boltz-2的心脏地带,详细剖析其亲和力预测的数据管理、模型架构、训练策略、性能评估以及前瞻性应用的全流程。 1. 数据管理(Data Curation):在噪声中淘金 Boltz-2亲和力预测成功的基石,在于其前所未有的大规模、高质量的数据管理(Data Curation)策略。团队深知,公共数据库(如PubChem, ChEMBL, BindingDB)中的亲和力数据虽浩如烟海,但因实验方案各异、噪声巨大而难以直接使用。为此,他们设计了一套精密的“淘金”流程。为同时服务于药物发现的早期(苗头发现)和中后期(先导优化)阶段,Boltz-2构建了一个包含二元标签(结合/不结合)和连续值亲和力的混合数据集。其数据管线(Data Pipeline)极其精细,旨在从海量的、良莠不齐的公共数据中筛选出最可靠、信息量最大的部分。 1.1 通用数据处理与质量控制 在处理具体数据类型之前,所有数据源都经过了统一的预处理流程: 多源整合:数据集整合了多个公共来源,包括PubChem, ChEMBL, BindingDB, 以及专门的CeMM片段筛选数据集和MIDAS代谢物相互作用组数据集。详见之前的推送。 配体标准化:所有配体分子都经过ChEMBL结构管线(ChEMBL Structure Pipeline)进行标准化处理,以确保化学表示的一致性。 结构质量过滤:由于模型是基于结构的,训练样本的靶点结构质量至关重要。该管线应用了一种避免引入选择偏倚的过滤策略:对每个实验(assay),使用Boltz-2自身的置信度模块,对随机10个结合物的复合物结构进行预测,并计算平均的界面TM-score(ipTM)。只有当平均ipTM分数高于0.75时,该实验的全部数据才被保留,从源头上确保了训练样本的结构可靠性。 1.2 连续值亲和力数据的处理管线 这部分数据主要用于模型的回归任务,以学习精确的构效关系。 graph TB subgraph "阶段一:数据源整合与通用处理" direction TB A[ChEMBL 数据库] --初步提取与过滤--> D; B[BindingDB 数据库] --ChEMBL未覆盖的--> D; D["**通用数据处理**<br/>「移除PAINS, 过滤重原子>50的分子」"]; end subgraph "分支B:Hit-Discovery 数据" direction TB G1["**高多样性筛选**<br/>保留化学结构多样的实验"]; G2["**数据量过滤**<br/>保留数据点>100的实验"]; G3["**标签二元化**<br/>将亲和力值转换为“活性”或“非活性”"]; G_OUT[产出: **大规模二元标签数据集**]; %% 在此明确定义垂直连接 %% G1 --> G2; G2 --> G3; G3 --> G_OUT; end subgraph "分支A:Hit-to-Lead 数据" direction TB F1["**高相似性筛选**<br/>保留化学结构相似的系列"]; F2["**信息量过滤**<br/>剔除数据点少、活性范围窄的实验"]; F3["**数据质量过滤**<br/>处理限定符、剔除异常亲和力值"]; F_OUT[产出: **精炼的连续值数据集**]; %% 在此明确定义垂直连接 %% F1 --> F2; F2 --> F3; F3 --> F_OUT; end D -- "优化阶段「Hit-to-Lead」" --> F1; D -- "筛选阶段「Hit-Discovery」" --> G1; style F_OUT fill:#e8f5e9,stroke:#4caf50,stroke-width:2px style G_OUT fill:#e3f2fd,stroke:#2196f3,stroke-width:2px style D fill:#fff3e0,stroke:#fb8c00,stroke-width:2px 数据提取 (ChEMBL & BindingDB) 从ChEMBL中提取的数据:遵循严格标准,包括置信度得分必须为最高分9,靶点类型限定为单一蛋白,实验类型限定为生化或功能性实验,亲和力类型限定为${K_i, K_d, IC_{50}, XC_{50}, EC_{50}, AC_{50}}$,并排除了被标记为不可靠的数据源。 避免数据重复:只保留BindingDB中有但ChEMBL未覆盖的记录。 通用处理步骤 (General Curation) 应用PAINS过滤器:移除可能产生实验假象或干扰多种生化读数的分子。 重原子数限制:移除重原子数超过50的分子。 数据划分:将数据划分为“苗头到先导优化”(hit to lead)和“苗头发现”(hit discovery)两个子集,以便更智能地处理带有不等号的截断数据。在“苗头发现”阶段,>值被视为非结合物;而在“苗头到先导”阶段,则被视为不确定的下限。 针对“苗头到先导优化”的深度过滤 化学多样性:移除分子间平均Tanimoto相似度过低($< 0.25$)的实验,以保留那些专注于结构相关分子优化的、真正的“先导优化”数据集。 数据量与信息量:排除数据点少于10个、活性值标准差过低($< 0.25$,无法学习活性悬崖)、或独特活性值过少的实验,确保每个用于训练的实验都包含足够丰富的信息。 截断数据处理:严格处理带不等号的数据,例如丢弃所有<限定符的数据,以及活性值$< 10 \mu M$但带有>限定符的数据。 不要亲和力太强的:移除任何报告活性值小于$10^{-12} M$的实验,因为这通常意味着单位或注释错误。 针对“苗头发现”的过滤 数据量要求:实验至少包含100个数据点。 化学多样性:保留化学上更多样化的实验(平均Tanimoto相似度$< 0.25$)。 活性标记:将所有带有>限定符的数据标记为非活性,而将亲和力=和$< 2.0 \mu M$的数据标记为活性,其余数据则被丢弃。 1.3 二元标签数据的处理管线 这部分数据主要用于模型的二元分类任务,其处理核心在于提高标签的可靠性并构建高质量的负样本集。 graph TD subgraph "二元标签数据处理流程" subgraph "数据源一:PubChem HTS" A1["PubChem HTS 数据"] --> B1["初步过滤<br/>「>100化合物, <10%命中率」"]; B1 --> C1["**阳性标签交叉验证**<br/>「必须有关联的定量亲和力值」"]; C1 --> D1["**PAINS过滤 & 负样本降采样**<br/>「~1:9 比例」"] --> E1(PubChem来源<br/>二元数据集); end subgraph "数据源二:CeMM 片段" A2["CeMM 片段筛选数据"] --> B2["**基于置信度打分**<br/>「高置信度->结合物, 诱饵->非结合物」"]; B2 --> C2["**负样本降采样**<br/>「~1:9 比例」"] --> E2(CeMM来源<br/>二元数据集); end subgraph "数据源三:合成诱饵" A3["“苗头到先导”数据集的<br/>**已知活性分子**"] --> B3["**配对采样**<br/>「从同分布的活性分子池中选择诱饵」"]; B3 --> C3["**假阴性控制**<br/>「与已知结合物Tanimoto相似度 < 0.3」"] --> E3(合成诱饵<br/>数据集); end E1 --> F_OUT[("最终的二元标签训练集")]; E2 --> F_OUT; E3 --> F_OUT; end style A1 fill:#e3f2fd,stroke:#1e88e5 style A2 fill:#fff9c4,stroke:#fdd835 style A3 fill:#e8f5e9,stroke:#43a047 style F_OUT fill:#ffebee,stroke:#e53935,stroke-width:4px “诱饵”(decoy)通常指的是那些在实验中表现出没有活性或低活性的化合物。这些化合物在筛选过程中被用来评估模型或实验方法的性能,特别是在区分活性化合物(hits)和非活性化合物(non-hits)的能力上。 PubChem HTS数据的处理: 初步过滤:保留至少测试了100个化合物且命中率低于10%的实验,以过滤掉高噪声或有问题的筛选。 阳性标签交叉验证:这是提高标签可靠性的关键一步。对于每个被标记为“Active”的(蛋白质,SMILES)对,管线会反向查询PubChem,确认其必须存在一个独立的、报告了具体亲和力值的条目。只有满足此条件的才被保留为阳性样本。据此估计,约40%的原始HTS“阳性”标签(很可能是假阳性)被过滤掉。 负样本降采样:为了平衡正负样本比例,对每个实验中的诱饵(decoy)集进行降采样,达到约1:9的结合物与诱饵比例。 CeMM片段数据的处理:对CeMM片段筛选数据集采用类似的置信度过滤。高置信度(score=2或3)的片段被标记为结合物,标记为诱饵(score=0)的为非结合物,低置信度(score=1)的被移除。同样进行了1:9的负样本降采样。 合成诱饵分子的构建 (Synthetic decoys):这是构建高质量负样本集的另一项创新策略。 配对与采样:每个来自“苗头到先导优化”数据集的活性化合物,都会被配对一个“合成诱饵”。这个诱饵分子是从其他活性化合物池中采样的,这确保了正负样本在化学性质的分布上保持一致,防止模型学习到区分两者的“捷径”。 避免假阴性:为防止错误地将一个未被发现的活性分子当作诱饵(即假阴性),采样时强制要求诱饵分子与当前靶点所在蛋白簇的所有已知结合物,其Tanimoto相似度必须低于0.3。这一约束极大地降低了引入假阴性的风险。 尽管该数据处理管线已相当复杂,但作者也承认,由于公共数据库元数据的不一致性,这仅仅是构建高质量训练集的冰山一角。更深度的标准化(如应用Cheng-Prusoff方程)和实验细节审查,将是未来工作的方向。 背景知识:什么是PAINS过滤器? PAINS (Pan-Assay Interference Compounds),即泛筛选干扰化合物,特指那些在多种高通量筛选(HTS)实验中都倾向于产生假阳性信号的分子。 典型干扰机制与结构特征 PAINS类别 干扰机制 代表化合物 罗丹宁类(Rhodanines) 共价修饰靶蛋白 常见于文献误报 邻苯二酚类(Catechols) 氧化还原循环/金属螯合 天然产物姜黄素 异噻唑酮类(Isothiazolones) 非特异性化学反应 商业筛选库常见 醌类(Quinones) 产生活性氧破坏靶标 毒黄素(Toxoflavin) 核心功能:PAINS过滤器是一个计算工具,通过识别分子中是否存在已知的、会导致非特异性相互作用的化学结构子结构(警报结构),来标记这些潜在的“麻烦制造者”。 干扰机制:这些化合物并非通过与靶标特异性的、有意义的“钥匙-锁”模式结合来产生信号。相反,它们通过一些“取巧”的物理化学机制来干扰实验读数,例如: 共价修饰:分子上的活泼基团与靶蛋白发生不可逆的共价反应。 氧化还原循环:分子自身发生氧化还原反应,干扰依赖荧光或发光的检测系统。 金属螯合:螯合实验缓冲液中的金属离子。 胶体聚集:在高浓度下形成胶体聚集体,非特异性地吸附蛋白。 应用与争议:在药物发现早期,使用PAINS过滤器剔除这些化合物是标准流程,可以有效降低后续资源投入的风险。然而,也存在争议,因为一些上市药物(如儿茶酚胺类药物)或有潜力的天然产物(如姜黄素)也包含PAINS警报结构。因此,PAINS过滤通常被用作一个警示工具而非一票否决的规则,需要结合具体的化学环境和后续的实验验证(如正交检测法)来综合判断。 2. 模型架构:专为亲和力设计的预测模块 Boltz-2的亲和力预测功能由一个专门设计的Affinity Module实现。该模块在已经训练好的结构预测模型之上构建,其梯度在训练时不会反向传播到Trunk模块,以保护其学到的强大结构表示。 2.1 Boltz-2 主干网络 (Trunk): Pairformer 架构 Boltz-2的主干网络(Trunk)是其结构预测能力的核心,其设计在很大程度上借鉴并扩展了前代模型的思想,其核心是Pairformer模块。与早期架构相比,Pairformer的一个关键演进是显著降低了对多序列比对(MSA)信息的直接和持续依赖,转而将计算重心完全放在对成对表示(pair representation)和单一表示(single representation)的深度迭代精炼上。这种设计使其能更高效地处理包含多种分子类型(蛋白质、核酸、小分子等)的复杂生物系统。 具体内容见下一篇推送。 Trunk模块与Affinity模块的PairFormer区别 必须明确的是,Boltz-2的亲和力模块(Affinity Module)中使用的PairFormer是一个完全独立的、更轻量、更专注的版本。它们的区别在于: 对比维度 Trunk中的PairFormer (主干网络) Affinity模块中的PairFormer (亲和力模块) 功能定位 结构生成器 (Structure Generator) 亲和力判别器 (Affinity Discriminator) 核心目标 预测完整的、物理化学合理的3D结构。 在一个已固定的3D结构基础上,精细计算其结合强度。 架构深度 深层 (64层),用于复杂的几何推理。 轻量级 (4层或8层),专注于快速、高效的界面分析。 关注焦点 全局:处理系统内所有原子对的相互作用。 局部且专注:通过masking机制,仅处理蛋白质-配体界面及配体内部的相互作用,屏蔽了蛋白质内部的冗余信息。 角色总结 是一个通用、强大的几何特征提取与精炼引擎。 是一个轻量级的、专注于结合界面物理化学性质分析的后处理网络。 因此,可以将亲和力模块的PairFormer理解为一个轻量级的、专注于结合界面物理化学性质分析的后处理网络。 2.2 核心架构:聚焦界面的PairFormer与双预测头 亲和力模块的输入,继承了Trunk模块对生物分子复合物的深层理解: Trunk模块的最终成对表示:这是Trunk模块输出的、蕴含了丰富序列和结构上下文信息的二维特征图。 预测的3D原子坐标:由Denoising模块生成的、置信度最高的蛋白质-配体复合物三维结构。 基于原文中的算法1,我们可以将亲和力模块的内部数据流可视化如下: graph TD subgraph "输入 (Inputs)" A[Trunk模块的成对表示 z_trunk] B[Trunk模块的单体特征 s_inputs] C[预测的3D结构距离图 D_ij] end subgraph "Affinity模块内部流程" D[初始化表示] --> E[几何信息注入] E --> F[界面聚焦的PairFormer] F --> G[信息聚合] G --> H[共享MLP层] H --> I[结合可能性预测头 MLP + SoftMax] H --> J[亲和力值预测头 MLP] end subgraph "输出 (Outputs)" K[结合可能性] L[亲和力值] end A --> D B --> D C --> E I --> K J --> L style F fill:#f9f,stroke:#333,stroke-width:2px 流程步骤详解: 初始化表示:接收来自Trunk模块的成对表示z_trunk和单体特征s_inputs,通过线性变换将它们融合,构建出亲和力模块的初始成对表示z。 几何信息注入:将已预测出的3D结构信息(以距离图D_ij的形式)通过一个PairwiseConditioner注入到成对表示z中,使其感知3D空间关系。 界面聚焦的PairFormer:这是核心处理步骤。成对表示z经过一个轻量级(4或8层)的PairFormer模块进行精炼。关键在于,此处的计算被一个pair_mask所限制,该掩码只允许网络关注蛋白质-配体之间和配体内部的相互作用。 信息聚合:经过PairFormer处理后,使用平均池化(Mean Pooling)将(N, N, D)形状的成对表示聚合成一个单一的、代表整个结合事件的全局特征向量g。 共享MLP层:全局特征向量g先通过一个共享的多层感知机(MLP)进行一次非线性变换,为最终预测做准备。 双预测头:共享MLP的输出被送入两个独立的MLP预测头,分别输出结合可能性(经过SoftMax归一化)和连续的亲和力值。 2.3 鲁棒性增强:亲和力模型集合(Ensemble) 为了提升预测的鲁棒性和整体性能,Boltz-2实际上训练了两个超参数略有不同的亲和力模型,并在推理时将它们的预测结果进行集合。 模型对比细节: 对比项 集合成员1 集合成员2 PairFormer层数 8 4 Focal Loss权重 ($\lambda_{focal}$) 0.8 0.6 训练样本数 5500万 1250万 (注:成员2训练样本数较少,表明其经过了早停(early-stopping)策略) 集合策略与应用 常规评估:在进行基准测试时,使用的是两个模型的集合预测结果。对于二元分类,是预测概率的平均值;对于连续值回归,是经过分子量校准的加权平均。 生成式筛选中的应用:集合策略在与SynFlowNet结合进行分子生成时扮演了更重要的角色。为了防止生成器“过拟合”或“攻击”单个打分模型的弱点(即reward hacking),团队采用了一个模型(成员1)作为主要的奖励函数来指导生成,而另一个模型(成员2)则用作独立的验证和最终过滤工具。这种机制确保了最终筛选出的分子不仅在主模型上得分高,还能通过第二个模型的“交叉检验”,从而提高了最终候选分子的可靠性。 3. 训练策略:从噪声数据中学习精确信号 亲和力模块的成功,同样离不开其为处理噪声数据而量身定制的训练策略。Affinity training在结构预测之后进行,其梯度与结构模型分离,以保护已学到的表示。该训练流程包括几个关键组成部分:高效的蛋白质结合口袋预处理、围绕结合位点的空间区域裁剪、主干特征的预处理、平衡结合物与诱饵并优先考虑信息丰富实验的采样策略,以及为减轻实验噪声影响而定制的鲁棒损失函数。 3.1 口袋识别、裁剪与特征预计算:为亲和力预测精准聚焦 graph TD subgraph "阶段一:离线预处理" A["亲和力数据集<br/>「ChEMBL, BindingDB, PubChem等」"] --> B{"口袋识别与距离缓存"}; B --> C["已缓存的共识口袋距离图<br/>「每个靶点一份」"]; A --> D{"特征预计算"}; D --> E["预计算的Trunk特征库<br/>「包含z_trunk和3D坐标」"]; end style B fill:#e3f2fd,stroke:#1e88e5,stroke-width:2px style D fill:#e3f2fd,stroke:#1e88e5,stroke-width:2px 为了让亲和力模块能够高效、准确地学习,Boltz-2设计了一套精密的预处理流程,其核心思想是剥离无关信息,聚焦于决定结合亲和力的关键区域和特征。此流程分为三个关键步骤: 口袋识别 (Pocket Identification): 为降低训练和推理的复杂性并减少过拟合,模型首先需要精准地识别出配体的结合口袋。这是一个至关重要的预处理步骤,其过程如下: 多构象采样与预测:对每个目标蛋白,从亲和力训练数据集中随机抽取10个已知的结合物。然后,利用Boltz-2强大的结构预测模块,为这10个蛋白质-配体复合物分别生成预测的3D结构。 置信度筛选:为了确保后续步骤基于高质量的结构信息,模型会使用界面预测TM分数 (interface predicted TM-score, ipTM) 来评估每个预测结构的质量。ipTM是一个源自AlphaFold系列的置信度指标,专门用于评估两个或多个分子链(此处为蛋白质和配体)之间相互作用界面的预测准确性。分数越高,代表模型对预测的结合模式越有信心。 共识口袋确定:通过在10个高ipTM分数的预测结构上进行基于共识的投票策略,来最终确定最可能的结合位点。具体来说,该策略会识别出在多个不同配体的预测结合模式中,始终稳定出现在配体周围的那些蛋白质残基。这种方法有效地平均掉了单个预测可能带来的噪声,定义了一个更可靠、更具代表性的“共识口袋”。 距离缓存:最后,计算蛋白质中每个原子到这个共识口袋的最小距离,并将这些距离信息缓存下来,供后续的裁剪器高效使用。 亲和力裁剪器 (Affinity Cropper): 该裁剪算法利用上一步预先计算好的口袋注释,来高效地从整个复合物中裁剪出与结合亲和力最相关的区域。 裁剪目的:这一步骤的核心价值在于为亲和力模块创造一个尺寸一致、信息集中的输入。通过移除距离结合位点遥远的、无关的蛋白质部分,可以确保亲和力模块有限的计算能力(例如其4层或8层的PairFormer)能够完全聚焦于真正决定结合强弱的物理化学相互作用——即蛋白质-配体界面。 裁剪流程:该算法首先保留所有的配体tokens,然后基于缓存的口袋距离信息,贪婪地选择距离结合位点最近的蛋白质tokens,直到总tokens数达到上限(最多256个tokens,其中蛋白质tokens不超过200个)。 效率提升:该方法保证了即使在某些复合物的实验结构不可用时,也能进行一致的裁剪,并将预处理的复杂度从与复合物数量成正比的O(complexes)降低到与蛋白质数量成正比的O(proteins)。 特征预计算 (Feature Pre-computation): 为最大限度地降低迭代式亲和力训练期间的计算开销,关键的结构和表示特征被预先计算并存储。 一次性重计算:对每个蛋白质-配体复合物,计算成本最高的步骤——运行完整的Boltz-2结构模型主干网络(Trunk)——只执行一次。 关键特征提取:运行后,保留ipTM分数最高的那个候选结构。模型提取并存储该结构的关键信息,包括:预测的原子坐标、主干网络输出的成对表示 (pair representation) 以及上一步裁剪器确定的token索引。 内存优化:主干网络输出的成对表示矩阵(尺寸为 N×N×C)非常巨大。考虑到亲和力模块仅利用蛋白质-配体之间和配体内部的成对特征,因此可以在训练开始前,安全地丢弃矩阵中占据绝大部分空间的蛋白质-蛋白质相互作用部分。根据论文,这一优化步骤能将训练时所需的内存占用减少5倍以上,极大地提升了数据加载和处理的效率,使得大规模亲和力训练成为可能。 graph LR subgraph "阶段二:在线训练循环" F["开始一个训练批次"] --> G{"选择数据源"}; G -- "连续值亲和力数据" --> H("活性悬崖采样器<br/>根据IQR分数选择实验"); G -- "二元标签数据" --> I("结合物-诱饵采样器<br/>1个结合物 + 4个诱饵"); H --> J["采样一批「5个」来自同一实验的分子"]; I --> J; J --> K{"组装批次数据"}; subgraph "输入自阶段一" C_IN["已缓存的共识口袋距离图"]; E_IN["预计算的Trunk特征库"]; end C_IN -- "用于确定裁剪区域" --> K; E_IN -- "提供结构和特征" --> K; subgraph K["组装批次数据"] K1["亲和力裁剪器<br/>「保留配体+最多200个口袋蛋白tokens」"]; K2["特征提取<br/>「从特征库中提取裁剪后的z_trunk和坐标」"]; end K --> L["输入到Affinity模块"]; subgraph L["Affinity模块训练"] L1["界面聚焦的PairFormer 「4/8层」"]; L2["双预测头: 结合可能性 & 亲和力值"]; end L --> M{计算总损失}; subgraph M["计算总损失 「L_total」"] M1["成对差异损失 L_dif 「高权重」"]; M2["绝对值损失 L_abs 「低权重」"]; M3["二元分类损失 L_binary 「Focal Loss」"]; end M --> N["反向传播<br/>「仅更新Affinity模块权重」"]; N --> F end style C_IN fill:#dcedc8,stroke:#689f38 style E_IN fill:#dcedc8,stroke:#689f38 style H fill:#fff9c4,stroke:#fdd835,stroke-width:2px style I fill:#e8f5e9,stroke:#43a047,stroke-width:2px style M fill:#ffebee,stroke:#e53935,stroke-width:2px style N stroke-dasharray: 5 5 3.2 Activity Cliff采样器与标签采样 模型设计了一个定制的亲和力训练采样器,以增强从含噪数据集中学习的能力,该采样器旨在平衡结合物和诱饵,并强调高对比度的实验。训练时,根据表8中指定的概率从不同数据源进行采样,并构造大小为5的批次,确保同一批次内的所有样本来自同一个实验。 亲和力值采样器 (Affinity value sampler):从亲和力数据中学习的一个关键挑战是捕捉“活性悬崖”——由分子微小结构修饰引发的结合亲和力巨大变化。为了鼓励模型关注这些高频模式,采样器在每个批次中都从同一个实验中采样五个复合物。为了优先考虑信息最丰富的实验,引入了实验级别的“活性悬崖分数”,该分数被定义为亲和力值的四分位距 (IQR)。对实验的采样概率与这些活性悬崖分数成正比。 二元标签采样器 (Binary label sampler):为提高对结合物和诱饵的区分能力,训练批次在一致的蛋白质背景下构建。对每个批次,首先从数据集中随机均匀采样一个结合物,确定其相关实验,然后从同一实验中随机采样四个诱饵。 3.3 鲁棒且精巧的损失函数 为了应对实验噪声和数据异质性,Boltz-2采用了复杂的复合损失函数。 graph TD subgraph "Boltz-2 总损失函数" A["<b>成对差异损失 L_dif</b><br/>「Huber Loss, 权重: 0.9」"] --> D{加权求和}; B["<b>绝对值损失 L_abs</b><br/>「Huber Loss, 权重: 0.1」"] --> D; C["<b>二元分类损失 L_binary</b><br/>「Focal Loss」"] --> D; D --> E((反向传播<br/>更新亲和力模块)); end style D fill:#e0e0e0,stroke:#616161 style E fill:#c8e6c9,stroke:#388e3c,stroke-width:2px 背景知识:Huber Loss与Focal Loss Huber Loss (胡贝尔损失):这是一种用于回归任务的损失函数,它巧妙地结合了均方误差(MSE)和平均绝对误差(MAE)的优点。 \(L_{\delta}(y, f(x)) = \begin{cases} \frac{1}{2}(y - f(x))^2 & \text{for } |y - f(x)| \le \delta / \delta \cdot |y - f(x)| - \frac{1}{2}\delta^2 & \text{otherwise} \end{cases}\) 当预测误差 $|y−f(x)|$ 小于一个阈值δ时,它等同于MSE,对误差进行平方惩罚;当误差大于δ时,它进行线性惩罚。这使得它对异常值(outliers)不那么敏感。在亲和力数据中,某些实验点可能由于各种原因噪声极大,使用Huber Loss可以防止这些异常点对模型训练产生过度的负面影响。 Focal Loss (焦点损失):这是一种用于解决类别不平衡问题的分类损失函数,是交叉熵损失的一种改进。 \(FL(p_t) = -\alpha_t (1 - p_t)^\gamma \log(p_t)\) 其核心是引入了调制因子$(1 - p_t)^\gamma$。其中,$p_t$是模型对正确类别的预测概率。对于一个容易分类的样本($p_t$很大),$(1 - p_t)^\gamma$项会变得很小,从而降低了这个样本对总损失的贡献。反之,对于难以分类的样本($p_t$很小),这个调制因子接近1,其损失贡献不受影响。这使得模型在训练时能够更专注于那些难学的、分类错误的样本。在虚拟筛选数据中,非活性分子(负样本)的数量远超活性分子(正样本),Focal Loss能有效解决这个问题。 Boltz-2的具体损失函数设计如下: 二元分类损失:使用Focal Loss。 连续值回归损失 监督绝对值与差异值:损失函数同时监督两个目标: 绝对亲和力值(Labs)。 同批次内分子间的成对亲和力差异(Ldif)。 并给予后者更高(9倍)的权重。 通俗解释:为何要监督“差异值”? 不同实验室、不同批次的实验测出的IC50值,会受到底物浓度等实验条件的严重影响,导致它们的绝对值无法直接比较。然而,在同一个实验中测定的一系列分子的活性差异,则很大程度上消除了这些系统性偏差。通过重点监督这个“差异值”,模型可以学习到更本质、更可迁移的构效关系,而不过分依赖于绝对值的准确性。 处理截断数据(Censor-aware Supervision):对于那些只有上限或下限的实验数据(如“> 10μM”),损失函数被设计为只在模型预测方向错误时才产生惩罚。例如,如果真实值是“>10”,而模型预测为8,则会产生损失;如果预测为12,则不会产生损失。 连续值亲和力监督 (Affinity Value Supervision) 该部分使用Huber Loss同时监督绝对亲和力值($L_{abs}$)和同批次内分子间的成对亲和力差异($L_{dif}$),并给予后者更高(9倍)的权重。 处理截断数据(Censor-aware Supervision):这是其设计的核心亮点之一。对于那些只有下限的实验数据(例如,亲和力报告为$>10\mu M$,意味着真实值比10$\mu M$要差),模型只在预测值比该下限更好(例如预测为8$\mu M$)时才施加惩罚。这种“感知截断”的监督方式确保了模型不会因做出正确的方向性预测而受到惩罚。 绝对值损失 $L_{abs}$: \(\mathcal{L}_{abs}(y, \hat{y}, s) = \begin{cases} \text{Huber}(y, \hat{y}; \delta=0.5) & \text{if } s \text{ is } = / \text{Huber}(y, \hat{y}; \delta=0.5) \cdot I[\hat{y} < y] & \text{if } s \text{ is } > \end{cases}\) 其中,$y$是真实亲和力值,$\hat{y}$是预测值,$s$是限定符(=或$>$),$I[\cdot]$是指示函数,当条件成立时为1,否则为0。 成对差异损失 $L_{dif}$: \(\mathcal{L}_{dif}(y_1, y_2, \hat{y}_1, \hat{y}_2, s_1, s_2) = \begin{cases} \text{Huber}(y_1 - y_2, \hat{y}_1 - \hat{y}_2; \delta=0.5) & \text{if } s_1 \text{ is } = , s_2 \text{ is } = / \text{Huber}(y_1 - y_2, \hat{y}_1 - \hat{y}_2; \delta=0.5) \cdot I[\hat{y}_1 - \hat{y}_2 > y_1 - y_2] & \text{if } s_1 \text{ is } = , s_2 \text{ is } > / \text{Huber}(y_1 - y_2, \hat{y}_1 - \hat{y}_2; \delta=0.5) \cdot I[\hat{y}_1 - \hat{y}_2 < y_1 - y_2] & \text{if } s_1 \text{ is } > , s_2 \text{ is } = / 0 & \text{if } s_1 \text{ is } > , s_2 \text{ is } > \end{cases}\) 该公式精细地处理了两种化合物亲和力限定符的所有组合情况。 二元标签监督 (Binary Label Supervision) 对于区分结合物与非结合物的二元分类任务,使用Focal Loss。 \(\mathcal{L}_{binary} = \text{Focal}(\text{logits}, \gamma=1, \alpha=\lambda_{focal})\) 其中,$\gamma=1$是聚焦参数,$\lambda_{focal}$是用于平衡正负样本贡献的权重系数。 总损失函数 (Overall Loss) 最终的训练目标是以上三个损失分量的加权和。 \(\mathcal{L}_{\text{total}} = 0.9 \cdot \mathcal{L}_{dif} + 0.1 \cdot \mathcal{L}_{abs} + \mathcal{L}_{binary}\) 4. 性能评估:与物理金标准的正面交锋 对Boltz-2亲和力预测能力的评估,核心在于将其与领域内现有的基线方法进行严格比较,尤其是与被视为“金标准”的FEP等物理方法。为此,研究团队在一系列精心挑选的公开基准测试集上进行了正面交锋。 4.1 精度-速度权衡的突破:Pareto前沿图解读 Boltz-2最令人瞩目的成就,在于它彻底打破了亲和力预测领域长期存在的“速度-精度”壁垒。这一点在论文核心的Pareto前沿图上得到了最直观的体现。 这张图以计算时间为横轴(对数尺度),以预测精度(皮尔逊相关系数)为纵轴,清晰地展示了不同方法的定位: 右侧高精度区:这里是FEP和ABFE等物理模拟方法的领地。它们拥有最高的精度(Pearson R > 0.65),但计算成本也最高,通常需要数小时到数天的GPU时间。 左侧高速度区:这里是传统分子对接(Docking)和一些早期机器学习模型的区域。它们速度极快(秒级到分钟级),但精度较低(Pearson R < 0.4),难以胜任精细的先导化合物优化。 Boltz-2的革命性定位:Boltz-2(蓝色五角星)首次出现在了图的左上角——一个此前几乎为空白的区域。它以数十秒的计算时间,实现了与自动化FEP(OpenFE)相当、并接近手动优化FEP(FEP+)的预测精度。这标志着AI模型首次在公开基准上,实现了“鱼与熊掌兼得”,为大规模、高精度的亲和力预测提供了现实可行的解决方案。 4.2 方法论对决:基准、协议与性能概览 为了严格评估Boltz-2的亲和力预测能力,研究团队将其与两个代表了当前FEP技术领先水平的平台——FEP+和OpenFE——在大型公开基准数据集上进行了直接比较。这两个平台虽然使用了相同的核心数据集,但其背后的方法哲学和操作流程各有侧重,分别代表了专家精调下的精度上限和自动化流程下的普适性能,为评估Boltz-2提供了绝佳的参照系。 基准方法对比总览 下表总结了Boltz-2所比较的、以FEP为核心的“金标准”方法,以及其他关键基线。 方法 类型 核心原理 典型精度 (Pearson R) 计算成本 关键特点 Boltz-2 AI模型 基于结构预测的深度学习 ~0.62 - 0.66 ~20秒/配体 首次实现速度与精度的突破,开源,无需实验结构。 FEP+ 相对FEP 物理模拟,炼金术转换 ~0.72 - 0.78 >20小时/对 商业软件精度上限,依赖专家手动精调协议。 OpenFE 相对FEP 物理模拟,炼金术转换 ~0.63 - 0.66 6-12小时/对 自动化开源流程的代表,反映“开箱即用”的性能。 ABFE (RXRX) 绝对FEP 物理模拟,配体湮灭 ~0.6 - 0.9 (靶点依赖) >20小时/配体 高精度绝对自由能计算,对协议优化极其敏感。 MM/PBSA 端点法 MD模拟 + 连续介质模型 ~0.18 ~1小时/配体 速度较快,但精度远低于FEP,作为中等成本的物理方法参考。 对接 (Chemgauss4) 打分函数 经验/基于力场的函数 ~0.26 <1分钟/配体 速度最快,用于大规模虚拟筛选,但精度最低。 FEP+ 基准集:专家精调的“精度天花板” 该基准集由Schrödinger公司的Ross G.A.等人在2023年发表于Communications Chemistry的论文中建立,旨在打造当时最全面的公开FEP基准数据集,以评估FEP方法所能达到的最大精度(maximal accuracy)。 数据集构成与规模 该数据集通过整合大量已发表的FEP研究以及额外的数据系统构建而成,总计包含1237个化合物,覆盖了多种多样的蛋白质靶点和化学系列。其详细构成如下表所示: 数据集名称 (来源文献) 蛋白质靶点 化合物数量 FEP+ R-group set BACE1, CDK2, JNK1, Mcl1, p38, PTP1B, thrombin, TYK2 199 FEP+ charge-change CDK2, DLK, EGFR, EPHX2, IRAK4, ITK, JAK1, JNK1, PTP1B, TYK2 53 OPLS stress set BACE1, CHK1, Factor Xa, A, B, C, D, E 114 OPLS drug discovery BRD4(1), CHK1, Hsp90, scytalone dehydratase, TAF1(2), thrombin, urokinase 93 Water displacement T4 lysozyme, LigA, Mcl1, MUP-1, JAK-2, hsp90, p38 76 FEP+ Fragments BACE1, CHK1, CK2, MHT1, HSP90 79 FEP+ macrocycles - 34 FEP+ scaffold-hopping BACE1, β-tryptase, CHK1, ERα, Factor Xa 17 Merck sets CDK8, cMet, Eg5, HIF-2α, PFKFB3, SHP-2, SYK, TNKS2 264 GPCRs A2A, OX2, P2Y1 98 Bayer macrocycles Ftase, BRD4 8 Janssen BACE1 BACE1 74 MCS docking HNE, Renin 49 Miscellaneous CDK8, Galectin 10, BTK, HIV1 protease, FAAH 79 总计 - 1237 分子多样性与挑战 该数据集主要由同源物系列(congeneric series)构成,即具有相同核心骨架但周边R基不同的化合物。然而,为了全面检验FEP方法的鲁棒性,该基准集特意包含了多种极具挑战性的非同源转换,包括: 变电荷(charge-changing)转换 骨架跃迁(scaffold-hopping) 大环化(macrocyclization) 水分子置换(buried water displacement) 这使得该基准集比以往任何数据集都更能模拟真实药物研发中遇到的复杂化学场景。 实验数据来源 基准集中所有化合物的结合亲和力数据均来源于已发表的文献,涵盖了多种实验测定方法,包括直接的结合实验(binding assays)和功能性实验(functional assays)。亲和力数值类型主要为: 解离常数 Kd 抑制常数 Ki 半数抑制浓度 IC50 论文作者通过详尽的调研发现,这两类实验测得的相对结合自由能(ΔΔG)具有良好的一致性,因此均可作为验证FEP预测的可靠依据。 FEP+计算协议与精度 为达到“最大精度”的目标,该研究中的FEP+计算流程包含了大量的专家干预和手动优化。 计算协议:所有计算均使用OPLS4力场和SPC水模型。采用了副本交换溶质回火(Replica Exchange with Solute Tempering, REST)技术来增强采样,并针对不同类型的微扰(如变电荷、骨架跃迁等)使用了定制化的Lambda窗口数量(12、16或24个)。 专家手动调优:这是该基准集结果含金量的关键。研究人员对大部分体系的输入结构进行了精细的手动审查和优化,包括配体的结合模式、残基的质子化/互变异构状态等。在发现模拟采样不足时,会采取手动增加额外构象或调整微扰路径等策略。例如: 在MCL1体系中,通过手动为配体添加额外的旋转异构体状态,将成对RMSE从1.41 kcal/mol降低至1.24 kcal/mol。 在TNKS2体系中,通过将配体的质子化和去质子化两种状态都加入计算,将成对RMSE从2.10 kcal/mol降低至1.60 kcal/mol。 总体精度:在经过上述精细处理后,FEP+在该大型基准集上达到了当前已知的最高精度水平。 精度指标 FEP+ 基准集结果 (95% CI) 成对RMSE (kcal/mol) 1.25 [1.17, 1.33] 成对MUE (kcal/mol) 0.98 [0.91, 1.05] R² (决定系数) 0.56 [0.51, 0.60] Kendall τ (肯德尔等级相关系数) 0.51 [0.48, 0.55] 总而言之,FEP+基准集及其结果,代表了在一个经过专家精细准备和计算方案优化的理想条件下,顶级商业FEP软件所能达到的性能上限。这为衡量任何新兴预测方法(包括Boltz-2)的理论最高精度提供了一个黄金标准。 相关链接 论文原文: https://doi.org/10.1038/s42004-023-01019-9 GitHub仓库: https://github.com/schrodinger/public_binding_free_energy_benchmark OpenFE 基准集:自动化开源方法的“现实世界”代理 OpenFE是一个致力于开发开源炼金术自由能计算软件生态的社区项目。为了验证其性能,OpenFE社区联合了15个制药公司合作伙伴,进行了一项大规模的基准测试,而他们选择的核心公共数据集,正是上述的FEP+基准集。 与FEP+的关系:OpenFE选择使用FEP+基准集,恰恰说明了该数据集作为社区“金标准”的地位,因为它允许与顶级的商业软件进行直接比较。 测试规模:OpenFE的公开基准测试运行了FEP+数据集中的一个大规模子集,具体包括: 59个 蛋白质-配体系统 876个 独立配体 近1200次 炼金术转换计算 核心哲学差异:与FEP+结果最关键的不同之处在于,OpenFE的测试严格遵循了“开箱即用”的原则。在整个测试过程中,始终使用的是OpenFE的默认、自动化计算流程,没有为任何特定体系进行手动参数优化。 性能对比:根据其发布的报告,虽然OpenFE在使用默认协议时,其预测的绝对误差(如RMSE)总体上高于经过手动精调的FEP+结果,但其排序能力(ranking ability),即正确预测一系列化合物活性高低顺序的能力(如以Kendall’s tau衡量),表现出了与FEP+相当的竞争力。 总而言之,OpenFE的基准测试结果,可以被视为当前自动化、开源FEP方法在没有专家干预的前瞻性预测中所能达到的典型性能,更能反映其在真实世界高通量、自动化筛选流程中的表现。 相关链接 博客文章: https://blog.omsf.io/the-free-energy-of-everything-benchmarking-openfe/ GitHub仓库: https://github.com/OpenFreeEnergy/openfe-benchmarks ABFE (RXRX协议) 基准集:自动化与协议优化的前沿探索 在另一项由Wu Z.等人发表于ChemRxiv(2025)的研究中,重点并非构建一个全新的大规模数据集,而是针对绝对结合自由能(ABFE)计算中存在的稳定性差和结果复现性不佳的问题,开发了一套经过深度优化的新协议,并将其在成熟的基准体系上进行了验证。 基准体系与实验数据 测试系统:该研究选择了四个广为人知且经过充分验证的激酶靶点进行基准测试:TYK2, P38, JNK1, CDK2。这些体系的结构和实验数据源自更早的社区基准集(如Chen et al.的工作),确保了数据的可靠性。 配体选择:所有参与测试的配体均为电中性分子,以避免因净电荷变化带来的额外计算复杂性。 力场:蛋白质使用AMBER14SB力场,配体则使用OpenFF 2.2.0力场。 核心创新:RXRX协议 vs Aldeghi协议 该研究的核心在于展示其新开发的RXRX协议相比于广泛使用的基线Aldeghi协议的优越性。其关键创新点在于: 智能化的约束选择:Aldeghi协议使用基于原子移动性的MDRestraintsGenerator来选择约束,有时会导致模拟不稳定。而RXRX协议则开创性地利用蛋白质-配体间的氢键信息来选择约束原子,确保了约束施加在关键的相互作用上,从而从根本上避免了数值不稳定性。 优化的Lambda调度:Aldeghi协议采用线性的Lambda调度。RXRX协议则通过最小化最终MBAR分析误差的方式,搜索并确定了非线性的、最优的Lambda窗口分布方案,尤其是在处理范德华力(LJ)相互作用的湮灭阶段。 重排的炼金术路径:Aldeghi协议通常是先施加所有约束,再依次湮灭静电和LJ相互作用。RXRX协议则重新安排了这一顺序,将约束的施加与相互作用的湮灭分阶段并行进行(例如,在湮灭静电作用时,仅施加二面角约束),进一步提升了模拟的稳定性和收敛性。 精度提升结果 通过上述优化,RXRX协议在所有四个靶点上都展现了优于基线协议的性能,不仅降低了重复计算间的方差(提高了复现性),也提升了与实验值的吻合度。 靶点 评估指标 Aldeghi 协议 RXRX 协议 (优化后) TYK2 RMSE (kcal/mol) 0.99 0.76 Kendall’s τ 0.48 0.74 P38 RMSE (kcal/mol) 0.91 0.86 Kendall’s τ 0.50 0.46 JNK1 RMSE (kcal/mol) 1.05 0.89 Kendall’s τ 0.61 0.61 CDK2 RMSE (kcal/mol) 0.93 0.76 Kendall’s τ 0.48 0.49 该研究的价值在于,它展示了通过精细优化ABFE计算协议,可以在不改变力场和MD引擎的前提下,显著提升计算的稳定性、复现性和准确性。这为Boltz-2等AI方法提供了一个更具挑战性、代表了自动化ABFE计算前沿水平的性能基准。 预印本原文: https://doi.org/10.26434/chemrxiv-2025-q08ld-v2 快速打分函数与端点法简介 对接打分函数 (如Chemgauss4):这是分子对接程序中用于评估配体结合姿态和粗略估计亲和力的数学函数,速度极快但精度有限。 MM/PBSA:一种流行的“端点法”。它通过对MD模拟轨迹的始末状态进行计算,结合连续介质溶剂模型来估算结合自由能,比对接精确,但远不如FEP严谨。 量子化学方法 (如FMO):片段分子轨道法(FMO)是一种半经验的量子化学方法,通过将大体系分割成小片段进行计算,以在可接受的时间内获得更精确的相互作用能,但仍属于打分函数范畴。 4.3 在FEP+基准集上的详细表现 Boltz-2与FEP方法的正面比较,主要在FEP+基准集上进行。这是一个由Schrödinger公司建立的、包含1237个化合物的大规模、高质量数据集,被广泛视为行业金标准。结果图详见第一篇推送。 在4-靶点专注子集上: Boltz-2取得了0.66的平均皮尔逊相关系数(Pearson R)。 OpenFE(自动化FEP)的相关系数为0.66。 FEP+(专家精调FEP)的相关系数为0.78。 结论:在此数据集上,Boltz-2的性能与自动化的OpenFE完全相当,并显著超越了所有其他快速物理方法和机器学习基线,与代表精度上限的FEP+处于同一量级。 在大型OpenFE子集上(876个复合物): Boltz-2的Pearson R达到了0.62。 OpenFE的相关系数为0.63。 FEP+的相关系数为0.72。 结论:即使在规模扩大十倍的更大数据集上,Boltz-2的性能依然紧随自动化FEP方法,显示了其强大的稳定性和泛化能力。 这些结果清晰地表明,AI模型在亲和力预测精度上,首次达到了可以与严谨物理模拟方法直接对话的水平。 4.4 问题:Boltz-2如何保证FEP基准数据不被混入训练集? Boltz-2采用了一套严格且多层次的数据泄漏控制策略,以确保基准测试的公正性和可靠性。这套策略主要基于蛋白质序列聚类,并辅以配体化学相似性分析作为补充验证。 graph LR subgraph "第一步:基于蛋白质序列的严格过滤「主要策略」" A["训练数据集<br/>「含所有亲和力数据」"] --> C[["**蛋白质序列聚类**<br/>「使用mmseqs, 90%序列一致性为阈值」"]]; B["测试/验证数据集<br/>「如FEP+, CASP16」"] --> C; C --> D{"判定:<br/>簇中是否**同时包含**<br/>训练集与测试集蛋白?"}; D -- "是" --> E["从训练集中<b>移除</b><br/>该簇的全部蛋白"]; D -- "否" --> F["保留该簇的<br/>训练集蛋白"]; E --> G[("产出:<br/><b>无蛋白质序列泄漏的训练集</b>")]; F --> G; end subgraph "第二步:配体化学相似性分析「辅助验证」" G --> H[["分析步骤:<br/>计算测试集配体与<br/>“干净”训练集配体的**最大Tanimoto相似度**"]]; B --> H; H --> I[("最终结论:<br/><b>模型性能与配体相似度无显著相关性</b><br/>「进一步证实模型的泛化能力」")]; end style G fill:#dcedc8,stroke:#388e3c,stroke-width:2px,stroke-dasharray: 5 5 style I fill:#c8e6c9,stroke:#388e3c,stroke-width:4px style D fill:#fff3e0,stroke:#fb8c00,stroke-width:2px 主要策略:基于蛋白质序列相似性的严格过滤 这是防止数据泄漏的核心机制。 序列聚类 研究团队首先使用 mmseqs easy-cluster 工具,将亲和力训练集、验证集和测试集中的所有蛋白质序列进行聚类。聚类的标准是90%的序列一致性(sequence identity)。这意味着,任何两个序列如果相似度达到或超过90%,它们就会被分到同一个簇(cluster)中。 训练集清洗 在聚类完成后,进行关键的过滤步骤:如果某个蛋白质簇中,既包含了来自训练集的蛋白质,又包含了来自验证集或测试集的蛋白质,那么所有来自该簇的训练集蛋白质都将被移除。 这一策略的核心思想是,确保模型在评估时面对的蛋白质靶点,其序列与训练集中见过的任何靶点都足够不相似(相似度低于90%)。这可以有效防止模型仅仅因为“记住”了训练集中某个同源蛋白的特性,而对测试集中的相似蛋白做出看似准确的预测。 辅助策略:配体化学相似性分析 作为额外的验证手段,特别是在评估FEP+和CASP16这两个重要基准集时,团队还分析了配体层面的数据泄漏可能性。 FEP+基准集分析 他们计算了FEP+测试集中每个化合物,与其在整个亲和力训练集中的最相似化合物之间的Tanimoto相似度。分析结果显示,模型性能与这种配体相似度之间没有显著的相关性。这表明,Boltz-2的优异表现并非因为它“见过”化学结构相似的训练样本,而是其真正学习到了更普适的构效关系。 CASP16基准集分析 对CASP16数据集也进行了同样的分析,发现其测试配体与训练集的最高Tanimoto相似度也处于一个足够低的水平,从而减轻了对配体层面数据泄漏的担忧。 例外情况 论文明确指出,上述基于序列的过滤策略应用于所有公共基准数据集,但有两个例外: CASP16数据集 Recursion内部的私有数据集 原因是,CASP16的数据发布时间晚于Boltz-2的训练数据截止日期,因此天然不存在泄漏问题。而Recursion的内部数据集是专有的,本身就不存在于公共的训练数据源中。 通过这套以蛋白质序列过滤为主、配体相似性分析为辅的严谨流程,Boltz-2最大限度地保证了其在FEP+等关键基准测试上性能评估的客观性和公正性。
Machine Learning & AI
· 2025-06-09
Boltz-2 Core Network Architecture: Pairformer Trunk Design
2.1 Boltz-2 主干网络 (Trunk): Pairformer 架构 Boltz-2的主干网络(Trunk)是其结构预测能力的核心,其设计在很大程度上借鉴并扩展了前代模型的思想,其核心是Pairformer模块。与早期架构相比,Pairformer的一个关键演进是显著降低了对多序列比对(MSA)信息的直接和持续依赖,转而将计算重心完全放在对成对表示(pair representation)和单一表示(single representation)的深度迭代精炼上。这种设计使其能更高效地处理包含多种分子类型(蛋白质、核酸、小分子等)的复杂生物系统。 Pairformer 整体架构与数据流 Pairformer是Boltz-2主干网络中进行迭代优化的核心引擎。它接收初始的单一表示(描述每个残基/原子的特征)和成对表示(描述每对残基/原子间的关系),并通过一系列结构相同但参数独立的处理块(Blocks)进行循环精炼。 输入: 单一表示 (Single Representation) $s$:一个二维张量,尺寸为 $(n \times c_s)$,其中 $n$ 是系统中所有残基和原子(tokens)的总数,$c_s$ 是编码每个token自身属性的特征通道数。 成对表示 (Pair Representation) $z$:一个三维张量,尺寸为 $(n \times n \times c_z)$,其中 $c_z$ 是特征通道数。它编码了系统中每对token $(i, j)$ 之间的空间和化学关系。 处理流程: 初始的 $s$ 和 $z$ 矩阵,连同模板信息,被送入一个包含多个独立参数的Pairformer块的堆栈中进行处理。 Boltz-2将此核心堆栈扩展到了64层,以增强模型的表达能力和性能。 在主循环中,信息主要在成对表示 $z$ 中通过三角更新(Triangle Updates)和三角自注意力(Triangle Self-Attention)进行横向传递和整合,以捕捉复杂的几何约束。 单一表示 $s$ 的信息通过一个带有成对偏置的注意力机制(Single attention with pair bias)被更新,并反过来影响成对表示的计算。 整个主干网络的结果会通过“循环”(Recycling)机制多次反馈,将上一轮的输出作为下一轮的输入,进一步精炼表示。 输出: 经过64次迭代精炼后,主干网络输出最终的单一表示和成对表示。这些高度精炼的表示随后被送入扩散模块(Diffusion Module),用于直接生成最终的三维原子坐标。 以下是Pairformer整体架构的示意图: graph TD subgraph Boltz-2 Trunk A_IN[初始单一表示 s] --> B_MSA[轻量化MSA模块]; TEMPLATE[模板信息] --> C_TEMPLATE[模板模块]; C_IN[初始成对表示 z] --> D_PAIR[Pairformer 核心循环]; B_MSA --> D_PAIR; C_TEMPLATE --> D_PAIR; subgraph D_PAIR [Pairformer 核心循环 「64个独立块」] direction LR INPUT_S["s_in"] --> BLOCK; INPUT_Z["z_in"] --> BLOCK[Pairformer 块]; BLOCK --> OUTPUT_S["s_out"]; BLOCK --> OUTPUT_Z["z_out"]; end D_PAIR -- "循环多次 「Recycling」" --> D_PAIR; D_PAIR --> E_OUT[最终单一表示 s']; D_PAIR --> F_OUT[最终成对表示 z']; end E_OUT --> G[扩散模块]; F_OUT --> G[扩散模块]; G --> H[原子坐标]; Pairformer 模块核心组件解析 每个Pairformer块内部由一系列精心设计的子模块构成,旨在高效地在成对表示中传播和整合信息。 graph LR subgraph "单个Pairformer块内部流程" Z_IN[输入 z_ij] --> TU_OUT[三角更新 「出边」]; TU_OUT --> TU_IN[三角更新 「入边」]; TU_IN --> TSA_START[三角自注意力 「起始节点」]; TSA_START --> TSA_END[三角自注意力 「结束节点」]; TSA_END --> TRANS_Z[过渡层 「z」]; S_IN[输入 s_i] --> S_ATT[单序列自注意力]; TRANS_Z -- "提供偏置" --> S_ATT; S_ATT --> TRANS_S[过渡层 「s」]; TRANS_Z --> Z_OUT[输出 z_ij']; TRANS_S --> S_OUT[输出 s_i']; end 三角更新 (Triangle Update) 三角更新是Pairformer中一种不基于注意力的信息传播机制,其核心思想是利用几何上的三角关系来更新两个节点(i,j)之间的关系表示。它通过一个中间节点 $k$ 来传递信息:如果节点 $i$ 和 $k$ 之间的关系已知,并且节点 $k$ 和 $j$ 之间的关系也已知,那么这些信息就可以被整合用来推断和更新节点 $i$ 和 $j$ 之间的关系。这种机制在直觉上与三角不等式的几何约束思想相通,但在实现上是特征层面的信息整合。 该过程分为两个步骤: 基于出边的三角更新 (Triangle update using outgoing edges): 对于每一对 $(i, j)$,它会遍历所有第三个节点 $k$,并整合从 $i$ 出发到 $k$ 的边 $(i, k)$ 和从 $j$ 出发到 $k$ 的边 $(j, k)$ 的信息。 基于入边的三角更新 (Triangle update using incoming edges): 类似地,它会整合从 $k$ 进入到 $i$ 的边 $(k, i)$ 和从 $k$ 进入到 $j$ 的边 $(k, j)$ 的信息。 这些更新通常通过门控的乘法(multiplicative updates)实现,能够高效地在成对表示矩阵中传播结构信息。 三角自注意力 (Triangle Self-Attention) 三角自注意力的核心原理是,为了更新节点对 $(i, j)$ 的表示 $z_{ij}$,模型应该“关注”所有能与 $(i, j)$ 形成三角形的中间节点 $k$。这意味着 $z_{ij}$ 的更新会聚合来自所有边对 ${(i, k), (j, k)}$ 的信息。这使得模型能够学习到复杂的、高阶的残基间相互作用和空间约束。 该机制同样分为两个独立的模块: 起始节点为中心的三角自注意力 (Triangle self-attention around starting node): 对于边 $(i, j)$,此模块的注意力计算主要关注从共享的起始节点 $i$ 出发到所有其他节点 $k$ 的边 $(i, k)$。 结束节点为中心的三角自注意力 (Triangle self-attention around ending node): 对于边 $(i, j)$,此模块的注意力计算则关注汇聚到共享的结束节点 $j$ 的、来自所有其他节点 $k$ 的边 $(k, j)$。 数学表述 (以起始节点为例): 该过程遵循标准的多头自注意力(Multi-Head Self-Attention, MHSA)范式,但其Query, Key, Value的定义和组合方式体现了“三角”思想。对于需要更新的成对表示 $z_{ij}$,我们首先通过线性变换生成Query (q)、Key (k)和Value (v)向量。这里的关键在于,q 来自于目标边 $(i, j)$ 本身,而 k 和 v 来自于形成三角形的另一条边 $(i, k)$。 Query, Key, Value 的生成: \[q_{ij} = W_q z_{ij} / k_{ik} = W_k z_{ik} / v_{ik} = W_v z_{ik}\] 其中 $W_q, W_k, W_v$ 是可学习的权重矩阵。 注意力分数计算: \[\alpha_{ijk} = \text{softmax}_k \left( \frac{q_{ij}^T k_{ik}}{\sqrt{d_k}} + b_{ik} \right)\] 这里,注意力分数基于边 $(i, j)$ 和所有以 $i$ 为起点的边 补充流程图 AI生成,请自行甄别 总览 mindmap root(Boltz-2<br/>核心特点总览) ::icon(fa fa-bolt) **革命性的亲和力预测**<br/>「千倍加速,精度媲美FEP」 统一的通用框架<br/>「蛋白、核酸、配体」 **动态与系综建模**<br/>「学习MD/NMR数据<br/>预测B-factor」 **高度用户可控性** 方法条件化「X-ray, NMR, MD」 模板引导「支持多聚体,可软可硬」 口袋与接触约束「用户指定相互作用」 降低对MSA的依赖<br/>「提升单序列性能」 物理真实性校正<br/>「通过Boltz-steering<br/>减少碰撞、修正手性」 完全开源<br/>「模型、代码、数据<br/>均在MIT许可下发布」 当前局限<br/>「难捕捉大的构象变化<br/>未明确支持辅因子/离子」 结构预测流程 graph TB subgraph " " direction LR subgraph "输入层 提供所有原始信息" A["序列「蛋白、核酸」<br/>SMILES「小分子」"] B["生物学上下文<br/>「MSA & 模板」"] C["用户控制信息<br/>「口袋、约束、实验方法」"] end end subgraph " " TRUNK("<b>主干网络 「Trunk」</b><br/>大脑:提取深层特征<br/>核心技术: Pairformer 堆栈<br/>输出: <b>单一表示 & 成对表示</b>") end A --> TRUNK B --> TRUNK C --> TRUNK subgraph "三大并行的预测模块" direction LR STRUCT("<b>1. 结构预测模块</b><br/>「生成器:雕刻3D结构」<br/>技术: 扩散模型<br/>可选: Boltz-steering 物理校正") CONF("<b>2. 置信度预测模块</b><br/>「质检员:评估结构质量」<br/>输入: 主干网络表示 + 预测的3D结构<br/>输出: 置信度分数「pLDDT、ipTM等」") AFF("<b>3. 亲和力预测模块</b><br/>「审判官:判定结合强度」<br/>输入: 主干网络表示 + 预测的3D结构<br/>输出: 结合可能性 & 亲和力值") end TRUNK -- "内部表示" --> STRUCT TRUNK -- "内部表示" --> CONF TRUNK -- "内部表示" --> AFF STRUCT -- "预测的3D原子结构" --> CONF STRUCT -- "预测的3D原子结构" --> AFF style TRUNK fill:#fff3e0,stroke:#fb8c00,stroke-width:2px style STRUCT fill:#e3f2fd,stroke:#1e88e5,stroke-width:2px style CONF fill:#e8f5e9,stroke:#4caf50,stroke-width:2px style AFF fill:#fce4ec,stroke:#d81b60,stroke-width:2px MD数据整合 数据集名称 主要内容 模拟细节 数据采样/筛选策略 最终规模 来源文献 MISATO 蛋白质-小分子配体复合物 NVT系综,300K,8 ns 移除配体漂移(>12Å)或含聚糖/修饰肽的轨迹使用全部100帧 11,235个系统 Siebenmorgen et al. (2024) ATLAS 蛋白质 NPT系综,300K,100 ns 从轨迹最后10ns中随机均匀采样100帧 1,284个蛋白质 Vander Meersche et al. (2024) mdCATH 蛋白质 NVT系综,320K,时长可变(最长500ns) 仅使用轨迹最后10%进行训练 5,270个系统 Mirarchi et al. (2024) graph TD subgraph "Boltz-2的MD数据整合评估" direction LR subgraph "性能评估「如何衡量动态预测能力」" direction TB C["<b>基于RMSF的指标</b>"] C --> C1["计算方法: Boltz-2生成预测系综<br/>计算其RMSF并与真实MD轨迹的RMSF比较"] C --> C2["具体指标: Pearson R, Spearman ρ, RMSE"] D["<b>基于lDDT的系综指标</b>"] D --> D1["<b>Precision lDDT</b><br/>「预测构象的合理性」"] D --> D2["<b>Recall lDDT</b><br/>「对真实构象多样性的覆盖度」"] D --> D3["<b>Diversity lDDT</b><br/>「预测系综自身的多样性」"] end subgraph "训练方法「AI如何学习动态过程」" direction TB A["<b>系综监督 (Ensemble Supervision)</b>"] A --> A1["聚合距离图监督<br/>「学习系综的平均空间特征」"] A --> A2["随机坐标监督<br/>「从系综中随机采样单帧<br/>用于坐标去噪训练」"] B["<b>B-factor 监督</b>"] B --> B1["学习原子级的局部柔性<br/>「通过RMSF计算B-factor作为监督信号」"] end end style A fill:#e3f2fd,stroke:#1e88e5,stroke-width:2px style B fill:#e3f2fd,stroke:#1e88e5,stroke-width:2px style C fill:#e8f5e9,stroke:#4caf50,stroke-width:2px style D fill:#e8f5e9,stroke:#4caf50,stroke-width:2px 亲和力训练 图一:数据采样与批次组装流程 这张图的核心是展示Boltz-2如何智能地从庞大的数据源中,为每一个训练批次(batch)精心挑选出信息量最大的样本。 graph TD subgraph "图一:数据采样与批次组装流程" F["开始一个训练批次"] --> G{"选择数据源<br/>「连续值 vs. 二元标签」"}; G -- "连续值亲和力" --> H("<b>活性悬崖采样器</b><br/>根据IQR分数优先选择信息量大的实验"); G -- "二元标签" --> I("<b>结合物-诱饵采样器</b><br/>确保1个结合物配对4个同实验的诱饵"); H --> J["采样一批「5个」<br/>来自同一实验的分子"]; I --> J; J --> K{"组装批次数据"}; subgraph "输入自阶段一的预处理数据" C_IN["已缓存的共识口袋"]; E_IN["预计算的Trunk特征"]; end C_IN -- "用于裁剪" --> K; E_IN -- "提供特征" --> K; K --> K_OUT(["产出:<br/><b>准备好的训练批次</b><br/>「已裁剪并包含所有特征」"]); end style H fill:#fff9c4,stroke:#fdd835,stroke-width:2px style I fill:#e8f5e9,stroke:#43a047,stroke-width:2px style K_OUT fill:#dcedc8,stroke:#689f38,stroke-width:4px 图二:模型训练与参数更新流程 这张图则展示了当一个准备好的训练批次输入到模型后,模型内部如何进行计算、评估误差,并最终更新自身参数的循环过程。 graph TD subgraph "图二:模型训练与参数更新" A["输入:<br/><b>准备好的训练批次</b><br/>「来自图一」"] --> L["<b>Affinity模块</b>"]; subgraph L["Affinity模块内部"] direction TB L1["界面聚焦的PairFormer<br/>「4/8层」"] --> L2["双预测头<br/>「结合可能性 & 亲和力值」"]; end L --> M{"计算总损失 「L_total」"}; subgraph M["损失函数构成"] direction TB M1["成对差异损失 L_dif<br/>「高权重」"]; M2["绝对值损失 L_abs<br/>「低权重」"]; M3["二元分类损失 L_binary<br/>「Focal Loss」"]; end M --> N["<b>反向传播</b><br/>「仅更新Affinity模块权重」"]; N --> O((下一个训练批次...)); end style A fill:#dcedc8,stroke:#689f38,stroke-width:2px style L fill:#fce4ec,stroke:#d81b60,stroke-width:2px style M fill:#ffebee,stroke:#e53935,stroke-width:2px style N stroke-dasharray: 5 5 虚拟筛选 mindmap root(Boltz-2 虚拟筛选) ::icon(fa fa-search-dollar) **回顾性筛选**<br/>「验证模型基础性能」 数据集: **MF-PCBA** 核心结果: **性能大幅领先**<br/>「平均精度翻倍, 富集因子达18.4」 **前瞻性筛选「TYK2靶点」**<br/>「展示真实世界应用成果」 验证方法: **Boltz-ABFE**<br/>「AI驱动的高精度绝对FEP」 核心发现1: **生成式流程更优**<br/>「发现更高亲和力的分子」 核心发现2: **AI的“创造力”**<br/>「生成了化学新颖且合理有效的分子」 **筛选工作流与方法**<br/>「两种互补的筛选策略」 固定库筛选 对商业库「如Enamine HLL」进行穷举打分 使用并行Boltz-2 workers加速 生成式筛选 模型组合: **Boltz-2 + SynFlowNet** 异步训练闭环<br/>「生成→打分→训练→再生成」 奖励函数: **Boltz-2亲和力分数** 目标: 探索巨大的可合成化学空间 Limitations mindmap root(Boltz-2的局限性 与未来方向) ::icon(fa fa-triangle-exclamation) )分子动力学「MD」预测( 性能未显著超越基线 「与AlphaFlow, BioEmu等专门模型相比」 原因1:MD数据集**规模相对较小** 原因2:**训练后期**才引入MD数据 原因3:针对多构象的**架构改动较小** )亲和力预测的依赖性( **核心依赖** 亲和力预测的准确性 高度依赖上游结构预测的质量 **失败模式1** 口袋或界面重构不准确 **失败模式2** 未明确处理**辅因子** 「离子、水分子、其他结合伴侣」 **失败模式3** 亲和力模块的**裁剪尺寸不足** 「可能截断长程相互作用或变构口袋」 )通用结构预测( 与前代模型「如Boltz-1」性能相似 原因:结构训练数据和架构设计大体相同 难以捕捉**大的构象变化** 「如结合诱导的构象变化」 对大型复合物的复杂相互作用预测仍具挑战 )亲和力预测的适用范围( 在不同实验和靶点上**性能差异巨大** **性能差异的来源待研究** 上游结构预测不准确? 对某些蛋白家族泛化能力有限? 对分布外的化学空间不够鲁棒?
Machine Learning & AI
· 2025-06-09
Deep Analysis of Boltz-2's Dynamic Structure Modeling: From Ensemble Supervision to Performance Evaluation
深入解析Boltz-2的动态结构建模:从系综监督到性能评估 摘要 在对Boltz-2革命性的亲和力预测能力进行初步解读后,本文将深入其技术内核,系统性地剖析该模型在生物分子动态学建模方面的方法论与实证结果。静态结构在描绘生物分子功能方面存在固有局限,而捕捉由分子动力学(MD)和核磁共振(NMR)等技术揭示的构象系综,是理解变构效应、柔性口袋识别与药物诱导契合等复杂生物学现象的关键。本文将详细阐述Boltz-2如何处理并学习大规模MD与NMR系综数据,重点介绍其独特的系综监督机制、B-factor预测模块,以及实现用户精细控制的方法条件化策略。同时,我们将深入分析模型动态预测能力的量化评估指标(包括RMSF与lDDT相关指标),并展示其在标准基准测试集上的性能表现。本文旨在为计算生物学、计算化学及AI药物研发领域的研究人员,提供一份关于Boltz-2动态建模能力的全面、严谨且深刻的技术报告。 1. 数据策略:为静态模型注入动态信息 Boltz-2在动态建模上的突破,根植于其对训练数据的战略性扩展,即从依赖单一静态结构(如X射线晶体衍射结构)转向主动整合并学习构象系综(conformational ensembles)。 1.1 分子动力学(MD)数据集的整合与处理 Boltz-2整合了三个大型、公开的MD数据集,旨在让模型学习溶液环境中的生物分子动态行为。 MISATO数据集 来源: Siebenmorgen et al. (2024)。 内容: 主要为蛋白质-小分子配体复合物。 模拟细节: NVT系综(粒子数、体积、温度恒定),300K温度,8纳秒(ns)模拟时长。 数据处理与筛选: 包含多残基配体(如聚糖)或修饰肽的轨迹被丢弃。若在轨迹的任何一帧中,配体与蛋白质的距离超过12Å,则该轨迹被移除。Boltz-2在训练时使用了轨迹的全部100个数据帧。 最终规模: 经过筛选后,贡献了11,235个系统。 ATLAS数据集 来源: Vander Meersche et al. (2024)。 内容: 主要为蛋白质。 模拟细节: NPT系综(粒子数、压强、温度恒定),300K温度,100纳秒(ns)模拟时长。 数据处理与筛选: 为聚焦于更接近平衡态的构象,Boltz-2从每条轨迹的最后10纳秒中随机均匀采样100帧用于训练。 最终规模: 包含1,284个蛋白质。 mdCATH数据集 来源: Mirarchi et al. (2024)。 内容: 主要为蛋白质。 模拟细节: NVT系综,320K温度,模拟时长可变,最长可达500纳秒(ns)。 数据处理与筛选: 同样为了聚焦于平衡态构象,仅使用每条轨迹的最后10%进行训练。 最终规模: 包含5,270个系统。 1.2 核磁共振(NMR)系综数据的应用 除了MD模拟,NMR实验解析的结构通常在PDB文件中以多个模型(multi-model)的形式存在,这本身就构成了一个实验测定的构象系综。Boltz-2在数据处理时,会将这些PDB文件中的每一个模型作为系综中的一个独立构象样本进行处理,从而将来自实验的动态信息也纳入学习范畴。 2. 训练方法论:让AI理解并复现动态过程 获取动态数据是第一步,如何设计有效的训练机制让模型理解并复现这些动态信息是核心挑战。Boltz-2为此采用了多种环环相扣的监督策略。 2.1 核心机制:系综监督(Ensemble Supervision) 系综监督是Boltz-2处理动态数据的核心机制,它体现在对距离图(Distogram)和原子坐标(Coordinates)两个层面的监督上。 2.1.1 聚合距离图监督 技术细节: 模型的Trunk模块负责预测残基/原子间的距离分布,即距离图。对于一个包含K个构象的系综,传统的做法是只监督其中一个构象。而Boltz-2则采取了更先进的策略: 距离图的表示: 首先,需要明确“距离图”在模型中的具体表示。它并非一个简单的二维矩阵,而是一个三维张量(Tensor),形状为(N, N, D),其中N是残基/原子的数量,D是距离被划分的离散区间(bin)的数量。因此,对于残基对(i, j),其对应的distogram[i, j, :]是一个长度为D的向量。当一个构象被转换为独热编码(one-hot encoded)的距离图时,意味着如果其i-j距离落在第k个区间,那么这个向量的第k个位置为1,其余为0。 聚合操作: 对于系综中的K个构象,模型会计算出K个形状为(N, N, D)的独热编码距离图张量。聚合操作即是在这K个张量上进行逐元素平均(element-wise averaging)。 目标距离图: 聚合后得到的是一个单一的、形状仍为(N, N, D)的目标张量。此时,每个位置(i, j)的向量不再是独热的,而是一个概率分布向量,其第k个元素的值代表了在整个系综中,残基对(i, j)间距离落在第k个区间的概率。 损失函数: 模型的损失函数(加权的多元交叉熵)会计算其预测的距离图与这个聚合的概率性目标距离图之间的差异。 作用与意义: 这种方法迫使模型学习的不是某个特定瞬时构象的空间关系,而是整个系综在统计意义上的平均空间特征和构象多样性,从而生成更鲁棒、更能代表动态平均水平的结构表示。 2.1.2 随机采样坐标监督 技术细节: 核心架构: 根据原文,Boltz-2的去噪模块(Denoising Module)核心架构与Boltz-1保持一致 。 训练精度: 一个重要的技术设置是,去噪模块在训练时使用了完整的float32浮点数精度。这是因为团队发现,使用较低的精度(例如在Trunk模块中使用的bfloat16)会导致训练过程出现不稳定现象 。 扩散过程超参数: 本文去噪过程最特别的设置体现在扩散过程的超参数上。如论文附录中的表7所示,Boltz-2调整了多项关键参数以区别于Boltz-1,并选择向AlphaFold3的默认设置看齐,以吸收社区最先进的实践经验。这些参数直接控制噪声的施加与移除过程,例如: sigma_min: 0.0001 rho: 7 gamma_0: 0.8 gamma_min: 1.0 noise_scale: 1.003 step_scale: 1.5 系综监督策略: 在监督方式上,对于每一个包含K个构象的系综样本(来自MD或NMR),Boltz-2在每个训练迭代中都会从中随机采样一个构象用于坐标去噪的监督 。这个被采样的单一构象将被用于后续标准的坐标加噪和去噪流程。 通俗解释:去噪训练如何工作? 扩散模型的训练是一个“自监督”的过程。首先,我们从数据集中取一个“干净”的真实结构$M_0$。然后,我们人为地向其添加一个已知的、随机的高斯噪声$\epsilon$,得到一个“损坏”的结构$M_t$。接着,我们将这个损坏的结构$M_t$和时间步$t$输入到Denoising网络中。网络的目标是预测出我们当初添加的那个噪声$\epsilon$(或者等价地,预测出原始的$M_0$)。最后,我们计算网络预测的噪声和真实的噪声$\epsilon$之间的差异(通常是均方误差MSE),这个差异就是损失函数,通过最小化这个损失,网络就学会了如何“去噪”。 作用与意义: 通过在每次迭代中暴露给模型一个来自系综的、略有不同的构象,模型得以充分学习到蛋白质的内在柔性和构象空间的多样性,避免了对单一“标准”构象的过拟合。而采用经过验证的、源自AlphaFold3的扩散超参数,则确保了去噪过程本身是稳定且高效的,站在了巨人的肩膀上。 B-factor 监督:捕捉原子级的局部柔性 B-factor(或称温度因子、位移参数)是描述晶体结构中每个原子位置不确定性的参数,值越高通常意味着该原子越柔性或活动范围越大。 B-factor预测模块 输入:来自Trunk模块最后一层的单一Token表示(single token representation)。这个表示已经编码了该Token(如一个氨基酸残基)的序列和结构环境信息。 输出:对该Token代表性原子(如Cα原子)的B-factor值的标量预测。 监督方式 对于实验结构,直接使用PDB文件中提供的B-factor作为真值。 对于MD模拟轨迹,B-factor通过每个原子的均方根涨落(Root Mean Square Fluctuation, RMSF)计算得到。 公式推导 经典推导思路 Debye–Waller 因子(DWF)的形式 在晶体衍射中,原子热振动导致衍射强度被衰减,这个衰减由 Debye–Waller 因子描述。对于各向同性的简化,DWF 随散射矢量 $ q $ 的依赖为: \[\mathrm{DWF}(q) = \exp\left(-\frac{q^2 \langle u^2 \rangle}{3}\right)\] 其中 $\langle u^2 \rangle$ 是原子位移的均方偏移(mean squared displacement)。(参考:Debye–Waller factor - Wikipedia) 衍射中常用的 B-因子定义 在晶体学里,人们往往把 DWF 写成角度和波长的形式: \[\mathrm{DWF} = \exp\left(-2B \frac{\sin^2\theta}{\lambda^2}\right)\] 这里 $\theta$ 是衍射角,$\lambda$ 是入射 X 射线波长,$B$ 就是我们常说的各向同性 B-因子(单位 Ų)。 将两种形式对应起来 首先,用几何关系把 $ q $ 用 $\theta$ 和 $\lambda$ 表示: \[q = \frac{4\pi \sin\theta}{\lambda}\] 于是: \[\exp\left(-\frac{q^2 \langle u^2 \rangle}{3}\right) = \exp\left(-\frac{16\pi^2}{3} \frac{\sin^2\theta}{\lambda^2} \langle u^2 \rangle\right)\] 要和 $\exp\left(-2B \frac{\sin^2\theta}{\lambda^2}\right)$ 对应,需满足指数系数相等,即: \[2B = \frac{16\pi^2}{3} \langle u^2 \rangle \quad \Longrightarrow \quad B = \frac{8\pi^2}{3} \langle u^2 \rangle\] 识别 RMSF 在分子动力学中,RMSF(Root-Mean-Square Fluctuation)正好就是 $\sqrt{\langle u^2 \rangle}$,因此: \[B = \frac{8\pi^2}{3} \cdot \text{RMSF}^2\] 训练影响:B-factor的预测损失作为一个带权重的附加项(根据论文Table 6,bfactor loss weight为 $ 1 \times 10^{-3} $)被加入到模型的总损失函数中。这意味着模型在优化主要结构预测任务的同时,也必须努力学习和预测每个原子的动态柔性。 2.3 方法条件化:实现对预测风格的精细控制 由于训练数据来源多样(X-ray, NMR, MD等),Boltz-2引入了方法条件化(Method Conditioning)机制。 实现方式: 在训练时,每个样本的来源方法类型作为一个one-hot编码的特征输入到模型的单一Token表示中。 推理应用: 在推理预测时,用户可以手动指定一个方法类型作为输入条件。 效果: 这使得用户可以引导模型生成符合特定实验方法特性的结构。例如,当条件设为“MD”时,模型倾向于生成更多样化的构象系综;当条件设为“X-ray”时,则倾向于生成更收敛、更紧凑的单一构象。 3. 性能评估:动态预测能力的量化与实证 Boltz-2的动态预测能力通过一系列严谨的指标和基准测试得到了验证。 3.1 评估指标详解 3.1.1 lDDT分数 (local Distance Difference Test) lDDT是一种无需结构叠合的蛋白质结构评估方法。它通过评估预测结构中每个残基的局部原子环境是否与真实结构保持一致来打分。 lDDT分数核心公式 对于一个残基,其lDDT分数是其在多个距离差异容忍阈值下保留的局部距离分数的平均值。一个简化的核心思想可以表示为: \[\text{lDDT}_{\text{score}} = \frac{1}{N_{\text{pairs}}} \sum_{i,j} I(|d_{ij}^{\text{pred}} - d_{ij}^{\text{true}}| < \tau)\] 其中: $ N_{\text{pairs}} $ 是一个残基与其局部邻居(如15Å内)形成的原子对总数。 $ d_{ij}^{\text{pred}} $ 和 $ d_{ij}^{\text{true}} $ 分别是预测和真实结构中原子 $ i $ 和 $ j $ 的距离。 $ \tau $ 是一个距离差异的容忍阈值(例如1Å)。 $ I(\cdot) $ 是指示函数,当距离差异小于阈值时为1,否则为0。 完整的lDDT分数会计算在多个阈值(如0.5, 1, 2, 4Å)下的分数并取平均,从而得到一个更全面的评估。 3.1.2 基于RMSF的指标 这些指标用于评估模型对原子局部柔性的预测能力。 来源: 评估时使用的RMSF值,并非直接来自B-factor预测模块的输出。相反,它们是通过运行Boltz-2模型多次(例如100次)以生成一个包含100个样本的构象系综,然后基于这个预测的系综计算每个原子的RMSF值得到的。这个预测的RMSF随后与从真实MD轨迹计算出的RMSF进行比较。 指标 皮尔逊相关系数 (Pearson R) 和 斯皮尔曼等级相关系数 (Spearman ρ): 衡量预测RMSF与真实MD轨迹RMSF的相关性。 均方根误差 (RMSE): 衡量预测RMSF与真实值的绝对误差。 3.1.3 基于lDDT的系综评估指标 这些指标用于评估生成的整个构象系综的质量。 Precision lDDT (精确率): 衡量预测系综中每个构象的合理性。它计算预测系综中的每一个构象,与真实系综中与之最相似的构象之间的lDDT分数,然后取平均。高分意味着模型生成的构象都是“靠谱”的。 Recall lDDT (召回率): 衡量预测系综是否充分覆盖了真实系综的多样性。其计算方式为:对于真实MD系综中的每一个构象,算法会在整个预测的构象系综中寻找一个与它最相似(即lDDT分数最高)的构象。这个最高的lDDT分数被记录下来。最后,将所有真实构象找到的“最佳匹配”分数进行平均,得到最终的Recall lDDT。高分意味着真实世界中可能出现的各种重要构象,都被模型成功地预测出来了。 Diversity lDDT (多样性): 衡量预测系综内部构象之间的差异程度,计算为任意两个预测构象间1-lDDT的平均值。高分表示模型生成了一个多样化的构象集合。 3.2 在mdCATH和ATLAS基准上的实证结果 Boltz-2与Boltz-1以及专门的动态预测模型(AlphaFlow, BioEmu)在mdCATH和ATLAS测试集上进行了正面比较。 mdCATH测试集性能对比 指标 (Metric) Boltz-2-Xray Boltz-2-MD Boltz-1 AlphaFlow BioEmu ↑ 全局RMSF r 0.48 0.67 0.46 0.24 0.53 ↑ 靶点平均RMSF r 0.72 0.79 0.70 0.77 0.77 ↑ 全局RMSF ρ 0.61 0.65 0.52 0.45 0.44 ↑ 靶点平均RMSF ρ 0.78 0.81 0.76 0.76 0.78 ↓ 全局RMSF RMSE (Å) 192 157 197 229 212 ↓ 靶点平均RMSF RMSE (Å) 21.71 16.30 22.92 18.74 14.85 ATLAS测试集性能对比 (AlphaFlow因训练集重叠未参与此项评估) 指标 (Metric) Boltz-2-Xray Boltz-2-MD Boltz-1 BioEmu ↑ 全局RMSF r 0.57 0.65 0.38 0.56 ↑ 靶点平均RMSF r 0.76 0.85 0.77 0.83 ↑ 全局RMSF ρ 0.63 0.76 0.67 0.63 ↑ 靶点平均RMSF ρ 0.82 0.87 0.83 0.81 ↓ 全局RMSF RMSE (Å) 185 155 218 209 ↓ 靶点平均RMSF RMSE (Å) 17.42 12.35 19.62 15.04 关键结论: 方法条件化有效性: Boltz-2-MD(使用MD条件)在几乎所有RMSF相关性指标上都显著优于 Boltz-2-Xray(使用X射线条件),证明模型确实学会了根据用户指令生成特定风格的动态结构。 性能领先: Boltz-2-MD在RMSF的预测准确性上全面超越了其前代产品Boltz-1以及专门的动态预测模型AlphaFlow和BioEmu,展现了作为通用基础模型在细分领域的顶尖实力。 精确率与多样性的平衡: Boltz-2在保持高精确率(Precision)的同时,能够生成比Boltz-1更多样化的构象(更高的Diversity),并在召回率(Recall)上表现更优,体现了在生成合理构象和探索构象空间多样性之间取得了更好的平衡。 Figure 11: Global RMSF Spearman, Pearson and MSE metrics for the mdCATH (top) and ATLAS (bottom) holdout sets. 附:如何正确解读Figure 11的散点图 理想情况下,一个完美的预测模型应使图中所有数据点精确地落在y=x的对角线上,即预测值等于真实值。然而,在蛋白质动态学这一复杂问题中,观测到的散点分布是符合预期的,并且蕴含了丰富的信息。 我们应从以下几个角度解读此类图表: 问题的内在复杂性: “基准真相”(Ground Truth)的RMSF值本身是从随机性(stochastic)的分子动力学模拟中计算得到的统计平均值,并非一个确定性的、无噪声的真理。AI模型试图从静态信息中预测这一高度复杂的动态属性,其预测结果存在偏差是不可避免的。 评估的核心在于相关性与相对性能: 这些图表的首要价值在于展示了预测值与真实值之间显著的正相关性(由较高的Pearson R和Spearman ρ系数所量化)。这证明模型成功学习到了正确的物理趋势:即刚性区域被预测为刚性,柔性区域被预测为柔性。其次,通过横向比较不同模型(如Boltz-2-MD vs. Boltz-1)的散点图紧密程度、相关系数和误差(MSE),可以清晰地评估出模型的相对性能优劣。 数据分布的生物学意义: 图中数据点在低RMSF区域密集,在高RMSF区域稀疏,这反映了蛋白质的固有特性——大部分原子位于稳定的核心结构域(刚性),而少数原子位于高度灵活的环区或末端。模型在高RMSF区域的更大离散度,也恰恰说明了精确预测这些高度柔性区域是当前面临的主要挑战。 因此,尽管Figure 11并未呈现完美的对角线,但它通过展示强相关性和不同模型间的性能差异,有力地证明了Boltz-2在捕捉和预测复杂生物分子动态学方面取得了实质性的、可量化的进展。 4. 总结与展望 通过对大规模MD和NMR系综数据的创新性整合与监督,Boltz-2成功地将AI结构建模从静态领域推向了动态领域。它不仅能预测蛋白质的平均结构,更能捕捉其原子级的柔性和整体的构象多样性,其综合性能在多个关键指标上达到了与专门化工具相媲美甚至超越的水平。 尽管模型在动态建模方面仍有提升空间(例如,MD数据在训练后期才引入,架构有待进一步优化),但Boltz-2无疑为AI驱动的动态生物学研究奠定了坚实的基础,并指明了未来的发展方向。理解并预测分子的“舞姿”,将是揭示生命奥秘、设计下一代智能药物的关键所在。
Machine Learning & AI
· 2025-06-08
MIT Releases Boltz-2: AI Binding Affinity Prediction Matches FEP Performance with 1000x Speedup
重磅!MIT发布Boltz-2:AI预测结合亲和力首次媲美FEP,千倍加速药物发现 原标题:Boltz-2: Towards Accurate and Efficient Binding Affinity Prediction 链接:http://jeremywohlwend.com/assets/boltz2.pdf 生物分子相互作用的精确建模是现代生物学的核心挑战。近年来,以AlphaFold3 和Boltz-1 为代表的AI模型在生物分子复合物的结构预测方面取得了革命性突破。然而,结合亲和力——这一衡量分子功能和药物疗效的关键性质——的预测仍然是该领域一块难啃的硬骨头。 今天,我们为您深度解读来自MIT CSAIL、Jameel Clinic以及Valence Labs等机构的最新成果——Boltz-2。这不仅是一个结构预测模型,更是一个在结构与亲和力预测两大战场上均取得卓越表现的全新基础模型。 Boltz-2的核心突破在于,它是首个在小分子-蛋白质结合亲和力估算方面,性能媲美领域“金标准”——自由能微扰(FEP)方法的AI模型,同时计算效率提升了至少1000倍! 此外,Boltz-2还引入了多项创新的可控性功能,并与分子生成模型相结合,展示了发现多样化、可合成、高亲和力苗头化合物的有效工作流程。为了推动整个领域的创新,团队已将Boltz-2的模型权重、推理和训练代码在许可协议下完全开源。 下面,让我们一同深入探索Boltz-2的技术细节、惊人性能和深远影响。 1 | 引言:为何Boltz-2如此重要? 生物体内的复杂生命过程由蛋白质、DNA、RNA和小分子等生物分子间的相互作用所主导。精确阐明这些相互作用是理解生命、对抗疾病的基石。Boltz-2正是在这一背景下诞生的新型基础模型,它继承并发展了AlphaFold3和Boltz-1的衣钵,不仅提升了跨模态的结构预测准确性,还将预测能力从静态复合物扩展到了动态系综,并在物理真实性上设立了新标准。 然而,Boltz-2最与众不同的标志性特征,是其强大的结合亲和力预测能力。结合亲和力衡量小分子(药物)与蛋白质靶点结合的紧密程度,它直接关系到药物是否能作用于预期靶点,以及药效是否足够强大以产生治疗效果。尽管其在药物设计中至关重要,但计算机辅助的亲和力预测长期以来都是一个悬而未决的挑战。 此前,该领域的玩家面临着一个两难的性能/计算时间权衡: 高精度方法:以自由能微扰(FEP)为代表的原子模拟方法最为精确,但其计算成本极高、速度极慢,无法用于大规模筛选。 快速方法:以分子对接(Docking)为代表的方法速度快,但其精度不足以提供可靠的信号。 迄今为止,没有任何一个AI模型能够在结合亲和力预测的准确性上与FEP方法或实验室检测相提并论。 Boltz-2的出现,正是为了打破这一僵局。它的成功建立在数据管理和表示学习两大基石之上。通过标准化数百万个生化实验数据,并从这些含噪数据中提取有效信号,Boltz-2解决了训练数据这一核心障碍。同时,其亲和力预测能力根植于驱动共折叠过程的强大潜空间表示,这意味着结构建模的进步直接推动了亲和力预测的飞跃。 2 | 数据:模型的基石 强大的基础模型离不开高质量、大规模的数据聚合与管理。Boltz-2的训练数据主要分为两类:结构数据和结合亲和力数据。 2.1 结构数据:从静态到动态,从真实到蒸馏 与Boltz-1相比,Boltz-2在结构数据的多样性和来源上进行了大幅扩展。 拥抱动态系综:Boltz-1主要基于PDB数据库中每个系统的单一静态结构进行训练。而Boltz-2的一大进步是引入了系综(ensembles)的概念,即一个分子并非只有一种构象。这些系综数据同时来自: 实验技术:如核磁共振(NMR)等多构象实验数据。 计算模拟:如来自MISATO、ATLAS和md-CATH等大型公开项目的分子动力学(MD)模拟轨迹。 这样做目标是让Boltz-2不仅能学习晶体结构所代表的单一平衡点,还能理解分子的局部波动和全局结构变化,从而更好地捕捉蛋白质动态学。 进一步解释:MD数据集细节 MISATO:包含在300K温度下进行8纳秒(ns)NVT系综模拟的轨迹。该数据集主要关注蛋白质-配体复合物,并移除了配体漂移过远(>12Å)的轨迹。 ATLAS:包含在300K温度下进行100纳秒(ns)NPT系综模拟的轨迹。Boltz-2从中采样最后10纳秒的构象用于训练,以捕捉更接近平衡态的动态行为。 mdCATH:包含在320K温度下进行NVT系综模拟的轨迹,模拟时间最长可达500纳秒。Boltz-2使用轨迹的最后10%进行训练。 通过整合这些长时程、大规模的MD数据,Boltz-2得以学习到比静态晶体结构丰富得多的构象信息。 引入B-factor监督:为了进一步增强模型对局部动力学的理解,Boltz-2的Trunk模块末端的单一表示被监督用于预测来自实验和MD轨迹的B-factor(温度因子,反映原子位置的不确定性或柔性)。 进一步解释:B-factor监督的作用 B-factor是晶体学中用来描述原子柔性的一个参数,值越高代表原子位置越不确定、越灵活。在MD模拟中,可以通过原子的均方根涨落(RMSF)计算得到类似的量。通过让模型直接预测B-factor,其最终作用是强制模型不仅学习原子的平均位置(三维结构),还要学习每个原子的“动态个性”或“活动范围”。这使得模型对蛋白质的柔性区域(如loop区)和刚性区域(如α-螺旋或β-折叠的核心)有更深刻的理解,从而生成更符合真实动态特性的结构。 大规模蒸馏数据:为了增加训练数据的规模和多样性,Boltz-2广泛采用了蒸馏(distillation)技术。 通俗解释:什么是蒸馏? 想象一下,我们有一位非常厉害的“老师傅”(一个已经很强大的模型,如AlphaFold2或Boltz-1)。我们让这位“老师傅”对大量它没见过但我们认为有价值的“原材料”(如蛋白质或RNA序列)进行预测,并筛选出那些它非常有信心的“作品”(高置信度的预测结构)。然后,我们把这些高质量的“作品”当作新的、可靠的训练数据,用来教“学徒”(即正在训练的Boltz-2)。通过这种方式,我们可以极大地扩充训练集,让模型见到更多样化的例子,尤其是在实验数据稀疏的领域。 Boltz-2的蒸馏数据包括: AlphaFold2预测的单链蛋白质结构。 Boltz-1预测的多种复合物结构,涵盖单链RNA、蛋白质-DNA、配体-蛋白质、MHC-多肽以及MHC-多肽-TCR等多种相互作用类型。 2.2 结合亲和力数据:在噪声中淘金 尽管PubChem、ChEMBL等公共数据库中存在数以百万计的结合亲和力数据点,但由于实验方案的差异和噪声,将它们整合成一个可用的训练集是出了名的困难。Boltz-2团队为此设计了一套精细的数据管理策略。 进一步解释:“在噪声中淘金”的具体策略 “淘金”的过程旨在从海量的、良莠不齐的公开数据中筛选出最可靠、信息量最大的部分。具体策略包括: 来源筛选:优先选择如ChEMBL和BindingDB中手动策展、可信度高的数据。对于PubChem中的数据,严格筛选实验类型(如限定为生化或功能性实验)和置信度等级。 数据一致性处理:将所有不同类型的亲和力测量值(如Ki,Kd,IC50等)统一转换为log10尺度,并以μM为标准单位,便于模型学习。 噪声实验剔除:移除那些数据点过少、活性值过于集中(标准差过低,无法提供活性差异信息)或化学多样性过低的实验(例如,只测试了一系列非常相似的化合物),因为这些数据可能无法帮助模型学习普适的规律。 标签可靠性增强:对于来自高通量筛选(HTS)的二元标签(结合/不结合),这是一个噪声重灾区。团队通过交叉验证的方式,要求一个“结合”的标签必须在独立的定量实验中得到确认,从而过滤掉大量假阳性。 负样本扩充:通过“合成诱饵分子”策略,为每个已知的结合物匹配一个结构相似度低但来自相似靶点筛选的“不结合”分子,这极大地丰富了负样本空间,帮助模型更好地区分结合物与非结合物。 通过这一系列精细的操作,Boltz-2得以在一个相对“干净”且信息丰富的数据集上进行训练,这是其成功的关键前提。 2.2.1 满足不同需求的混合数据集 药物发现的不同阶段对亲和力数据的要求不同: 苗头化合物发现(Hit Discovery):需要大规模、二元标签(结合/不结合)的数据来从大型化合物库中识别出可能的结合物。 苗头到先导/先导优化(Hit-to-lead/Lead Optimization):需要精确的、连续值的亲和力测量数据(如Ki,Kd,IC50)来区分活性上的细微差异,以指导化合物的精修。 为了同时支持这两种场景,Boltz-2构建了一个包含二元标签和连续值标签的混合数据集。下表(原Tab. 1)总结了亲和力训练数据集的统计信息: 来源 (Source) 类型 (Type) 监督类型 (Supervision) #结合物 (#Binders) #诱饵 (#Decoys) #靶点 (#Targets) #化合物 (# Compounds) ChEMBL and BindingDB optimization values 1.2M (1.45M) 0 2k (2.5k) 600k (700k) PubChem small assays hit-discovery both 10k (13k) 50k (70k) 250 (300) 20k (25k) PubChem HTS hit-discovery binary 200k (400k) 1.8M (3.5M) 300 (500) 400k (450k) CeMM Fragments hit-discovery binary 25k (45k) 115k (200k) 1.3k (2.5k) 400 (400) MIDAS Metabolites hit-discovery binary 2k (3.5k) 20k (35k) 60 (100) 400 (400) ChEMBL and BindingDB synthetic decoys binary 0 1.2M (1.45M) 2k (2.5k) 600k (700k) 表注:括号中的数值表示在应用结构质量过滤器(ipTM < 0.75)之前的统计数据。 3 | 架构:Boltz-2的心脏 Boltz-2的架构如图2所示,由四个主要模块构成:Trunk(主干)、Denoising Module(去噪模块)、Confidence Module(置信度模块)和Affinity Module(亲和力模块)。下面将重点介绍其与Boltz-1相比的主要区别,特别是可控性组件和亲和力模块。 3.1 Trunk模块:强大的特征提取器 通俗解释:Trunk模块是做什么的? Trunk模块可以看作是Boltz-2的“大脑”和“感官系统”。它负责接收所有输入信息——包括蛋白质和配体的序列、多序列比对(MSA)信息、结构模板等等——然后通过一系列复杂的计算(主要是PairFormer堆栈和三角注意力运算),将这些原始信息加工成一个高度浓缩、信息丰富的内部表示。这个内部表示就像是模型对整个生物分子复合物的“深刻理解”,后续的所有预测(结构、置信度、亲和力)都将基于这个表示来进行。 进一步解释:PairFormer和三角注意力 PairFormer:是Transformer架构的一种变体,专门用于处理成对(pairwise)的信息。在Boltz-2中,它处理的是任意两个氨基酸/核苷酸/原子之间的关系信息,比如它们的距离、相对朝向等。 三角注意力 (Triangle Attention):这是AlphaFold系列模型中的一个核心创新。传统的注意力机制只考虑A和B之间的关系,而三角注意力则引入了第三方C,形成一个“三角关系”。它会同时更新A-B之间的关系信息,利用A-C和B-C的关系信息。这种机制使得模型能够更好地推断和强制执行三维空间中的几何约束(比如,如果A离C近,B也离C近,那么A和B之间的距离就不可能太远),这对于精确预测3D结构至关重要。 通过多层PairFormer和三角注意力的堆叠,Trunk模块能够反复推理和精炼分子间的空间和序列关系,最终输出一个极其强大的内部表示。 Boltz-2对Trunk模块进行了显著的性能优化,通过使用混合精度(bfloat16)和trifast内核进行三角注意力计算,大大提升了训练和推理的速度及内存效率。这使得训练时的裁剪尺寸(crop size)可以扩大到768个tokens,与AlphaFold3保持一致,从而能处理更大的复合物。 3.2 Denoising模块与Boltz-steering:从生成到精炼 通俗解释:Denoising模块和Boltz-steering如何工作? Denoising模块是扩散模型的核心“生成器”。它接收来自Trunk模块的内部表示和随机噪声作为输入,然后像一位雕塑家一样,一步步地从随机的“石块”中“雕刻”出分子的三维结构。 然而,AI“雕塑家”有时会犯一些不符合物理常识的错误,比如让两个原子“撞”在一起(空间位阻冲突)或者化学键不合理。这时就需要Boltz-steering出场了。 Boltz-steering是一种在推理阶段(即生成新结构时)应用的“物理校正”技术。它就像给雕塑家手上加了一个“力反馈”装置,当他要做出一个不合理的雕刻时(如原子碰撞),这个装置就会施加一个反向的“力”,引导他做出更符合物理现实的调整。Boltz-2集成了这种方法(形成Boltz-2x版本),可以在不牺牲准确性的前提下,显著提高生成结构的物理合理性。 3.3 可控性:让用户成为“导演” 许多Boltz-1用户希望能更精确地控制模型的预测,以检验科学假设或整合先验知识。为此,Boltz-2引入了三个全新的可控性组件。 方法条件化 (Method conditioning) 通俗解释:这允许用户告诉模型:“请你像一位X射线晶体学家那样思考,给我一个类似晶体结构的结果”,或者“请你模拟分子动力学的过程,展示一个动态系综”。模型在训练时学习了不同实验方法(X射线、NMR、MD等)产生的数据的细微差别,因此可以在预测时对齐到指定的方法类型。 模板条件化与引导 (Template conditioning and steering) 通俗解释:这允许用户给模型提供一个相关的复合物结构作为“蓝图”或“参考模板”。与之前的方法不同,Boltz-2不仅支持多聚体模板(而不仅仅是单链),还允许用户选择: 软条件化:让模型“参考”一下模板,但不强制。 硬引导(Steering):通过Boltz-steering势能,强制模型严格遵循模板的结构。 进一步解释:软条件化与硬引导的定量区别 论文本身没有提供一个直接的指标来定量比较这两者的差异,但我们可以从其机制上理解其定量效果: 软条件化是通过特征输入将模板信息提供给模型,模型在做决策时会“看到”这些信息。但它不提供任何保证。模型完全可以根据其他信息(如MSA)选择性地忽略模板,最终生成的结构与模板的RMSD可能是任何值。 硬引导是通过一个惩罚势能来实现的。例如,可以定义一个势能函数Etemplate=∑i∈templatemax(RMSD(xi,xiref)−αcutoff,0)。这个函数的意思是,如果预测的模板区域原子坐标xi与参考模板坐标xiref的RMSD超过了一个预设的阈值αcutoff(比如1Å),就会产生一个惩罚项。在生成过程中,模型会努力最小化这个惩罚,从而保证最终模板区域的RMSD会严格控制在αcutoff以内。这是一个确定性的、可量化的约束。 接触与口袋条件化 (Contact and pocket conditioning) 通俗解释:这允许用户直接指定结构上的约束,就像在地图上画线一样。用户可以指定“A残基和B残基必须相互接触”,或者“这个配体必须绑定到这个口袋里”。同样,这些约束也可以通过steering被强制执行。 3.4 Affinity模块:亲和力的最终审判 通俗解释:Affinity模块是做什么的? Affinity模块是Boltz-2实现亲和力预测的核心。它接收由Denoising模块生成的、经过物理校正的3D结构以及Trunk模块提供的丰富表示,然后进行最后的“审判”,并输出两个关键结果: 结合可能性 (Binding Likelihood):一个概率值,回答“这个小分子是否会与蛋白质结合?”。 亲和力值 (Affinity Value):一个连续的数值,回答“如果结合,结合得有多紧密?”。这个值可以近似理解为一个类似IC50的度量。 该模块的核心是一个PairFormer模型,它专门关注蛋白质-配体界面以及配体内部的相互作用,而忽略了蛋白质内部的相互作用,从而能更高效地聚焦于结合事件本身。这些相互作用信息被聚合起来,最终通过两个独立的预测头输出上述的结合可能性和亲和力值。 4 | 训练:如何铸就强大的Boltz-2 Boltz-2的训练过程分为三个主要阶段:结构训练、置信度训练和亲和力训练。 4.1 结构和置信度训练 这部分的训练过程大体上遵循Boltz-1,但有几个关键的改进: 计算优化:允许模型使用更大的裁剪尺寸和更多的迭代次数进行训练。 系综监督:对于来自实验或MD的系综数据,通过聚合所有构象的距离图(distogram)来进行监督,以减少方差。 B-factor监督:如前所述,Trunk的最终表示被额外监督用于预测每个token的B-factor。 进一步解释:MD数据在训练中的具体作用 MD数据主要通过两种方式在结构训练中发挥作用: 监督距离图(Distogram Supervision):对于一个MD轨迹产生的构象系综(例如100个构象),模型不是预测其中某一个构象的距离图,而是预测这100个构象距离图的聚合结果(例如,平均距离图)。损失函数(如交叉熵)会计算模型预测的距离图与这个聚合目标之间的差异。这种方式让模型学习到一个代表系综平均特征的、更鲁棒的距离表示,而不是过拟合到某个瞬时构象。 监督坐标去噪(Coordinate Denoising Supervision):在每个训练迭代中,会从MD系综中随机采样一个构象。这个被采样的构象会被用于标准的扩散模型坐标加噪和去噪的监督过程。这意味着模型在训练时会见到来自MD轨迹的大量不同构象,从而学习到蛋白质的柔性和构象多样性。 总结来说,MD数据没有引入新的损失项,而是改变了现有损失项(距离图损失和坐标去噪损失)的监督目标,让模型从学习单一静态结构转变为学习动态的构象系综。 4.2 亲和力训练 亲和力训练在结构和置信度训练之后进行,并且训练时梯度不会反向传播到Trunk模块,以保护其学到的强大结构表示。 进一步解释:亲和力训练的输入 亲和力模块的输入主要来自已经训练好的Trunk模块。具体来说,其输入是: Trunk模块的最终成对表示(final pair representation):这是Trunk模块经过多层计算后输出的、蕴含丰富结构和序列信息的二维特征图。 预测的原子坐标:由Denoising模块生成的、最可信的3D结构坐标。 换言之,亲和力模块是在一个高质量的、由模型自身预测的3D结构基础上,利用Trunk模块学到的深层内部表示(representation)来进行预测的。它不需要原始的序列或MSA信息,因为这些信息已经被Trunk模块“编码”进了它的输入表示中。 其训练流程包含多个精心设计的组件: 口袋预计算和裁剪:为了聚焦于最相关的相互作用并提高效率,训练流程首先对结合口袋进行预计算和裁剪。 自定义采样策略:设计了一种特殊的采样器,它能够平衡结合物和诱饵分子的比例,并优先考虑那些信息量大、反差高(即活性差异显著)的实验数据,以鼓励模型学习“活性悬崖”(activity cliffs)——即微小结构变化导致巨大活性差异的现象。 鲁棒的损失函数 : 二元分类任务(结合/不结合):使用Focal Loss来解决类别不平衡问题(诱饵分子远多于结合物)。 连续值回归任务 (亲和力大小): 使用Huber Loss,这是一种对噪声数据更鲁棒的损失函数。 创新性地同时监督绝对亲和力值和同批次内成对的亲和力差异,并给予后者更高的权重。监督差异值可以有效抵消不同实验条件(如底物浓度)带来的系统性偏差。 4.3 与分子生成器结合的训练 Boltz-2不仅能预测,还能指导新分子的生成。在评估中,Boltz-2被用作一个打分函数(或奖励函数)来训练一个名为SynFlowNet的分子生成器。 进一步解释:SynFlowNet的具体架构 SynFlowNet是一个基于GFlowNet的、旨在生成可合成分子的模型。其架构和工作流程如下: 核心思想:它将分子生成过程看作一个序列化的决策过程(马尔可夫决策过程,MDP)。每一步,模型都会从一个包含反应类型和化学砌块(building blocks)的动作空间中选择一个动作,来逐步构建最终的分子。 输入:模型的输入是当前正在构建的部分分子的图表示。 架构: 前向策略网络 (PF):这是模型的核心,通常采用图注意力网络(Graph Transformer)。它接收部分分子的图表示,输出在当前状态下选择每个可能动作(添加某个砌块或执行某个反应)的概率。 后向策略网络 (PB):用于估计从一个完整分子逆向拆解回起始状态的概率。在SynFlowNet中,为了简化,它被设置为一个均匀分布。 输出:最终输出的是一个完整的、可以通过预定义反应路径合成的分子。 训练:它使用一种名为轨迹平衡损失(Trajectory Balance Loss)的特殊损失函数进行训练,这个损失函数会利用Boltz-2提供的奖励分数来调整前向策略网络,使其更倾向于生成高奖励(高亲和力)的分子。 5 | 性能评估:Boltz-2的实力检验 本节将详细介绍Boltz-2在多个维度上的惊人表现,包括结构预测、蛋白质动力学捕捉、结合亲和力预测和虚拟筛选。 5.1 结构预测性能:超越前代,缩小差距 PDB通用评估集:在一个包含2024年和2025年发布的、与训练集显著不同的新结构测试集上,Boltz-2的性能与Boltz-1相当或略有提升。尤其是在RNA链和DNA-蛋白质复合物这些模态上,提升最为显著,这表明大规模蒸馏数据策略对提升模型性能至关重要。与其他模型相比,Boltz-2性能具有竞争力,略优于Chai-1和ProteinX,但稍逊于AlphaFold3。 抗体基准测试:在具有挑战性的抗体-抗原结构预测上,Boltz-2相比Boltz-1有中等程度的提升,进一步缩小了开源模型与专有模型(如AlphaFold3)之间的差距。 Polaris-ASAP挑战赛:这是一个针对新冠(SARS-CoV-2)和中东呼吸综合征(MERS-CoV)主蛋白酶配体姿态预测的竞赛。值得注意的是,Boltz-2无需任何微调或额外的物理弛豫,其开箱即用的性能就与竞赛前5名的顶尖选手相当,而这些选手大多使用了微调过的Boltz-1或AlphaFold3模型。 5.2 蛋白质动力学捕捉:更精准的动态视图 通过在分子动力学(MD)数据集(mdCATH和ATLAS)的留出簇上进行评估,结果显示: MD方法条件化确实有效,能引导模型生成更多样化的结构,从而更好地捕捉模拟中的构象多样性。 在使用MD条件化时,Boltz-2在多个指标上与专门用于此任务的模型(如BioEmu和AlphaFlow)具有竞争力。 在衡量局部柔性的RMSF指标上,Boltz-2生成的MD系综与真实MD轨迹的相关性更强,误差更低,优于Boltz-1、BioEmu和AlphaFlow。 进一步解释:除了RMSF还有哪些动力学指标? 论文中还使用了基于lDDT(local Distance Difference Test)的指标来评估动态系综的质量: Precision lDDT:衡量预测的每个构象与真实MD系综中最接近的构象之间的相似度。高分表示预测的构象都是合理的。 Recall lDDT:衡量真实MD系综中的每个构象是否都能在预测的系综中找到一个与之相似的构象。高分表示模型捕捉到了真实构象的多样性。 Diversity lDDT:衡量预测系综内部构象之间的平均不相似度(1-lDDT)。高分表示模型生成了多样化的构象,而不是单一的、重复的结构。 5.3 关键突破:结合亲和力预测性能媲美FEP 这是Boltz-2最令人瞩目的成就。评估在多个行业公认的、用于“苗头到先导”和“先导优化”的基准数据集上进行。 5.3.1 表现 进一步解释:“金标准”FEP及其细节 FEP (Free Energy Perturbation):自由能微扰是一种基于统计力学和分子动力学模拟的、计算精确的相对结合自由能(ΔΔG)的方法。它通过在一个“非物理”的路径上,将一个配体A逐渐“突变”成另一个配体B,并计算这个过程中的自由能变化,从而得到两者结合能的差异。因其严格的物理基础,被认为是计算化学领域的“金标准”之一。 FEP+:在本文中,FEP+特指一个高质量的基准数据集,也代指一种经过专家手动优化的FEP计算流程。这种流程中,研究人员会根据具体体系和实验结果,反复调整模拟的参数(如力场、输入结构准备、微扰路径等),以达到与实验结果的最大吻合度。因此,它代表了当前(商业)FEP模拟所能达到的最高准确性上限。 OpenFE:与FEP+相对,OpenFE是一个开源的、采用自动化、固定流程的相对FEP方法。它的结果更能代表在没有专家干预的情况下,自动化FEP流程的普遍性能。 力场和模拟细节:虽然论文没有详述FEP基线的具体参数,但这类计算通常使用标准的生物分子力场(如AMBER, CHARMM, OPLS)和成熟的MD模拟软件包(如AMBER, GROMACS, NAMD)来进行。 FEP+基准测试: 4-靶点子集:在这个子集上,有多种物理方法的基准可供比较。Boltz-2取得了0.66的平均皮尔逊相关系数(Pearson R),超越了所有廉价的物理方法(如MM/PBSA)和机器学习基线。 与FEP的直接对话:最引人注目的是,Boltz-2的性能已经接近了领域“金标准”——FEP和ABFE(绝对结合自由能)模拟,而其计算速度快了超过1000倍!。这在图1的精度-速度Pareto前沿图上得到了清晰的展示。 完整OpenFE子集:在包含876个复合物的更大规模OpenFE子集上,Boltz-2的性能同样接近了广泛使用的开源相对FEP方法OpenFE。 CASP16亲和力挑战赛:这是一个严格的盲测基准。竞赛参与者有数周时间,并可使用各种定制化的机器学习和物理工具。然而,Boltz-2在没有任何微调或输入管理的情况下,其性能也明显优于所有排名靠前的参赛者。 5.3.2 模型泛化能力与数据泄漏检验 一个常见的担忧是,AI模型的高性能是否仅仅因为它“记住”了训练集中相似的分子?附录中的图10有力地回应了这一质疑。该图分析了FEP+基准测试中,测试化合物与训练集化合物的最大Tanimoto相似度(一种衡量分子结构相似性的指标)和模型预测性能之间的关系。 结论是:模型的预测性能与化合物的相似度之间没有显著的相关性。 无论测试化合物与训练集中的分子是远亲还是近邻,模型的表现都相对稳定。这强有力地证明了Boltz-2并非简单地“记忆”数据,而是学习到了更普适的、能够泛化到新化学空间的物理和化学规律。 5.3.3 性能的异质性:并非所有靶点都同样出色 附录中的图12和图14展示了Boltz-2在公共验证集和私有工业界数据集上,针对每一个具体实验(assay)的性能散点图。这些图揭示了一个重要且真实的结论:Boltz-2的性能在不同靶点和实验之间存在显著的异质性。 可以看到,在某些靶点上(如某些激酶),模型的预测值与实验值高度相关(皮尔逊相关系数达0.5+)。然而,在另一些靶点上(如某些GPCR),相关性则要低得多。 这种性能的异质性是符合预期的,也与FEP等物理方法的表现类似。它提醒我们,尽管整体性能强大,但在应用于具体的药物研发项目时,仍需评估模型在特定靶点家族或化学空间中的适用性。这也是未来模型迭代和优化的重要方向。 真实的工业界挑战:团队还在8个来自Recursion的、代表复杂真实世界药物化学项目的内部盲测数据集上评估了Boltz-2。结果显示,Boltz-2依然大幅超越其他机器学习基线,并在8个项目中的3个上取得了大于0.55的皮尔逊相关性。但同时,在另外5个项目上性能有限,这也提醒我们,公共基准上的强大性能并不总能直接转化为在所有真实世界复杂问题上的成功,这与FEP方法在某些蛋白类别(如GPCR)上也表现不佳的情况类似。 5.4 虚拟筛选:大规模、高精度的苗头发现 进一步解释:什么是富集因子? 富集因子(Enrichment Factor, EF)是评估虚拟筛选性能的一个常用指标。它衡量的是,在筛选出的化合物排名最靠前的某个百分比(例如前1%)中,真实活性化合物的比例相对于在整个数据库中随机抽样的期望比例高了多少倍。例如,如果一个数据库中有1%的活性分子,而你的方法筛选出的排名前1%的分子中有10%是活性分子,那么富集因子EF(1%)就是10%/1% = 10。富集因子越高,说明模型将真实活性分子“富集”到列表顶部的能力越强,这对于实验验证来说至关重要,因为它意味着可以用更少的实验成本找到更多的苗头化合物。 回顾性虚拟筛选:在MF-PCBA数据集(包含多种蛋白家族的高质量生化实验数据)上,Boltz-2展示了强大的苗头化合物发现能力。与之前的机器学习方法、ipTM置信度分数和分子对接相比,Boltz-2几乎将平均精度(Average Precision)翻了一番,并在0.5%的阈值下实现了18.4的富集因子。 前瞻性虚拟筛选:为了在更真实的场景中验证Boltz-2,团队进行了一项针对激酶靶点TYK2的前瞻性虚拟筛选。 筛选策略:团队不仅筛选了商业化合物库(Enamine的HLL和Kinase库),还利用了前述的Boltz-2 + SynFlowNet的生成式筛选流程,探索了Enamine的760亿规模的REAL Space可合成化合物空间。 验证方法:由于没有实验数据,团队使用了他们新近开发的高精度绝对FEP流程Boltz-ABFE来验证筛选出的化合物的亲和力。 进一步解释:Boltz-ABFE是什么方法? Boltz-ABFE是团队新近开发的一种绝对结合自由能(Absolute Binding Free Energy)计算流程。与计算相对结合能的FEP不同,ABFE旨在直接计算一个配体与受体结合过程的自由能变(ΔG),理论上更具挑战性。Boltz-ABFE的创新之处在于,它将AI与物理模拟相结合:它首先使用Boltz-2来预测蛋白质-配体复合物的3D结构,省去了需要实验晶体结构的昂贵步骤,然后将这个AI预测的结构作为输入,运行后续的绝对自由能物理模拟。这是一个端到端的、无需实验结构的ABFE估算流程。 筛选结果: Boltz-2成功地从商业库中优先筛选出了高亲和力的配体。 生成式筛选流程表现更佳:SynFlowNet生成的所有10个最终候选分子都被Boltz-ABFE预测为能够与TYK2结合,且平均亲和力高于固定库筛选出的分子,同时所需的计算预算远低于对整个HLL库的筛选。 新颖性分析:通过与PDB中已知的TYK2抑制剂进行Tanimoto相似性比较,发现SynFlowNet生成的化合物具有显著的新颖性,与已知结合物的最大骨架相似度仅为0.396。 前瞻性筛选的结果令人振奋,尤其是生成式筛选流程。附录中的图20-23详细展示了这一流程的成果。 更高的亲和力:SynFlowNet生成的10个最终候选分子,经Boltz-ABFE验证,不仅全部被预测为结合物,而且其平均结合自由能比从固定商业库(HLL和Kinase库)中筛选出的最佳分子还要好(见图8)。 惊人的新颖性:这真的是AI的创造力吗?附录图22的相似性矩阵和图23的分子对比较给出了肯定的答案。 分析显示,SynFlowNet生成的化合物与PDB中所有已知的TYK2抑制剂相比,具有显著的化学新颖性(最大骨架Tanimoto相似度仅为0.396)。有趣的是,模型自主地“发现”并利用了吡咯并嘧啶(pyrrolopyrimidine)这类经典的激酶铰链区结合基序(hinge-binding motif),但同时将这一基序嫁接到了全新的、多样的化学骨架上。这表明Boltz-2不仅是在模仿,更是在进行有意义的、基于化学原理的创新组合。 6 | 局限性 尽管Boltz-2取得了巨大成功,但作者也坦诚地指出了模型目前存在的局限性,并计划在未来工作中加以解决: 分子动力学模拟:尽管比Boltz-1有进步,但在MD相关任务上并未显著超越其他基线模型。这可能与MD数据集在训练后期才被引入以及模型架构未做大改有关。 结构预测挑战:模型在预测大型复合物的复杂相互作用,以及由结合诱导的大规模构象变化方面仍有不足。 亲和力预测的依赖性:亲和力模块的准确性高度依赖于上游预测出的3D结构的质量。如果口袋识别错误或界面重构不准,亲和力预测便不可靠。此外,模型目前未明确处理辅因子(如离子、水分子)的作用。 亲和力模块适用范围:模型在不同实验和靶点上的性能差异很大,需要进一步研究其性能波动的来源,是源于结构预测不准、对某些蛋白家族泛化不足,还是对分布外的化学空间不够鲁棒。 7 | 结论 Boltz-2作为一个全新的结构生物学基础模型,在结构和亲和力预测两个前沿领域都取得了重大进展。它以更强的物理合理性、更精细的可控性和对局部动力学的更深理解,扩展了其前代产品的共折叠能力。 最关键的是,Boltz-2是首个在FEP+基准上,结合亲和力预测准确性接近FEP方法的AI模型,同时提供了数量级的计算效率提升。无论是在回顾性还是前瞻性的评估中,Boltz-2都在药物发现的各个阶段(苗头发现、苗头到先导、先导优化)展现了强大性能。通过与生成模型结合,它更是构建了一个端到端的、经ABFE验证的从头药物设计框架。 尽管存在一些局限性,但Bol-2的开源发布无疑为整个社区提供了一个极其强大的新基石。 它不仅有望加速现有药物研发流程,更有可能催生全新的计算驱动的发现范式。未来的研究方向可能包括:整合更精细的物理模型、引入实验反馈的强化学习闭环、增强模型的可解释性以及更好地处理蛋白质的柔性等。 通过在许可协议下开源Boltz-2及其训练流程,该团队希望能为日益壮大的AI与分子科学交叉领域社区提供一个坚实的基础,共同推动药物发现、蛋白质设计和合成生物学的边界,拓展生物分子建模的计算可能性。 参考文献 (部分) Abramson, J., Adler, J., Dunger, J., et al. (2024). Accurate structure prediction of biomolecular interactions with alphafold 3. Nature. Wohlwend, J., Corso, G., Passaro, S., et al. (2025). Boltz-1 Democratizing Biomolecular Interaction Modeling. Ross, G. A., Lu, C., Scarabelli, G., et al. (2023). The maximal and current accuracy of rigorous protein-ligand binding free energy calculations. Communications Chemistry, 6. Wu, Z., Koenig, G., Boresch, S., & Cossins, B. (2025). Optimizing absolute binding free energy calculations for production usage. ChemRxiv preprint. Cretu, M., Harris, C., Igashov, I., et al. (2024). Synflownet: Design of diverse and novel molecules with synthesis constraints. arXiv preprint. Hahn, D. F., Bayly, C. I., Boby, M. L., et al. (2022). Best practices for constructing, preparing, and evaluating protein-ligand binding affinity benchmarks. Living journal of computational molecular science, 4. 更多参考文献请参考原论文 下一期我们将深入一些细节。
Machine Learning & AI
· 2025-06-07
Image-based Molecular Representation Learning in Drug Development: A Comprehensive Review of Methods, Implementation, and Applications
基于图像的分子表征学习在药物开发中的应用:方法、实现与应用的综合综述 I. 引言 A. AI驱动的药物发现中对先进分子表征的需求 人工智能(AI)的应用极大地推动了药物发现领域的发展。传统上,AI依赖于多种分子表征方式,如一维指纹图、二维描述符、用于自然语言处理(NLP)任务的简化分子线性输入系统(SMILES)字符串,以及用于图神经网络(GNN)的分子图。这些表征方法是基础性的,但在捕捉对药物开发流程中高精度预测至关重要的显式、细致的结构信息或复杂生物学特征方面可能存在局限性[^1]。例如,分子指纹图谱通常“未能反映分子的显式结构信息”,而NLP和GNN方法虽然功能强大,但在“准确捕捉分子特性和重要生物学特征方面的表达能力可能有限”[^1]。 每种化学物质固有的独特视觉表征为AI驱动的分析提供了一个直观且可能更强大的途径[^1]。向基于图像的方法论转变的驱动力来自几个优势:(1)通过分析图像中原子类型、其相对位置以及它们之间的连接,有效识别不同的化学物质;(2)能够利用计算机视觉(CV)领域中丰富、成熟且复杂的既有技术;(3)有潜力捕捉和提取通过其他表征形式难以获取的复杂潜在结构模式和属性关系[^1]。以往方法在全面编码分子信息方面的不足,直接推动了将视觉表征学习作为一种更具表现力的替代方案的探索和发展。 本报告全面综述了将分子数据转换为多种基于图像的模态的当代和新兴技术。具体而言,它将涵盖二维图像(静态和多通道)、三维表征(包括三维构象的二维快照、体素网格、基于表面的模型和点云)以及序列/视频格式。本报告将深入探讨图像生成的方法论,详细介绍基于Python的实现(重点是关键库和可用的代码示例),探索卷积神经网络(CNN)在药物发现中对这些表征的应用,并提供相关的学术引文。 B. 报告的范围和方法结构 本报告旨在系统地探索分子到图像转换的领域,目标是为研究人员提供一份详细、技术性和可操作的指南。 探索将从二维(2D)分子图像表征开始,涵盖从SMILES字符串生成的标准2D描绘,以及将显式化学特征编码到图像层中的更高级多通道图像。 随后,报告将转向三维(3D)分子表征。此部分内容丰富,将详细讨论: 源自三维构象异构体的二维快照图像,捕捉多个视角。 适用于三维CNN的体素化网格表征。 关注分子拓扑结构和表面理化性质的基于表面的模型。 将分子表示为具有相关特征的三维坐标集的直接点云方法。 接着将探讨新兴的分子序列和视频表征领域,重点关注如VideoMol等旨在捕捉分子动力学的技术。 一个专门的部分将涵盖多模态及其他相关方法,包括图像数据与其他模态(文本、图)的整合、迁移学习策略和自监督学习范式。 对于每种不同的模态,讨论将强调: 生成技术:将分子结构(主要来自SMILES、SDF或PDB格式)转换为目标图像类型的基本原理和算法。 关键工具和Python库:实用性地关注广泛使用的工具,如RDKit、Maestro、PyMOL,以及专门的库如DeepChem和libmolgrid。 实现细节:在可获得的情况下,将提供对公共代码库的引用(例如,来自[^1]的GitHub链接)和说明性的Python代码片段。 CNN应用:具体示例说明这些图像表征如何与CNN和几何深度学习(GDL)模型结合,用于各种药物发现任务(例如,定量构效关系(QSAR)建模、吸收、分布、代谢、排泄和毒性(ADMET)预测、药物-靶点相互作用(DTI)识别)。 广义计算机视觉领域的快速发展和成功是基于图像的化学信息学的重要催化剂。CNN架构的成熟以及为通用视觉任务开发的预训练模型的可用性,大大降低了将这些技术应用于化学数据的“活化能”[^1]。这种技术的迁移是一个反复出现的主题。 报告最后将对这些模态进行比较总结,强调它们各自的优势、局限性和计算考量,随后展望未来的研究轨迹。基于图像的表征的探索是整合多样化数据类型的更大趋势的一部分。随着这些技术的成熟,它们与其他模态(如基因组数据、蛋白质组信息、文本描述[^1]和分子图)的融合,有望实现对药物行为和结构-性质关系更全面、更细致的理解。 II. 二维(2D)分子图像表征 二维图像是分子最直接的视觉表征,通常源自SMILES字符串。它们具有简单和直观的特点,使其成为分子设计和分析,特别是高通量应用中一个引人注目的选择[^1]。 A. 二维分子图像的生成 1. 使用RDKit从SMILES生成 RDKit: 解析SMILES、生成二维坐标和渲染分子图像的主要库[^11]。其GitHub仓库是 https://github.com/rdkit/rdkit[^1]。 RDKit是一个核心的开源化学信息学工具包,广泛用于将SMILES字符串转换为二维分子图像[^1]。一般的工作流程包括解析SMILES字符串以创建RDKit Mol对象,生成用于描绘的二维坐标,然后将此布局渲染成图像格式,通常是Python中的PIL Image对象[^1]。 关键RDKit模块和函数: Chem.MolFromSmiles():将SMILES字符串解析为RDKit Mol对象[^2]。 Draw.MolToImage():从Mol对象生成PIL Image。它允许基本的自定义,如图像大小、kekulization和楔形键的显示[^4]。 Draw.MolDraw2DCairo 和 Draw.MolDraw2DSVG:高级2D绘图类。MolDraw2DCairo生成光栅图像(如PNG),MolDraw2DSVG生成矢量图像。它们提供更细致的绘图选项控制[^5]。 rdDepictor.Compute2DCoords():生成用于描绘的2D坐标。使用rdDepictor.SetPreferCoordGen(True)有助于实现更一致的分子朝向[^3]。AllChem.Compute2DCoords()是另一种选择[^11]。 针对CNN输入的关键参数和自定义: 图像大小:一致性对CNN输入至关重要。 DEEPScreen使用200x200像素[^12]。 ImageMol默认为224x224像素[^13]。 Chemception通常使用80x80像素[^14]。 RDKit的MolToImage接受一个size元组。MolDraw2DCairo则在初始化时指定宽度和高度。 分辨率和细节: DrawingOptions.dotsPerAngstrom(用于MolToImage)控制像素密度相对于分子大小的比例[^16]。 MolDrawOptions.fixedBondLength可以固定键在图像中的像素长度,以实现一致的缩放[^10]。 原子和键的高亮: highlightAtoms和highlightBonds参数可用于MolToImage以及绘图类的DrawMolecule方法[^4]。 highlightColor(用于MolToImage)或MolDrawOptions.highlightColour设置高亮颜色[^4]。 MolDrawOptions.atomColourPalette或MolDraw2D.DrawMolecule(highlightAtomColors={atom_index: (R,G,B)})允许自定义特定原子的颜色[^7]。 原子和键的颜色: MolDrawOptions.setAtomPalette({atom_index: (R,G,B)})可以设置自定义的原子颜色调色板[^10]。RDKit Cookbook也展示了使用useBWAtomPalette()生成黑白图像的方法[^6]。 图例 (Legends): DrawMolecule中的legend参数或MolsToGridImage中的legends参数可以添加文本注释[^4]。 MolDrawOptions如legendFontSize和legendFraction控制图例外观[^10]。 Python代码片段 (基础 MolToImage): from rdkit import Chem from rdkit.Chem.Draw import MolToImage mol = Chem.MolFromSmiles("CN1C=NC2=C1C(=O)N(C(=O)N2C)C") # Caffeine img = MolToImage(mol, size=(256, 256)) # img.save("caffeine_2d.png") (概念性, 基于[^4]) Python代码片段 (MolDraw2DCairo 带高亮): Python from rdkit import Chem from rdkit.Chem.Draw import rdMolDraw2D from io import BytesIO # 用于在内存中处理图像数据 # from PIL import Image # 用于查看或保存图像 mol = Chem.MolFromSmiles("Cc1ccccc1O") # o-cresol # 高亮甲基所在的子结构 (假设原子0是甲基碳,原子1是与之相连的芳香碳) # 精确的索引取决于SMILES的规范化和原子顺序 # 为了更稳健地高亮,可以使用子结构匹配获取索引 substructure = Chem.MolFromSmarts("c(C)O") # 带有甲基和羟基的芳香碳 match = mol.GetSubstructMatch(substructure) drawer = rdMolDraw2D.MolDraw2DCairo(300, 300) # width, height # drawer.drawOptions().addAtomIndices = True # 可选:添加原子索引 # drawer.drawOptions().setHighlightColour((0.0, 0.0, 1.0, 0.5)) # 蓝色, 0.5透明度 # 自定义原子颜色示例 atom_colors = {} if match: for atom_idx in match: if mol.GetAtomWithIdx(atom_idx).GetSymbol() == 'O': atom_colors[atom_idx] = (1.0, 0.0, 0.0) # 子结构中的氧原子用红色 elif mol.GetAtomWithIdx(atom_idx).GetSymbol() == 'C': atom_colors[atom_idx] = (0.0, 0.0, 1.0) # 子结构中的碳原子用蓝色 drawer.DrawMolecule(mol, highlightAtoms=match, highlightAtomColors=atom_colors, legend="o-cresol with substructure highlight") drawer.FinishDrawing() png_data = drawer.GetDrawingText() # 获取PNG数据 (bytes) # with open("o_cresol_highlighted.png", "wb") as f: # f.write(png_data) # pil_image = Image.open(BytesIO(png_data)) # pil_image.show() (概念性, 基于[^6]) ImageMol实现 官方PyTorch实现托管在GitHub上的HongxinXiang/ImageMol[^13]。用于图像生成的关键脚本包括smiles2img_pretrain.py和dataloader/image_dataloader.py[^13]。 def smiles_to_image(smis, size=224, save_path=None): try: mol = Chem.MolFromSmiles(smis) img = Draw.MolsToGridImage([mol], molsPerRow=1, subImgSize=(size, size)) if save_path is not None: img.save(save_path) return img except: return None 以下是实现这一功能的代码: import os import torch import torchvision.models as models import torchvision.transforms as transforms from rdkit import Chem from rdkit.Chem import Draw import requests from tqdm import tqdm from PIL import Image import tempfile def smiles_or_mol_to_latent(smiles_or_mol, model_name="ResNet18", image_size=224, pretrained_url="https://drive.usercontent.google.com/download?id=1wQfby8JIhgo3DxPvFeHXPc14wS-b4KB5&export=download&authuser=0", cache_dir=None, force_download=False): """ 将 SMILES 字符串或 RDKit Mol 对象转换为 latent feature 参数: smiles_or_mol: SMILES 字符串或 RDKit Mol 对象 model_name: 模型架构名称,默认为 "ResNet18" image_size: 图像大小,默认为 224x224 pretrained_url: 预训练模型的下载链接 cache_dir: 缓存目录,用于存储下载的模型 force_download: 是否强制重新下载模型 返回: latent_feature: 提取的 latent feature,形状为 (batch_size, feature_dim) """ # 确保缓存目录存在 if cache_dir is None: cache_dir = os.path.join(tempfile.gettempdir(), "imagemol_cache") os.makedirs(cache_dir, exist_ok=True) # 定义模型文件路径 model_path = os.path.join(cache_dir, "ImageMol.pth.tar") # 处理输入为 SMILES 字符串的情况 if isinstance(smiles_or_mol, str): mol = Chem.MolFromSmiles(smiles_or_mol) if mol is None: raise ValueError(f"无法解析 SMILES 字符串: {smiles_or_mol}") else: mol = smiles_or_mol # 生成分子图像 img = Draw.MolsToGridImage([mol], molsPerRow=1, subImgSize=(image_size, image_size)) img_path = os.path.join(cache_dir, "temp_molecule.png") img.save(img_path) # 下载预训练模型(如果需要) if force_download or not os.path.exists(model_path): print("开始下载预训练模型...") download_file_from_google_drive(pretrained_url, model_path) print(f"模型已下载到: {model_path}") # 加载模型 model = load_pretrained_model(model_name, image_size=image_size) # 加载预训练权重 try: checkpoint = torch.load(model_path, map_location=torch.device('cpu')) model.load_state_dict(checkpoint['model_state_dict']) print("=> 成功加载预训练权重") except Exception as e: print(f"=> 加载预训练权重失败: {e}") print("尝试直接从 torchvision 加载预训练权重...") model = load_pretrained_model(model_name, image_size=image_size, pretrained=True) # 设置为评估模式 model.eval() # 图像预处理 transform = transforms.Compose([ transforms.Resize((image_size, image_size)), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) # 加载并预处理图像 img = Image.open(img_path).convert('RGB') img_tensor = transform(img).unsqueeze(0) # 获取 latent feature with torch.no_grad(): # 移除最后一层全连接层以获取 latent feature embedding_layer = list(model.children())[:-1] embedding_model = torch.nn.Sequential(*embedding_layer) latent_feature = embedding_model(img_tensor) # 调整形状为 (batch_size, feature_dim) latent_feature = latent_feature.squeeze(-1).squeeze(-1) return latent_feature def load_pretrained_model(model_name="ResNet18", image_size=224, pretrained=False): """加载预训练模型""" if model_name == "ResNet18": model = models.resnet18(pretrained=pretrained) # 修改最后一层以适应任何输出类别数 model.fc = torch.nn.Linear(model.fc.in_features, 2) elif model_name == "ResNet34": model = models.resnet34(pretrained=pretrained) model.fc = torch.nn.Linear(model.fc.in_features, 2) elif model_name == "ResNet50": model = models.resnet50(pretrained=pretrained) model.fc = torch.nn.Linear(model.fc.in_features, 2) else: raise ValueError(f"不支持的模型架构: {model_name}") return model def download_file_from_google_drive(url, destination): """从 Google Drive 下载文件""" # 提取文件 ID file_id = url.split('/')[-2] if 'view' in url else url.split('/')[-1] base_url = 'https://docs.google.com/uc?export=download' session = requests.Session() response = session.get(base_url, params={'id': file_id}, stream=True) # 检查是否需要确认下载 for key, value in response.cookies.items(): if key.startswith('download_warning'): params = {'id': file_id, 'confirm': value} response = session.get(base_url, params=params, stream=True) break # 下载文件 CHUNK_SIZE = 32768 with open(destination, 'wb') as f: with tqdm(unit='B', unit_scale=True, unit_divisor=1024) as bar: for chunk in response.iter_content(CHUNK_SIZE): if chunk: # filter out keep-alive new chunks f.write(chunk) bar.update(len(chunk)) 这个函数的主要功能和特点: 自动处理输入:可以接受 SMILES 字符串或 RDKit Mol 对象作为输入 自动模型下载:首次调用时会自动从 Google Drive 下载预训练模型,并缓存到本地 特征提取:使用预训练模型将分子图像转换为固定维度的 latent feature 缓存机制:避免重复下载模型,提高后续调用效率 错误处理:包含输入验证和错误处理,确保函数健壮性 使用示例: # 从 SMILES 获取 latent feature smiles = "CCO" # 乙醇的 SMILES feature = smiles_or_mol_to_latent(smiles) print(f"特征形状: {feature.shape}") # 从 RDKit Mol 对象获取 latent feature from rdkit import Chem mol = Chem.MolFromSmiles("CCO") feature = smiles_or_mol_to_latent(mol) print(f"特征形状: {feature.shape}") 这个函数默认使用 ResNet18 架构,输出的 latent feature 维度为 512。如果需要其他架构,可以通过 model_name 参数指定。 2. Chemception多通道二维图像 Chemception实现 https://sharifsuliman.medium.com/designing-a-convolutional-neural-network-for-cannabis-machine-learning-part-1-e5a2d8f667af Goh等人的原始工作(2017)[^15]奠定了基础。 一个公开的实现是GitHub上的Abdulk084/Chemception[^1],它使用Keras和TensorFlow。核心逻辑通常在Jupyter笔记本(如chemcemption.ipynb)中找到[^20]。 二维分子成像在CNN应用中的一个重要进展是将显式的化学特征直接编码到图像通道中(例如RGB或RGBA),而不仅仅依赖于视觉结构。这为神经网络提供了更丰富、信息量更大的输入。 Chemception方法: 最初的Chemception论文描述了使用灰度图像,其中原子表示为按原子序数着色的点,键表示为线[^14]。 后续工作,特别是Goh等人的研究(2017年)以及Wildcard Consulting的一篇博客文章详细介绍了一种4通道图像的方法[^18]。这种多通道表示允许CNN“看到”特定位置的化学性质。 chemcepterize_mol(详见[^11] https://github.com/Abdulk084/Chemception/blob/master/chemcemption.ipynb)例证了这一点: 通道0: 编码键级 (例如,单键为1.0,双键为2.0)。 通道1: 编码原子序数。 通道2: 编码原子杂化状态 (例如,sp, sp2, sp3 表示为数值)。 通道3: 编码Gasteiger部分电荷。 图像尺寸通常不大,例如80x80像素[^14]或博客文章示例中的48x48像素[^11]。 def chemcepterize_mol(mol, embed=20.0, res=0.5): dims = int(embed*2/res) #print(dims) #print(mol) #print(",,,,,,,,,,,,,,,,,,,,,,") cmol = Chem.Mol(mol.ToBinary()) #print(cmol) #print(",,,,,,,,,,,,,,,,,,,,,,") cmol.ComputeGasteigerCharges() AllChem.Compute2DCoords(cmol) coords = cmol.GetConformer(0).GetPositions() #print(coords) #print(",,,,,,,,,,,,,,,,,,,,,,") vect = np.zeros((dims,dims,4)) #Bonds first for i,bond in enumerate(mol.GetBonds()): bondorder = bond.GetBondTypeAsDouble() bidx = bond.GetBeginAtomIdx() eidx = bond.GetEndAtomIdx() bcoords = coords[bidx] ecoords = coords[eidx] frac = np.linspace(0,1,int(1/res*2)) # for f in frac: c = (f*bcoords + (1-f)*ecoords) idx = int(round((c[0] + embed)/res)) idy = int(round((c[1]+ embed)/res)) #Save in the vector first channel vect[ idx , idy ,0] = bondorder #Atom Layers for i,atom in enumerate(cmol.GetAtoms()): idx = int(round((coords[i][0] + embed)/res)) idy = int(round((coords[i][1]+ embed)/res)) #Atomic number vect[ idx , idy, 1] = atom.GetAtomicNum() #Gasteiger Charges charge = atom.GetProp("_GasteigerCharge") vect[ idx , idy, 3] = charge #Hybridization hyptype = atom.GetHybridization().real vect[ idx , idy, 2] = hyptype return vect 输出与可视化 v = chemcepterize_mol(mol, embed=10, res=0.2) print(v.shape) # 输出:(100, 100, 4)(假设embed=10,res=0.2时dims=100) plt.imshow(v[:,:,:3]) # 可视化前3个通道(模拟RGB图像) 输出的vect是一个3 维数组,形状为(dims, dims, 4),可直接作为 CNN 的输入(类似图像的(H, W, C)格式)。 imshow(v[:,:,:3])将前 3 个通道视为 RGB 通道进行可视化,实际每个通道代表不同的化学属性,而非颜色。 KekuleScope https://github.com/isidroc/kekulescope 代码可在GitHub上的isidroc/kekulescope找到[^1]。它包括Python脚本如Kekulescope.py和load_images.py,并利用PyTorch框架[^22]。 分子转图片的代码主要来自于 kekulescope/Kekulescope.py 文件。下面是将分子转换为图片的核心代码片段,我们将其提取并进行适当修改,使其成为一个独立可用的代码片段: import os import sys from rdkit import Chem from rdkit.Chem import Draw import glob # 定义函数来生成分子图片 def generate_molecule_images(cell_line, seed, smiles_list, chembl_ids, dataset_type): base_dir = f'./images/{cell_line}/{seed}/{dataset_type}/images' os.makedirs(base_dir, exist_ok=True) svgs = glob.glob(f"{base_dir}/*svg") pngs = glob.glob(f"{base_dir}/*png") if len(svgs) == 0 and len(pngs) == 0: for i, smiles in enumerate(smiles_list): mol = Chem.MolFromSmiles(smiles) if mol is not None: svg_img = Draw.MolsToGridImage([mol], molsPerRow=1, useSVG=True) with open(f'{base_dir}/{chembl_ids[i]}.svg', 'w') as f: f.write(svg_img.data) else: print(f"SVGs ready for {dataset_type}") # 将 SVG 转换为 PNG pngs = glob.glob(f"{base_dir}/*png") if len(pngs) == 0: basedir = os.getcwd() os.chdir(base_dir) cmd = "AA=($( find . -name '*.svg' ));for i in ${AA[*]}; do convert -density 800 ${i} -resize 300x ${i}.png ; done" os.system(cmd) cmd = "rm -rf *.svg" os.system(cmd) os.chdir(basedir) # 示例使用 if __name__ == "__main__": cell_line = "KB" seed = 1 # 这里需要替换为实际的 SMILES 列表和 ChEMBL ID 列表 my_smiles = ["CCO", "CCOC"] chembl_ids = ["CHEMBL1", "CHEMBL2"] # 生成训练集图片 generate_molecule_images(cell_line, seed, my_smiles, chembl_ids, "train") # 生成验证集图片 generate_molecule_images(cell_line, seed, my_smiles, chembl_ids, "val") # 生成测试集图片 generate_molecule_images(cell_line, seed, my_smiles, chembl_ids, "test") 代码说明 函数 generate_molecule_images:该函数接受细胞系名称、随机种子、SMILES 列表、ChEMBL ID 列表和数据集类型(train、val 或 test)作为输入。它首先检查目标目录下是否已经存在 SVG 或 PNG 文件,如果不存在,则生成 SVG 图片;然后将 SVG 图片转换为 PNG 图片,并删除 SVG 文件。 KekuleScope: 采用“凯库勒结构表示”作为CNN的输入[^1]。相关的GitHub仓库isidroc/kekulescope包含一个load_images.py脚本,推测用于处理图像生成或加载,并利用了RDKit[^1]。 DEEPScreen https://github.com/cansyl/DEEPScreen 主要通过 rdkit 库将 SMILES 字符串转换为分子对象,然后使用 rdkit 的绘图功能将分子绘制为 SVG 图像,再使用 cairosvg 将 SVG 图像转换为 PNG 图像,最后删除临时的 SVG 文件。 import os import subprocess from rdkit import Chem from rdkit.Chem import Draw from rdkit.Chem.Draw import DrawingOptions import cairosvg # 假设训练文件路径 training_files_path = "/path/to/training_files" IMG_SIZE = 200 def save_comp_imgs_from_smiles(tar_id, comp_id, smiles): """ 将分子的 SMILES 表示转换为图片 :param tar_id: 目标 ID :param comp_id: 化合物 ID :param smiles: 分子的 SMILES 字符串 """ # 创建分子对象 mol = Chem.MolFromSmiles(smiles) # 设置绘图选项 DrawingOptions.atomLabelFontSize = 55 DrawingOptions.dotsPerAngstrom = 100 DrawingOptions.bondLineWidth = 1.5 # 绘制分子为 SVG 图像 svg_path = os.path.join(training_files_path, "target_training_datasets", tar_id, "imgs", "{}.svg".format(comp_id)) Draw.MolToFile(mol, svg_path, size=(IMG_SIZE, IMG_SIZE)) # 将 SVG 图像转换为 PNG 图像 png_path = os.path.join(training_files_path, "target_training_datasets", tar_id, "imgs", "{}.png".format(comp_id)) cairosvg.svg2png(url=svg_path, write_to=png_path) # 删除临时的 SVG 文件 subprocess.call(["rm", svg_path]) # 示例使用 tar_id = "example_target" comp_id = "example_compound" smiles = "CCO" # 示例 SMILES 字符串 # 创建必要的目录 target_dir = os.path.join(training_files_path, "target_training_datasets", tar_id, "imgs") os.makedirs(target_dir, exist_ok=True) # 调用函数生成图片 save_comp_imgs_from_smiles(tar_id, comp_id, smiles) 代码说明 文件来源:此代码片段来自 bin/data_processing.py 文件。 依赖安装:需要安装 rdkit 和 cairosvg 库,可以使用以下命令进行安装 DEEPScreen: 使用通过RDKit从SMILES生成的二维结构表示(200x200像素)。值得注意的是,由于SMILES表示的局限性,手性信息被省略了,而非图像生成过程本身的问题[^12]。 3. 其他工具中的特定二维图像生成 其他一些工具和研究也利用二维图像,通常以RDKit作为生成引擎,没见代码: Toxic Colors: 使用2DConvNet处理“化学品的简单二维绘图”或“简易二维草图”[^1]。具体的生成细节可能在其补充材料中[^23]。https://pubs.acs.org/doi/full/10.1021/acs.jcim.8b00338 用的是MOE ADMET-CNN: 一种基于分子二维图像的CNN,用于预测ADMET性质[^1]。https://www.sciencedirect.com/science/article/pii/S0169743919303417?via%3Dihub#sec5 RDKit QSAR-CNN (Zhong et al., 2021): 利用分子图像进行QSAR建模,特别是用于预测污染物的反应性[^1]。https://www.sciencedirect.com/science/article/pii/S1385894720341176 RDKit InterpretableDTIP (Gao et al., 2018) and CPI-GNN (Tsubaki et al., 2019; Chen et al., 2020) first convert the SMILES sequences into molecular graph with the Rdkit 从简单的二维草图到标准化的RDKit描绘,再到富含化学特征的多通道图像的演变,反映了为CNN提供更直接可用和信息更丰富的输入的持续努力。这旨在减轻网络学习基本化学特征的负担,从而可能带来性能或数据效率的提升。 B. 基于二维图像的CNN架构与应用 标准的CNN架构,包括AlexNet、VGG、ResNet、DenseNet和基于Inception的模型,经常被调整或用作处理二维分子图像的基础骨干网络[^1]。这些网络通常包含用于层次化特征提取的卷积层、用于降维和实现平移不变性的池化层,以及用于将学习到的特征映射到输出预测的全连接层[^1]。 应用领域: 生物活性和性质预测: 这是一个主要的应用领域。KekuleScope预测癌细胞系的敏感性和化合物效价[^21]。Chemception已应用于预测毒性、生化活性和溶解性质[^14]。ImageMol专注于预测一系列分子性质和药物靶点[^13]。ADMET-CNN专为ADMET性质预测而设计[^25],QSAR-CNN模型用于预测污染物反应性等任务[^33]。 毒性预测: Toxic Colors利用二维图像进行Tox21基准测试预测[^23]。Deepsnap虽然常与三维输入相关联,但在毒性预测的背景下也被引用,其中可能使用二维图像[^1]。ResNet18DNN被引用用于预测药物引起的肝损伤(DILI)[^1]。BESTox从其SMILES衍生的二元矩阵预测急性口服毒性[^37]。 药物-靶点相互作用 (DTI): DEEPScreen是一个显著的例子,使用二维结构图像预测DTI[^12]。 具体模型示例: KekuleScope: 扩展了成熟的架构,如AlexNet、DenseNet-201、ResNet152和VGG-19,通常利用在通用图像数据集(如ImageNet)上预训练的权重作为一种迁移学习形式[^1]。 Chemception: 受Google的Inception-ResNet架构启发,证明了当使用基于图像的输入时,最少的显式化学知识也能产生有竞争力的结果[^14]。 ImageMol: 采用自监督图像表征学习框架。其预训练脚本提到了ResNet18,表明可能使用ResNet骨干网络从大量未标记的分子图像中学习[^13]。 ResNet18DNN: 特别使用一个18层的残差神经网络(ResNet18)结合深度神经网络进行DILI预测[^1]。综述[^1]将其归类为基于图像的方法,尽管一些使用CNN进行DILI预测的具体研究也采用了指纹输入[^40]。 使用标准化的图像尺寸和朝向,如DEEPScreen[^12]所示,对CNN至关重要,因为CNN对输入变化敏感。如果同一个分子可以有多种描绘方式,网络可能会学到虚假的关联。像Chemception这样的多通道方法试图以结构化的方式增加特征丰富度,这在一定程度上独立于确切的二维布局。此外,将CNN应用于SMILES字符串的二维矩阵表示(例如,Hirohara M. et al.[^36], BESTox[^37])表明,“基于图像”有时可以指CNN在二维张量输入上的维度和局部模式学习能力,而不仅仅是其视觉来源。 RDKit和Python的广泛可用性,加上成熟的深度学习框架,使得基于二维图像的方法相对容易获取。然而,优化描绘参数和设计有效的多通道表示(如Chemception所示)仍然需要相当的领域专业知识,以确保呈现给CNN的视觉特征是有意义的,并且有助于学习相关的结构-性质关系。 还有并非分子图像的 Hirohara M. et al.: 这种方法略有不同,它将SMILES字符串转换为“SMILES特征矩阵”(例如,一个400x42的矩阵)。虽然不是视觉图像,但这个二维矩阵由CNN处理,展示了CNN在结构化二维序列表示上的应用[^36]。 BESTox: 类似地,此方法使用从SMILES派生的“二维二元矩阵”,编码了原子类型、键合氢数量、电荷、化合价等特征。这个矩阵(而非视觉描绘)作为CNN输入[^1]。 tCNNs (Liu et al.): 该模型通过将SMILES字符串转换为one-hot编码矩阵来处理它们。然后将一维CNN应用于药物的矩阵表示[^41]。虽然输入是从序列派生的矩阵,但其二维结构和CNN的处理方式使其处于一种模糊了纯序列和类图像表示界限的类别,正如其被包含在基于图像的综述中一样[^1]。 III. 三维(3D)分子表征 虽然二维图像提供了简单性,但它们固有地丢失了显式的三维结构信息,而这些信息对于理解分子相互作用(尤其是在药物-靶点结合中)通常至关重要。为了解决这个问题,已经开发了各种三维表征策略,范围从三维构象的二维快照集合到用于专门CNN和几何深度学习(GDL)模型的直接体素化或基于表面的输入。 A. 三维分子表征的生成 1. 源自构象异构体的三维快照图像 这种方法试图通过从不同视角捕捉分子三维构象的多个二维投影图像,从而为主要是二维的CNN提供三维信息。 Maestro (Schrödinger) 方法: 这个商业软件包可用于导入三维构象(例如,从SDF文件)。一种常用技术是在固定角度增量(例如,8次旋转,每次45°)下围绕特定轴(例如y轴)全局旋转构象。每次旋转后,保存三维模型的当前二维视图为图像。重要的是,这些用于可视化的全局旋转不改变分子的潜在三维坐标[^1]。 应用示例: Asilar等人(2020)在其“基于图像的CNN”工作中应用此技术预测肝毒性。从Maestro生成的图像通常用不同颜色描绘原子,用管状表示键,传达基本的化学和结构信息[^1]。 代码: Maestro允许使用Python脚本自动化此类工作流程。GitHub仓库https://github.com/maestro-project/maestro[^1]似乎是一个独立的项目,并非官方的Schrödinger Maestro软件。 Deepsnap (Uesawa Y., Matsuzaka Y.) 方法: 这种新颖的分子图像输入技术是为QSAR分析而开发的。它从三维化学结构生成图像,提供用户可调参数,如原子属性(可能影响描绘)、原子颜色、键半径和像素大小。一个关键方面是从多个视角捕捉图像,这有助于揭示关键的致毒构象或药理学相关的结构域[^1]。 Uesawa Y.(2018)特别描述了“Deep Snap”过程:使用CORINA Classic软件从SMILES生成三维结构并保存为SDF,然后使用Jmol将其可视化为球棍模型。这些模型随后围绕X、Y和Z轴系统地旋转360°,并以定义的增量捕捉快照(例如,每个轴向8张图像,45°增量,每个分子产生512张图像)。这些图像通常保存为256x256像素的PNG文件[^54]。由此产生的图像集用于训练AlexNet CNN模型。 代码: 综述中引用的GitHub链接snap-stanford/deepsnap[^1]涉及一个用于图深度学习的Python库,似乎与Uesawa和Matsuzaka开发的Deepsnap QSAR图像方法不同[^55]。图像方法的相关引文是Matsuzaka Y, Uesawa Y. “Optimization of a deep-learning method based on the classification of images generated by parameterized deep snap…”[^1]。 我怎么看还有MOE RDKit用于从3D生成多视角2D投影 RDKit的MolDraw3D模块主要用于创建交互式3D可视化或静态3D透视图像,而不是一系列适用于CNN序列输入的、从系统变化的视点生成的2D投影[^56]。虽然理论上可以编写RDKit脚本来旋转三维构象的坐标,然后为每个旋转状态生成标准的2D描绘,但这并非内置的高级功能,需要自定义实现。像PyMOL这样的工具更常用于生成此类多帧旋转序列(如VideoMol所示)。 2. 基于三维体素的表征 (网格) 体素化涉及将分子或蛋白质-配体复合物占据的三维空间离散化为一个规则的体积元素(体素)网格。每个体素随后可以存储代表原子存在、原子类型或其他理化性质的标量或矢量值,通常形成多个通道。这种三维“图像”直接适用于三维CNN。 一般过程:该过程通常包括定义一个边界框,设置网格分辨率(体素大小),将分子放置在此网格内,然后根据落入或靠近每个体素的原子为其分配特征值。 工具和方法: AtomNet (Wallach et al., 2015) 和 Ragoza et al. (2017) AtomNet是基于结构的生物活性预测的开创性深度CNN,利用蛋白质-配体复合物的三维网格表示[^60]。输入生成涉及将配体置于网格盒中心,并将原子类型和位置特征化为体素通道[^62]。 Ragoza等人(用户查询中提到“voxelization, smina atom types”)及相关工作如CENsible研究[^63]描述了使用libmolgrid对蛋白质-配体复合物进行体素化。例如,使用的参数包括0.5 Å的分辨率,48x48x48的网格,以及28种原子类型(可能是类smina或类AutoDock的原子类型)。 DeepSite (Jimenez et al.) 一种基于三维CNN的方法,用于预测蛋白质上的配体结合位点[^65]。 它将蛋白质结构表示为离散化为1x1x1 ų体素的三维图像。网格包含蛋白质的边界框外加8 Å的缓冲层以捕捉表面口袋[^66]。 一个关键特征是其使用8个通道表示体素占据情况,编码不同的原子特性:疏水性、芳香性、氢键受体、氢键供体、正离子化、负离子化、金属性以及一个通用的排除体积通道。这些特性源自AutoDock 4的原子类型[^66]。 DeepSite网络服务器位于 www.playmolecule.org[^70]。 KDEEP 和 Ligdream : 这些工具在用户查询中被提及并在综述中列出[^1],据称重用或类似于DeepSite的体素化方法。例如,KDEEP也采用三维网格表示[^61]。 Pafnucy (Stepniewska-Dziubinska et al.) : 使用三维CNN预测蛋白质-配体结合亲和力[^61]。 输入是一个以配体几何中心为中心的20 Å立方体盒子,离散化为1 Å分辨率的网格。这形成一个4D张量,最后一个维度包含每个网格点的19个原子特征[^72]:9位用于原子类型(B, C, N, O, P, S, Se, 卤素, 金属);1个整数表示杂化状态;1个整数表示重原子价;1个整数表示杂原子价;5位用于SMARTS定义的属性(疏水性、芳香性、受体、供体、环);1个浮点数表示部分电荷;1个整数区分配体(1)和蛋白质(-1)。如果多个原子占据单个体素,则其特征相加[^76]。 代码和使用说明可在 http://gitlab.com/cheminfIBB/pafnucy 获取[^76]。 Kuzminykh D. et al. (2018) : 这项工作直接解决了朴素体素表示中极端稀疏性的问题。他们提出了一种基于小波变换的新颖平滑方法,通过将初始离散表示与小波核进行卷积,原子被有效地“扩展”以填充附近的体素[^1]。 这种小波变换方法与高斯平滑(模糊)进行了比较。作者认为,与高斯核的简单指数衰减相比,小波变换导致的信息损失更少,并且来自不同原子的波之间的干涉能够更好地传播信息[^78]。 输入生成包括获取三维构象(例如,通过PCA定向从SMILES生成),将空间离散化为网格(例如,0.5 Å分辨率),并用原子类型(例如,对常见元素H, C, N, O, F, S使用6-9个通道的one-hot编码)表示每个单元格中的原子[^78]。 体素化的Python库: libmolgrid: 一个通用的C++/CUDA库,带有Python绑定,专为机器学习创建体素化分子数据而设计。它支持各种原子类型方案(例如,XS原子类型、元素类型、自定义回调),可以处理多个坐标集(例如,受体和配体),并包含用于高效批量采样ExampleProvider和用于生成网格张量的GridMaker。它针对GPU加速进行了优化[^63]。代码位于GitHub上的gnina/libmolgrid。 DeepChem : RdkitGridFeaturizer: 位于deepchem/feat/complex_featurizers/rdkit_grid_featurizer.py,此特征化器专为蛋白质-配体复合物设计。它创建一个以配体为中心的网格,并可以将各种特征类型编码到体素通道中,例如ECFP、SPLIF、Sybyl原子类型、电荷、氢键势、π-堆积和阳离子-π相互作用。参数包括box_width、voxel_width、feature_types和用于通过旋转复合物进行数据增强的nb_rotations[^85]。 虽然用户查询中提到了通用的VoxelFeaturizer,但在提供的材料中,RdkitGridFeaturizer更具体地记录了用于创建三维网格。DeepChem提供了一套广泛的特征化器[^87]。 代码: GitHub上的deepchem/deepchem[^86]。 MolVoxel: (SeonghwanSeo/molvoxel) 一个易于使用的Python分子体素化工具,依赖项极少(NumPy、SciPy,可选Numba、PyTorch/CUDA、RDKit、PyMOL)。它以原子坐标、半径和特征作为输入。参数包括分辨率(默认0.5)、维度(默认64)、密度类型(‘gaussian’或‘binary’)和sigma(用于高斯核,默认0.5)[^89]。 NEARL: (miemiemmmm/Nearl) 一个自动化的Python流程,旨在从分子动力学(MD)轨迹的大量系综中提取动态特征,重点是用于三维CNN的三维体素表示。一个示例将特定残基附近的子结构的质量分布特征化为一个32x32x32的网格[^90]。 体素网格中的稀疏性问题是一个重要的考虑因素。如果原子在大型三维网格中表示为单个点,则大多数体素将保持为空,导致计算效率低下,并可能妨碍三维CNN的学习过程。像Kuzminykh的小波变换、高斯模糊或将网格聚焦于感兴趣区域(例如,配体或结合位点周围)等技术对于创建更密集、信息更丰富的表示至关重要。 3. 基于三维表面的表征 这些方法通过分子的三维表面(特别是蛋白质)来表示分子,并将理化或几何特征编码到这些表面上。然后,几何深度学习模型可以在这些表面网格或从它们派生的面片上操作。 MaSIF (Molecular Surface Interaction Fingerprints) (Gainza et al.) : 方法 MaSIF是一种著名的方法,它处理蛋白质表面以解读对生物分子相互作用重要的模式[^1]。 表面生成: 它计算分子表面(使用MSMS计算溶剂排除表面)并将其离散化为网格。 特征分配: 将几何特征(例如,形状指数、距离依赖曲率)和化学特征(例如,氢键供体/受体势、通过APBS计算的静电势,以及通过PDB2PQR原子参数计算的疏水性)分配给网格的每个顶点。 面片提取: 在每个顶点周围提取具有固定测地线半径(例如9 Å或12 Å)的重叠径向面片。 指纹计算: 一个利用测地线卷积的几何深度神经网络处理这些面片,为每个表面点计算一个描述符(指纹)。 Python/脚本流程: MaSIF采用一个复杂的流程,涉及多个外部工具和Python库:reduce(用于PDB结构质子化)、MSMS(用于分子表面三角化)、BioPython(用于解析PDB文件)、PyMesh(用于处理.ply表面文件、属性和网格正则化)、PDB2PQR和APBS(用于计算泊松-玻尔兹曼静电势以导出电荷特征)、open3D(用于RANSAC对齐等任务)以及Tensorflow(作为深度学习框架)[^92]。 代码: MaSIF框架可在GitHub上的LPDI-EPFL/masif获取[^1]。data_preparation目录包含协调这些步骤的脚本(例如data_prepare_one.sh)。 PINet (Protein Interface Network) (Gainza et al., 2020) : 方法: PINet是一个几何深度神经网络,旨在预测蛋白质相互作用界面区域。它以编码两个伴侣蛋白结构的点云对作为输入[^98]。 该模型学习捕捉几何和理化分子表面的互补性,以预测相互作用区域[^99]提到PINet在点云上使用PointNet。 综述[^1]将PINet列在MaSIF下,表明它们在表面/点云上的几何深度学习方面存在概念联系或共享基础。 4. 三维点云表征 这种方法直接将分子表示为三维空间中的一组点(通常是原子),其中每个点都与一个特征向量(例如,坐标、原子类型、电荷)相关联。然后使用像PointNet这样的网络或专门的图神经网络来处理这个无序点集。 Wang Y. et al. (Briefings in Bioinformatics 2022, “A Point Cloud-Based Deep Learning Strategy for Protein-Ligand Binding Affinity Prediction”) : 方法: 这项工作将PointNet和PointTransformer架构直接应用于从蛋白质-配体复合物派生的三维点云,用于结合亲和力预测[^101]。 点云生成 : 对蛋白质-配体复合物(来自PDBbind)进行预处理(去除溶剂/金属/离子)。 坐标对齐到配体的中心以减轻平移方差。 选择距离配体中心最近的1024个原子。 每个原子(点)由6个特征描述:x, y, z坐标、范德华半径、原子量和一个来源标识符(蛋白质为1,配体为-1)。 特征进行归一化。如果原子少于1024个,则用零特征点填充该集合。 工具: 使用Python和OpenBabel进行初始点云生成,并使用C++加速此预处理步骤[^106]。 PGpocket (Zhao, He, Wang et al., 2024) : 尽管是另一个“Wang et al.”团队的不同工作,PGpocket也使用点云。它将蛋白质表面抽象为一个点云,为每个点提取几何和化学特征,然后构建一个点云图。随后应用GNN来预测结合位点[^102]。这说明了点云GNN在结构生物信息学中日益增长的兴趣。 三维表征的选择——无论是快照、体素、表面还是点云——反映了在信息内容、计算可行性以及与各种神经网络架构的兼容性之间进行权衡的不同策略。虽然提供了更丰富的空间信息,但与二维方法相比,这些方法通常伴随着更高的计算成本和数据准备复杂性。特征工程也仍然至关重要,无论是在定义体素通道内容,还是在将化学和几何特性映射到表面或点上。 B. 基于三维表征的CNN架构与应用 CNN架构的选择与所使用的三维表征类型密切相关。 对于三维体素网格: 标准的三维CNN是自然的选择。它们将二维CNN的原理扩展到三维卷积滤波器、三维池化层和全连接层。例如DeepSite、Pafnucy和AtomNet,它们使用此类架构从蛋白质-配体复合物或蛋白质结合位点的体素化表示中学习特征。 对于三维表面和网格: 采用几何深度学习(GDL)模型。例如,MaSIF使用测地线卷积,这种卷积专门设计用于在曲面和网格上操作,通过在局部表面面片上定义类似卷积的操作来实现[^92]。 对于三维点云: 使用专门的GDL架构,如PointNet[^106]和PointTransformer[^106]。这些网络旨在处理三维空间中的无序点集,学习对输入点排列不变的特征。适用于点云的GNN(如PGpocket[^102])也很常见。PINet也利用了点云处理[^99]。 应用领域: 结合亲和力预测: 一个主要应用,工具如Pafnucy[^71]、AtomNet[^60]、Ragoza等人的方法[^63]以及Wang Y.等人的PointNet/PointTransformer方法[^106]旨在预测蛋白质-配体相互作用的强度。 结合位点预测: 识别配体或其他分子可能在蛋白质表面结合的位置。例如DeepSite[^66]、KDEEP、Ligdream和MaSIF-site[^92]。 QSAR、毒性和一般性质预测: Deepsnap使用三维快照图像,应用于QSAR和毒性预测[^1]。 一般药物发现和筛选: 许多三维方法通过提供结构见解,为虚拟筛选和识别新型候选药物的更广泛目标做出贡献。 C. 三维方法的Python包和代码实现 三维分子图像生成和处理流程涉及多种Python包和外部软件。 构象生成 : RDKit: 广泛用于从SMILES或二维结构生成三维构象,常采用ETKDG(基于实验扭转角的知识距离几何)等算法[^3]。 CORINA Classic: 一种用于从二维结构或SMILES生成单个低能三维构象的软件,在DeepSnap工作流程中使用[^53]。 可视化和快照生成 : Maestro (Schrödinger): 用于分子建模和可视化的商业软件,用于生成三维构象的多角度二维快照[^1]。 PyMOL: 一个开源的分子可视化系统,可通过Python高度脚本化。VideoMol使用它将旋转的构象渲染成帧[^107]。 Jmol: 一个用于三维化学结构的开源Java查看器,在最初的DeepSnap (Uesawa) 方法中用于可视化和捕获旋转的模型[^54]。 体素化工具 : libmolgrid: (gnina/libmolgrid on GitHub) 一个C++/CUDA库,带有Python绑定,用于创建体素化的分子数据,支持各种原子类型方案和GPU加速。关键类包括ExampleProvider, GridMaker和AtomTyper[^63]。 DeepChem: (deepchem/deepchem on GitHub) 提供RdkitGridFeaturizer,用于将蛋白质-配体复合物特征化为三维网格,具有可定制的特征和数据增强选项[^85]。 MolVoxel: (SeonghwanSeo/molvoxel on GitHub) 一个Python分子体素化工具,支持不同的密度类型和计算后端(NumPy, Numba, PyTorch/CUDA)[^89]。 NEARL: (miemiemmmm/Nearl on GitHub) 一个Python流程,专注于从MD轨迹中提取动态特征到三维体素表示,用于三维CNN[^90]。 表面处理工具 (主要用于MaSIF) : MSMS: 用于计算溶剂排除表面(三角化网格)的外部命令行工具[^92]。 PyMesh: 用于处理和正则化表面网格的Python库[^92]。 APBS (Adaptive Poisson-Boltzmann Solver): 用于计算分子表面静电势的外部工具[^92]。 PDB2PQR: 用于通过分配电荷和半径来准备APBS计算的蛋白质结构的外部工具[^92]。 reduce: 为PDB结构添加氢原子[^92]。 点云处理 : OpenBabel: 可用于生成点云数据的预处理步骤,如Wang Y.等人的工作所示[^106]。 深度学习框架 : TensorFlow: MaSIF[^92]和Pafnucy(Keras API)[^76]使用。 PyTorch: 日益普及,ImageMol[^13]和KekuleScope[^22](尽管主要用于二维模型)使用。许多现代GDL库也基于PyTorch(例如,PyTorch Geometric,DeepChem与之集成[^55])。 三维表示的多样性——快照、体素、表面和点云——反映了为机器学习寻找编码复杂三维分子信息的最佳方式的持续努力。每种方法都在信息密度、计算成本以及它们最适合的神经网络架构类型之间呈现出一组独特的权衡。虽然三维方法具有捕捉二维中经常丢失的关键空间细节的潜力,但它们通常需要比二维方法更多的计算资源,并依赖于高质量三维结构数据的可用性,例如蛋白质数据库(PDB)中的数据。 IV. 分子序列和视频表征 除了静态的二维和三维图像,一些新兴方法试图捕捉分子的动态方面,或以类图像格式利用基于序列的信息供CNN处理。 A. 分子视频/序列的生成 1. 分子视频 (例如 VideoMol) 分子视频的概念旨在将分子的构象灵活性或动态特性表示为一个图像帧序列,从而提供比单个静态构象更丰富的输入。 VideoMol (Zeng, Xiang et al.) 这是一个基于分子视频的基础模型的显著例子[^107]。 方法论 : 构象生成: 该过程从生成三维构象开始。对于其预训练数据集,VideoMol利用了PCQM4Mv2数据库中的构象。对于下游任务中可能不易获得构象的情况,他们采用RDKit的MMFFOptimizeMolecule()函数和MMFF94力场来生成构象[^107]。 旋转和快照生成: 每个三维构象围绕正X、Y和Z轴进行系统的逆时针旋转。此过程为每个分子生成 $n_f=60$ 个快照(帧)。旋转角度由一个旋转矩阵 $R_z(\phi)$ 形式化,其中 $\phi = \pi/10$[^107]。 渲染: 这60个快照中的每一个都使用PyMOL渲染成分子帧,尺寸为224x224像素。使用特定的PyMOL命令确保描绘风格的一致性,例如 bg_color white; hide (hydro); set stick_ball,on; set stick_ball_ratio,3.5; set stick_radius,0.15; set sphere_scale,0.2; set valence,1; set valence_mode,0; set valence_size, 0.1[^107]。PyMOL最初生成640x480的帧,然后进行后处理(填充和调整大小)到最终的224x224尺寸[^107]。 视频拼接: 然后将60个渲染帧按顺序拼接在一起,形成最终的分子视频 $V = {v_1, v_2, …, v_{n_f}}$,其中每个 $v_i \in \mathbb{R}^{3 \times 224 \times 224}$ (假设为3个颜色通道)[^107]。 Python包/脚本 : RDKit: 用于三维构象生成(如果尚未提供)[^107]。 PyMOL: 用于将旋转的构象渲染成单独的图像帧。PyMOL可通过Python高度脚本化,从而自动化旋转和帧保存过程。PyMOL命令如mset(定义电影帧/长度)、rotate(或手动旋转后使用mview store)和mpng(将帧保存为PNG)是此类工作流程的基础[^109]。 2. 基于SMILES的序列/矩阵表示 (再访) 虽然在二维部分已讨论过,但有必要重申,一些方法以一种虽然在视觉上不是图像,但结果是适用于CNN的二维矩阵的方式处理SMILES字符串,从而以“类图像”的方式处理序列。 Hirohara M. et al.: 将SMILES字符串转换为“SMILES特征矩阵”(例如,固定大小如400x42),其中行可能表示字符位置,列表示one-hot编码的字符或派生特征。然后将此矩阵输入到二维CNN[^36]。 BESTox: 将SMILES转换为“二维二元矩阵”,编码了原子类型、键合氢数量、电荷、化合价、环信息、芳香性、手性和杂化状态等在SMILES字符串上的出现情况。此矩阵作为CNN输入[^1]。 MolPMoFiT (Li, Fourches): 此方法虽然在综述[^1]中列于自监督学习下,但主要在标记化的SMILES序列(原子级或SMILES对编码 - SPE)上使用NLP启发的架构(ULMFiT改编)[^119]。它更像是一种序列建模方法,而不是视觉意义上的基于图像的方法。 B. 基于视频/序列数据的CNN架构与应用 VideoMol : 其架构可能涉及为视频处理设计的CNN。这些可以包括将第三维处理时间序列帧的三维CNN,或混合架构如CNN-LSTM,其中CNN从每个帧中提取空间特征,而LSTM对跨帧的时间依赖性进行建模。VideoMol论文提到使用“视频编码器”提取潜在特征,并实施自监督预训练策略,通过考虑构象动态变化和理化信息来优化这些表示[^113]。 应用: 预测分子靶点和性质,识别抗病毒分子。一个关键目标是有效地理解和利用分子的三维结构动力学[^107]。 SMILES矩阵方法 (Hirohara, BESTox) : 这些通常采用标准的二维CNN。卷积滤波器从SMILES字符串的二维矩阵表示中学习局部模式,这些模式可能对应于化学基序或特征之间的顺序关系[^36]。 MolPMoFiT : 使用Transformer或类似LSTM的架构,这些是NLP中用于序列建模的标准架构,而不是在视觉图像或类图像矩阵上操作的CNN[^119]。 C. Python包和代码实现 VideoMol : 利用RDKit进行构象生成,PyMOL(可通过Python脚本化)将旋转的构象渲染成帧[^107]。在提供的摘要中未提供完整的VideoMol框架本身的公开GitHub链接。 Hirohara M. et al. : 其基于SMILES的CNN的源代码,用Chainer深度学习框架实现,据称可在 http://www.dna.bio.keio.ac.jp/smiles/ 获取[^123]。 BESTox : 摘要中未提供明确的公开代码链接[^37]。 MolPMoFiT : 实现可在GitHub上的XinhaoLi74/MolPMoFiT获取[^119]。它使用PyTorch和Fastai库[^119]。 像VideoMol这样的分子视频的引入标志着朝着捕捉分子动力学迈出了重要一步,这些动力学通常对理解生物活性至关重要,但在静态二维或单构象三维图像中会丢失。这种方法允许模型从更丰富、时间分辨的分子结构表示中学习。然而,此类视频数据(例如VideoMol中每个分子60帧)的生成和处理计算量大,可能限制了它们目前与静态图像方法相比的广泛采用。将CNN应用于SMILES字符串的矩阵表示也展示了这些网络超越纯视觉数据的多功能性,突出了如果顺序信息可以结构化为局部模式有意义的二维网格,CNN就可以有效地应用。 V. 多模态及其他相关方法 为了进一步增强分子系统的预测能力和理解,研究人员越来越多地探索多模态学习、迁移学习和自监督/无监督学习范式,通常将基于图像的表示与其他数据类型集成或利用大型未标记数据集。 A. 多模态学习方法 多模态学习旨在同时从多种类型的数据(如图像、文本和图)中学习,以构建更全面、更准确的模型[^1]。基本前提是不同的模态捕获关于分子的互补信息,它们的融合可以导致模型性能的协同改进。 Multi-modal (Wang et al. in [^1]) : 方法: 该系统专注于通过处理从化学专利中提取的文本描述和结构图像来进行化学信息重建。它采用双分支模型架构:一个分支使用CNN进行图像处理,另一个分支使用BiLSTM+CRF进行文本处理。输出被对齐以识别异构化学实体及其关系[^1]。 应用: 主要用于通过理解和链接来自不同专利数据源的信息来生成大规模的近药物化合物库。 MCNN-DDI (Asfand-E-Yar M. et al., 2024) : 方法: 一种为预测药物间相互作用(DDI)相关事件而设计的多模态CNN。它利用四个不同的CNN子模型,每个子模型专用于所涉及药物的特定特征类型:化学子结构(表示为从SMILES派生的相似性矩阵,而非直接的视觉图像)、酶、通路和药物靶点。然后组合这些子模型的输出以进行最终的DDI事件预测[^1]。 代码: 虽然论文发表在Scientific Reports[^125],但摘要中未提供直接的公开代码链接。 MultiDTI (Zhou et al.) : 方法: 该模型通过采用在异构网络上操作的联合学习框架来预测药物-靶点相互作用。它整合了来自这些网络的相互作用或关联信息以及药物和靶点的序列信息。一个关键方面是它能够将药物、靶点、副作用和疾病节点映射到一个共同的潜空间中。这使得MultiDTI能够通过基于其化学结构将其映射到这个学习到的空间中来预测新化学实体的相互作用[^1]。 代码: 可在GitHub上的Deshan-Zhou/MultiDTI获取[^1]。 ISMol (Zhang, Xiang et al., 2024) : 方法: ISMol代表基于图像和序列的双视角学习用于分子性质预测。它利用交叉注意力机制来有效融合从分子的两个不同视角提取的信息:其二维图像和其SMILES字符串表示[^128]。 代码: 论文和代码的链接可在GitHub仓库Shihang-Wang-58/papers_for_molecular_representation中找到[^128]。 CGIP (Wang et al., 2023) : 方法: CGIP,即对比图文预训练(Contrastive Graph-Image Pre-training),是一个用于分子表征学习的框架。它旨在将化学知识从分子图(显式编码连接性)迁移到分子图像(隐式编码结构)。这是通过在大量未标记分子上精心设计的模态内和模态间对比学习目标来实现的[^128]。 代码: 论文和代码的链接可在Shihang-Wang-58/papers_for_molecular_representation中找到[^128]。 越来越多地采用多模态方法反映了人们日益认识到没有任何单一的表征能够捕获分子的所有相关方面。通过将来自图像的视觉信息与来自SMILES的顺序信息、来自图的显式连接性或来自文本的上下文信息相结合,这些模型旨在实现更全面、更稳健的理解,从而可能带来准确性和泛化能力的提高。 B. 基于图像模型中的迁移学习 迁移学习涉及重用从一个任务或领域获得的知识来改进另一个(通常是目标)领域的学习,在目标领域中标记数据可能稀缺[^1]。由于生成大规模、高质量标记数据集的成本和精力很高,这在药物发现中尤其重要。 Dalkiran et al. (in [^1]) : 方法: 这项工作因采用迁移学习识别分子图像而受到关注[^1]。综述[^1]链接到一个GitHub仓库cansyl/TransferLearning4DTI,表明其专注于药物-靶点相互作用预测。一般的想法是使用在大型数据集(例如,通用图像或广泛的化学图像数据集)上预训练的模型作为特征提取器,或作为在新模型(在更具体、更小的数据集上训练)上的初始化点。摘要[^140]和[^141]讨论了DTI中的迁移学习,但并未具体说明此特定工作的图像生成。 Li et al. (in [^1] - Lingqiao Li et al., 2020 JIOHS) : 方法: 该研究应用迁移学习,使用一维CNN处理近红外(NIR)光谱数据,进行多制造商药物识别。虽然输入是光谱数据而非分子结构图像,但它例证了当数据采集困难或标记成本高昂时,迁移学习在化学分析中的效用[^1]。利用预训练模型来提高在较小相关数据集上性能的核心原则是适用的。 KekuleScope : 方法: 如前所述,KekuleScope扩展了现有的著名CNN架构(AlexNet, DenseNet-201, ResNet152, VGG-19),这些架构最初在大型、异构的图像数据集(如ImageNet)上进行了预训练。这种预训练使模型能够学习通用的视觉特征,然后针对从二维凯库勒结构表示预测化合物活性的特定任务进行微调[^1]。这是从通用领域到专门化学领域的经典迁移学习示例。 MoleCLIP (Harnik et al., 2024, ChemRxiv) : 方法: 这项近期工作明确利用OpenAI的CLIP(对比语言-图像预训练)视觉基础模型作为分子图像表征学习框架的骨干。通过从一个强大的通用视觉模型开始,MoleCLIP证明它需要明显更少的分子特异性预训练数据就能达到或超过在分子数据上从头开始训练的最新模型的性能。这突出了将知识从非常大规模的通用视觉模型迁移到化学任务的潜力[^134]。 迁移学习通过有效利用预训练模型中封装的现有知识,解决了“小数据药物发现问题”[^1]。这减少了对每个新药物发现任务的大量标记数据集的依赖,并可以加速模型开发。 C. 自监督和无监督学习 这些学习范式使模型能够从未标记的数据中学习有意义的表征,鉴于未标记化学数据的丰富性,这一点非常有利。 ImageMol (Zeng, Xiang et al.) : 方法: ImageMol是一个专为分子图像设计的无监督/自监督预训练框架。它通过关注分子图像像素中存在的局部和全局结构特征,从一个包含1000万未标记类药化合物的大型数据集中学习化学表征[^13]。预训练可能涉及分子图像重建等任务,并且该框架可以整合各种代理任务,如对比学习或拼图游戏,正如[^1]中展示的通用迁移学习流程所示,ImageMol与此一致。ResNet18被提及作为预训练脚本的骨干网络[^13]。 代码: HongxinXiang/ImageMol on GitHub[^13]。 MolPMoFiT (Li, Fourches) : 方法: 这种方法将自监督预训练应用于SMILES序列而非视觉图像。它改编了NLP中的ULMFiT(通用语言模型微调)方法。一个大规模分子结构预测模型在来自ChEMBL的一百万个未标记分子上使用标记化的SMILES(原子级或通过SMILES对编码 - SPE)进行预训练。然后将此预训练模型针对特定的QSAR任务进行微调[^119]。 代码: XinhaoLi74/MolPMoFiT on GitHub[^119]。 特别是自监督学习,通过定义使模型能够学习数据内在特征的代理任务,允许模型利用大量未标记的分子数据(SMILES字符串或生成的图像)。然后可以将这种学习到的表征迁移到下游的监督任务中,通常会带来性能和数据效率的提高。这些方法的成功突显了利用大型未标记化学数据集构建强大的基础模型的价值。 这些先进学习范式——多模态学习、迁移学习和自监督学习——与基于图像的分子表征的融合,预示着未来AI模型将能够从化学数据中学习更丰富、更具泛化性、更细致的特征。这有望通过提高预测准确性、增强数据效率以及可能揭示新的化学见解,从而显著加快药物发现的步伐。 VI. 总结与展望 本报告综述了将分子信息转换为适用于药物发现及相关化学科学领域卷积神经网络(CNN)应用的各种基于图像的表征方法。这些技术涵盖了二维图像、多方面的三维表征(快照、体素、表面、点云)以及新兴的分子视频/序列格式。 A. 关键分子到图像方法与CNN应用回顾 二维表征: 主要使用RDKit等工具从SMILES字符串生成,包括标准的凯库勒结构图和更高级的多通道图像(如Chemception),后者将化学特征直接编码到图像通道中。这些方法广泛应用于QSAR、ADMET预测、毒性筛选和DTI,通常使用标准的CNN架构。 三维表征 : 快照: 三维构象在多个角度下的二维投影(例如,使用Maestro,或如Uesawa的Deepsnap中使用的Jmol)。 体素: 将原子存在或理化性质编码到离散化的三维网格中,由三维CNN处理(例如,AtomNet, DeepSite, Pafnucy, Ragoza等人的工作, Kuzminykh D.等人的工作)。libmolgrid和DeepChem的RdkitGridFeaturizer等库有助于此过程。 表面: 带有映射特征的分子表面,由几何深度学习(GDL)模型处理(例如,MaSIF, PINet)。 点云: 将原子直接表示为带特征的三维点,由PointNet/PointTransformer等网络处理(例如,Wang Y.等人的工作)。 这些对于基于结构的任务(如结合亲和力和位点预测)至关重要。 视频/序列表征: 分子视频(例如,使用RDKit和PyMOL的VideoMol)旨在捕捉动力学。从SMILES派生的矩阵(例如,Hirohara M.等人, BESTox)以二维格式表示序列供CNN使用。 高级学习范式: 多模态学习(结合图像与文本、图等)、迁移学习(利用预训练模型)和自监督学习(从未标记数据中学习)正在增强基于图像的方法的能力(例如,ImageMol, MolPMoFiT, MoleCLIP)。 B. 不同表征模态的比较讨论 分子表征的选择并非一刀切;它涉及信息丰富度、计算成本和任务适用性之间的权衡。 二维图像: 具有生成简单(尤其适用于大型SMILES数据库)和模型训练计算成本较低的优势。它们非常适合高通量筛选和主要由宏观结构特征决定的任务。然而,它们固有地丢失了可能至关重要的显式三维空间信息。多通道二维图像试图通过将更丰富的化学信息直接编码到图像平面中来弥补这一点[^1]。 三维表征 提供对理解和预测蛋白质-配体结合等相互作用至关重要的显式空间信息。 三维构象快照提供了一种折衷方案,以比完整三维方法更低的计算成本为二维CNN提供一些三维视角,但视角有限。 体素网格是三维CNN的自然扩展,但可能存在数据稀疏和计算需求高的问题。分子在网格中的朝向如果不由数据增强或旋转不变架构处理,也可能影响结果。有效的体素通道特征工程至关重要[^66]。 表面和点云表示,由GDL模型处理,通常被认为更“自然”地适用于不规则的三维结构,可能避免一些体素化伪影。然而,GDL模型的开发和数据预处理流程(例如,MaSIF的流程[^92])可能很复杂。 视频/序列表示: 具有捕捉分子动力学和柔性的独特潜力,这些通常是生物功能的关键决定因素。VideoMol渲染旋转构象的方法是初步尝试[^107]。然而,这些方法目前在数据生成(例如,每个分子60帧)和模型训练方面计算需求最高。 C. 当前挑战 尽管取得了显著进展,基于图像的分子表征学习领域仍存在一些挑战: 图像转换损失: 将分子结构(尤其是三维结构映射到二维图像,甚至三维结构映射到离散网格)的过程可能导致关键信息的丢失或失真[^1]。 模型泛化能力: 深度学习模型,特别是CNN,需要大量的训练数据。在特定数据集或特定终点上训练的模型,如果没有广泛的重新训练或复杂的领域自适应技术,可能难以很好地泛化到新的、未见过的化学空间或不同的生物靶点[^1]。 表征的可解释性: 理解CNN为何从分子图像中做出特定预测仍然是一个重大障碍。虽然像类激活映射(CAM)和Grad-CAM这样的方法通过高亮有影响力的图像区域提供了一些见解,但增强这些“黑箱”模型的可解释性对于建立信任、推导新的科学假设和指导实验设计至关重要[^1]。这在药物发现中尤其重要,因为理解预测的机制或结构基础与预测本身同样有价值。 数据稀缺性和质量: 高质量、标记的数据集,特别是对于三维结构(例如,共结晶的蛋白质-配体复合物)或动态分子数据,通常有限。这可能阻碍鲁棒且可泛化模型的训练。 计算成本: 生成、存储和处理三维及基于视频的分子表征,以及训练相应的复杂神经网络架构,计算量可能很大,需要大量的GPU资源和时间。 D. 未来方向 该领域正在迅速发展,有几个有前景的未来方向: 改进的三维表征: 对开发更密集、信息更丰富且固有旋转/平移不变的三维输入表征的研究将继续。Kuzminykh D.等人提出的小波变换[^78]或学习到的等变表征等方法至关重要。 高级几何深度学习: 为分子图、表面和点云开发更强大、更定制化的GDL架构,可能会在基于结构的新药设计任务中产生显著改进。 增强的多模态学习集成: 预计将出现更复杂的方法,用于将图像数据与其他模态(图、序列、文本、组学数据、实验读数)融合。这可能涉及注意力机制、联合嵌入空间和协同训练策略,以利用不同数据源的互补优势[^128]。 化学基础模型: 构建和利用在海量未标记化学图像或结构数据集上预训练的大规模基础模型(类似于NLP中的GPT或CV中ImageNet训练的模型)的趋势可能会加速。像ImageMol[^13]这样的模型以及像CLIP这样的通用视觉模型的应用(例如MoleCLIP[^134])预示着这个方向。这些模型可以作为各种下游任务的强大起点,只需最少的微调。 整合分子动力学: 超越静态快照或简单旋转,更有效地表示和学习真实的分子动力学(例如,从MD模拟中),是一个关键的前沿领域。虽然VideoMol[^107]和NEARL[^90]是朝这个方向迈出的步伐,但开发计算上易于处理的方法将丰富的动态信息输入CNN/GDL模型仍然是一个挑战。 自动化和标准化流程: 开发用户友好的工具和标准化的流程,覆盖从分子输入到图像生成、特征提取、模型训练和解释的整个工作流程,对于更广泛的采用和可重复性至关重要。 增强的可解释性技术: 继续研究专门针对化学图像和三维结构的模型可解释性方法,对于从这些复杂模型中提取可操作的科学见解至关重要。 基于图像的分子表征学习的发展历程证明了跨学科创新的力量,它大量借鉴了计算机视觉的成果,同时适应了化学数据的独特挑战。随着计算资源的增长和AI方法的日益复杂,这些视觉方法有望在加速新药发现和开发方面发挥越来越关键的作用。富含信息的图像数据与先进学习范式的融合,有望解锁对分子结构与生物功能之间复杂关系的更深刻见解。 VII. 参考文献 (一个正式报告会在此处根据统一的引文风格,如ACS或Nature风格,编纂一个基于所提供摘要的完整参考文献列表。) 部分关键参考文献 (基于所提供摘要的示例性列表): Li, Y., Liu, B., Deng, J., Guo, Y., Du, H. Image-based molecular representation learning for drug development: a survey. Briefings in Bioinformatics, 2024, 25(4), bbae294. RDKit: Open-Source Cheminformatics Software. https://www.rdkit.org Riniker, S., Landrum, G. A. Better Informed Distance Geometry: Using What We Know To Improve Conformation Generation. J. Chem. Inf. Model. *2011*5, 55, 12, 2562–2574. RDKit Documentation: Molecular Drawing. https://www.rdkit.org/docs/GettingStartedInPython.html#drawing-molecules RDKit Documentation: rdkit.Chem.Draw.rdMolDraw2D — RDKit documentation. https://www.rdkit.org/docs/source/rdkit.Chem.Draw.rdMolDraw2D.html RDKit Cookbook: Drawing molecules. https://www.rdkit.org/docs/Cookbook.html#drawing-molecules Ma, B.,ደን λόViswanathan, U., Ji, H. F., & Willett, P. An evaluation of 2D fingerprint-based measures of similarity between small molecules for the prediction of protein targets. Mol. Inf. 2015, 34, 104-110. (间接相关,说明特征提取的重要性) (此处应为 MolDrawOptions.highlightAtomColors 或 DrawMolecule 中 highlightAtomColors 的具体 RDKit 文档或示例) Pillow (PIL Fork) documentation. https://pillow.readthedocs.io/ RDKit Documentation: rdkit.Chem.Draw.MolDrawOptions — RDKit documentation. https://www.rdkit.org/docs/source/rdkit.Chem.Draw.MolDrawOptions.html Wildcard Consulting Blog (David Hall). Chemception: Going from Molecules to Images in RDKit. https://wildcardconsulting.dk/chemception-going-from-molecules-to-images-in-rdkit/ (2018). (引用文献中的博客) Rifaioglu, A.S., Nalbat, E., Atalay, V., Doğan, T., Martin, M.J., Cetin-Atalay, R., Atalay, V. DEEPScreen: high performance drug–target interaction prediction with convolutional neural networks using 2-D structural compound representations. Chemical Science, 2020, 11, 2531–2557. Zeng, X., Xiang, H., Yu, L., Wang, J., Wang, Y., Liu, B., Li, K., Cheng, F. Accurate prediction of molecular properties and drug targets using a self-supervised image representation learning framework. Nature Machine Intelligence, 2022, 4, 960–972. Goh, G.B., Siegel, C., Vishnu, A., Hodas, N.O., Baker, N.A. Chemception: A Deep Neural Network with Minimal Chemistry Knowledge Matches the Performance of Expert-developed QSAR/QSPR Models. arXiv:1706.06689, 2017. (后续发表于 J. Comput. Chem.) (同14) (RDKit DrawingOptions.dotsPerAngstrom 的具体文档或示例) (RDKit MolDrawOptions.setAtomPalette 的具体文档或示例) (同11, 14) Goh, G. B., Hodas, N. O., & Vishnu, A. Deep learning for computational chemistry. J. Comput. Chem. 2017, 38, 1291-1307. GitHub repository: https://github.com/Abdulk084/Chemception (Chemception Keras/TensorFlow 实现示例) Cortés-Ciriano, I., Bender, A. KekuleScope: prediction of cancer cell line sensitivity and compound potency using convolutional neural networks trained on compound images. Journal of Cheminformatics, 2019, 11, 41. GitHub repository: https://github.com/isidroc/kekulescope (KekuleScope PyTorch 实现) Fernandez, M., Ban, F., Woo, G., Hsing, M., Yamazaki, T., LeBlanc, E., Rennie, P.S., Welch, W.J., Cherkasov, A. Toxic Colors: The Use of Deep Learning for Predicting Toxicity of Compounds Merely from Their Graphic Images. Journal of Chemical Information and Modeling, 2018, 58(8), 1533–1543. (此处应为 ADMET-CNN 的主要参考文献) Shi, T., Yang, Y., Huang, S., Catana, C., Zheng, M. Molecular image-based convolutional neural network for the prediction of ADMET properties. Chemometrics and Intelligent Laboratory Systems, 2019, 194, 103853. (此处应为 QSAR-CNN (Zhong et al.) 的主要参考文献) Zhong, R., Lv, M., Zhou, P., Li, C., Li, J., Yang, H., & Chen, J. (2021). QSAR-CNN: A novel method for predicting the reactivity of organic contaminants with OH radicals. Water Research, 190, 116722. (根据综述内容推测) (此处应为 Hirohara M. et al. 的主要参考文献) Hirohara, M., Saito, Y., Koda, Y., Sato, K., & Sakakibara, Y. (2018). Convolutional neural network based on SMILES representation of compounds for detecting chemical moti2f. BMC Bioinformatics, 19(S19), 525. (根据综述内容推测) (此处应为 BESTox 的主要参考文献) Zhao, Q., Xia, J., Hu, J., Yin, Z., & Liu, S. (2019). BESTox: a 2D SMILES-based deep learning method for acute oral toxicity prediction. Journal of Cheminformatics, 11(1), 1-12. (根据综述内容推测) (此处应为 ResNet18DNN 的主要参考文献) Zhao, J., Liu, P., Li, H., Li, S., Zhang, B., Feng, Y., … & Wang, Y. (2021). ResNet18DNN: a residual neural network for prediction of drug-induced liver injury. Briefings in Bioinformatics, 22(5), bbab056. (根据综述内容推测) Liu, P., Li, H., Li, S., Lv, H., Gong, J., Liu, H., Wang, Y. Improving prediction of phenotypic drug response on cancer cell lines using deep convolutional network. BMC Bioinformatics, 2019, 20, 241. Asilar, E., Hemmerich, J., Ecker, G.F. Image Based Liver Toxicity Prediction. Journal of Chemical Information and Modeling, 2020, 60(3), 1111–1121. (同29) (同31) (同33) GitHub repository: https://github.com/Lowpassfilter/tCNNS-Project (tCNNs 实现) (DILI预测相关文献,可能涉及指纹和CNN) (同34) (OpenBabel 相关文献或网站: http://openbabel.org) (Schrödinger Maestro 软件信息: https://www.schrodinger.com/products/maestro) (Deepsnap (Uesawa) 的相关文献或 Jmol: http://jmol.sourceforge.net/) Matsuzaka, Y., Uesawa, Y. Optimization of a deep-learning method based on the classification of images generated by parameterized deep snap a novel molecular-image-input technique for quantitative structure–activity relationship (QSAR) analysis. Frontiers in Bioengineering and Biotechnology, 2019, 7, 65. (RDKit MolDraw3D 文档: https://www.rdkit.org/docs/source/rdkit.Chem.Draw.rdMolDraw3D.html) (AtomNet 的原始文献: Wallach, I., Dzamba, M., & Heifets, A. (2015). AtomNet: A Deep Convolutional Neural Network for Bioactivity Prediction in Structure-based Drug Discover3y. arXiv:1510.02855) (Ragoza et al. 关于体素化的文献,可能与GNINA相关) Ragoza, M., Hochman, J., St-Maurice, J. P., & Koes, D. R. (2017). Ligand pose optimization with atomic grid-based potentials. Journal of Chemical Information and Modeling, 57(4), 942-957. (与libmolgrid相关) (DeepSite 的原始文献: Jimenez, J., Doerr, S., Martinez-Rosell, G., Rose, A. S., & De Fabritiis, G. (2017). DeepSite: protein-binding site predictor using 3D-convolutional neural networks. Bioinformatics, 33(19), 30346-3042.) (KDEEP 的原始文献: Jiménez, J., Škalič, M., Martínez-Rosell, G., & De Fabritiis, G. (2018). KDeep: Protein–Ligand Binding Affinity Prediction with 3D Convolutional Neural Networks. J. Chem. Inf. Model., 58(2), 287-296.) (Pafnucy 的原始文献: Stepniewska-Dziubinska, M.M., Zielenkiewicz, P., Siedlecki, P. Development and evaluation of a deep learning model for protein–ligand binding affinity prediction. Bioinformatics, 2018, 34(21), 3666–3674.) GitHub repository: http://gitlab.com/cheminfIBB/pafnucy (Pafnucy 代码) Kuzminykh, D., Kadurin, A., Zhebrak, A., Baskov, I., Nikolenko, S., Shayakhmetov, R., Zhavoronkov, A. 3D Molecular Representations Based on the Wave Transform for Convolutional Neural Networks. Molecular Pharmaceutics, 2018, 15(10), 4516–4521. GitHub repository: https://github.com/gnina/libmolgrid (libmolgrid 代码) (DeepChem RdkitGridFeaturizer 文档: https://deepchem.readthedocs.io/en/latest/api_reference/featurizers.html#rdkitgridfeaturizer) GitHub repository: https://github.com/deepchem/deepchem (DeepChem 代码) (MolVoxel 相关信息: https://github.com/SeonghwanSeo/molvoxel) (NEARL 相关信息: https://github.com/miemiemmmm/Nearl) (MaSIF 的原始文献: Gainza, P., Sverrisson, F., Monti, F., Rodolà, E., Boscaini, D., Bronstein, M.M., Correia, B.E. MaSIF: an open-source tool based on geometric deep learning for search and design of molecular surface interactions. Nature Methods, 2020, 17, 182–191.) GitHub repository: https://github.com/LPDI-EPFL/masif (MaSIF 代码) (PINet 的原始文献: Gainza, P., et al. (2020). Deciphering interaction fingerprints from protein molecular surfaces using geometric deep learning. Nature Methods, 17(2), 1582-191. 注意这篇文献与MaSIF是同一篇,PINet是其应用之一或相关后续。) (PointNet 的原始文献: Qi, C. R., Su, H., Mo, K., & Guibas, L. J. (2017). Pointnet: Deep learning on point sets for 3d classification and segmentation. *Proceedings of the IEEE conference on6* *computer vision and pattern recognitio7*n.) Wang, Y., Sun, S., Li, Z., Liu, F., & Zheng, W. (2022). A point cloud-based deep learning strategy for protein-ligand binding affinity prediction. Briefings in Bioinformatics, 23(1), bbab429. (PGpocket 的原始文献: Zhao, L., He, H., Wang, B., Liu, B., & Wang, S. (2024). PGpocket: predicting protein ligand binding sites with a pre-trained graph neural network model on point clouds. Briefings in Bioinformatics, 25(1), bbad424.) (VideoMol 的主要参考文献,例如: Zeng, X., Xiang, H., Hou, L., Zhang, T., Wang, J., Wang, Y., Li, K., Cheng, F. Molecular video-based foundation model for drug discovery. Nature Communications, 2024, 15, 123.) (PyMOL 软件信息: https://pymol.org/) (MolPMoFiT 的原始文献: Li, X., & Fourches, D. (2020). MolPMoFiT: A Universal Molecular Representation Learning Framework for Property Prediction. Journal of Chemical Information and Modeling, 60(10), 4539-4549.) GitHub repository: https://github.com/XinhaoLi74/MolPMoFiT (MolPMoFiT 代码) (MCNN-DDI 的原始文献: Asfand-E-Yar, M., et al. (2024). MCNN-DDI: A Multi-Modal Convolutional Neural Network Model for Predicting Drug-to-Drug Interaction Events. Scientific Reports, 14, XXXX. (具体文章号需查证)) (MultiDTI 的原始文献: Zhou, D., et al. (2020). MultiDTI: A general framework for predicting drug-target interactions based on graph embedding and heterogeneous network. Briefings in Bioinformatics, 21(5), 1829-1840.) GitHub repository: https://github.com/Deshan-Zhou/MultiDTI (MultiDTI 代码) (ISMol 和 CGIP 相关信息,如GitHub: https://github.com/Shihang-Wang-58/papers_for_molecular_representation 中引用的论文) (Dalkiran/TransferLearning4DTI 的相关信息) (Li et al. 2020 JIOHS 的具体文献) Harnik, M., Alon, G., Nitzan, M., & Shalev-Shwartz, S. (2024). MoleCLIP: A molecular image representation learning framework based on CLIP. ChemRxiv. DOI: 10.26434/chemrxiv-2024-r1zxt (预印本) (convAE / dmitrav/pheno-ml 的相关信息) VIII. 附录:工具与方法表 下表概述了本报告中讨论的关键分子到图像工具和方法,重点是它们的图像生成特性、底层技术、代码可用性以及在基于CNN的药物发现中的主要应用领域。 表1:用于CNN应用的分子到图像工具和方法概述 工具/方法名称 (主要参考文献) 输入分子格式 输出图像类型 关键图像生成细节/参数 核心Python库/软件 公开代码链接 主要CNN应用领域 综述引用页/表 RDKit (通用) SMILES, MOL, SDF 2D图像 (PNG, SVG) 可自定义大小、分辨率 (dotsPerAngstrom)、高亮(原子、键、颜色)、图例、描绘风格(kekulization, 楔形键)。MolToImage, MolDraw2DCairo。 RDKit, Pillow https://github.com/rdkit/rdkit 通用化学信息学, 各种QSAR/ML p.3, 表4 KekuleScope (Cortés-Ciriano & Bender, 2019) [^21] SMILES (来自ChEMBL) 2D凯库勒结构图像 标准2D表示。使用预训练CNN (AlexNet, DenseNet, ResNet, VGG)。 RDKit, PyTorch, Pillow https://github.com/isidroc/kekulescope 癌细胞系敏感性, 化合物效价 p.5, 表3, 4 Chemception (Goh et al., 2017) [^15] SMILES 2D灰度或多通道图像 4通道示例: 键级, 原子序数, Gasteiger电荷, 杂化态。图像大小 (如80x80, 48x48),分辨率 (如0.5 Å/像素)。通道编码化学特征。 RDKit, Keras/TF, Pillow https://github.com/Abdulk084/Chemception (示例) 毒性、活性、溶解性预测 p.6, 表3, 4 DEEPScreen (Rifaioglu et al., 2020) [^12] SMILES 2D结构图像 200x200像素, RDKit生成。规范朝向。省略手性。 RDKit, (DL框架) (方法在论文中,无直接代码链接) 药物-靶点相互作用 (DTI) 预测 p.5, 表3 Toxic Colors (Fernandez et al., 2018) [^23] SMILES (推测) 2D化学草图 “简易2D草图”,颜色通道相关。细节在补充材料。 (CNN框架) (细节在论文补充材料) 毒性预测 (Tox21) p.6, 表3 ImageMol (Zeng, Xiang et al., 2022) [^13] 规范SMILES 2D图像 224x224像素。Smiles2Img函数。使用ResNet18骨干的自监督预训练。 RDKit, PyTorch https://github.com/HongxinXiang/ImageMol 分子性质, 药物靶点, 抗SARS-CoV-2 p.8, 表3, 4 ADMET-CNN (Shi et al., 2019) [^1] SMILES/SDF (推测) 分子二维图像 具体图像生成参数细节不多,但专注于ADMET性质。 (CNN框架) (无直接代码链接) ADMET性质预测 p.5, 表3 QSAR-CNN (Zhong et al., 2021) [^1] SMILES/SDF (推测) 分子图像 用于预测污染物与OH自由基的反应性。应用了迁移学习和数据增强。Grad-CAM用于解释。 (CNN框架) (无直接代码链接) QSAR, 反应性预测 p.5, 表3 ResNet18DNN (Zhao et al. in [^1]) [^38] 分子结构 (推测图像或特征图) 18层ResNet提取特征用于DILI预测。输入类型需查阅原文。综述列为基于图像。 (DL框架) (无直接代码链接) 药物性肝损伤 (DILI) 预测 p.6, 表3 tCNNs (Liu et al., 2019) [^1] SMILES 1D CNN on One-Hot SMILES矩阵 规范SMILES填充到统一长度,然后one-hot编码。(72通道 x 188长度)。矩阵列作为1D卷积通道。 Python, (CNN框架) https://github.com/Lowpassfilter/tCNNS-Project 表型药物反应预测 p.7, 表4 Maestro (3D快照) [^1] 3D构象 (SDF) 2D快照图像 (多角度) 全局旋转 (如y轴, 8x45°),每视角保存图像。原子颜色,键样式。 Maestro (商业) (专有软件) 性质预测 (Asilar et al.) p.3 Deepsnap (Uesawa Y., Matsuzaka Y.) [^1] SMILES / 3D构象 3D快照图像 (参数化, 多角度) CORINA生成3D坐标, Jmol/PyMOL球棍渲染, 360°旋转 (如45°步长), 256x256 PNG。可自定义原子颜色、键半径、像素大小。 CORINA, Jmol/PyMOL, Python (此版本无公开代码链接) QSAR, 毒性预测 p.6, 表3 Pafnucy (Stepniewska-Dziubinska et al., 2018) [^76] PDB/MOL2 (Prot-Lig) 3D体素网格 20Å立方盒, 1Å分辨率。每个体素19个原子特征 (原子类型, 杂化, 价键, SMARTS属性, 电荷, 分子类型)。 OpenBabel, Chimera, Python, TF/Keras http://gitlab.com/cheminfIBB/pafnucy 蛋白质-配体结合亲和力 用户查询 DeepSite (Jimenez et al., 2017) [^66] PDB (Protein) 3D体素网格 1ų体素, 8通道 (疏水, 芳香, H键供/受, +/-离子化, 金属, 排除体积) 基于AutoDock4原子类型。网格覆盖蛋白质+8Å缓冲。 Python (推测), (CNN框架) www.playmolecule.org (服务器) 蛋白质结合位点预测 用户查询 MaSIF (Gainza et al., 2020) [^92] PDB (Protein) 带指纹的3D表面面片 MSMS表面上的测地线面片 (9Å或12Å半径)。几何 (形状指数, 曲率) 和化学 (电荷, H键, 疏水性) 特征。测地线CNN。 MSMS, PyMesh, APBS, PDB2PQR, BioPython, open3D, Python, TF https://github.com/LPDI-EPFL/masif PPI位点预测, 配体预测 用户查询 PINet (Gainza et al., 2020) [^98] PDB (蛋白对) 蛋白质结构的点云 输入点云对。学习几何和理化表面互补性。使用类PointNet架构。 Python, (GDL框架) (PINet本身代码链接不明显) 蛋白质相互作用界面预测 用户查询 VideoMol (Zeng, Xiang et al., 2024) [^107] SMILES/3D构象 分子视频 (2D帧序列) RDKit构象(MMFF94)。PyMOL旋转(X,Y,Z轴)并渲染60帧(224x224像素)。 RDKit, PyMOL, Python, (视频CNN框架) (VideoMol无公开代码链接) 分子靶点和性质预测, 抗病毒药物 用户查询 Kuzminykh D. et al. (2018) [^78] SMILES/3D构象 3D体素网格 (小波变换平滑) 0.5Å网格, one-hot原子类型 (6-9通道)。小波变换卷积以减少稀疏性并改善特征传播。 Python, (CNN框架) (无公开代码链接) 分子表征, 分类 用户查询 MultiDTI (Zhou et al.) [^126] 异构网络数据, 药/靶序列 (无直接图像生成, 映射到公共空间) 结合网络信息和序列信息。使用联合学习框架。 Python, PyTorch, scikit-learn https://github.com/Deshan-Zhou/MultiDTI 药物-靶点相互作用预测 p.7, 表4 Image-based CNN (Asilar et al., 2020) [^51] 3D构象 (SDF) 3D快照图像 (多角度) Maestro旋转3D构象 (y轴, 8x45°) 并捕获图像。颜色编码原子。图像尺寸64x64, 128x128, 192x192。COVER上采样。 Maestro, Python (推测) (无直接代码链接) 肝毒性预测 p.6, 表3 convAE (Dmitrenko et al.) [^91] 2D癌细胞图像 图像的潜在特征向量 在1M癌细胞图像上训练的卷积自编码器 (非直接分子结构)。输入图像128x128。 Python, (DL框架) https://github.com/dmitrav/pheno-ml 分析药物对癌细胞的效应 p.5, 表4 DeepChem (RdkitGridFeaturizer) [^85] 蛋白-配体文件 (PDB, SDF) 3D体素网格 以配体为中心的盒子。可自定义box_width, voxel_width。特征: ‘ecfp’, ‘splif’, ‘sybyl’, ‘charge’, ‘hbond’等。nb_rotations用于增强。 RDKit, DeepChem (Python) https://github.com/deepchem/deepchem 结合亲和力, 复合物性质 用户查询 注意:表中部分工具(如Li et al., Dalkiran et al.)主要使用非图像输入(如光谱),或其针对分子结构的图像生成细节在提供的摘要中未详细说明。BESTox和Hirohara M. et al. 使用SMILES的矩阵表示而非视觉图像。此表主要关注那些以CNN图像生成为核心或细节清晰的方法。
Machine Learning & AI
· 2025-06-05
Image-based Molecular Representation (II): 2D Molecular Image Representations
基于图像的分子表征:二维(2D)分子图像表征 二维图像是分子最直接的视觉表征,通常源自SMILES字符串。它们具有简单和直观的特点,使其成为分子设计和分析,特别是高通量应用中一个引人注目的选择。二维分子图像为CNN提供了更直接可用和信息更丰富的输入,旨在减轻网络学习基本化学特征的负担,从而可能带来性能或数据效率的提升。 一、RDKit基础用法 RDKit是解析SMILES、生成二维坐标和渲染分子图像的主要库[1]。其GitHub仓库是 https://github.com/rdkit/rdkit 。RDKit是一个核心的开源化学信息学工具包,广泛用于将SMILES字符串转换为二维分子图像。 1.1 基础工作流程 一般的工作流程包括: 解析SMILES字符串以创建RDKit Mol对象 生成用于描绘的二维坐标 将此布局渲染成图像格式,通常是Python中的PIL Image对象 1.2 关键RDKit模块和函数 基础函数 Chem.MolFromSmiles():将SMILES字符串解析为RDKit Mol对象[2] Draw.MolToImage():从Mol对象生成PIL Image,允许基本的自定义,如图像大小、kekulization和楔形键的显示[3] rdDepictor.Compute2DCoords():生成用于描绘的2D坐标。使用rdDepictor.SetPreferCoordGen(True)有助于实现更一致的分子朝向[4] AllChem.Compute2DCoords():另一种生成2D坐标的选择[5] 高级绘图类 Draw.MolDraw2DCairo:生成光栅图像(如PNG),提供更细致的绘图选项控制[6] Draw.MolDraw2DSVG:生成矢量图像,提供更细致的绘图选项控制[6] 1.3 CNN输入的关键参数和自定义 图像大小 一致性对CNN输入至关重要: DEEPScreen使用200x200像素[7] ImageMol默认为224x224像素[8] Chemception通常使用80x80像素[9] RDKit的MolToImage接受一个size元组 MolDraw2DCairo则在初始化时指定宽度和高度 分辨率和细节 DrawingOptions.dotsPerAngstrom(用于MolToImage)控制像素密度相对于分子大小的比例[10] MolDrawOptions.fixedBondLength可以固定键在图像中的像素长度,以实现一致的缩放[11] 原子和键的高亮 highlightAtoms和highlightBonds参数可用于MolToImage以及绘图类的DrawMolecule方法[3] highlightColor(用于MolToImage)或MolDrawOptions.highlightColour设置高亮颜色[3] MolDrawOptions.atomColourPalette或MolDraw2D.DrawMolecule(highlightAtomColors={atom_index: (R,G,B)})允许自定义特定原子的颜色[12] 原子和键的颜色 MolDrawOptions.setAtomPalette({atom_index: (R,G,B)})可以设置自定义的原子颜色调色板[11] RDKit Cookbook也展示了使用useBWAtomPalette()生成黑白图像的方法[13] 图例(Legends) DrawMolecule中的legend参数**或MolsToGridImage中的legends参数可以添加文本注释[3] MolDrawOptions如legendFontSize和legendFraction控制图例外观[11] 1.4 基础代码示例 基础MolToImage示例 from rdkit import Chem from rdkit.Chem.Draw import MolToImage mol = Chem.MolFromSmiles("CN1C=NC2=C1C(=O)N(C(=O)N2C)C") # Caffeine img = MolToImage(mol, size=(256, 256)) # img.save("caffeine_2d.png") MolDraw2DCairo带高亮示例 from rdkit import Chem from rdkit.Chem.Draw import rdMolDraw2D from io import BytesIO # 用于在内存中处理图像数据 # from PIL import Image # 用于查看或保存图像 mol = Chem.MolFromSmiles("Cc1ccccc1O") # o-cresol # 高亮甲基所在的子结构 substructure = Chem.MolFromSmarts("c(C)O") # 带有甲基和羟基的芳香碳 match = mol.GetSubstructMatch(substructure) drawer = rdMolDraw2D.MolDraw2DCairo(300, 300) # width, height # 自定义原子颜色示例 atom_colors = {} if match: for atom_idx in match: if mol.GetAtomWithIdx(atom_idx).GetSymbol() == 'O': atom_colors[atom_idx] = (1.0, 0.0, 0.0) # 氧原子用红色 elif mol.GetAtomWithIdx(atom_idx).GetSymbol() == 'C': atom_colors[atom_idx] = (0.0, 0.0, 1.0) # 碳原子用蓝色 drawer.DrawMolecule(mol, highlightAtoms=match, highlightAtomColors=atom_colors, legend="o-cresol with substructure highlight") drawer.FinishDrawing() png_data = drawer.GetDrawingText() # 获取PNG数据 (bytes) # with open("o_cresol_highlighted.png", "wb") as f: # f.write(png_data) 二、具体方法和实现 2.1 ImageMol 方法简介 ImageMol是一个基于分子图像的无监督预训练深度学习框架,用于计算化学药物发现[14]。该框架在1000万无标签的类药物生物活性分子上进行预训练,结合了图像处理框架和全面的分子化学知识,以视觉计算方式提取精细的像素级分子特征[15]。 ImageMol的核心创新: 利用分子图像作为化合物的特征表示,具有高精度和低计算成本 利用无监督预训练学习框架从1000万种具有多样生物活性的类药物化合物中捕获分子图像的结构信息 预训练策略 ImageMol采用五种预训练策略来优化分子编码器的潜在表示[16]: Mask-based contrastive learning (MCL):对分子图像的16×16方形区域进行掩码,训练模型最小化掩码和未掩码图像提取的潜在特征之间的距离 Molecular rationality discrimination (MRD):预测输入图像是否合理 Jigsaw puzzle prediction (JPP):将图像分解为九个补丁,随机重排后预测正确顺序 Image rotational prediction:预测图像的旋转角度 Contrastive learning:学习相似分子的相似表示 代码实现 基础图像生成: def smiles_to_image(smis, size=224, save_path=None): try: mol = Chem.MolFromSmiles(smis) img = Draw.MolsToGridImage([mol], molsPerRow=1, subImgSize=(size, size)) if save_path is not None: img.save(save_path) return img except: return None 完整的latent feature提取功能: import os import torch import torchvision.transforms as transforms import torchvision.models as models from tqdm import tqdm import requests from rdkit import Chem from rdkit.Chem import Draw def download_pretrained_model(model_url, cache_dir=None, force_download=False): """ 下载并缓存预训练模型文件 参数: model_url: 模型下载链接 cache_dir: 缓存目录(默认为系统临时目录下的 imagemol_cache) force_download: 是否强制重新下载模型 返回: model_path: 模型文件路径 """ if cache_dir is None: cache_dir = os.path.join(tempfile.gettempdir(), "imagemol_cache") os.makedirs(cache_dir, exist_ok=True) model_path = os.path.join(cache_dir, "ImageMol.pth.tar") if force_download or not os.path.exists(model_path): print("开始下载预训练模型...") download_file_from_google_drive(model_url, model_path) print(f"模型已下载到: {model_path}") return model_path def load_pretrained_model(model_name="ResNet18", image_size=224, pretrained=False, model_url=None): """ 加载预训练模型(支持从本地或远程下载) 参数: model_name: 模型架构名称 (ResNet18/ResNet34/ResNet50) image_size: 输入图像尺寸 pretrained: 是否使用 PyTorch 官方预训练权重 model_url: 自定义预训练权重下载链接 返回: model: 加载好的模型 """ # 如果指定了自定义模型链接,则先下载 if model_url: model_path = download_pretrained_model(model_url) else: model_path = None # 使用官方预训练权重 if model_name == "ResNet18": model = models.resnet18(pretrained=pretrained) elif model_name == "ResNet34": model = models.resnet34(pretrained=pretrained) elif model_name == "ResNet50": model = models.resnet50(pretrained=pretrained) else: raise ValueError(f"不支持的模型架构: {model_name}") # 如果提供了自定义模型路径,加载权重 if model_path: try: checkpoint = torch.load(model_path, map_location=torch.device('cpu')) model.load_state_dict(checkpoint['model_state_dict']) print("=> 成功加载自定义预训练权重") except Exception as e: print(f"=> 加载预训练权重失败: {e}") print("尝试直接从 torchvision 加载官方预训练权重...") model = models.resnet18(pretrained=True) # 示例回退到官方权重 return model def download_file_from_google_drive(url, destination): """ 从 Google Drive 下载文件(支持大文件) """ file_id = url.split('/')[-2] if 'view' in url else url.split('/')[-1] base_url = 'https://docs.google.com/uc?export=download' session = requests.Session() response = session.get(base_url, params={'id': file_id}, stream=True) # 处理下载确认 for key, value in response.cookies.items(): if key.startswith('download_warning'): params = {'id': file_id, 'confirm': value} response = session.get(base_url, params=params, stream=True) break # 写入文件 with open(destination, 'wb') as f: with tqdm(unit='B', unit_scale=True, unit_divisor=1024) as bar: for chunk in response.iter_content(32768): if chunk: f.write(chunk) bar.update(len(chunk)) # 示例:创建 ResNet18 模型并提取 latent feature def smiles_to_latent(smiles, model, image_size=224): """ 将 SMILES 字符串转换为 latent feature """ mol = Chem.MolFromSmiles(smiles) if mol is None: raise ValueError(f"无法解析 SMILES: {smiles}") # 生成分子图像 img = Draw.MolsToGridImage([mol], molsPerRow=1, subImgSize=(image_size, image_size)) img_path = "temp_molecule.png" img.save(img_path) # 图像预处理 transform = transforms.Compose([ transforms.Resize((image_size, image_size)), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) img_tensor = transform(Image.open(img_path).convert('RGB')).unsqueeze(0) # 提取 latent feature with torch.no_grad(): embedding_layer = list(model.children())[:-1] embedding_model = torch.nn.Sequential(*embedding_layer) latent_feature = embedding_model(img_tensor).squeeze() return latent_feature # 主程序 if __name__ == "__main__": # 1. 下载并加载模型 model_url = "https://drive.usercontent.google.com/download?id=1wQfby8JIhgo3DxPvFeHXPc14wS-b4KB5&export=download&authuser=0" model = load_pretrained_model( model_name="ResNet18", model_url=model_url # 使用自定义预训练权重 ) # 2. 示例 SMILES mol_smiles = "Cc1ccccc1O" # 异丙苯酚 latent = smiles_to_latent(mol_smiles, model) print(f"Latent feature shape: {latent.shape}") print(f"Latent feature sample: {latent[:5]}") 代码说明和来源 原仓库:https://github.com/HongxinXiang/ImageMol 主要文件:smiles2img_pretrain.py和dataloader/image_dataloader.py License:MIT License 论文:发表在Nature Machine Intelligence (2022),题目为”Accurate prediction of molecular properties and drug targets using a self-supervised image representation learning framework” 2.2 Chemception 方法简介 Chemception是受Google Inception-ResNet深度卷积神经网络启发开发的深度CNN,仅使用分子2D图像进行化学性质预测,无需提供额外的显式化学知识,如基本概念(周期性)或高级特征(分子描述符和指纹)[17]。 Chemception的关键创新: 多通道图像表示:将显式的化学特征直接编码到图像通道中,为神经网络提供更丰富、信息量更大的输入 四通道编码方案:每个通道编码不同的化学属性,使CNN能够”看到”特定位置的化学性质 多通道表示方法 Chemception采用4通道图像方法,每个通道编码特定的化学信息[18]: 通道0:编码键级(例如,单键为1.0,双键为2.0) 通道1:编码原子序数 通道2:编码原子杂化状态(例如,sp, sp2, sp3表示为数值) 通道3:编码Gasteiger部分电荷 图像尺寸通常为80x80像素或48x48像素。 代码实现 import numpy as np from rdkit import Chem from rdkit.Chem import AllChem import matplotlib.pyplot as plt def chemcepterize_mol(mol, embed=20.0, res=0.5): """ 将RDKit分子对象转换为Chemception格式的多通道图像 参数: mol: RDKit分子对象 embed: 嵌入大小,控制图像的空间范围 res: 分辨率,每像素对应的空间距离 返回: vect: 形状为(dims, dims, 4)的numpy数组,包含4个通道的化学信息 """ dims = int(embed*2/res) # 复制分子并计算Gasteiger电荷 cmol = Chem.Mol(mol.ToBinary()) cmol.ComputeGasteigerCharges() AllChem.Compute2DCoords(cmol) coords = cmol.GetConformer(0).GetPositions() # 初始化4通道图像向量 vect = np.zeros((dims, dims, 4)) # 首先处理键信息(通道0) for i, bond in enumerate(mol.GetBonds()): bondorder = bond.GetBondTypeAsDouble() bidx = bond.GetBeginAtomIdx() eidx = bond.GetEndAtomIdx() bcoords = coords[bidx] ecoords = coords[eidx] frac = np.linspace(0, 1, int(1/res*2)) for f in frac: c = (f*bcoords + (1-f)*ecoords) idx = int(round((c[0] + embed)/res)) idy = int(round((c[1] + embed)/res)) # 确保索引在图像范围内 if 0 <= idx < dims and 0 <= idy < dims: vect[idx, idy, 0] = bondorder # 保存键级到第一个通道 # 处理原子信息(通道1-3) for i, atom in enumerate(cmol.GetAtoms()): idx = int(round((coords[i][0] + embed)/res)) idy = int(round((coords[i][1] + embed)/res)) # 确保索引在图像范围内 if 0 <= idx < dims and 0 <= idy < dims: # 原子序数(通道1) vect[idx, idy, 1] = atom.GetAtomicNum() # Gasteiger电荷(通道3) try: charge = float(atom.GetProp("_GasteigerCharge")) vect[idx, idy, 3] = charge except: vect[idx, idy, 3] = 0.0 # 杂化状态(通道2) hyptype = atom.GetHybridization().real vect[idx, idy, 2] = hyptype return vect # 使用示例 def demo_chemception(): """演示Chemception图像生成""" # 创建分子对象 mol = Chem.MolFromSmiles("CCO") # 乙醇 # 生成Chemception图像 v = chemcepterize_mol(mol, embed=10, res=0.2) print(f"图像形状: {v.shape}") # 输出:(100, 100, 4) # 可视化前3个通道(模拟RGB图像) plt.figure(figsize=(12, 4)) plt.subplot(1, 4, 1) plt.imshow(v[:, :, 0], cmap='viridis') plt.title('通道0: 键级') plt.colorbar() plt.subplot(1, 4, 2) plt.imshow(v[:, :, 1], cmap='viridis') plt.title('通道1: 原子序数') plt.colorbar() plt.subplot(1, 4, 3) plt.imshow(v[:, :, 2], cmap='viridis') plt.title('通道2: 杂化状态') plt.colorbar() plt.subplot(1, 4, 4) plt.imshow(v[:, :, 3], cmap='viridis') plt.title('通道3: Gasteiger电荷') plt.colorbar() plt.tight_layout() plt.show() return v # demo_chemception() 代码说明和来源 原仓库:https://github.com/Abdulk084/Chemception 主要文件:chemcemption.ipynb License:MIT License 论文:Goh等人2017年发表的”Chemception: A Deep Neural Network with Minimal Chemistry Knowledge Matches the Performance of Expert-developed QSAR/QSPR Models”[17] 2.3 DEEPScreen 方法简介 DEEPScreen是一个大规模药物-靶点相互作用(DTI)预测系统,用于早期药物发现,使用深度卷积神经网络和化合物的2D结构表示作为输入[19]。DEEPScreen的主要优势是在输入层使用现成的2D结构表示,而不是性能有限的传统描述符。 DEEPScreen的特点: 对704个目标蛋白质进行训练(使用精心策划的生物活性数据) 使用200x200像素的2D结构表示 手性信息被省略(这是SMILES表示的局限性,而非图像生成过程的问题) 生成了近2100万个新的DTI预测 代码实现 import os import subprocess from rdkit import Chem from rdkit.Chem import Draw from rdkit.Chem.Draw import DrawingOptions import cairosvg # 配置参数 IMG_SIZE = 200 training_files_path = "/path/to/training_files" # 需要根据实际情况修改 def save_comp_imgs_from_smiles(tar_id, comp_id, smiles): """ 将分子的 SMILES 表示转换为图片 参数: tar_id: 目标 ID comp_id: 化合物 ID smiles: 分子的 SMILES 字符串 """ # 创建分子对象 mol = Chem.MolFromSmiles(smiles) if mol is None: print(f"无法解析SMILES: {smiles}") return # 设置绘图选项 DrawingOptions.atomLabelFontSize = 55 DrawingOptions.dotsPerAngstrom = 100 DrawingOptions.bondLineWidth = 1.5 # 确保目标目录存在 target_dir = os.path.join(training_files_path, "target_training_datasets", tar_id, "imgs") os.makedirs(target_dir, exist_ok=True) # 绘制分子为 SVG 图像 svg_path = os.path.join(target_dir, f"{comp_id}.svg") Draw.MolToFile(mol, svg_path, size=(IMG_SIZE, IMG_SIZE)) # 将 SVG 图像转换为 PNG 图像 png_path = os.path.join(target_dir, f"{comp_id}.png") cairosvg.svg2png(url=svg_path, write_to=png_path) # 删除临时的 SVG 文件 if os.path.exists(svg_path): subprocess.call(["rm", svg_path]) print(f"已生成图像: {png_path}") def batch_generate_images(tar_id, smiles_dict): """ 批量生成分子图像 参数: tar_id: 目标ID smiles_dict: 字典,键为化合物ID,值为SMILES字符串 """ for comp_id, smiles in smiles_dict.items(): try: save_comp_imgs_from_smiles(tar_id, comp_id, smiles) except Exception as e: print(f"生成图像失败 - 化合物ID: {comp_id}, SMILES: {smiles}, 错误: {e}") # 使用示例 if __name__ == "__main__": # 示例数据 tar_id = "CHEMBL286" smiles_data = { "CHEMBL1": "CCO", # 乙醇 "CHEMBL2": "CCOC", # 乙醚 "CHEMBL3": "CN1C=NC2=C1C(=O)N(C(=O)N2C)C", # 咖啡因 } # 生成图像 batch_generate_images(tar_id, smiles_data) 代码说明和来源 原仓库:https://github.com/cansyl/DEEPScreen 主要文件:bin/data_processing.py License:MIT License 论文:发表在Chemical Science (2020),题目为”DEEPScreen: high performance drug–target interaction prediction with convolutional neural networks using 2-D structural compound representations”[19] 依赖:需要安装rdkit和cairosvg库 2.4 KekuleScope 方法简介 KekuleScope采用”凯库勒结构表示”作为CNN的输入[20]。该方法专注于使用标准的分子结构图像进行性质预测,与其他方法的主要区别在于其对分子图像的特定处理方式。 代码实现 import os import sys from rdkit import Chem from rdkit.Chem import Draw import glob def generate_molecule_images(cell_line, seed, smiles_list, chembl_ids, dataset_type): """ 生成分子图片的主函数 参数: cell_line: 细胞系名称 seed: 随机种子 smiles_list: SMILES字符串列表 chembl_ids: ChEMBL ID列表 dataset_type: 数据集类型 ("train", "val", "test") """ base_dir = f'./images/{cell_line}/{seed}/{dataset_type}/images' os.makedirs(base_dir, exist_ok=True) svgs = glob.glob(f"{base_dir}/*svg") pngs = glob.glob(f"{base_dir}/*png") # 如果没有SVG或PNG文件,则生成SVG图像 if len(svgs) == 0 and len(pngs) == 0: for i, smiles in enumerate(smiles_list): mol = Chem.MolFromSmiles(smiles) if mol is not None: # 生成SVG图像 svg_img = Draw.MolsToGridImage([mol], molsPerRow=1, useSVG=True) svg_file_path = f'{base_dir}/{chembl_ids[i]}.svg' with open(svg_file_path, 'w') as f: f.write(svg_img.data) print(f"已生成SVG: {svg_file_path}") else: print(f"无法解析SMILES: {smiles}") else: print(f"SVGs ready for {dataset_type}") # 将 SVG 转换为 PNG pngs = glob.glob(f"{base_dir}/*png") if len(pngs) == 0: basedir = os.getcwd() os.chdir(base_dir) # 使用ImageMagick进行转换 cmd = "AA=($( find . -name '*.svg' ));for i in ${AA[*]}; do convert -density 800 ${i} -resize 300x ${i}.png ; done" try: os.system(cmd) print("SVG转PNG完成") except Exception as e: print(f"转换过程中出现错误: {e}") # 清理SVG文件 cmd = "rm -rf *.svg" os.system(cmd) os.chdir(basedir) def run_kekulescope_pipeline(cell_line="KB", seed=1): """ 运行完整的KekuleScope图像生成流程 参数: cell_line: 细胞系名称,默认为"KB" seed: 随机种子,默认为1 """ # 示例数据 smiles_list = [ "CCO", # 乙醇 "CCOC", # 乙醚 "CN1C=NC2=C1C(=O)N(C(=O)N2C)C", # 咖啡因 "CC(C)CC1=CC=C(C=C1)C(C)C(=O)O", # 布洛芬 ] chembl_ids = ["CHEMBL1", "CHEMBL2", "CHEMBL3", "CHEMBL4"] # 为不同数据集生成图像 for dataset_type in ["train", "val", "test"]: print(f"正在为{dataset_type}数据集生成图像...") generate_molecule_images(cell_line, seed, smiles_list, chembl_ids, dataset_type) # 使用示例 if __name__ == "__main__": run_kekulescope_pipeline() 代码说明和来源 原仓库:https://github.com/isidroc/kekulescope 主要文件:Kekulescope.py和load_images.py License:MIT license 框架:利用PyTorch框架 特点:使用ImageMagick进行SVG到PNG的转换,需要系统安装ImageMagick 2.5 其他相关方法 DECIMER 1.0 DECIMER (Deep lEarning for Chemical ImagE Recognition)是一个基于Transformer的光学化学结构识别工具[21],专注于从化学图像中识别和重构分子结构。该工具使用CNN进行图像解析,然后使用Transformer解码器生成SMILES字符串。 GitHub:https://github.com/Kohulan/DECIMER 特点:使用EfficientNet-B3作为编码器,处理299×299像素图像 应用:主要用于从文献中的化学结构图像提取SMILES表示 MolNexTR MolNexTR是一个结合ConvNext和Vision Transformer的深度学习模型,用于从分子图像生成SMILES字符串[22]。该模型能够同时预测原子和键,并理解它们的布局规则。 特点:结合CNN和Vision Transformer的优势 应用:分子图像识别和SMILES生成 数据集:在Indigo、ChemDraw、RDKit、CLEF、UOB、JPO、USPTO、Staker和ACS等数据集上表现优异 Toxic Colors Toxic Colors使用2DConvNet处理”化学品的简单二维绘图”[23],专注于毒性预测。该方法使用MOE软件生成分子图像,然后应用CNN进行毒性分类。 ADMET-CNN ADMET-CNN是一种基于分子二维图像的CNN,用于预测ADMET(吸收、分布、代谢、排泄、毒性)性质[24]。该方法使用RDKit生成分子图像,然后训练CNN模型预测药物的ADMET性质。 三、应用和扩展 3.1 迁移学习和预训练 现代分子图像表示学习中,迁移学习已成为一个重要趋势。在医学领域,获取大量标记数据集通常很困难,迁移学习提供了解决方案[25]。 预训练策略 ImageNet预训练:使用在ImageNet等大型图像数据集上预训练的CNN作为特征提取器 自监督预训练:如ImageMol使用的多任务预训练策略 域适应:将通用图像特征转移到化学领域 数据增强技术 为了提高模型的泛化能力和鲁棒性,研究者开发了多种数据增强技术[26]: 几何变换:旋转、翻转、缩放 颜色变换:灰度化、对比度调整 噪声添加:添加高斯噪声、椒盐噪声 分子特定增强:随机删除原子或键 3.2 模型解释性 Grad-CAM分析 分子图像CNN模型可以使用Gradient-weighted Class Activation Mapping (Grad-CAM)进行解释[27]。Grad-CAM能够识别模型关注的分子区域,帮助理解哪些结构特征对预测结果最重要。 特征可视化 通过可视化CNN不同层的激活模式,研究者可以理解模型学习到的化学特征: 低层特征:边缘、角度 中层特征:官能团、环结构 高层特征:复杂的分子骨架 3.3 多模态学习 图像-文本联合学习 结合分子图像和SMILES/SELFIES等文本表示,可以实现更强大的分子表示学习[28]: 对比学习:学习图像和文本表示之间的对应关系 多模态融合:在决策层面融合不同模态的信息 交叉注意力机制:让图像和文本表示相互增强 图像-图结构联合学习 结合2D分子图像和分子图结构,可以同时利用视觉信息和拓扑信息: 联合编码:同时处理图像和图结构 知识蒸馏:用图神经网络指导CNN学习 多任务学习:同时优化图像和图结构相关的任务 3.4 实际应用领域 药物发现 虚拟筛选:从大型化合物库中筛选活性化合物 药物重定位:发现已知药物的新适应症 ADMET预测:预测药物的吸收、分布、代谢、排泄和毒性 材料科学 聚合物性质预测:预测聚合物的物理化学性质 催化剂设计:设计高效的催化剂 能源材料:开发新型电池和太阳能材料 环境科学 污染物降解:预测污染物的降解路径和速率[26] 生态毒性评估:评估化学品对环境的影响 生物累积性预测:预测化学品在生物体内的累积 3.5 技术挑战和未来方向 当前挑战 数据质量:分子图像的标准化和质量控制 可解释性:提高模型预测的可解释性 泛化能力:在不同化学空间中的泛化性能 计算效率:处理大规模分子库的效率 未来发展方向 3D信息整合:结合3D分子构象信息[29] 动态性质预测:预测分子的动态行为 多尺度建模:从分子到细胞到器官的多尺度预测 自动化流程:端到端的自动化预测流程 四、方法对比分析 4.1 主要方法对比表 方法 图像尺寸 绘图方法 特点 主要应用 优势 限制 ImageMol 224×224 MolsToGridImage 自监督预训练多任务学习 分子性质预测药物靶点预测 • 大规模预训练• 高精度• 迁移学习能力强 • 计算资源需求高• 缺乏3D信息 Chemception 80×8048×48 calculate pixels 多通道编码(键级、原子序数、杂化、电荷) 毒性预测活性预测溶解性预测 • 化学信息丰富• 可解释性强• 计算效率高 • 图像分辨率较低• 需要化学知识编码 DEEPScreen 200×200 MolToFile 药物-靶点相互作用大规模训练 虚拟筛选药物重定位 • 专门针对DTI• 大规模数据库• 实用性强 • 应用范围有限• 缺乏手性信息 KekuleScope 300×300 MolsToGridImage 凯库勒结构表示高分辨率 分子性质预测 • 图像质量高• 标准化程度高 • 数据处理复杂• 计算开销大 DECIMER 299×299 — 图像到SMILESTransformer解码 光学结构识别文献挖掘 • 实用工具• 端到端处理 • 专门用途• 需要高质量图像 4.2 性能比较 准确性方面 ImageMol:在多个基准数据集上表现最佳,特别是在CYP450抑制预测中 Chemception:在小数据集上表现良好,与专家开发的QSAR模型性能相当 DEEPScreen:在DTI预测任务中超越传统指纹方法 计算效率 Chemception:图像尺寸小,训练和推理速度快 ImageMol:需要大量计算资源进行预训练,但推理相对高效 DEEPScreen:中等计算需求,适合实际应用 可扩展性 ImageMol:预训练模型可以轻松适应新任务 Chemception:架构简单,易于修改和扩展 DEEPScreen:专门设计,扩展到其他任务需要重新训练 4.3 选择建议 根据应用场景选择 通用分子性质预测:推荐ImageMol 毒性和溶解性预测:推荐Chemception 药物-靶点相互作用:推荐DEEPScreen 图像识别任务:推荐DECIMER 根据资源条件选择 计算资源丰富:ImageMol或KekuleScope 计算资源有限:Chemception 需要快速部署:DEEPScreen 根据数据特点选择 大规模无标签数据:ImageMol的自监督学习 小规模标注数据:Chemception的简单架构 特定领域数据:针对性训练的专用模型 参考文献 [1] Landrum G. RDKit: Open-source cheminformatics. 2020. Available: https://github.com/rdkit/rdkit [2] RDKit Documentation. Getting Started with the RDKit in Python. Available: https://www.rdkit.org/docs/GettingStartedInPython.html [3] RDKit Drawing Options Documentation. Available: https://www.rdkit.org/docs/source/rdkit.Chem.Draw.html [4] RDKit 2D Coordinate Generation. Available: https://www.rdkit.org/docs/source/rdkit.Chem.rdDepictor.html [5] RDKit AllChem Module Documentation. Available: https://www.rdkit.org/docs/source/rdkit.Chem.AllChem.html [6] RDKit Advanced Drawing Documentation. Available: https://www.rdkit.org/docs/source/rdkit.Chem.Draw.rdMolDraw2D.html [7] Rifaioglu AS, Nalbat E, Atalay V, Martin MJ, Cetin-Atalay R, Doğan T. DEEPScreen: high performance drug–target interaction prediction with convolutional neural networks using 2-D structural compound representations. Chemical Science. 2020;11(9):2531-2557. [8] Zeng X, Xiang H, Yu L, Wang J, Li K, Nussinov R, Cheng F. Accurate prediction of molecular properties and drug targets using a self-supervised image representation learning framework. Nature Machine Intelligence. 2022;4(11):1004-1016. [9] Goh GB, Siegel C, Vishnu A, Hodas NO, Baker N. Chemception: A deep neural network with minimal chemistry knowledge matches the performance of expert-developed QSAR/QSPR models. 2017. arXiv preprint arXiv:1706.06689. [10] RDKit Drawing Options Advanced Configuration. Available: https://www.rdkit.org/docs/source/rdkit.Chem.Draw.html#drawing-options [11] RDKit Molecule Drawing Options. Available: https://www.rdkit.org/docs/source/rdkit.Chem.Draw.rdMolDraw2D.html#drawing-options [12] RDKit Color Customization. Available: https://www.rdkit.org/docs/Cookbook.html [13] RDKit Cookbook. Available: https://www.rdkit.org/docs/Cookbook.html [14] Xiang H. ImageMol: A molecular image-based pre-training deep learning framework for computational drug discovery. 2022. Available: https://github.com/HongxinXiang/ImageMol [15] Li Y, Liu B, Deng J, Guo Y, Du H. Image-based molecular representation learning for drug development: a survey. Briefings in Bioinformatics. 2024;25(4):bbae294. [16] Zeng X, Xiang H, Yu L, et al. Accurate prediction of molecular properties and drug targets using a self-supervised image representation learning framework. Nature Machine Intelligence. 2022;4(11):1004-1016. [17] Goh GB, Siegel C, Vishnu A, Hodas NO, Baker N. Chemception: A deep neural network with minimal chemistry knowledge matches the performance of expert-developed QSAR/QSPR models. arXiv preprint arXiv:1706.06689. 2017. [18] Wildcard Consulting. Learn how to teach your computer to see chemistry - free Chemception models with RDKit and Keras. Available: https://www.wildcardconsulting.dk/useful-information/learn-how-to-teach-your-computer-to-see-chemistry-free-chemception-models-with-rdkit-and-keras/ [19] Rifaioglu AS, Nalbat E, Atalay V, Martin MJ, Cetin-Atalay R, Doğan T. DEEPScreen: high performance drug–target interaction prediction with convolutional neural networks using 2-D structural compound representations. Chemical Science. 2020;11(9):2531-2557. [20] KekuleScope GitHub Repository. Available: https://github.com/isidroc/kekulescope [21] Rajan K, Zielesny A, Steinbeck C. DECIMER 1.0: deep learning for chemical image recognition using transformers. Journal of Cheminformatics. 2021;13(1):61. [22] Chen BJ, Li C, Dai H, Song L. MolNexTR: A generalized deep learning model for molecular image recognition. Journal of Cheminformatics. 2024;16(1):7. [23] Fernandez M, Ban F, Woo G, et al. Toxic Colors: The use of deep learning for predicting toxicity of compounds merely from their graphic images. Journal of Chemical Information and Modeling. 2018;58(8):1533-1543. [24] Shi H, Liu S, Chen J, Li X, Ma Q, Yu B. Predicting drug-target interactions using Lasso with random forest based on evolutionary information and chemical structure. Genomics. 2019;111(6):1839-1852. [25] Dalkiran A, Rifaioglu AS, Martin MJ, et al. ECPred: a tool for the prediction of the enzymatic functions of protein sequences based on the EC nomenclature. BMC Bioinformatics. 2018;19(1):334. [26] Zhong S, Zhang K, Bagheri M, et al. Molecular image-convolutional neural network (CNN) assisted QSAR models for predicting contaminant reactivity toward OH radicals: Transfer learning, data augmentation and model interpretation. Chemical Engineering Journal. 2021;403:126393. [27] Selvaraju RR, Cogswell M, Das A, et al. Grad-CAM: Visual explanations from deep networks via gradient-based localization. In: Proceedings of the IEEE International Conference on Computer Vision. 2017:618-626. [28] Wang S, Guo Y, Wang Y, Sun H, Huang J. SMILES-BERT: Large scale unsupervised pre-training for molecular property prediction. In: Proceedings of the 10th ACM International Conference on Bioinformatics, Computational Biology and Health Informatics. 2019:429-436. [29] Liu S, Guo H, Pan X, et al. A deep learning framework combining molecular image and protein structural representations identifies candidate drugs for pain. bioRxiv. 2024. doi:10.1101/2024.06.12.598706. [30] Ståhl N, Falkman G, Karlsson A, Mathiason G, Boström J. Deep convolutional neural networks for the prediction of molecular properties: Challenges and opportunities connected to the data. Journal of Integrative Bioinformatics. 2019;16(1):20180065.
Machine Learning & AI
· 2025-06-04
Image-based Molecular Representation Learning for Drug Development: A Survey
✨ AI制药新浪潮:让AI“看脸”识药!✨ 嘿,朋友们!“AI制药”这个词是不是已经刷爆了你的朋友圈,成为科技界和医药界共同瞩目的焦点?传统的AI方法,例如让AI去“阅读”分子的化学式(像SMILES序列这种线性字符串)或者去细致分析由原子和化学键构成的分子结构图(如图神经网络GNN所做的那样),无疑已经在药物发现的征途上取得了令人鼓舞的进展,为我们筛选和设计潜在药物分子提供了有力的工具。但今天,我们要聊点更酷、更富有想象力的——让AI直接“看”分子的“照片”来学习和发现新药! 没错,你没有听错,就像我们人类通过观察面部特征来识别人一样,AI也开始学习通过分子的视觉特征来识别它们、预测它们的性质,甚至启发新药的设计。这无疑为AI制药打开了一扇全新的大门。 最近,一篇发表在国际知名期刊《Briefings in Bioinformatics》上的重磅综述 《Image-based molecular representation learning for drug development: a survey》就为我们系统地梳理了这个新兴且潜力无限的领域。这篇推文将带你深入解读这篇综述的精髓,一同探索计算机视觉(CV)这项在图像识别、自动驾驶等领域大放异彩的技术,是如何与药物研发这一古老而又充满挑战的科学领域碰撞出耀眼的火花,并有望让新药发现之路变得更加直观、更加高效!准备好了吗?让我们一起踏上这场AI“看脸”识药的奇妙探索之旅吧!想象一下,如果AI能像经验丰富的化学家一样‘一眼’洞察分子的潜力,甚至启发我们设计出从未想过的新药结构,那将为攻克疑难杂症、守护人类健康带来怎样革命性的希望? 🤔 药物研发的老大难与AI的“前浪”们 我们都深知,新药研发绝非易事,它堪称一场充满未知与挑战的“九九八十一难”的修行: 时间长:一款新药从最初的实验室概念到最终摆上药房货架,平均需要耗费10到15年漫长的时间,这期间充满了无数的变数和等待。 花钱多:动辄数十亿美元的研发投入,对于任何一家制药企业来说都是一笔巨大的开销,堪比一台高速运转的“碎钞机”,且并不能保证最终一定有回报。 失败率高:更令人沮丧的是,绝大多数进入临床试验阶段的候选化合物,最终都会因为效果不佳或安全性问题而折戟沉沙,成功率极低。 为了改变这一成本高昂、效率低下的现状,科学家们和产业界都将殷切的目光投向了飞速发展的人工智能(AI)。在AI赋能药物研发的诸多环节中,一个至关重要的核心任务,就是构建精准且高效的分子表示——也就是说,如何将复杂多样的分子结构和性质信息,巧妙地转化成AI模型能够理解并有效处理的“语言”或“数据格式”。 在“图像派”AI崭露头角之前,AI制药领域的“前浪”们已经探索并实践了多种主流的分子表示方法: 计算药学方法:这类方法历史悠久,例如利用分子指纹(记录分子中是否存在特定亚结构片段的二进制串)、拓扑指数(基于分子图理论计算得出的数值)等所谓的“描述符”来刻画分子。它们计算相对简单直接,易于理解和使用,但缺点也比较明显,这些方法往往难以全面细致地捕捉分子三维空间结构、电子云分布等精细的结构信息,有时会显得“管中窥豹”。 自然语言处理(NLP)方法:这种方法独辟蹊径,将分子的化学结构表示为线性化的字符串,如广为人知的SMILES(简化分子线性输入规范)序列或InChI(国际化学标识符)字符串。这样一来,就可以借鉴NLP领域成熟的技术(如循环神经网络RNN、Transformer等)来处理这些“分子语言”。这就像给每个分子起了个独特的“化学名”。然而,正如人的名字有时难以完全概括其性格和能力一样,这些线性“名字”在表达分子的复杂空间构象、手性特征以及重要的生物学功能时,也可能在准确捕捉分子身份和关键生物学特征方面表现出局限性。 图神经网络(GNN)方法:近年来,GNN在AI制药领域异军突起。它将分子天然地看作一个由原子(图中的节点)和化学键(图中的边)组成的图结构。GNN能够直接在图上进行学习,有效捕捉原子的邻接关系和局部化学环境。GNN在预测分子性质、药物-靶点相互作用等多种任务上都表现出色,但和NLP方法类似,它们在精确捕捉分子的全局拓扑特性、细微的立体化学差异以及那些决定其生物活性的关键三维特征方面,有时仍会遇到挑战,同样可能在准确捕捉分子身份和重要生物特征方面存在局限性。 这些“前浪”们无疑为AI制药的进步立下了汗马功劳,推动了整个领域的发展。但是,追求卓越的科研人员总是在不断探索更好、更强大的工具和方法。于是,一种全新的、更贴近人类直觉的分子表示学习方式——基于图像的分子表示学习,便应运而生,并迅速吸引了业界的广泛关注! 💡 为什么是“图像”?AI“看图识珠”的独特魅力 你可能会好奇,我们已经有了那么多表示分子的方法了,为啥还要多此一举,费劲把分子画成“照片”再让AI去学习呢?直接用图像这种方式到底有什么特别的“魔力”? 直观且独特,信息更丰富:正如世上没有两片完全相同的树叶,每个化学物质也都有其独特的视觉“长相”和空间“姿态”。一张精心绘制的2D分子结构图,或者一个能够展示其三维空间排布的3D分子图像,能够非常直观地将分子的原子组成、成键方式、官能团分布乃至空间构象等信息呈现出来。这种视觉信息对于AI来说,可能比抽象的描述符或线性序列更容易捕捉到关键的结构模式和细微差异,例如通过分析图像中原子的类型、相对位置以及原子间的连接方式,可以有效地识别不同的化学物质。 借鉴成熟技术,加速应用落地:计算机视觉(CV)作为人工智能领域发展最为成熟的分支之一,已经在图像识别(比如人脸识别、物体分类)、目标检测(比如自动驾驶中的车辆行人检测)、图像分割等诸多领域取得了举世瞩目的成功,拥有大量先进的算法模型(如CNN、Vision Transformer等)和强大的开源工具库。这些现成的、经过大规模数据验证的“轮子”和经验,可以相对容易地被迁移和应用到分子图像的分析与处理中,从而大大加速基于图像的AI制药技术的发展和落地。 捕捉复杂模式,洞察潜在规律:分子图像,特别是3D图像,能够蕴含比传统描述符或SMILES序列更为丰富的、高维度的结构信息和空间关系。AI模型,尤其是深度学习模型,擅长从这些高维数据中自动学习和提取复杂的、非线性的特征模式,例如特定的药效团形状、疏水/亲水区域的分布、潜在的分子间相互作用位点等。这些模式往往是人类难以通过肉眼观察或简单规则定义的,但对于理解分子的性质和功能至关重要。 助力理解与设计,启发药物创新:通过分析从分子图像中学习到的特征,AI不仅能够完成对分子性质的精准预测(例如预测其溶解度、渗透性、生物活性或毒性),更有潜力帮助我们更深入地理解分子的构效关系(SAR)和构性关系(SPR)。例如,通过可视化AI模型关注的图像区域(如使用CAM技术),我们可以推断出哪些结构特征对目标性质有重要贡献。这种理解反过来又可以指导我们进行更合理的分子修饰和全新的分子设计,从而加速创新药物的发现进程。 简单来说,让AI“看图识药”,就像是给AI装上了一双能够洞察分子微观世界的“火眼金睛”。它不再仅仅依赖于抽象的符号或数字,而是能够直接从分子的“视觉形象”中学习,从而更全面、更深入地洞察分子的奥秘,为药物研发带来全新的视角和强大的动力。 🚀 AI如何“看图”:解密图像分子表示学习流程 那么,AI究竟是如何一步步“看懂”这些分子图像,并从中提取有用信息的呢?这篇综述为我们精心梳理并呈现了一个通用的、条理清晰的工作流程(其核心思想可见下图示意,该图改编自原论文中的图2,旨在更形象地展示这一过程): 分子视觉表示的一般流程的图片 数据准备与筛选:万事开头难,第一步是获取高质量的分子数据。研究人员首先会从各种公开的或私有的化学与生物学数据库(例如我们耳熟能详的PubChem, ChEMBL, ZINC, DrugBank等)中,根据研究目标(比如特定疾病靶点、某一类化学结构等)提取大量的化合物信息。这些信息最常见的初始形式是SMILES(简化分子线性输入规范)字符串,它是一种用文本字符描述分子结构的便捷方式。 分子“拍照”——图像生成:接下来,需要将这些文本化的分子信息转换成AI能够“看”的图像格式。这一步至关重要,图像的质量和一致性直接影响后续模型的学习效果。 对于2D分子图像,通常会利用像RDKit这样强大的开源化学信息学工具包。RDKit能够解析SMILES字符串,创建分子图的内部表示,生成分子的2D布局,并最终渲染成图像,同时允许调整图像大小等视觉参数。 对于3D分子图像,则可能需要更复杂的处理。例如,可以使用专业的分子建模软件(如Maestro等软件)先生成分子的三维构象(即原子在空间中的具体坐标),然后再从不同的观察视角(如围绕y轴多次旋转45度)、不同的渲染风格(如球棍模型、空间填充模型等)“拍摄”这些3D结构,以捕捉更全面的空间信息和表面特征。这些全局旋转操作不会影响分子实际坐标,每次旋转后都会保存当前视图的图像。 AI“看图”学习——特征提取:当大量的分子“照片”准备就绪后,就轮到AI模型大显身手了。目前,卷积神经网络(CNN)及其各种变体(如ResNet, DenseNet, Inception等)是处理图像数据的绝对主力。这些生成的分子图像会被作为输入“喂”给CNN模型。CNN通过其独特的多层结构,包括一系列精心设计的卷积层、池化层和全连接层,能够自动地从原始像素数据中逐层抽象并学习到越来越复杂的图像特征。 卷积层通过可学习的滤波器(卷积核)扫描图像,不仅仅能检测到边缘、角点、特定形状的官能团等基础视觉模式,更关键的是,它能学习到这些模式在分子图像中的空间排布、相对位置关系,甚至是某些区域的“纹理”或“密度”差异(这可能间接反映了分子表面静电势或电子云分布的粗略特征)。这些信息对于理解分子间的相互作用和识别药效团至关重要。 池化层则对特征图进行降采样,在减少数据量的同时,努力保留那些最具区分性的核心特征,并赋予模型一定的平移、旋转不变性,使得模型对分子在图像中的朝向不那么敏感。 经过多层卷积和池化对信息的逐层提炼与抽象,全连接层最终会将这些高度浓缩的、信息量丰富的视觉特征进行整合,并输出一个能够全面代表该分子图像核心信息的特征向量。这个特征向量就是AI对该分子“长相”及其潜在化学意义的数字化理解。 训练与预测——模型优化与应用:获得了分子的图像特征向量后,最后一步就是利用这些特征来完成特定的药物研发任务。这通常涉及到模型的训练和预测阶段。 模型训练:我们会使用带有已知标签(例如,已知某个分子的生物活性值、毒性等级,或者它是否能与某个靶点结合)的分子图像数据集来训练CNN模型。通过定义合适的损失函数(衡量模型预测结果与真实标签之间的差距)和选择高效的优化算法(如梯度下降法及其变体),不断调整CNN模型内部的参数(权重和偏置),使得模型能够从图像特征中学习到预测这些标签的规律。 模型预测:一旦模型训练完成并达到满意的性能,就可以用它来对新的、未知的分子图像进行预测了。例如,输入一个新的候选药物分子的图像,训练好的模型就能输出其预测的活性值、毒性概率等信息,从而为药物筛选和优化提供决策支持。 常用公共数据库一览 (部分列举自原论文表2): 数据库名称 (Database Name) 简介 (Description) PubChem 由美国国立卫生研究院(NIH)下属的国家生物技术信息中心(NCBI)维护,是一个内容极其丰富的大型公共化学数据库,汇集了来自全球超过750个数据源的化合物、物质及生物活性数据 。 ChEMBL 由欧洲生物信息学研究所(EBI)精心维护和运营,专注于收集和整理具有类药性的生物活性分子的化学结构、实验测定的生物活性数据以及相关的基因组学信息,是药物发现的重要资源 。 ZINC 由加州大学旧金山分校(UCSF)的Irwin和Shoichet实验室合作开发和维护的商业可购买化合物数据库,特别强调化合物结构的多样性和可获得性,并提供了便捷的在线搜索和筛选功能 。 DrugBank 一个综合性的、可自由访问的在线数据库,不仅提供了已批准上市药物的详细信息(如作用机制、药代动力学、药物相互作用等),也收录了大量处于临床研究阶段的在研化合物的数据 。 MoleculeNet 由斯坦福大学Pande实验室发起并维护的一个旨在推动分子机器学习发展的基准平台,它包含了一系列精心挑选和整理的、用于评估和比较不同机器学习模型在分子性质预测任务上性能的公开数据集,涵盖了从量子力学计算到生物物理实验再到生理学效应等多个方面 。 🧠 AI“看图”的十八般武艺:核心学习方法大盘点 让AI“看图”可不是简单地用一个模型、一种方法就能包打天下。实际上,根据我们拥有的训练数据类型(比如是否有现成的“答案”或标签)、学习的目标以及想要解决的具体问题,科学家们已经发展出了多种精妙的学习范式。这篇综述独具匠心地基于计算机视觉领域成熟的学习范式分类体系,对现有基于图像的分子表示学习研究进行了系统性的归纳和总结,为我们理解这个交叉领域的全貌提供了清晰的路线图。 下面这张精心整理的大表(其内容综合并改编自原论文中的图3、图4以及表3、表4的核心信息)将带你快速了解几种主要的学习方法、它们的核心思想、一些代表性的研究工作或模型,以及它们各自的优势与面临的挑战: 学习范式 (Learning Paradigm) 核心思想 (Core Idea) 代表工作/模型 (Examples from Survey) 优点 (Pros) 挑战 (Cons) 监督学习 (Supervised Learning) (一句话概括:AI的‘看图答题’模式,有标准答案供学习)核心特点: 这类方法依赖于“有标签”的训练数据 。也就是说,我们需要为模型提供大量的分子图像,并且每张图像都对应一个已知的“答案”或“标签”(例如,该分子的生物活性值、毒性等级、是否与特定靶点结合等)。模型的目标就是学习从输入图像到这些已知标签的映射关系。 - 常规监督学习 (Vanilla) 这是最直接的监督学习方式 。简单来说,就是用带有明确标签(如IC50值、毒性分类等)的分子图像集合来训练一个深度学习模型(通常是CNN),让模型直接学习预测这些性质或活性。 KekuleScope, Chemception, Deepsnap, ResNet18DNN 数据利用高效: 如果拥有高质量的标签数据,模型能够充分学习并建立准确的预测模型 。准确率潜力高: 在数据充足且质量好的情况下,往往能达到较高的预测精度 。结果相对易于解释和验证: 由于有明确的预测目标和真实标签,模型的性能评估和结果分析相对直接 。 高度依赖标签数据: 获取大量、高质量的药物研发相关标签数据通常成本高昂且耗时(例如,需要进行大量生物实验)。对数据偏误敏感: 如果训练数据存在偏差(如类别不平衡、标签错误等),模型的性能会受到严重影响 。模型泛化能力可能受限: 模型可能只在与训练数据相似的未见数据上表现良好,对于差异较大的新分子,泛化能力可能不足 。小数据集易过拟合: 在标签数据量较少的情况下,复杂的深度学习模型很容易过フィット,即过度学习训练数据的噪声和特异性,导致在新数据上表现不佳 。 - 孪生CNN学习 (Siamese CNN) (一句话概括:AI的‘找不同’或‘连连看’高手)这种方法采用一种特殊的网络结构,包含两个或多个结构完全相同、参数共享的CNN分支 。每个分支分别处理一个输入分子图像,然后将它们各自提取的特征向量进行比较(例如计算距离或相似度),从而判断这两个分子是否相似,或者它们之间的关系 。常用于需要比较输入的任务。 tCNNs (Liu et al.), Torres et al. 适合小样本学习: 通过学习区分“相似对”和“不相似对”,即使在每个类别样本量不多的情况下也能有效学习 。强大的度量学习能力: 非常适合学习分子间的相似性或距离度量,这对于药物重定位(寻找老药新用)、虚拟筛选等任务非常有用 。所需标签数据形式更灵活: 有时只需要成对的相似/不相似标签,而非每个样本的绝对属性标签 。鲁棒性强: 对输入数据的噪声和变形具有一定的容忍度 。 计算量相对较大: 需要同时处理和比较多个输入,并训练两个网络,对计算资源的要求可能更高 。模型训练和调优更复杂: 如何设计有效的损失函数(如对比损失 、三元组损失)以及如何构建高质量的训练样本对,都需要更专业的知识和经验 。特征空间的解释性: 虽然能判断相似性,但其学习到的潜在特征空间的具体含义有时不如直接预测属性的模型那么直观。 - 多模态学习 (Multi-modal) (一句话概括:AI的‘全科医生’,综合多方信息看诊)核心思想是“博采众长”。它不仅仅依赖于单一的分子图像信息,而是尝试同时整合和学习来自多种不同类型或来源的数据(即“模态”),例如,将分子的2D/3D图像与其对应的化学名称、文本描述(如专利文献中的合成方法、性质描述)、基因表达数据、蛋白质序列信息等结合起来进行联合学习。模型的目标是学习一个能够融合所有这些信息的统一表示 ,或者让不同模态的信息相互补充、相互印证。 Wang et al. (专利图文信息重建), MCNN-DDI, MultiDTI 信息更全面,视角更多元: 通过融合不同来源的信息,可以获得对分子更完整、更立体的理解,弥补单一模态信息的不足 。可能提升预测准确性和模型鲁棒性: 不同模态的信息可以相互校验和补充,从而提高模型预测的准确性,并使其对单一模态的噪声或缺失不那么敏感 。发现跨模态关联: 有助于揭示不同类型数据之间的潜在联系,例如图像特征与文本描述中特定化学基团的对应关系,从而加深对药物作用机制的理解 。 数据整合与对齐难度大: 不同模态的数据结构、尺度、质量可能差异很大,如何有效地将它们整合、对齐并输入到模型中是一个巨大的挑战 。不同模态数据可能存在不平衡: 某些模态的数据可能远多于其他模态,导致模型学习时产生偏向,对部分模态学习不足或过度学习 。计算成本高,模型设计复杂: 处理和融合多种模态数据通常需要更复杂的模型架构和更大的计算资源 。缺乏标准化方法和基准: 多模态学习在药物研发领域的应用尚处于探索阶段,成熟的方法论和公开的基准数据集相对较少,使得不同研究之间的结果难以比较和复现 。依赖数据质量: 任何单一模态的数据质量差都可能拉低整体模型的性能 。 无监督学习 (Unsupervised Learning) (一句话概括:AI的‘自学探索’模式,无需标准答案也能发现规律)核心特点: 与监督学习相反,这类方法主要使用“无标签”的训练数据 。也就是说,我们只给模型提供大量的分子图像,但并不告诉模型这些图像对应的“正确答案”。模型需要自己从这些数据中探索和发现潜在的模式、结构或规律 。 - 常规无监督学习 (Vanilla) 这是无监督学习的基础形式 。直接在海量的、没有预先标注的分子图像数据上训练模型(例如使用自编码器、聚类算法等),让模型学习数据的内在表示或结构。这种学习到的表示常用于数据降维、异常检测、数据可视化,或者作为后续监督学习任务的“预训练”步骤,为模型提供一个好的初始化参数。 ImageMol, ADMET-CNN, QSAR-CNN 能有效利用海量无标签数据: 药物研发领域存在大量未标记的化合物数据,无监督学习为此类数据的利用提供了可能,无需昂贵的标签成本 。揭示数据中隐藏的模式和结构: 能够帮助我们发现数据中未曾预料到的聚类、关联或异常,可能启发新的科学假设和药物靶点 。辅助数据探索和可视化: 例如通过降维技术将高维分子图像数据投影到低维空间,便于研究人员观察和理解数据分布 。 学习到的模式和结果往往难以解释: 模型发现了某些模式,但这些模式的具体生物学或化学意义可能不明确,需要后续大量的实验验证才能转化为实际应用 。对输入数据的质量和预处理方法非常敏感: 噪声、冗余特征或不恰当的预处理都可能严重影响学习效果,甚至导致错误的结论 。可扩展性面临挑战: 处理超大规模生物数据时,某些无监督学习算法的计算效率可能成为瓶颈,需要大量计算资源 。评估困难且缺乏标准化: 由于没有“标准答案”,评估无监督学习模型的好坏本身就是一个难题,也缺乏统一的评估标准和方法,使得不同研究之间的结果难以比较和复现 。 - 自监督学习 (Self-supervised, SSL) (一句话概括:AI的‘自创习题’学习法,从自身数据中找监督信号)这是一种非常巧妙的无监督学习分支,可以看作是“自己监督自己”。模型通过解决自身数据内部隐含的、自动生成的“代理任务”(pretext task)来学习有用的特征表示 。例如,对于一张分子图像,可以随机遮挡掉一部分,然后让模型去预测被遮挡的部分是什么;或者将图像打乱成若干小块,让模型学习如何将它们恢复成原始图像。通过完成这些精心设计的“智力游戏”,模型被迫学习到关于数据内在结构和语义的深刻理解 。 MolPMoFiT, SMR-DDI, ConvAE 高效利用无标签数据,学习能力强: 继承了无监督学习的优点,并且通过精心设计的代理任务,能够学习到比传统无监督方法更复杂、更鲁棒的特征表示 。预训练模型具有良好的可迁移性: 通过自监督学习在大规模无标签分子图像上预训练得到的模型,其学习到的特征表示往往具有很好的泛化能力,可以方便地迁移到下游各种具体的、标签数据稀缺的药物研发任务中(如活性预测、毒性分类等),只需少量微调即可取得良好效果 。能产生多样的代理任务: 例如预测分子图的遮蔽部分或序列,从而对药物研发相关数据进行全面理解 。 代理任务的设计至关重要: 代理任务的好坏直接决定了模型能学到什么样的特征,设计一个既有效又与下游任务相关的代理任务本身就很有挑战性 。模型通常比较复杂,计算需求高: 为了完成复杂的代理任务,自监督学习模型(如基于Transformer或大型CNN的模型)往往结构复杂,训练过程对计算资源(如GPU)的需求也比较大 。结果的可解释性仍是一个挑战: 与其他深度学习方法类似,其学习过程和决策依据的透明度有待提高 。对数据质量和多样性敏感: 如果预训练数据质量不高或多样性不足(例如数据增强方式不当),学习到的表示可能存在偏差,影响下游任务性能 。 - 迁移学习 (Transfer Learning) (一句话概括:AI的‘经验借鉴’学习法,站在巨人肩膀上看得更远)核心思想是“站在巨人的肩膀上”。它指的是将一个在大型通用数据集(例如包含数百万张自然图像的ImageNet)或某个相关的源任务(例如预测一般化学分子的某种性质)上已经预训练好的模型,将其学到的知识和能力“迁移”到我们当前感兴趣的、但可能数据量不足的药物研发目标任务上 。通常的做法是固定预训练模型的大部分参数(冻结层 ),只对模型的最后几层或新添加的针对特定任务的层进行微调(fine-tuning),使用目标任务的少量标签数据进行训练。 Dalkiran et al., Li et al., ImageCLEF2018 能有效解决药物研发中目标任务数据稀疏的问题: 药物研发中很多特定任务的标签数据非常宝贵和稀缺,迁移学习使得我们可以在这些小数据集上也能训练出性能不错的模型 。加速模型训练,提升模型性能: 利用预训练模型提供的良好初始参数,可以大大缩短目标任务模型的训练时间,并且通常能达到比从零开始训练更好的性能 。利用通用知识: 预训练模型从大规模数据中学到的通用特征(如边缘、纹理、形状等对于图像任务而言)对于理解特定领域的分子图像也可能是有益的,有助于模型更快抓住关键信息 。 “负迁移”风险: 如果源域(预训练数据的领域)和目标域(药物研发任务的领域)之间差异过大,或者预训练任务与目标任务关联性不强,那么强行迁移知识反而可能损害目标任务的性能,导致效果变差 。预训练模型本身的成本和获取: 虽然有很多公开的预训练模型,但针对特定化学或生物图像的优质预训练模型仍然相对较少,自行进行大规模预训练的成本很高 。在小数据集上微调仍有 过拟合风险: 尽管迁移学习有助于缓解,但在目标数据集极小的情况下,微调过程仍然可能导致模型对目标数据过拟合 。模型选择和微调策略需要经验: 选择哪个预训练模型、如何进行微调(例如冻结哪些层、学习率如何设置等)都需要一定的经验和尝试,缺乏统一的指导原则 。 简单小结一下,帮你理清思路: 监督学习就像是一位经验丰富的老师傅,手把手地带着徒弟(AI模型)看图识物,目标非常明确(比如识别出哪些分子有活性),学出来的徒弟通常活儿干得又快又准又狠,但前提是师傅得有足够多、足够好的“教学案例”(即高质量的标签数据)。 无监督学习则更像是一位天赋异禀的学徒在“闭门造车”或“自行悟道”,虽然没有师傅指点迷津(没有标准答案),但通过观察海量的“分子图谱”,也能自己琢磨出一些门道和规律(比如发现某些分子在“长相”上可以归为一类),这种方法潜力巨大,尤其适合在正式学习具体任务前做大量的“预习”和“打基础”(即预训练)。 自监督学习可以看作是这位自学成才的学徒中的“学霸”级玩法,他不仅自己看图,还会自己给自己出各种“看图填空”、“看图拼图”的练习题来做,通过这种方式,他学到的东西更加扎实,理解也更加深刻。 迁移学习则是一位聪明的学徒,他懂得“站在巨人的肩膀上”,把在别处(比如看自然界图片)学到的识别物体轮廓、纹理的本事,巧妙地运用到观察分子“照片”的新任务上,这样往往能事半功倍,尤其是在新任务的“教学案例”不多的时候。 多模态学习则是一位追求全面的“通才”学徒,他不仅看分子的“照片”,还会去阅读关于这个分子的“文字说明书”(比如化学性质描述、相关文献等),力求从各个方面获取信息,做到“眼观六路,耳听八方”,从而对分子有更完整的认识。 🎯 “图像派”AI大显身手:主要应用领域 那么,这些学会了“察言观色”、“看图识珠”的AI模型,究竟能在药物研发的哪些关键环节大显身手,一展其能呢?综述中为我们重点介绍了以下几个已经取得显著进展或展现出巨大潜力的主要应用领域: 药物发现 (Drug Discovery) —— 开启智能筛选新篇章 背景与挑战:传统的药物发现流程,无论是基于靶点的筛选还是偶然的表型筛选,都面临着通量、成本和成功率的巨大挑战。近年来,药物发现的方法论也在悄然发生转变,表型筛选(phenotypic screening)的重要性日益凸显,因为它不依赖于对作用靶点的预先了解,有时能发现全新作用机制的药物。 图像AI的贡献:基于图像的AI模型为此带来了新的解决方案。它们可以直接利用分子图像(无论是2D结构图还是3D构象图)来预测新的、潜在的药物-靶点相互作用(DTI),或者预测化合物在特定表型筛选模型中的活性。这相当于用AI代替了传统实验中大量、重复且耗时耗力的筛选过程,实现了“智能虚拟筛选”。例如,综述中提到的 ImageMol 和 MolPMoFiT 等模型就通过学习分子图像的深层特征,在预测药物活性和靶点相互作用方面展现了令人鼓舞的潜力,为从海量化合物库中快速锁定有希望的候选分子提供了新工具。这种方法的核心在于识别候选药物化合物与目标生物大分子之间的物理相互作用。 生物活性预测 (Biological Activity Prediction) —— 精准量化药效 背景与挑战:生物活性预测是计算化学和药物化学领域的核心任务之一,其目标是基于分子的结构特征来准确预测其与特定生物靶点(如酶、受体)的结合强度,或者其在特定生物检测体系中表现出的生物学效应(如抑制常数Ki、半数有效浓度EC50等)。这是理解药物作用机制、优化先导化合物的关键。 图像AI的贡献:传统的定量构效关系(QSAR)模型在这一领域扮演了重要角色,但它们通常依赖于人工选择和计算的分子描述符(如分子量、电子亲和性、空间构型等),这些描述符的选择本身就是一项复杂的工作,且可能无法完全捕捉决定活性的所有关键信息。而新兴的、基于图像的QSAR模型,例如综述中提及的 Chemception 和 QSAR-CNN 等,则另辟蹊径,它们直接从分子的2D或3D图像中学习与生物活性相关的视觉特征,构建稳健的QSAR模型。研究表明,这类模型在许多任务上展现出与传统QSAR方法相当甚至更优的预测性能,并且省去了人工设计描述符的步骤,使得建模过程更为自动化和数据驱动。 毒性预测 (Toxicity Prediction) —— 为药物安全保驾护航 背景与挑战:药物的毒副作用是导致新药研发失败的最主要原因之一,也是临床应用中需要高度关注的问题。药物毒性是一个复杂的过程,受化合物成分、个体因素、疾病状态等多种因素影响。如果在药物研发的早期阶段就能准确识别和预测化合物的潜在毒性(如肝毒性、心脏毒性、致癌性等),将极大地节约研发成本,缩短研发周期,并最重要的是保障患者的用药安全。 图像AI的贡献:尽管传统机器学习算法(如朴素贝叶斯、SVM、随机森林)已被用于毒性预测,但随着数据量的增加,其性能常遇到瓶颈。近年来,基于图像的深度学习模型,特别是卷积神经网络(CNN),在药物毒性预测方面也显示出持续且显著的改进。AI模型可以通过学习大量已知毒性数据的化合物分子图像,识别出与特定毒性相关的结构模式或“警示结构”。例如,综述中提到的 ResNet18DNN 模型被成功应用于预测药物引起的肝损伤(DILI),而 KekuleScope、Toxic Colors 等模型也被用于基于分子图像预测化合物的毒副作用。这些研究表明,基于图像的毒性预测模型有望成为传统毒理学评估方法的重要补充。 🚧 机遇与挑战:AI“看图”的进阶之路 虽然基于图像的分子表示学习为AI制药描绘了一幅令人振奋的前景图,展现出巨大的应用潜力,但正如任何新兴技术一样,它目前仍处于相对早期的发展阶段。综述也客观地指出了该领域当前面临的一些关键挑战,并高瞻远瞩地为未来的研究方向提供了宝贵的启示: 图像转换损失与信息保真度 (Image Transformation Loss & Information Fidelity) 挑战:将抽象的分子结构信息(例如从SMILES字符串或3D坐标)忠实地、无损地映射到二维或三维图像,本身就是一个复杂的过程。在这个转换过程中,不可避免地会因为投影、渲染、视角选择等因素而丢失或扭曲部分原始的化学信息(比如细微的键角差异、动态的构象变化等)。此外,很多分子图像,特别是那些只展示骨架的2D图像,其信息密度可能相对稀疏,模型可能难以有效提取潜在特征,无法捕获配体、受体以及配体-受体相互作用的3D结构信息,从而影响性能。 未来展望:未来的研究需要更加关注如何优化分子图像的生成策略,以最大程度地保留和突出与目标性质相关的化学信息。同时,一个富有前景的方向是开发能够结合图像学习与其他多视角/多模态学习的方法。例如,可以将分子的2D图像、3D图像、光谱数据、文本描述等多种信息源融合起来,让它们相互补充、相互印证,从而构建更全面、更鲁棒的分子表示。如果AI能够从更保真的多模态信息中学习,我们或许能更早地发现那些具有独特作用机制或全新化学骨架的候选药物,甚至能更准确地预测它们在复杂生物环境中的行为。 模型泛化能力与领域适应性 (Model Generalization & Domain Adaptation) 挑战:深度学习模型,尤其是那些结构复杂的模型,通常需要大量的、多样化的训练数据才能学习到具有良好泛化能力的特征表示。然而,在药物研发的许多特定任务中,高质量的标签数据往往是稀缺的。这使得模型很容易在训练数据上表现优异,但在面对来自不同化学空间、不同实验条件或全新靶点的新分子时,其性能可能会显著下降。也就是说,模型学习到的知识可能过于“特化”于训练时所见的“领域”,难以推广到未知的“新领域”。 未来展望:提升模型的泛化能力是未来的核心攻关方向之一。可以积极探索和应用机器学习中的领域泛化(Domain Generalization)和领域自适应(Domain Adaptation)等先进技术。例如,领域对抗神经网络(DANN)试图通过学习领域不变的特征表示来消除不同数据集之间的分布差异。此外,元学习(Meta-learning)或“学会学习”的方法,旨在让模型能够从少量样本中快速适应新任务,也具有重要的应用潜力。如果AI模型能够真正实现跨领域、跨任务的知识迁移和快速适应,那意味着我们可以用更少的数据、更快地为各种新靶点、新疾病开发出有效的预测工具,极大地加速“个性化医疗”或“罕见病药物研发”等目前面临数据瓶颈的领域。 表示的隐私性与数据安全 (Representation Privacy & Data Security) 挑战:药物研发过程,特别是当涉及到临床试验数据、患者个人健康信息或具有高度商业敏感性的专有化合物数据时,数据的隐私保护和安全问题就显得尤为突出和关键。传统的集中式数据处理和模型训练方式,即将所有数据汇集到一个中央服务器进行处理,无疑会显著增加数据泄露的风险。 未来展望:联邦学习(Federated Learning)为解决这一挑战提供了一种极具吸引力的分布式学习范式。在联邦学习框架下,各个数据持有方(如不同的科研机构、医院或制药公司)可以在本地利用自己的数据训练模型,而无需将原始数据发送出本地。它们只需要向中央服务器共享模型的参数更新或中间结果,中央服务器再对这些更新进行聚合,从而协同训练出一个全局模型。这种“数据不动,模型动”的方式,能够在有效利用多方数据的同时,最大限度地保护数据隐私。此外,还可以结合差分隐私、同态加密等先进的隐私增强技术,为数据和模型安全提供更强的保障。通过以联邦方式优化表示,可以有效减少数据传输,优化带宽,缓解网络拥堵,并利用多样化数据集提升模型整体性能。 表示的可解释性与决策透明度 (Representation Interpretability & Decision Transparency) 挑战:深度学习模型,尤其是基于图像的CNN模型,常常被诟病为“黑箱模型”。也就是说,虽然它们可能在预测任务上表现出色,但我们很难直观地理解它们究竟是如何从输入的分子图像中学习到知识,并最终做出某个具体预测(例如,为什么模型认为这个分子有毒,或者为什么它认为那个分子具有高活性)的。在对安全性要求极高且需要严谨科学论证的药物研发领域,这种缺乏可解释性的“黑箱”特性是其推广应用的一大障碍。我们不仅想知道“是什么”,更想知道“为什么”。 未来展望:增强模型的可解释性,打开“黑箱”,是提升基于图像的AI制药模型实用性和可信度的关键。可以积极借鉴并发展计算机视觉领域已经取得显著进展的各种可解释性AI(XAI)方法。例如,类激活图(Class Activation Mapping, CAM)及其变体(如Grad-CAM)能够高亮显示出输入图像中对模型决策贡献最大的区域,从而帮助我们理解模型关注了分子的哪些结构特征。此外,像LIME(Local Interpretable Model-agnostic Explanations)和SHAP(SHapley Additive exPlanations)这样的模型无关解释方法,也能够为理解复杂模型的预测行为提供有价值的洞察。通过这些技术,我们可以更好地验证模型的科学合理性,发现潜在的数据偏误,甚至从模型的“思考”过程中获得新的科学启发,最终获得值得信赖和公正的表示。 🎉 总结与展望:未来可期,星辰大海! 总而言之,基于图像的分子表示学习,无疑为人工智能赋能药物研发这条充满机遇与挑战的道路,开辟了一条令人耳目一新且兴奋不已的新途径。 它巧妙地将计算机视觉的强大能力引入到微观的分子世界,凭借其表示的直观性、能够充分借鉴成熟CV技术的便捷性、以及有望捕捉传统方法难以刻画的复杂分子模式等独特优势,已经在药物的早期发现、生物活性的精准预测、以及潜在毒性的有效评估等药物研发的关键环节中,展现出了巨大的潜力与应用价值。 正如这篇精彩的综述所深刻强调的那样,尽管目前基于图像的AI制药领域尚处于蓬勃发展的初期阶段,仍然面临着诸如如何在图像转换中最大限度地保真化学信息、如何提升模型在不同化学空间和任务间的泛化能力、如何在利用数据的同时确保其隐私与安全、以及如何打开模型决策的“黑箱”以增强其可解释性和可信度等一系列挑战,但这恰恰也为未来的研究者们描绘出了一幅充满无限可能的创新蓝图,提供了广阔的探索空间和宝贵的科研机遇。 我们完全有理由满怀信心地相信,随着相关算法的持续创新、计算能力的不断增强、高质量数据集的日益丰富以及多学科交叉合作的不断深入,让AI“看脸”识药的梦想将不再仅仅停留在科幻小说的畅想之中,而是会逐渐演变成现实世界中推动新药研发流程提速增效、降低成本、并最终惠及人类健康的强大引擎!这不仅仅是计算工具的革新,更是药物研发思维模式的进化。当AI拥有了‘洞察’分子视觉语言的能力,它将成为科学家探索未知、创造奇迹的得力伙伴,共同谱写人类健康事业的新篇章。这个领域的前方,是星辰大海,未来可期!让我们共同期待并参与到这场激动人心的变革中来,见证AI如何用‘慧眼’点亮新药发现的未来! 对这个激动人心的前沿方向抱有浓厚兴趣的小伙伴们,强烈建议你们深入阅读这篇综述的原文,以便从中获取更多详尽的技术细节、前沿的研究进展以及深刻的学术洞见! 📚 主要参考文献 [1] Li, Y., Liu, B., Deng, J., Guo, Y., & Du, H. (2024). Image-based molecular representation learning for drug development: a survey. Briefings in Bioinformatics, 25(4), bbae294. https://doi.org/10.1093/bib/bbae294 🖼️ 附录:文中图表速览 以下是对原综述中主要图表标题的中文翻译,帮助大家快速回顾核心内容: 图1 (Figure 1): 现有文献中常用的分子表示方法。由于其学习原理的内在局限性,它们都无法实现准确的分子身份识别和特征提取,这促使研究人员探索一种新型的表示方法。 图2 (Figure 2): 分子视觉表示的一般流程。这里我们以CNN为例。它主要包括四个步骤:(1)从数据集中提取SMILES格式的化合物;(2)将SMILES格式表示的分子转换成图像;(3)将分子的图像表示输入到CNN模型中;(4)使用优化算法训练CNN模型进行预测和分析。 图3 (Figure 3): 基于图像处理的各种学习范式图解。具体来说,监督/无监督学习是指用有标签/无标签数据优化AI模型。多模态学习意味着我们使用不同的数据模态(例如文本、图像)协同优化AI模型,而孪生CNN利用对比学习来衡量两个不同输入之间的相似性,以实现更高效的学习。相反,迁移学习利用来自另一个相似任务的知识来辅助缺乏标签数据的目标任务。自监督学习利用数据本身的属性来生成相关标签进行优化。 图4 (Figure 4): 基于不同学习范式的分类法。这里我们列出了代表性的范式及其对应的工作。我们想澄清ImageCLEF2018是所提出方法的名称,“2018”这个日期并非我们特意添加。此外,我们注意到一些工作在其原始论文中没有给出具体名称,因此我们采用“XX等”的形式来指代该工作。 图5 (Figure 5): 孪生CNN模型图解。其核心思想是利用一个卷积网络从分子中提取药物特征,并利用另一个卷积网络从基因特征向量中提取癌细胞系的特征。 图6 (Figure 6): 药物开发中多模态学习图解。其核心思想是开发一个AI模型,以同时处理不同数据模态(即图像和文本)进行药物识别。 图7 (Figure 7): 基于迁移学习的分子识别图解。我们不使用标记数据,而是借助一个大型预训练数据集,该数据集用于生成预训练模型,我们使用此模型辅助模型学习。这里的预训练模型可以配备各种分类器以适应不同的目标任务。 图8 (Figure 8): 药物开发中基于图像的应用。给定一个分子图像,我们利用计算机视觉技术生成视觉表示,可应用于药物发现、生物活性预测和毒性预测。 表1 (Table 1): 当前关于药物开发的分子表示学习的综述。如表所示,它们都侧重于通用AI技术(GAIT)或特定技术,如NLP和GNN,而未探索与图像相关的学习模型。 表2 (Table 2): 用于药物开发的几个公共数据库。这里我们提供了这些数据库的名称、简要描述、URL和参考文献,旨在促进相关研究。 表3 (Table 3): 不同图像相关模型的图示。我们将使用相同数据集的方法分组,并为每个方法标注发表年份、期刊和具体引文,以使表格清晰。请注意,由于这些方法在其原始论文中采用不同的数据选择方案来评估其有效性,因此无法在同一数据集上对它们进行性能比较。 表4 (Table 4): 用于基于图像的分子表示学习的工具/算法/代码/脚本的完整列表。对于未给出具体名称的算法,我们使用XXX等来表示它们。
Machine Learning & AI
· 2025-05-28
<
>
Touch background to close