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
>
A Bunch of Biophysics is Loading ...
All Posts
About
既然选择了远方,便只顾风雨兼程。 Contact Information Affiliation: Zhejiang University (ZJU), Hangzhou, Zhejiang, China Email: gxf1212@zju.edu.cn & gaoxufan1212@gmail.com GitHub: https://github.com/gxf1212/ Google Scholar: https://scholar.google.com/citations?hl=en&user=f8pi1BUAAAAJ Personal Notes: https://gxf1212.github.io/notes/#/ Zhihu: https://www.zhihu.com/people/wo-zhen-de-hao-cai-a Twitter: @Gaoxufan Public Accounts 欢迎关注『东山月光下』的微信公众号,这里分享我读到的文献和少量技术教程,主要关于生物物理学、分子模拟、自由能计算、AI和药物设计等。 My Bilibili channel: 东山月光下. From time to time, I will share full courses, specialized mini-lecture, animated demonstrations and cutting-edge lectures in macromolecular structure study, molecular dynamics simulation/statistical thermodynamics, oncology and immunology. English-Chinese dual subtitles are added for videos from YouTube. Please subscribe and triple click (一键三连)! Representatives: Molecular Biophysics course 2020, by Erik Lindahl Caltech cryoem course 2014, by Grant Jensen Introduction to Chemical Biology 2013, by Gregory Weiss Introduction to Immunology Lecture Series 2020, by Sarah Sletten Lecture: Molecular Dynamics and Drug Discovery, by Andrew McCammon Projects & Tools I created a VScode syntax highlighting extension md-highlighter that highlight files about molecular modeling and molecular dynamics simulation. This extension provides comprehensive coverage of commonly used file formats under various popular tools, including Gromacs, Amber, AmberTools, NAMD, VMD, and more. It also performs detailed keyword parsing, helping users to locate and edit information within files more quickly. Users can even identify syntax errors quickly based on different colors. Feel free to download and try it out, and don’t hesitate to recommend it to your colleagues! The site’s bottom left corner (after hiding the outline) features a Live2D hostess 三体风Live2D看板娘 that I’ve carefully curated with many favorite quotes from the famous science fiction “The Three-Body Problem”. If you’re interested, you can fork the project or contribute some sentences of your own.
None
· 2025-08-22
Random Forest and Enhanced Sampling Unite: Revealing and Correcting Ghost Errors in Alchemical Free Energy Calculations
随机森林与增强采样联手:揭示并修正炼金术自由能计算中的幽灵误差 本文信息 标题: 研究炼金术自由能预测中的误差:使用随机森林模型与GaMD 作者: Skanda Sastry and Michael Tae-jong Kim 单位: Genentech Inc, South San Francisco, California, 美国 引用格式: Sastry, S., & Kim, M. T.-j. (2025). Investigating Errors in Alchemical Free Energy Predictions Using Random Forest Models and GaMD. Journal of Chemical Information and Modeling. https://doi.org/10.1021/acs.jcim.5c01135 源代码: https://github.com/adnaksskanda/gamdti-paper 摘要 当前最先进的抗体-抗原复合物计算结合自由能变化($\Delta\Delta G$)预测技术,其精度约为$\pm1$ kcal/mol。尽管这对于高通量筛选或亲和力成熟等应用已足够,但对于在临床开发阶段评估翻译后修饰(PTMs)的关键性和影响而言,这一精度仍显不足。那些导致结合能力下降超过50%的PTMs会对实现预期疗效构成重大风险,因此必须严格控制其含量以确保产品质量。50%的解离常数($K_D$)损失对应于$+0.5$ kcal/mol的$\Delta\Delta G$变化,这意味着计算预测的精度必须达到$\pm0.5$ kcal/mol的阈值,才能在临床阶段具有实际应用价值。在本文中,我们使用常规分子动力学热力学积分(CMD-TI)方法生成$\Delta\Delta G$预测值,并开发了一种结合随机森林(RF)模型和末端态高斯加速分子动力学(GaMD)的误差分析方法。该方法仅需cMD-TI和末端态GaMD数据,即可无偏见地洞察关键自由度(DOF)的采样不足问题。我们发现,大体积侧链的采样不足和关键原子间相互作用的破坏是主要的误差来源,通过我们基于GaMD的误差校正,在误差最大的案例中,预测精度提升超过了1 kcal/mol。当应用于一个包含13个突变的测试集时,基于GaMD的误差校正将均方根误差(RMSE)从$1.06 \pm 0.22$ kcal/mol降低至$0.70 \pm 0.18$ kcal/mol。这项工作不仅开创了利用炼金术自由能预测来评估PTM对生物活性影响的应用,也深入探究了限制其在临床开发中实际应用的关键误差来源。 一句话:跑一段GaMD来识别关键DOF,进而指导TI的采样能减小误差。 背景 治疗性抗体是现代生物医药的基石,其通过与特定抗原的高亲和力结合来发挥治疗作用。在抗体药物的规模化生产过程中,蛋白质不可避免地会发生各种化学修饰,即翻译后修饰(PTMs),如色氨酸氧化、天冬氨酸异构化等。这些PTMs如果发生在抗体-抗原结合界面附近,可能会显著改变结合亲和力,从而影响药物的疗效、药代动力学甚至安全性。因此,准确评估PTMs的影响,并将其作为关键质量属性(CQA)进行严格控制,是生物制药开发中的核心环节。 传统上,评估PTM影响主要依赖实验方法,如富集含有特定PTM的抗体亚型,再通过SPR等技术测定其结合活性。然而,这一过程不仅耗时耗力,而且当多种PTMs同时出现时,几乎无法剥离出单一修饰的影响。相比之下,计算模拟方法,特别是炼金术自由能计算,为评估这些点突变或化学修饰对结合自由能的影响($\Delta\Delta G$)提供了一个高效、精准的理论框架。 然而,尽管炼金术自由能计算(如热力学积分TI或自由能微扰FEP)是当前预测相对结合自由能(RBFE)的“金标准”,但其精度仍然存在瓶颈。目前,对于蛋白质-蛋白质相互作用体系,该方法的最佳精度约为$\pm1$ kcal/mol。这一精度水平足以用于抗体亲和力改造的初步筛选,但对于临床阶段的CQA评估,则显得力不从心。一个对产品质量构成严重风险的PTM,其bioactivity影响阈值通常设定为50%,这在热力学上相当于仅仅$+0.5$ kcal/mol的$\Delta\Delta G$变化。因此,计算方法必须达到远超当前水平的$\pm0.5$ kcal/mol精度,才能为临床决策提供可靠依据。这一巨大的“精度鸿沟”是当前领域面临的核心挑战,其背后的误差来源——无论是力场不准、构象采样不足还是计算方案本身的缺陷——亟待被系统性地揭示和解决。 50%解离常数损失意味着什么? 在临床上,如果一个PTM导致抗体的生物活性(通常与结合亲和力相关)损失超过50%,则被认为具有高风险。在热力学层面,这意味着结合变得更弱,解离常数$K_D$增大。具体来说,“50%的活性损失”通常指突变体的$K_D$值变为野生型的两倍,即$K_{D,mutant} / K_{D,wildtype} = 2$。根据公式 \(\Delta\Delta G = RT \ln(K_{D,mutant} / K_{D,wildtype})\) 在室温下(约298K),这对应于$\Delta\Delta G \approx +0.41$ kcal/mol的变化。为了能够可靠地识别这一变化,计算方法的精度必须显著优于这个值,因此作者提出了$\pm0.5$ kcal/mol的目标。 关键科学问题 本文旨在解决的核心科学问题是:如何系统性地识别并校正炼金术自由能计算中的微观分子层面采样误差,从而将其预测精度提升至临床应用所需的$\pm0.5$ kcal/mol阈值以下? 这不仅仅是一个提升数值精度的问题,更是要深入理解在非物理的炼金术路径中,哪些关键的分子动态行为被错误地表征,并开发出能够“对症下药”的诊断和修正策略。 创新点 创新的误差诊断框架:首次提出了一种无偏见的(untargeted)误差诊断新方法,该方法巧妙地将机器学习(随机森林)与增强采样(GaMD)相结合,能够从复杂的动力学数据中自动识别出导致计算误差的关键分子自由度(DOF)。 揭示核心误差来源:通过该框架,系统性地 pinpoint 了炼金术计算中两个主要的误差来源:一是大体积氨基酸侧链(如Trp)的旋转异构态采样不足;二是在炼金术中间态,由于混合势场的人为效应导致的关键盐桥等原子间相互作用的破坏。 精准的误差校正策略:针对上述误差来源,开发了相应的校正方法(如基于GaMD构象分布对TI数据进行过滤或重加权,以及使用距离限制来强制维持关键相互作用),在误差最大的案例中实现了超过1 kcal/mol的精度提升。 方法和体系 作者采用了一套结合常规MD、增强采样MD和机器学习的综合性方法流程,详见图2。 1. 模拟体系与数据集准备 实验数据集:本文使用的基准数据集来源于已发表的文献,主要包括hu4D5-5、mab1和mab2三个抗体系统的一系列单点突变及其对应的实验测定结合能数据。hu4D5-5是人源化抗p185HER2抗体4D5的一个变体,与乳腺癌靶点Erbb2抗原结合。 结构准备:抗体-抗原复合物的初始结构来源于PDB数据库(如hu4D5-8的冷冻电镜结构,PDB ID: 6OGE)。hu4D5-5的结构是通过在hu4D5-8上引入两个点突变(VH-V102Y 和 VL-E55Y)构建的。为了节省计算资源,模拟中对抗原蛋白进行了截断,仅保留了靠近结合界面的135个残基。 MD模拟设置: 力场与溶剂:所有模拟均采用AMBER20软件包,力场为ff14SB,水模型为TIP3P。体系被溶于一个半径为10 Å的水盒子中,并加入0.15 M的NaCl以模拟生理盐浓度。 拓扑构建:使用AmberTools20中的tLEaP和parmed工具准备拓扑文件。对于非天然氨基酸(甲硫氨酸亚砜),使用Gaussian 09和antechamber进行力场参数化。 cMD-TI协议:每个突变计算包含5个重复。体系首先在$\lambda=0.5$下进行能量最小化和升温弛豫,然后进行双向串行平衡,最后在12个$\lambda$窗口下分别进行5 ns的production模拟。每个$\lambda$窗口用于分析的帧数(构象数)为 200帧 。 GaMD协议:为了获得更可靠的构象分布,对每个突变的端点态(野生型和突变型)进行了5次重复的、每次300 ns的GaMD增强采样模拟。 2. 随机森林(RF)关键自由度筛选 这是本文的核心创新,目的是从海量构象信息中找出导致误差的“罪魁祸首”。详见文末附录。 数据集的每一行代表TI模拟过程中的一个单一快照(即一个构象)。对于同一帧,计算机会记录其对应的能量导数值$dV/d\lambda$。 特征(Feature)提取:首先,通过GaMD轨迹确定体系的最低能构象簇。然后,在突变位点周围5 Å的球形区域内,定义一系列几何参数作为候选特征,主要包括侧链的二面角(rotamers)和原子间的距离(interatomic distances)。 目标变量(Target)定义:RF模型要预测的目标不是原始的能量导数$dV/d\lambda$,而是经过高斯求积权重$w_j$加权后的值,即$w_j \cdot dV/d\lambda$。这使得模型能更直接地关注对最终$\Delta G$积分贡献最大的项。 特征筛选与模型训练: 使用scikit-learn库进行建模。 首先剔除相关性过高(Pearson $r > 0.5$)的冗余特征。 然后使用递归特征消除(Recursive Feature Elimination)方法进一步筛选,保留最重要的75%特征。 最后,使用这些筛选后的特征训练一个随机森林回归模型,并通过贝叶斯超参数调优来优化模型性能。 关键自由度(DOF)识别:模型训练完成后,利用随机森林内置的“基于不纯度的平均特征重要性(mean impurity-based feature importance)”指标,量化每个DOF对预测$w_j \cdot dV/d\lambda$的贡献度。得分最高的DOF即被认为是影响能量计算的关键自由度。 3. 使用的软件工具总结 MD模拟: AMBER20, AmberTools20 (tLEaP, parmed) 增强采样: GaMD 量子化学计算: Gaussian 09 机器学习: scikit-learn 轨迹分析: CPPTRAJ, PyReweighting 分子可视化: VMD 研究内容与结果 初始TI预测的性能基准 作者首先在一个包含20个有定量实验数据的抗体突变数据集上,评估了他们标准cMD-TI流程的性能。 图1:经验ΔΔG与预测ΔΔG的对比图。该图展示了包含所有定量实验结果的案例中,初始TI预测值(纵轴)与实验测量值(横轴)的比较。理想情况下,所有数据点应落在对角虚线上。虽然整体趋势良好(斜率0.788),但均方根误差(RMSE)为0.94 kcal/mol,且许多数据点落在了$\pm1$ kcal/mol的误差区间(点线之间)之外。分析发现,涉及大体积侧链(如Phe, Tyr, Trp)或电荷变化的突变,误差往往更大。 创新的RF+GaMD联合误差诊断流程 为了剖析这些误差的根源,作者设计了一套创新的诊断流程。 图2:TI计算与误差模式分析方法的图形化示意图。该图展示了整个工作流程:(左上) 首先通过常规的TI计算获得初始的$\Delta\Delta G$;(中上) 在突变位点周围5Å的局部环境中测量各种DOF;(右上) 将这些DOF作为输入,加权的$dV/d\lambda$作为输出,训练一个随机森林模型,以识别出对能量影响最大的关键DOF;(中下) 利用GaMD增强采样的轨迹生成这些关键DOF的自由能分布图(PMF);(左下) 将常规TI模拟对关键DOF的采样情况与GaMD的PMF进行对比,找出采样不一致的地方,并据此进行校正。 通过该流程,作者识别出了导致TI计算不准确的关键DOF。 跑GaMD不需要事先知道关键DOF? 在这个工作流程中,跑GaMD时不需要事先知道哪个或哪些DOF是关键的。这正是该方法“无偏见”(untargeted)的核心优势所在。 GaMD的角色是作为一个独立的、更可靠的“黄金标准”来使用。它通过施加一个偏置势能,对体系的整个势能形貌进行增强采样,目的是尽可能地探索所有可能的构象,并生成一个接近真实平衡态的自由能分布图(PMF)。这个过程是全局性的,不针对任何特定的DOF。 关键DOF的识别是在之后发生的。流程是: 并行计算:独立地运行常规TI模拟和GaMD增强采样模拟。 事后诊断:利用随机森林模型,分析TI轨迹和能量数据,从事后诸葛亮的角度找出哪些DOF对能量计算影响最大。 交叉验证:将RF模型找出的关键DOF在TI模拟中的表现,与GaMD这个“黄金标准”进行对比,从而确认采样错误。 怎么根据PMF校正采样的? 详见附录。 graph TD A["发现TI采样与GaMD PMF不一致"]; A --> B{{"误差类型是什么?"}}; B -- "构象态采样比例错误<br/>(例如:大体积侧链)" --> C1; B -- "关键相互作用持续性破坏<br/>(例如:盐桥断裂)" --> D1; subgraph "方法二:施加限制并重算" direction LR D1["1.从GaMD PMF中<br/>确定关键相互作用的<br/>正常几何范围 (如距离<5Å)"] --> D2["2.根据该范围<br/>设置一个NMR式的距离限制"]; D2 --> D3["3.<b>完全重新进行TI模拟</b><br/>在所有λ窗口中施加该距离限制"]; D3 --> D4["4.新模拟的结果<br/>即为校正后的ΔΔG"]; end subgraph "方法一:过滤与重加权" direction LR C1["1.从GaMD PMF中<br/>识别有效的低能构象态 (A, B...)" ] --> C2["2.过滤TI轨迹<br/>只保留属于有效构象态的帧"]; C2 --> C3["3.将保留的帧分组<br/>并为每个构象态(A, B...)<br/>单独计算ΔG (ΔG_A, ΔG_B...)"]; C4["4.从GaMD PMF中<br/>获取各构象态的布居比例<br/>(Area_A, Area_B...)"]; C3 & C4 --> C5["5.线性组合得到校正结果<br/>ΔG_corr = Area_A·ΔG_A + Area_B·ΔG_B"]; end 表1:由随机森林模型识别出的误差最大案例中的前5个最重要自由度 rank hu4D5-5 VH-R50A (charging step) hu4D5-5 VH-W95A mab2 VL-Y→R (charging step) mab2 VH-T→Y hu4D5-5 VL-F53N 1 Ag-E71:VH-R50 salt bridge dist VH-W95 chi1 Ag-D161:VL-R49 salt bridge dist Ag-V117:VH-Y53 H-bond dist Ag-C117:VL-N53 H-bond dist 2 VH-R50 chi1 VH-W95 chi2 VL-R49:VL-S50 H-bond dist VL-Y53 chi1 VL-N53 chi1 3 VH-R94 chi4 VH-V48 chi1 VL-S53 chi1 VL-T53 chi1 Ag-M102 chi1 4 VH-F100 chi1 VL-T94:VH-R50 H-bond dist VL-S50 chi1 VL-T53:VL-N51 H-bond dist Ag-N53 chi2 5 Ag-E71 chi3 Ag-E71 chi3 Ag-R157 chi1 VL-Y53 chi2 Ag-N120 chi1 注:表格内容根据原文Table 1整理。加粗的特征是作者后续使用GaMD自由能图进行深入检查的特征。 案例分析:揭示三大核心误差来源 案例1:大体积侧链采样不足 (Bulky Side-Chain Undersampling) 在hu4D5-5 VH-W95A(色氨酸突变为丙氨酸)这个误差高达1.88 kcal/mol的案例中,RF模型指出,W95侧链的两个二面角(chi1/chi2)是影响能量计算的最关键DOF。 图3:(A, C) 完整的和 (B, D) 校正后的TI采样与VH-W95 chi1/chi2旋转角空间的GaMD自由能形貌图的比较,分别对应结合态(A, B)和非结合态(C, D)。图中,背景的彩色热图代表由GaMD增强采样得到的“真实”自由能地貌,其中颜色越深的区域能量越低,是侧链最应该停留的构象。而灰色的散点则代表在常规TI模拟中,侧链实际访问过的构象。 在(A)和(C)中可以看到,大量的TI采样点(灰色散点)散落在高能量区域,并未准确地集中在GaMD发现的两个主要低能区域(能量阱)。 更重要的是,TI模拟对这两个能量阱的采样比例(例如在结合态,TI采样比例为33.6% vs 66.4%)与GaMD计算的真实布居比例(GaMD: 24.5% vs 75.5%)存在显著偏差。 作者通过过滤掉无效的TI采样帧,并根据GaMD的比例对两个能量阱的贡献进行重新加权,最终将预测误差从1.88 kcal/mol降至0.44 kcal/mol。 案例2:关键盐桥相互作用的破坏 (Violation of Key Salt Bridge Interactions) 在hu4D5-5 VH-R50A和mab2 VL-Y→R这两个涉及电荷变化的突变案例中,RF模型发现,影响计算的最关键DOF是抗体与抗原之间的一个关键盐桥的距离。 图5:(A) hu4D5-5复合物中的Ag-E71:VH-R50A盐桥和(B) mab2复合物中的Ag-D161:VL-Y→R盐桥的可视化。图中展示了由RF模型识别出的关键盐桥。 图4:(A-C) hu4D5-5 VH-R50A和(D-F) mab2 VL-Y→R中关键盐桥距离的GaMD自由能形貌图(曲线)与TI采样(直方图)的对比。(A, D)为原始TI模拟,(B, E)为过滤后的TI数据,(C, F)为施加NMR距离限制后的TI模拟。 在(A)和(D)中,可以惊人地发现,在大部分TI模拟帧中(绿色直方图),该盐桥的距离都远远超过了5Å,说明这个关键的相互作用在计算过程中被人为地破坏了。 作者推测这是由于炼金术中间态的混合势场削弱了静电作用所致。 通过(B, E)过滤掉盐桥破坏的帧,或(C, F)在TI模拟中施加距离限制来强制维持盐桥,预测精度都得到了超过1 kcal/mol的显著提升。 小编补充:从图4来看,似乎过滤数据分布也差不多,但很可能普通TI散掉了就一直散掉了,采不了多少数据?还是约束着好。 案例3:关键氢键相互作用的破坏 (Violation of Key Hydrogen Bonds) 对于mab2 VH-T→Y和hu4D5-5 VL-F53N这两个案例,RF模型识别出的关键DOF是分子间的氢键距离。与前两种情况类似,TI模拟也未能准确捕捉这些氢键的正确构象。然而,对这类更动态、更复杂的相互作用进行校正要困难得多。例如,在mab2 VH-T→Y中,由于自由能形貌呈现双峰分布,简单的加权求和难以实现。在hu4D5-5 VL-F53N中,施加距离限制甚至导致了体系无法正确平衡。这表明,虽然该框架能有效识别问题,但对某些复杂情况的修复仍是未来的挑战。 总体校正效果 表2:对误差最大的几个预测进行GaMD校正的效果总结 | case | original $\Delta\Delta G$ (kcal/mol) | corrected $\Delta\Delta G$ (kcal/mol) | empirical $\Delta\Delta G$ (kcal/mol) | original error (kcal/mol) | corrected error (kcal/mol) | model R² | theorized source of error | | :— | :— | :— | :— | :— | :— | :— | :— | | hu4D5-5 W95A | $3.19 \pm 0.71$ | $4.63 \pm 0.47$ | 5.07 | 1.88 | 0.44 | 0.53 | bulky side-chain undersampling | | hu4D5-5 R50A | $2.98 \pm 1.02$ | $5.14 \pm 1.05$ | 4.58 | 1.60 | 0.56 | 0.73 | salt bridge violation | | mab2 VL-Y→R | $0.61 \pm 1.04$ | $-0.87 \pm 1.01$ | < -0.83 | > 1.43 | - | 0.48 | salt bridge violation | | mab2 VH-T→Y | $1.69 \pm 0.75$ | $0.61 \pm 0.73$ | 0 | 1.69 | 0.61 | 0.76 | hydrogen bond violation | | hu4D5-5 VL-F53N| $-0.56 \pm 0.57$ | - | 1.19 | 1.75 | - | 0.64 | hydrogen bond violation | 注:表格内容根据原文Table 2整理。不确定度为95%置信区间。original:普通TI;empirical:实验世界 最终,作者将此校正方法应用到包含13个突变的整个hu4D5-5数据集,进一步验证了其普适性。 表3:对hu4D5-5数据集($n=13$)的误差分析:原始方案、延长模拟方案与RF+GaMD校正方案的对比 | protocol | MAE | RMSE | | :— | :— | :— | | original protocol (5 ns per $\lambda$) | $0.82 \pm 0.18$ | $1.06 \pm 0.22$ | | extended protocol (25 ns per $\lambda$) | $0.71 \pm 0.18$ | $0.93 \pm 0.23$ | | RF + GaMD correction | $0.53 \pm 0.16$ | $0.70 \pm 0.18$ | 注:表格内容根据原文Table 3整理。MAE为平均绝对误差,RMSE为均方根误差。 结果表明,简单地将模拟时间延长5倍,对精度的提升有限,而RF+GaMD校正方法则取得了实质性的改进,使RMSE非常接近$\pm0.5$ kcal/mol的目标精度。 深入讨论 本文的讨论部分对研究的发现及其意义进行了深刻的阐述。 盐桥破坏是炼金术计算中的一个普遍且棘手的问题:作者强调,在炼金术中间态,混合势场会系统性地削弱静电相互作用,导致关键盐桥的“局部解离”。这是一个方法本身的缺陷,无法通过简单延长模拟时间来解决。作者将他们基于物理的距离限制校正方法与文献中其他经验性的校正方案进行对比,认为他们的方法虽然计算成本更高,但更为严谨和可靠,特别适用于对精度要求极高的场景。 机器学习赋能无偏见的误差诊断:本文最大的方法学创新在于利用RF模型实现了一种“无偏见”的误差溯源。在不具备任何先验知识的情况下,该模型能自动从纷繁的动力学数据中识别出对能量计算起决定性作用的少数几个DOF。这为解决自由能计算中的“未知之不知”问题提供了一个强大的工具。 对已知问题的再验证:RF模型能够自动识别出“大体积侧链采样不足”这一领域内公认的难题,这本身就强有力地验证了该诊断框架的有效性。作者指出,他们的框架可以作为更高级的增强采样方法(如ACES)的前导步骤,为其指明需要增强采样的关键DOF,从而提高效率。 对力场误差的评估:在经过一系列采样校正后,预测的RMSE降低到了0.70 kcal/mol。考虑到实验测量本身也存在约$\pm0.3$ kcal/mol的误差,这意味着由ff14SB力场本身带来的误差可能非常小(约0.2-0.4 kcal/mol)。这表明,在当前阶段,改善采样问题比优化力场参数对提升预测精度的贡献可能更大。 Q\&A Q1: 为什么简单地延长TI模拟时间通常无法修复这些预测误差? A1: 因为这些误差很多是系统性误差(systematic error),而非随机误差。例如,在电荷变化突变中,炼金术路径中间态的“混合势场”会人为地削弱静电相互作用。这导致关键的盐桥即使在理论上应该存在的情况下也容易断裂。无论模拟时间多长,只要这个势场本身存在缺陷,盐桥就可能一直处于被破坏的状态。这并非采样不足的问题,而是方法本身的“人造缺陷”(artifact)。 Q2: 随机森林模型(RF)在其中扮演了什么角色?为什么不直接分析所有可能的分子自由度(DOF)? A2: RF模型扮演了“筛子”或“侦探”的角色。在一个复杂的蛋白质体系中,分子自由度(如所有侧链的旋转角、所有原子间的距离)的数量是巨大的。绝大多数DOF的变化对我们关心的$\Delta\Delta G$计算影响甚微,它们是“噪音”。RF模型通过监督学习,能够从海量的DOF中,找出与能量导数$dV/d\lambda$相关性最强、即对最终结果影响最大的那几个“关键自由度”。这使得后续的分析可以集中火力解决主要矛盾,而不是在无关的噪音中大海捞针。 Q3: GaMD增强采样给出的自由能分布就一定是“正确”的吗?这个方法的核心假设是什么? A3: GaMD并不保证绝对“正确”,但它是一种增强采样方法,相比于几纳秒的常规MD(cMD),它能更快速、更广泛地探索分子的构象空间,因此其得到的自由能分布更有可能接近体系的真实平衡态分布。该方法的核心假设是:由长时间GaMD模拟得到的构象能量地貌,比短时间的常规TI模拟所采样的构象,能更准确地反映体系的真实热力学性质。当然,使用GaMD时,研究者也需要通过检查收敛性等方式来确认其结果的可靠性。 Q4: 论文中使用距离限制(restraint)来修复盐桥断裂问题,但施加限制本身不会引入新的能量项,从而影响自由能计算吗? A4: 问得非常好,这确实是一个严谨性问题。是的,施加限制会改变系统的哈密顿量,理论上需要计算并扣除这个限制所贡献的自由能。在一些体系中(如小分子-蛋白),有成熟的方法(如Boresch restraints)来解析地计算这一项。但在复杂的蛋白-蛋白界面,这个问题尚无标准解法。作者在文中也承认了这一点,他们认为,由盐桥断裂引入的巨大误差(>1 kcal/mol)远大于忽略限制自由能所带来的微小误差,因此在当前阶段,这是一个实用且有效的近似处理方法。 Q5: 这个RF+GaMD框架与其他改进炼金术计算的方法(如ACES)有何不同? A5: 它们是互补而非竞争的关系。像ACES(炼金术增强采样)这类方法,旨在通过在炼金术路径上对某些“慢”自由度进行增强采样来加速收敛。但一个前提是,你需要预先知道应该对哪些自由度进行增强采样。而本文提出的RF+GaMD框架的核心贡献之一,就是提供了一种无偏见的、自动化的方法来识别出这些需要被特别关注的关键自由度。因此,可以将该框架视为ACES等更高级采样方法的前置步骤:先用RF+GaMD做“侦查”,找出问题所在,再用ACES等方法进行“精确打击”。 关键结论与批判性总结 关键结论 本文提出并验证了一个结合随机森林(RF)和高斯加速分子动力学(GaMD)的创新框架,该框架能够以一种无偏见(untargeted)的方式,系统性地诊断和校正炼金术自由能计算中的采样误差。 研究发现,大体积侧链(如色氨酸)的旋转异构态采样不足和在炼金术中间态由于混合势场导致的关键盐桥人为断裂,是导致$\Delta\Delta G$预测不准确的两大主要来源。 通过应用基于GaMD的针对性校正策略(对不同构象态进行重加权或施加距离限制),在误差最大的案例中,预测精度提升超过1 kcal/mol。对于包含13个突变的hu4D5-5数据集,该方法将整体均方根误差(RMSE)从$1.06 \pm 0.22$ kcal/mol降至$0.70 \pm 0.18$ kcal/mol,非常接近临床应用所需的0.5 kcal/mol精度目标。 研究明确表明,简单地将模拟时间延长5倍(从每个$\lambda$窗口5 ns增加到25 ns)对精度的提升非常有限(RMSE仅从1.06 kcal/mol降至0.93 kcal/mol),这证实了误差主要来源于系统性缺陷而非随机采样不足,因此必须采用更具针对性的校正方法。 批判性总结 潜在影响:该工作为突破炼金术自由能计算的精度瓶颈提供了一个强大、系统且思路清晰的框架。其“无偏见的误差识别能力”尤为重要,能够在使用常规TI计算的基础上,为更高级的增强采样方法(如ACES)指明需要关注的关键自由度。这有望将高精度自由能计算从少数专家的“炼丹术”推广为更可靠、更自动化的标准流程,从而加速其在治疗性抗体药物临床前CQA评估等要求苛刻的工业领域的应用。 存在的局限性: 尽管对盐桥断裂的校正效果显著,但对于更瞬态、更复杂的相互作用(如氢键网络)的校正仍具挑战性,因为这些相互作用的自由能形貌可能呈现复杂的多峰分布,难以直接修复。 此外,施加距离限制所贡献的自由能未能被严格计算,这在理论上仍是一个待解决的问题。 同时,该框架无疑增加了额外的计算成本,因为它需要在标准TI计算之外进行长时间的GaMD模拟和机器学习模型训练。 未来研究方向:未来的工作可以致力于将该框架推广到更多的PTMs类型(如天冬酰胺脱氨等)和更复杂的分子体系中。同时,开发更普适、更自动化的方法来校正氢键等瞬态相互作用,以及探索如何在蛋白-蛋白体系中严格处理限制自由能的贡献,将是该领域的重要发展方向。 附录1:随机森林(RF)关键自由度筛选 高斯求积权重$w_j$的来源:高斯求积是一种经典的数值积分方法,其目的是用一个离散的加权和来高度精确地近似一个连续积分。对于热力学积分中自由能的计算,其基本形式为: \(\Delta G = \int_{0}^{1} \left\langle \frac{\partial V(\lambda)}{\partial \lambda} \right\rangle_{\lambda} d\lambda\) 为了在计算机中求解,该积分被离散化。在使用N点高斯求积法时,这个积分被近似为在N个特定的$\lambda$坐标点($\lambda_j$)上计算值的加权和: \(\Delta G \approx \sum_{j=1}^{N} w_j \cdot \left\langle \frac{\partial V(\lambda)}{\partial \lambda} \right\rangle_{\lambda_j}\) 在这项工作中,作者使用了12点高斯求积方案(即$N=12$)。这些$\lambda_j$坐标点和它们对应的权重$w_j$是根据高斯求积的数学理论预先确定的,旨在最大化数值积分的精度。该论文将这些权重作为标准数值方法的组成部分直接使用,并未详细阐述其数学推导过程。 递归特征消除(Recursive Feature Elimination, RFE)的具体操作:该方法通过一个迭代过程来系统性地减少特征数量,以找到性能最佳的特征子集。其操作流程如下: 初始训练:使用全部$p$个候选特征$S_0 = {f_1, f_2, \dots, f_p}$训练一个基础模型(本文中是一个最大深度为5的决策树回归器)。 重要性排序:根据训练好的模型,计算并排序所有特征的重要性。 特征剔除:移除最不重要的预设百分比的特征。根据论文描述,每次迭代剔除5%的特征。这个过程可以表示为: \(S_{k+1} = S_k \setminus R_k\) 其中,$S_k$是第$k$次迭代的特征集,$R_k$是该轮中被评定为最不重要的5%特征的集合。 循环迭代:重复步骤1至3,直到特征数量达到预设的目标。在本文中,该过程持续进行,直到保留原始特征集中最重要的75%为止。 贝叶斯超参数调优的具体操作:这是一种用于自动寻找机器学习模型最佳超参数组合的优化算法。其目标是找到一组能使模型性能最大化的超参数$\theta^*$。 定义目标函数:首先定义一个评估模型性能的目标函数$J(\theta)$。在本文中,目标函数被设定为5折交叉验证后的平均$R^2$值,这代表了模型的泛化能力。 构建代理模型:贝叶斯优化使用一个概率模型(通常是高斯过程)来拟合已观察到的超参数点$(\theta, J(\theta))$与目标函数之间的关系。 优化搜索:整个搜索过程共进行200次迭代。前50次通过拉丁超立方采样进行随机探索,以获得对超参数空间的初步了解。随后的150次迭代则由贝叶斯模型指导,通过一个“采集函数”来智能地选择下一个最有希望提升性能的超参数组合进行尝试,从而高效地找到全局最优解。整个优化问题可表示为: \(\theta^* = \arg\max_{\theta \in \Theta} J(\theta)\) 其中$\Theta$是所有可能的超参数组合空间。 基于不纯度的平均特征重要性的具体计算:这是决策树和随机森林模型中常用的一种评估特征重要性的方法。对于回归任务,其核心是计算每个特征对“方差减少”的贡献。 节点方差:对于树中的任意一个节点$m$,其包含的数据点的方差定义为: \(\text{Var}(m) = \frac{1}{N_m} \sum_{i \in \text{node } m} (y_i - \bar{y}_m)^2\) 其中$N_m$是节点$m$中的样本数,$y_i$是样本值,$\bar{y}_m$是节点内所有样本的平均值。 分裂带来的方差减少:如果一个节点$m$使用特征$f$进行分裂,产生左右两个子节点,那么这次分裂带来的方差减少量(即该节点的重要性)为: \(\Delta I(m, f) = \text{Var}(m) - \left( \frac{N_{\text{left}}}{N_m} \text{Var}(\text{left}) + \frac{N_{\text{right}}}{N_m} \text{Var}(\text{right}) \right)\) 特征在单棵树中的重要性:一个特征$f$在单棵决策树$T$中的总重要性,是它在所有用它进行分裂的节点上带来的方差减少量的总和。 特征在森林中的重要性:在随机森林中,一个特征的最终重要性是它在所有树中的重要性的平均值。为了结果的稳健性,作者通过5次重复的5折交叉验证共训练了25个模型,最终的特征重要性是这25个模型计算出的重要性分数的平均值。 附录2:校正采样的细节 怎么根据PMF校正采样的? 根据识别出的不同误差来源,作者采用了两种不同的、具有针对性的校正策略: 1. 针对构象态采样比例错误的校正(过滤与重加权) 这种方法主要用于处理像大体积侧链采样不足(如W95A案例)这样的问题,即TI模拟虽然找到了正确的低能构象态,但对它们的采样比例是错误的。 第一步:识别构象态。首先,根据GaMD生成的PMF,确定体系存在几个主要的低能构象微观态(microstates)以及它们各自的能量盆。例如,在W95A案例中,GaMD发现W95侧链主要存在两个稳定的旋转异构态。 第二步:过滤TI数据。检查常规TI模拟的每一帧,将所有不属于GaMD识别出的任何一个低能构象态的帧全部过滤掉、丢弃。这些被认为是物理意义不大或采样错误的“噪音”数据。 第三步:分别计算各态的自由能。对于过滤后剩下的数据,将其按照所属的构象态进行分组。然后,为每一个构象态单独计算其炼金术自由能变化$\Delta G$。例如,如果存在两个微观态,就会得到$\Delta G_1和\Delta G_2$。 第四步:根据GaMD比例进行重加权。最后,根据GaMD的势能面(Potential of Mean Force, PMF)计算出各个微观态的真实热力学布居比例(即自由能盆的面积或体积占比,例如$\text{Area}_1$和$\text{Area}_2$)。用这个比例作为权重,对上一步分别计算出的自由能进行线性组合,得到最终校正后的总自由能: \(\Delta G_{\text{corrected}} = (\text{Area}_1 \times \Delta G_1) + (\text{Area}_2 \times \Delta G_2) + \dots\) 这个过程本质上是用热力学积分(Thermodynamic Integration, TI)的局部能量信息,结合增强采样分子动力学(GaMD)的全局构象分布信息,来重构一个更准确的自由能值。 2. 针对关键相互作用破坏的校正(施加距离限制) 这种方法主要用于处理像关键盐桥断裂(如R50A案例)这样的问题,即TI模拟系统性地无法采样到某个本应存在的关键相互作用。 第一步:识别相互作用。通过GaMD的PMF确认某个关键相互作用(如盐桥)在平衡态下是稳定存在的,并确定其正常的距离范围(例如< 5 Å)。 第二步:施加距离限制并重新模拟。作者发现,简单地过滤数据会导致样本量急剧下降。因此,他们采用了一种更稳健的方法:重新进行一次TI模拟。在这次新的模拟中,他们施加了一个NMR式的距离限制(distance restraint),强制性地将形成盐桥的两个原子基团的距离约束在GaMD确定的合理范围内。 第三步:使用限制性模拟的结果。这个限制有效地阻止了盐桥在炼金术中间态的人为断裂,确保了这一关键相互作用在整个计算过程中的完整性。最终的$\Delta\Delta G$直接采用这次限制性TI模拟的结果。虽然从理论上讲,施加限制本身会引入额外的自由能项,但作者认为,由盐桥破坏引入的巨大误差(>1 kcal/mol)远大于忽略限制自由能所带来的微小误差,因此这是一个在实践中非常有效的校正策略。 如何从GaMD PMF中确定关键相互作用的正常几何范围? 从GaMD(高斯加速分子动力学)生成的PMF(Potential of Mean Force,平均力势)图中确定相互作用的正常几何范围,主要依赖于对自由能形貌的解读。这个过程可以分为两步: 第一步:生成并观察自由能分布图 首先,需要针对感兴趣的几何参数(例如形成盐桥的两个原子团之间的距离)运行GaMD模拟并计算其一维PMF。这个PMF图的纵轴是自由能,横轴是距离。一个热力学稳定的相互作用会在图中表现为一个 清晰、深刻的能量阱(energy well)。在论文的图4中,这个能量阱体现为相对丰度(Relative Abundance)图上的一个尖锐、高耸的山峰 。 第二步:根据能量阱定义范围 “正常几何范围”就是这个能量阱所覆盖的距离区间。具体操作是: 定位能量最低点:找到能量阱最深处(即概率峰值最高处)对应的距离值。这代表了该相互作用最可能存在的距离。 确定边界:从能量最低点向两侧延伸,直到自由能开始急剧上升的位置为止。这个能量急剧上升的“井壁”就定义了稳定相互作用的边界。 应用临界值:在实践中,可以根据物理化学常识设置一个合理的临界值(cutoff)。例如,对于盐桥,通常认为带电原子团之间的距离在4-5 Å以内才算形成有效的相互作用。在论文的图4中,GaMD的PMF清晰地显示能量阱完全位于5 Å以内,因此作者采用“距离 < 5 Å”作为判断盐桥是否完整的标准是合理且有数据支持的 2。 附录3:SI的信息 1. 完整的实验基准数据集 (Table S1) SI提供了用于验证计算结果的全部23个突变的完整实验数据。这包括每个突变的来源文献、实验方法(如SPR、滴定量热法)、原始测量值(如Kd值),以及最终转换为$\Delta\Delta G$ (kcal/mol)的结果。 文件还澄清了数据处理的细节,例如在hu4D5-5数据存在多个报告值时,优先选择SPR数据,但对于解离速率过快的突变(如W95A),则根据与原作者的沟通改用等温滴定微量热法(ITC)的数据。 2. 完整的初始TI计算结果 (Table S3) 与实验数据相对应,SI列出了所有23个突变的初始TI计算预测值($\Delta\Delta G$)及其不确定度。 该表格还对每个突变进行了分类,明确标注了其是否涉及大体积侧链(bulky side chain)、电荷变化(charge-changing)或两者兼有。这使得读者可以直接比较不同类型突变的预测难度和误差大小。 3. 误差来源的排他性证据 (Table S2) 在分析涉及电荷变化的突变时,炼金术转化通常分为范德华(vdW)和静电(charging)两个步骤。主文假设误差主要来源于静电步骤。 Table S2提供了关键的“排除法”证据:当作者将RF+GaMD校正方法仅应用于误差最大的两个电荷变化突变(R50A和Y→R)的范德华步骤时,预测精度的改善微乎其微(trivial change)。这有力地证明了误差几乎完全集中在静电(charging)步骤,与主文中观察到的盐桥破坏现象高度吻合。 4. 随机森林(RF)模型的详细参数与定义 (Table S4, S4.2) 为了提高研究的可复现性,SI提供了RF分析的更多细节。Table S4列出了主文中提到的前5个最重要自由度(DOF)的定量重要性分数。 S4.2节提供了每个关键DOF的精确原子定义。例如,它明确定义了“Ag-E71:VH-R50盐桥距离”是“抗原E71残基的CD原子与抗体VH链R50残基的CZ原子之间的距离”。这些精确的定义对于其他研究者复现或借鉴该方法至关重要。 5. 方法的稳健性验证 (Table S5, Figures S1-S4) 为了排除误差是由于特定的“两步法”电荷转化方案引起的可能性,作者使用了一种更新的“一步法”转化方案(使用smoothstep软核势)重新计算了两个关键的电荷变化突变。 结果显示,即使在“一步法”中,同样的盐桥破坏问题依然存在。并且,施加距离限制同样能有效地校正误差。这表明盐桥破坏是一个与炼金术混合势场相关的普遍性问题,而非特定计算方案的产物。 6. 发现的普适性——对外部数据的验证 (Figures S5-S11) 为了验证其发现的普适性,作者将其分析思路应用到了一个完全不同的、已发表的barstar-barnase蛋白复合物体系中,该体系的某些突变在原研究中也存在无法解释的巨大误差。 作者对这些出错的突变进行了GaMD模拟,结果发现,在每一个出错的案例中,都存在一个先前未被讨论的关键盐桥或氢键相互作用。这强烈暗示,这些外部数据集中的误差很可能也是由同样的关键相互作用破坏机制导致的,从而极大地增强了本文结论的普适性。 7. 对比“增加算力”与“智能校正”的效果 (Table S6, S7) SI提供了最有说服力的数据之一:简单粗暴地增加算力是否能解决问题?作者将所有模拟的采样时间增加了5倍(从每个λ窗口5 ns延长到25 ns)。 结果显示,5倍的算力投入对精度的提升非常有限(RMSE仅从1.06轻微降至0.93 kcal/mol),甚至在某些情况下预测结果反而变得更差。 相比之下,应用RF+GaMD智能校正方法的RMSE则显著降低至0.70 kcal/mol。这组对比有力地证明了文中所述的误差是系统性误差,无法通过“大力出奇迹”来解决,必须采用本文提出的这种更智能的诊断和校正策略。
Molecular Dynamics
· 2025-08-22
DynamiSpectra: Automated Multi-Replica Molecular Dynamics Simulation Data Analysis Python Package and Web Platform
DynamiSpectra: 自动化多副本分子动力学模拟数据分析的Python包与Web平台 本文信息 标题: DynamiSpectra: 计算生物学中分子动力学模拟数据分析的Python包与Web平台 作者: Iverson Conrado Bezerra, Jéssika de Oliveira Viana, Karen Cacilda Weber, and Priscila Gubert* 单位: Keizo Asami Institute, iLIKA, Federal University of Pernambuco, Brazil 引用格式: Bezerra, I. C., Viana, J. de O., Weber, K. C., & Gubert, P. (2025). DynamiSpectra: A Python Software Package and Web Platform for Molecular Dynamics Data Analysis in Computational Biology. Journal of Chemical Information and Modeling. https://doi.org/10.1021/acs.jcim.5c01270 摘要 分子动力学(MD)模拟会产生海量数据集,这亟需可靠且可复现的分析工具。在本研究中,我们推出了DynamiSpectra,一个基于Python的软件包和网络平台,旨在自动化MD轨迹的描述性统计分析(均值和标准差)与可视化。DynamiSpectra能够流式处理GROMACS生成的文件,支持对多个模拟副本进行比较分析,且无需处理拓扑文件或具备编程专业知识。该软件包执行关键的结构和动态分析,包括RMSD、RMSF、回转半径、SASA、氢键、盐桥、二级结构概率与分数、主成分分析以及配体占据图,并能生成集成了描述性统计分析的高质量图表。此外,它还支持蛋白质-配体接触、最小距离、疏水接触、残基间距离矩阵、phi/psi角度、旋转异构体(x1和x2)、配体二面角以及系统压力、温度和密度等分析。与广泛使用的MD分析软件包的对比测试表明,DynamiSpectra生成的结果与这些工具一致。DynamiSpectra的突出之处在于其能够自动化分析多个副本并计算均值和标准差,这是其他软件包通常缺乏自动化功能的方面。我们通过一个涉及不同温度下β-淀粉样肽模拟的用例展示了该平台的功能。此外,DynamiSpectra的网络界面使用户无需本地安装即可上传数据、生成交互式图表并探索结果,这极大地促进了MD分析的可及性和可复现性,是该工具的另一个重要特色。 背景 分子动力学(MD)模拟是现代计算生物学中一种极其强大的技术,它允许科学家在原子层面上观察和预测蛋白质、核酸等生物大分子的动态行为。这项技术在基础科研和工业应用中都扮演着至关重要的角色,例如揭示生物分子结构机制、研究蛋白质折叠、以及加速新药的发现进程。随着计算能力的飞速发展,MD模拟的应用越来越广泛,其模拟的时间尺度和系统规模也日益增大,从而产生了前所未有的海量数据。 然而,数据的“爆炸式”增长也带来了严峻的挑战。从这些复杂的、高维度的数据轨迹中提取有意义的生物学见解,是一项艰巨的任务。尽管像GROMACS、AMBER、CHARMM等主流MD软件本身提供了一些分析工具,但它们往往需要用户具备深入的软件内部知识或复杂的脚本编写能力,这为许多湿实验背景的研究者设置了较高的技术门槛。更重要的是,科学研究的核心在于可复现性。在MD模拟中,由于系统的随机性和复杂性,单次模拟的结果可能存在偶然性。因此,学界普遍推荐通过运行多个独立的“副本”(replicas)来增强结果的统计可靠性和可信度。 这一最佳实践引出了当前MD数据分析领域的一个核心“痛点”(gap):缺乏能够轻松、自动化地整合并分析多个模拟副本的工具。研究人员常常需要手动整理来自不同副本的数据,分别计算均值、标准差等统计量,然后再进行可视化,整个过程繁琐、耗时且容易出错。同时,对于不擅长编程的研究者而言,进行复杂的数据分析和定制化绘图更是难上加-难。因此,开发一款既能自动化处理多副本数据,又具备用户友好界面的分析工具,对于提高MD模拟研究的效率、可靠性和可及性至关重要。 关键科学问题 本文旨在解决一个核心的技术挑战,而非传统的科学假说:如何简化和自动化对来自多个分子动力学模拟副本的大规模数据集的统计分析流程,使其不仅可靠、可复现,而且对于没有深厚编程背景的研究人员也易于上手? 创新点 DynamiSpectra通过以下几个关键创新点,有效地解决了上述问题: 全自动化的多副本统计分析:该工具的核心亮点在于能够自动处理多个模拟副本的数据,并直接计算和可视化均值与标准差,极大地简化了评估模拟结果收敛性和可靠性的过程。 “代码+网页”双平台设计:DynamiSpectra同时提供了一个功能强大的Python软件包和一个无需安装、交互友好的Web平台。前者为需要高度定制化和流程整合的计算专家提供了灵活性,后者则为非编程背景的研究者提供了“零门槛”的解决方案。 简化的工作流程:该工具直接使用GROMACS等软件生成的后处理文件(如.xvg, .dat, .xpm),用户无需再处理复杂的原始轨迹或拓扑文件,从而降低了操作的复杂性并减少了潜在的错误。 全面且高质量的可视化:DynamiSpectra内置了MD分析中最常用的一系列指标,如RMSD、RMSF、SASA、PCA等,并能生成出版级质量的图表,且图表样式可通过简单的配置进行高度定制。 软件和数据可用性 Python包 (PyPI): pip install DynamiSpectra GitHub 源代码: https://github.com/Conradoou/DynamiSpectra Web Server 在线平台: https://dynamispectra.onrender.com 官方文档: https://conradoou.github.io/DynamiSpectra/ 示例数据: https://github.com/Conradoou/DynamiSpectra/tree/main/data 研究内容 案例研究:Aβ肽-配体复合物模拟 为了全面展示软件功能,作者构建了一个与阿尔茨海默病相关的β-淀粉样肽(Aβ)与一种喹啉衍生物的复合物体系。 1. 建模细节 模拟使用了GROMACS 2023.5软件包和GROMOS 54A7力场。体系被放置在一个$7.28 \times 7.28 \times 5.14$ nm的十二面体盒子中,并使用SPC模型的水分子进行溶剂化。通过添加Na⁺离子来中和系统电荷。在恒定压力(1 bar, Parrinello-Rahman barostat)和温度(V-rescale thermostat)下,系统首先进行了100 ps的平衡,随后进行了50 ns的生产性模拟。需要指出的是,原文并未提供该复合物初始结构的PDB ID,也未详细说明喹啉衍生物在Aβ肽上的具体结合口袋或初始对接方式。该体系主要作为生成测试数据的案例。 2. Web平台开发 DynamiSpectra的Web平台是使用Python语言的Flask框架开发的。Flask是一个轻量级的Web应用框架,允许开发者快速构建Web服务。开发完成后,该Web应用被部署在Onrender.com上。Onrender是一个云平台即服务(PaaS),为开发者提供托管和运行Web应用的环境,从而让全球用户都可以通过浏览器直接访问,无需本地安装。 DynamiSpectra 核心功能与分析实例 该工具的核心工作流程是从GROMACS生成的后处理文件开始,通过Python包或Web平台进行自动化分析,最终输出包含描述性统计信息的高质量图表。 graph TD A("蛋白质/配体系统") --> B{{"MD 模拟<br/>(GROMACS)"}}; B --> C["生成后处理文件<br/>(.xvg, .dat, .xpm)"]; subgraph "DynamiSpectra 核心分析流程" direction LR C --> D{{"Python 包<br/>(pip install DynamiSpectra)"}}; C --> E{{"Web 平台<br/>(https://dynamispectra.onrender.com)"}}; subgraph "分析模块" direction LR D --> F["1.时间依赖性分析<br/>(RMSD, Rg, SASA...)"]; E --> F; F --> G["2.分布分析<br/>(KDE, 箱线图)"]; G --> H["3.结构与构象分析<br/>(二级结构, PCA, 距离矩阵...)"]; H --> I["4.配体相互作用分析<br/>(接触, 占有率图...)"]; end I --> J["自动化多副本统计<br/>(计算均值与标准差)"]; J --> K["生成高质量、可定制图表"]; end K --> L["数据可视化与<br/>描述性统计分析结果"]; 1. 时间依赖性与分布分析 这是评估体系稳定性和构象采样的基础。作者以溶剂可及表面积(SASA)为例,展示了其统一的作图框架。 图1:肽SASA值随MD模拟时间的变化。图A展示了SASA随时间的变化,三条不同颜色的实线代表了三次独立模拟(300K、310K、318K)的均值,周围的半透明色带则是对应的标准差。图B是SASA值的核密度估计(KDE)图,它描绘了SASA值在整个模拟过程中的概率分布,峰值位置对应最常出现的SASA值。 类似地,该工具也能自动生成RMSD(均方根偏差)、Rg(回转半径)、氢键和盐桥数量等关键指标的时间序列图,并计算其均值和标准差,全面评估系统的稳定性和结构紧凑性。交叉验证结果表明,DynamiSpectra计算的RMSD与MDPlot和xmgrace等成熟工具的结果完全一致,证明了其可靠性。 2. 二级结构分析 蛋白质的二级结构是其功能的基础。DynamiSpectra提供了两种互补的可视化方法来分析二级结构随时间的变化。 图2:MD模拟过程中肽的二级结构分析。图A使用箱线图展示了不同二级结构类型(如α-螺旋、β-折叠等)在整个模拟过程中所占比例的概率分布,用于比较不同模拟条件下的整体差异。图B则以线图的形式展示了各种二级结构组分随模拟帧数(时间)的动态演变,用于观察详细的结构转变过程。 3. 高级结构与构象分析 DynamiSpectra还集成了一系列高级分析模块,以提供更深层次的结构信息。 图3:MD模拟中肽-配体系统的结构与构象分析。这张图集成了多种高级分析结果:(A) 主成分分析 (PCA),用于识别主要的构象状态及其转变路径;(B) 配体占据图,展示了配体在模拟盒子中的空间分布密度;(C) 配体二面角分布,揭示了配体的构象偏好;(D) 残基间距离矩阵,用于识别紧凑的结构域或稳定的接触;(E) 拉马钱德兰图,评估蛋白质骨架构象的合理性;以及(F, G, H) 侧链旋转异构体分析,详细刻画了特定残基侧链的构象分布。 4. 系统热力学性质监控 确保模拟体系的稳定是MD分析的先决条件。DynamiSpectra可以方便地监控系统的温度、压力和密度等热力学参数随时间的变化,以判断模拟是否充分平衡。 图4:系统在MD模拟过程中的温度曲线。图中清晰地显示了三次模拟的温度分别稳定在300K、310K和318K附近,表明温度控制算法工作正常,模拟过程稳定可靠。 Q\&A Q1: DynamiSpectra目前主要针对GROMACS的输出文件,这是否会限制使用其他MD软件(如AMBER, NAMD)的研究人员? A1: 是的,这是一个当前的局限性。论文作者明确指出,由于文件解析器是为GROMACS的特定格式设计的,因此不能保证与其他软件的兼容性。不过,他们也提到,像AMBER套件中的CPPTRAJ工具可以生成格式类似的.dat文件,初步测试表明DynamiSpectra或许能够处理。更重要的是,作者计划在未来开发一个更灵活的数据处理层,以支持由MDAnalysis和MDTraj等通用库生成的通用时间序列数据,从而极大地扩展其适用性。 Q2: 为什么论文如此强调对“多个副本”进行均值和标准差的自动化计算?这个功能为什么如此重要? A2: 这是因为MD模拟本质上是一种随机过程,单次长时间的模拟可能会陷入某个局部的能量陷阱,无法充分探索分子的所有可能构象,导致结果出现偏差。通过运行多个从不同初始速度开始的独立副本,可以更全面地对构象空间进行抽样,从而得到更可靠、更接近真实情况的统计结果。计算均值可以得到系统的平均行为,而标准差则量化了结果的变异性和不确定性,这两者对于得出稳健的科学结论至关重要。将这个繁琐的过程自动化,不仅节省了研究者大量的时间和精力,也避免了手动处理数据时可能引入的人为错误。 Q3: 与本地安装的Python包相比,使用Web界面的优缺点分别是什么? A3: Web界面的最大优点是可及性和易用性。它无需任何本地安装和编程知识,研究者只需上传数据文件即可获得交互式的分析图表,非常适合快速查看结果、教学演示或是不具备计算背景的用户。缺点可能在于灵活性和性能。对于超大规模的数据集,上传和在线处理可能会受到网络速度和服务器性能的限制。而本地的Python包则提供了无与伦比的灵活性,用户可以深入代码进行高度定制化的修改(例如通过配置字典调整图表细节),将其集成到自动化的分析流程中,并且能够处理任意大小的数据。 Q4: 在分析拉马钱德兰图(phi/psi角)和侧链旋转异构体(χ1/χ2角)时,论文提到了两种不同的多副本数据处理策略:“拼接”(concatenation)和“循环平均”(circular mean)。为什么要这样做? A4: 这体现了针对不同数据类型选择恰当统计方法的严谨性。对于phi/psi角,作者采用“拼接”策略,即将所有副本的轨迹数据合并在一起,然后绘制一个总的2D KDE图。这样做是为了获得一个更完整、统计上更具代表性的构象空间分布图,因为它汇集了所有模拟探索到的区域。而对于χ1/χ2等二面角,作者计算了“循环平均值”。这是因为角度是周期性数据(例如359°和1°其实只差2°),直接进行算术平均会得到错误的结果。循环平均是一种专门处理周期性数据的统计方法,能够正确地计算出角度的中心趋势。 Q5: DynamiSpectra与MDplot、mdciao等其他现有分析工具有何不同? A5: DynamiSpectra的定位非常清晰。与MDplot相比,两者都能处理多副本数据并进行统计分析,但MDplot是基于R语言环境,而DynamiSpecta是基于Python,为不同技术栈的用户提供了选择。与xmgrace这类传统的绘图工具相比,DynamiSpectra的自动化程度要高得多,它整合了从数据处理、统计计算到可视化的完整流程。与mdciao、MD-TASK等工具最大的不同在于,后者通常直接处理原始的轨迹和拓扑文件(如.xtc, .pdb),而DynamiSpectra专注于GROMACS的后处理文本文件,这为偏好使用这类总结性数据进行快速分析的用户提供了一个更轻量、更便捷的工作流。 关键结论与批判性总结 核心结论: 发布了一款新工具:DynamiSpectra是一个开源的Python软件包和Web平台,专为MD模拟数据的描述性统计分析和可视化而设计。 核心优势是多副本分析:其最突出的特点是能够自动化地整合和分析来自多个独立模拟副本的数据,并计算均值和标准差,从而极大地促进了研究的可复现性。 功能全面且易于使用:该工具支持对GROMACS输出文件进行广泛的结构和动态分析,其Web版本甚至无需用户具备任何编程经验。 结果可靠:通过与MDplot和xmgrace等成熟工具的交叉验证,证明了DynamiSpectra分析结果的准确性和可靠性。 批判性总结: DynamiSpectra的问世,极大地降低了进行严谨、统计可靠的MD数据分析的技术门槛。特别是其设计精良的Web平台,真正实现了MD分析的“民主化”,让更多非计算背景的实验科学家和初学者能够轻松地从复杂的模拟数据中挖掘价值。这是一个非常实用的贡献,有望改善当前MD领域研究的规范性和效率。 然而,其当前的局限性也相当明显,即高度依赖GROMACS的文件格式。这使得在以AMBER、NAMD等其他软件为主要平台的实验室中,该工具的直接应用受到了限制。此外,Web平台在处理TB级别的大型轨迹数据时可能会面临性能瓶颈。 展望未来,该工具的价值将极大地取决于其后续的生态拓展。正如作者计划的那样,如果未来能够成功集成对MDAnalysis和MDTraj等通用数据格式的支持,DynamiSpectra将有望从一个“GROMACS用户的便利工具”转变为一个服务于整个MD社区的通用分析平台,其影响力也将不可同日而语。 小编评论 工具的图表设计略显粗糙,例如箱线图重叠、部分图的X轴未使用标准的’ns’单位而是’frame’,配色方案也有优化空间。作者并未详细阐述为何选择Aβ肽这个特定案例,以及它如何特别适合展示软件的各项分析功能。尽管用户手册和文档详尽,但工具目前高度绑定GROMACS,对使用其他MD软件的用户来说适配性不强。不过,这也反映了一个趋势:一个真正能解决用户痛点、具备友好界面的实用工具,即便在学术创新性上不那么突出,也同样具有发表价值。这或许是给应用型软件开发者的一个启示。
Software & Tools
· 2025-08-21
Visualizing Drug Action Against Amyloid Plaques: MD Simulations Reveal Aβ Protein Inhibitor Mechanisms
“看见”药物如何瓦解”老年斑”:分子动力学模拟揭秘Aβ蛋白抑制剂的微观世界 本文信息 标题: Small-Molecule Inhibitors of Amyloid Beta: Insights from Molecular Dynamics—Part A: Endogenous Compounds and Repurposed Drugs 作者: Mariyana Atanasova 单位: Faculty of Pharmacy, Medical University of Sofia 引用格式: Atanasova, M. (2025). Small-Molecule Inhibitors of Amyloid Beta: Insights from Molecular Dynamics—Part A: Endogenous Compounds and Repurposed Drugs. Pharmaceuticals, 18, 306. 摘要 淀粉样蛋白假说是阿尔茨海默病(AD)发病机制的主流模型,该假说认为β淀粉样蛋白(Aβ)肽是神经毒性和中枢神经系统一系列病理事件的主要驱动因素。Aβ聚集成寡聚体和沉积物会引发多种过程,如血管损伤、炎症诱导的星形胶质细胞和小胶质细胞活化、神经元离子稳态失衡、氧化应激、激酶和磷酸酶活性异常、tau蛋白磷酸化、神经原纤维缠结形成、认知功能障碍、突触丢失、细胞死亡,并最终导致痴呆。分子动力学(MD)是一种强大的基于结构的药物设计(SBDD)方法,有助于理解生物分子的性质、功能以及作用或抑制机制。作为唯一能够模拟原子级内部运动的方法,MD提供了其他技术无法获得的独特见解。将实验数据与MD模拟相结合,可以更全面地理解生物过程和分子相互作用。本综述总结并评估了过去十年中关于抑制β淀粉样蛋白的小分子(包括内源性化合物和重定位药物)的MD研究。此外,它还概述了未来淀粉样蛋白抑制剂MD模拟的关键考虑因素,为旨在阐明小分子抑制β淀粉样蛋白机制的研究提供了一个潜在的框架。 背景 阿尔茨海默病(Alzheimer’s Disease, AD),这个让无数家庭蒙上阴影的疾病,是导致老年人痴呆的最主要原因。其病理学核心特征之一,是在大脑中形成了大量的“老年斑”,即由β淀粉样蛋白(Aβ)肽异常聚集形成的细胞外沉积物。根据主流的“淀粉样蛋白假说”,正是Aβ肽从可溶性单体,一步步错误折叠并聚集成具有神经毒性的寡聚体、原纤维乃至最终的纤维斑块,才启动了导致神经元死亡和认知衰退的“死亡瀑布”——包括神经炎症、氧化应激、tau蛋白过度磷酸化等一系列连锁反应。 因此,阻止或逆转Aβ的聚集过程,一直是AD药物研发的核心策略。科学家们尝试了多种方法,包括减少Aβ的产生、增强其清除,以及直接寻找能够抑制其聚集的小分子。然而,Aβ的聚集是一个高度动态、复杂且涉及多种中间体的过程,传统的实验手段(如X射线晶体学)很难捕捉到这些瞬息万变的结构,也就难以精确地理解小分子抑制剂是如何在原子层面与Aβ肽相互作用,从而发挥“瓦解”作用的。 为了“看清”这个微观世界的动态过程,分子动力学(Molecular Dynamics, MD)模拟应运而生。MD模拟就像一台“计算显微镜”,它遵循牛顿运动定律,能够在计算机中模拟出蛋白质和药物分子中每一个原子的运动轨迹。通过MD,研究人员不仅可以观察到Aβ肽如何一步步“抱团”,还能看到小分子抑制剂是如何“见缝插针”,通过形成氢键、疏水作用、π-π堆积等相互作用,来破坏Aβ的聚集趋势,甚至拆解已经形成的聚集体。这为我们从根本上理解药物的作用机制、并进行更理性的药物设计提供了无与伦比的视角。 关键科学问题 本综述的核心科学问题是:在过去的十年中,分子动力学(MD)模拟是如何帮助我们深入理解不同类型的小分子(特别是人体内源性化合物和“老药新用”的重定位药物)抑制Aβ蛋白聚集的原子水平机制的? 通过系统性地回顾这些计算研究,我们能总结出哪些共性的抑制模式、关键的相互作用位点,以及未来在利用MD模拟进行Aβ抑制剂研究时应遵循的最佳实践和需要克服的挑战? 创新点 这是一篇综述性文章,其创新点在于: 首次系统性地聚焦于利用MD模拟来阐释内源性化合物和重定位药物这两类特殊小分子对Aβ聚集的抑制机制。 深入剖析了MD模拟在该领域的应用挑战,如力场的选择、模拟时间尺度的限制以及增强采样方法的应用,为后续研究提供了宝贵的经验总结。 提炼并总结了小分子抑制Aβ聚集的多种微观机制,例如破坏关键的盐桥、干扰疏水核心的稳定性、阻断π-π堆积等。 为未来的MD研究提出了一个全面的指导框架,包括系统选择、力场与水模型、模拟时长、对照组设置等九大关键考量因素,极具实践指导价值。 研究内容 Aβ的结构特征与聚集的物理化学基础 要理解抑制剂如何工作,首先必须了解Aβ自身是如何从一个无序的单体,变成高度有序的纤维的。 1. Aβ单体、二聚体和寡聚体的结构特征 可溶性Aβ寡聚体的大小从10到100 kDa不等,表现出显著的异质性和动态行为。根据广受认可的蛋白质折叠漏斗模型,一个正在折叠的蛋白质或肽的构象空间是巨大的。未折叠的可溶性单体占据了漏斗宽阔的顶部,拥有最高的能量和采取多种构象的能力。折叠中间体或部分折叠状态,以及寡聚体和单体的天然形式,能量较低,对应于能量景观中的局部最小值。无定形聚集体位于漏斗较窄的底部之一,以深的能量最小值为特征,而全局自由能最小值,在漏斗最窄的部分,则被淀粉样纤维所占据。纤维化始于一个未折叠单体构象的集合,并迅速沿着各种路径朝向全局最小值进行,其中不同的淀粉样多晶型物占据着紧密定位的局部最小值。绝对的自由能最小值与淀粉样晶体相关。从无序单体通过寡聚体到纤维的确切机制和构象转变仍然难以理解,这归因于寡聚体的异质性、亚稳态和动态性质。此外,纤维生成受到温度、浓度和起始单体结构同质性等因素的强烈影响。通过溶液和固态核磁共振以及冷冻电子显微镜,已经识别出多种Aβ寡聚体结构,包括U型、S型、LS型以及具有二重或三重拓扑的结构,其中一些来源于人类。 图2:人类Aβ1–42的一级和二级结构,以及从蛋白质数据库(www.rcsb.org)检索到的已知聚集体形状。 肽链根据一级氨基酸序列中的特定区域进行颜色编码:N-末端(亲水或金属结合区)从D1到Q15为米色;中心疏水核心(CHC)或β1区从K16到A21为青色;环或中心亲水区从E22到K28为黄色;第二个疏水区(β2)从G29到M35为鲑鱼色;C-末端区从V36到A42为绿色。PDB代码标注在相应结构的上方。寡聚体形成的一个可能机制是由疏水相互作用驱动的快速组装,包括涉及C-末端的相互作用。 在结构层面,淀粉样纤维的主要二级结构是交叉β-折叠(cross β-sheet),其中Aβ的主链垂直于纤维轴向排列。在“在途(on-pathway)”的寡聚体混合物中,通常观察到β-折叠结构。在溶液中,Aβ单体通常采取无规卷曲构象,而非任何特定的二级结构。Aβ1–42的一级结构分为五个区域:N-末端,也称为亲水或金属结合区(D1到Q15);中心疏水核心(CHC),跨越残基K16到A21;环或中心亲水区(E22到K28);第二个疏水区(G29到M35);以及C-末端区(V36到A42)。 2. 导致并稳定Aβ聚集的相互作用 在形成Aβ寡聚体的β-发夹结构单体内部,已发现在β-折叠区域之间存在链内氢键,特别是在I31和V36之间。在从β-发夹单体转变为β-折叠二级结构的过程中,这些链内氢键必须被破坏,并在相邻的肽序列之间形成新的链间氢键。这种从链内到链间氢键的转变对于寡聚化过程至关重要,最终导致交叉β-折叠结构的形成。研究还发现,在Aβ缔合过程中,单体主要与极性表面(如云母)相互作用,而疏水表面(如石墨)则会破坏寡聚体结构并充当纤维化的模板。 此外,普遍认为,成熟纤维中负责β-折叠结构的初始相互作用,涉及一个肽的中心疏水核心(CHC)中的F19与另一个单体的第二个疏水区中的L34之间的疏水接触。一个稳定交叉β-结构中转角的关键相互作用是D23和K28之间的盐桥。在寡聚化过程中,据信单体是通过沿纤维延伸轴向的平行堆叠进行寡聚的。然而,已发表的纤维结构表明,由两个S形单体以C2对称的“阴阳”方式排列组成的Aβ1–42二聚体单元参与了纤维的生长。已确定,稳定所有类型四级纤维结构的关键相互作用涉及M35的侧链以及一个单体中的一个或多个残基(如I31, I32和M35)与第二个单体中的G37, G39和V29的相互作用。在U形的Aβ17–42形式中,K28-D23盐桥是关键的稳定相互作用。相比之下,S形的Aβ11–42和LS形的Aβ1–42纤维则由K28侧链带正电的NH3+基团与A42带负电的COO-基团之间的盐桥所稳定。此外,在LS形中,N-末端和C-末端区域被E11-H6/H13氢键所加固,这对纤维稳定性起着至关重要的作用。最近的研究强调了由F4, L34和V36形成的疏水核心,连同K28-A42盐桥,在稳定LS形Aβ纤维中的重要性。 MD模拟揭示的Aβ抑制机制:详细剖析 本综述系统梳理了近十年来,利用MD模拟研究内源性化合物和重定位药物如何抑制Aβ聚集的代表性工作。以下是对原文核心部分的详细翻译和解读。 1. 内源性化合物 这些是人体内天然存在的分子,理论上具有更好的安全性。 图3:通过MD模拟研究的内源性化合物的描绘。 多巴胺(DA)和去甲肾上腺素(NE): DA和NE属于儿茶酚胺家族,作为神经递质和神经调节剂发挥作用。实验研究早已证实,DA能够剂量依赖性地抑制Aβ纤维的形成和延伸,并能破坏已形成的纤维。儿茶酚类衍生物主要抑制的是聚集的“成核”阶段而非“延伸”阶段。 MD模拟的见解: 一项REMD研究揭示,DA优先结合Aβ1–40原纤维的两个位点:一个是位于第二个疏水区的β-折叠片层(IIGLMVG,残基31-37),另一个是结构无序的N-末端区域。这种结合显著影响了寡聚体的双层结构。 由Chen等人进行的一项更全面的研究,通过cMD和REMD模拟,深入探究了DA的破坏机制。他们发现,在低摩尔比(1:1和2:1)下,质子化的DA+分子通过插入到F4-L34-V36核心区域并破坏链内和链间的K28-A42盐桥,从而剂量依赖性地破坏了Aβ原纤维的稳定性。在1:1的体系中,DA+主要结合在第一个转角区(H6-H13);而在2:1的体系中,结合位点扩展到了F4-L34-V36核心区、N-末端(D1-R5)、第二个转角区(F20-D23)以及C-末端(I41和A42)。这些相互作用的物理化学基础非常丰富,包括与D1, E3, H6, D7, E11等残基的氢键;与D7, E11, E22, D23的盐桥;与R5的阳离子-π相互作用;以及与F4, H6, H13, H14, F19, F20的π-π堆积。 有趣的是,在高浓度(10:1摩尔比)下,DA+分子主要结合在原纤维的外表面,限制了其柔性,反而起到了稳定作用。然而,当部分DA+被替换为去质子化的DA0(在生理pH下少量存在)时,DA0分子优先结合到原纤维的内表面,特别是F4-L34-V36疏水核心内部。DA0与DA+之间通过π-π堆积相互作用,增强了它们在内表面的结合,最终对原纤维结构施加了破坏性效应。 对于NE,REMD和cMD模拟分别研究了其对Aβ二聚体聚集的抑制和对纤维的破坏作用。模拟发现,NE能够降低β-折叠含量,同时增加α-螺旋、无规卷曲和转角含量。在五个主要的结合位点中,位于疏水核心的16KLVFFA21和31IIGLMV36是最有利的。NE主要通过与疏水残基(I41, I31, L17)的疏水作用和与芳香族残基(Y10, F4, F20)的堆积作用相结合。此外,与带负电荷的Asp和Glu残基的氢键以及与R5的阳离子-π相互作用也至关重要。在纤维体系中,NE通过与D1, A2, D23和A42残基形成氢键来重塑Aβ纤维结构,最终破坏其稳定性。 血清素(SER)和褪黑素(MEL): 这两种由色氨酸衍生的分子在AD患者中水平均有下降,且实验证明它们能抑制Aβ聚集。 MD模拟的见解: Gong等人的一项研究揭示了这两种吲哚胺衍生物破坏LS-型Aβ纤维的不同机制。SER主要结合在N-末端区域(D1-Y10),通过与F4, H6, Y10和H13的π-π堆积来破坏该区域的β-折叠。这进而干扰了对整个纤维起稳定作用的A2-V36和F4-L34长程接触。 相比之下,MEL的破坏性更强。它在LS-型Aβ原纤维上有两个结合位点:一个在N-末端(包含F4, H6, Y10, H13, H14, Q15, L17, F19),另一个在C-末端(包含N27, I31, I32, L34, V36)。因此,MEL能够同时破坏N-末端和C-末端两个区域的β-折叠结构。它干扰了三个疏水核心的稳定相互作用,并且对L34-A42盐桥的破坏作用也比SER更显著。MEL的相互作用模式主要是与N-末端芳香族氨基酸的π-π堆积以及与C-末端残基的疏水接触。 三磷酸腺苷(ATP): 作为细胞的“能量货币”,实验发现ATP能像生物助溶剂一样阻止和溶解肽聚集体。 MD模拟的见解: Pal和Paul的一项详尽研究使用了三种不同的力场来考察ATP对Aβ16–22片段(疏水核心区)的抑制作用。模拟结果高度一致:ATP在毫摩尔浓度下抑制了Aβ肽的寡聚化。其具体机制包括:1)降低β-折叠含量;2)减少肽-肽氢键;3)减少肽链间的F-F疏水相互作用。与此同时,ATP-F的π-π堆积相互作用和ATP-肽氢键的数量则相应增加。模拟还表明,ATP能抑制二聚体的形成,并能破坏预先形成的纤维,在某些力场下甚至能使其完全解聚。 2. 重定位药物(老药新用) 这些是已经上市、安全性已知的药物,为其寻找新的适应症是一种高效的研发策略。 图4:通过MD模拟研究的重定位药物(普罗帕酮(PPF)、甘珀酸(CBX)和多西环素(DXC))的结构。 普罗帕酮(PPF):一种抗心律失常药物。 MD模拟的见解:cMD模拟显示,PPF位于十二聚体纤维下层的转角附近,主要与疏水残基发生相互作用。在PPF存在下,β-折叠含量降低,这可能导致纤维的降解。 甘珀酸(CBX):一种用于治疗溃疡的甘草衍生物。 MD模拟的见解:cMD模拟分别研究了CBX与Aβ1–42单体和纤维的相互作用。结果发现,CBX对两者都有破坏作用。对于单体,它能减少α-螺旋和β-折叠含量;对于纤维,它能减少β-折叠含量。一个关键的机制是,CBX通过与F19和D23形成氢键,成功破坏了对纤维结构至关重要的D23-K38盐桥。 多西环素(DXC):一种四环素类抗生素。 MD模拟的见解:加速MD(aMD)模拟被用来研究DXC对两种不同Aβ纤维多晶型物(S-型和LS-型)的作用。结果发现,DXC能够破坏两种纤维的稳定性,但其结合位点依赖于纤维的构象。在S-型五聚体纤维中,它主要结合在暴露的疏水核心区域,识别出三个结合位点:一个靠近M35侧链,一个在I32和L34之间,另一个在L17和F19之间。而在LS-型纤维中,由于这些位点被隐藏,DXC则结合在N-末端附近以及由K16, V18和F20组成的第二个结合位点。这表明,针对不同Aβ多晶型物的药物设计可能需要考虑不同的策略。 未来MD模拟研究的指导框架 基于对现有研究的总结,作者提出了一个包含九个关键点的框架,以指导未来更可靠、更具信息量的MD模拟研究: 使用全长Aβ肽:避免使用片段,以获得更真实的模拟结果。 考虑多种纤维构象:应针对已知的U-型、S-型、LS-型等多种纤维多晶型物进行模拟。 使用多种力场:通过比较不同力场的结果来检验结论的稳健性。 谨慎选择水模型:确保水模型与所选力场兼容。 模拟真实的药物浓度:抑制剂与肽的摩尔比应与实验数据或生理浓度相符,并考虑多种浓度。 设置阳性和阴性对照:除了目标抑制剂,还应模拟已知的有效/无效抑制剂作为参照。 保证足够的模拟时长:确保模拟时间足以捕捉到相关的结构变化。 进行全面的轨迹分析:重点分析关键的稳定相互作用(如盐桥、疏水核心)和二级结构变化。 进行多次重复模拟:从不同的初始速度开始进行多次模拟,以获得统计上更可靠的结果。 Q\&A Q1: 为什么这篇综述特别关注“内源性化合物”和“重定位药物”? A1: 这两类化合物在药物发现中具有独特的优势。内源性化合物是人体内天然存在的物质(如多巴胺、褪黑素),它们通常具有极好的生物相容性和安全性,副作用风险低。重定位药物是已经通过了临床试验并上市的“老药”,其安全性、药代动力学特性都已有充分的研究,将它们用于新的疾病治疗(“老药新用”)可以极大地缩短研发周期、降低研发成本和风险。因此,研究这两类分子如何抑制Aβ聚集,具有很高的临床转化潜力。 Q2: MD模拟揭示的这些抑制机制,有哪些共通之处? A2: 尽管不同分子的具体作用位点和方式各异,但可以总结出几个共通的抑制策略:1)靶向疏水核心:许多抑制剂(如DA, NE, MEL, DXC)都倾向于结合Aβ的关键疏水区域(如CHC, F4-L34-V36核心),通过空间位阻或破坏疏水堆积来干扰聚集。2)破坏关键盐桥:一些抑制剂(如DA, CBX)能够直接或间接地破坏对Aβ结构至关重要的盐桥(如K28-A42, D23-K38),从而瓦解其折叠结构。3)π-π堆积相互作用:对于含有芳香环的抑制剂(如DA, NE, SER, MEL),与Aβ中的芳香族氨基酸(F4, Y10, F19, F20)发生π-π堆积是一种非常普遍的结合模式。 Q3: 综述中提到了多种MD模拟技术(cMD, REMD, aMD),它们之间有什么区别和联系? A3: cMD(常规MD)是最基础的方法,它模拟系统在恒定温度下的自然演化,能提供真实的动力学信息,但受限于时间尺度,很难观察到稀有事件(如蛋白质折叠)。REMD(副本交换MD)是一种增强采样方法,它同时在多个不同温度下模拟系统的多个“副本”,并允许它们之间交换构象。高温副本可以轻易跨越能垒,然后通过交换将这些“探索性”构象传递给低温副本,从而在保持低温系综分布的同时,极大地加速了构象空间的探索。aMD(加速MD)则是通过修改系统的势能面,降低能垒的高度,使得系统能够更快地从一个能量洼地“跳”到另一个,从而在更短的模拟时间内观察到更多的构象转变。总的来说,cMD追求“真实”,而REMD和aMD等则牺牲部分真实动力学信息以换取“效率”。 Q4: 既然MD模拟如此强大,为什么我们还需要进行实验验证? A4: MD模拟是一个强大的工具,但它本质上是一个基于模型的近似。其准确性受到多个因素的制约:1)力场的精度:力场本身就是对真实量子力学相互作用的简化和参数化,不可能百分之百准确。2)采样完整性:即使使用增强采样方法,也无法保证在有限的模拟时间内遍历了所有重要的构象。3)系统设置的简化:模拟系统通常是对真实生物环境的简化(如有限的水分子、简化的离子浓度等)。因此,MD模拟得出的结论是一种理论预测或机理假设,它必须经过真实的生物或化学实验(如本文中提到的ThT荧光实验、细胞毒性实验等)来验证,才能最终被接受为科学事实。 Q5: 这篇综述对未来的AD药物研发有什么具体的指导意义? A5: 它提供了两方面的指导。在药物设计层面,它总结出的关键作用位点和相互作用模式,为药物化学家提供了明确的优化方向。例如,一个好的抑制剂分子骨架上应该合理地排布疏水基团和能够形成氢键或π-π堆积的芳香环,以同时靶向Aβ的多个关键区域。在计算方法学层面,它提出的九点指导框架,为未来进行此类研究的计算科学家设定了一个更高的标准,有助于提高模拟结果的可靠性和可重复性,避免得出片面或错误的结论。 关键结论与批判性总结 核心结论 MD模拟是揭示Aβ抑制机制的强大工具:本综述系统回顾了过去十年利用MD模拟在原子层面阐明内源性化合物和重定位药物如何抑制Aβ聚集的研究,证明了MD在理解动态、无序系统相互作用中的不可替代性。 总结了多种小分子的共性抑制机制:研究发现,有效的小分子抑制剂通常通过干扰Aβ的关键疏水核心、破坏稳定结构的盐桥、以及与芳香族残基形成π-π堆积等多种协同方式来发挥作用。 强调了方法学的重要性:综述深入讨论了在模拟Aβ这类内在无序蛋白时,选择合适的力场、水模型以及使用增强采样技术(如REMD, aMD)来克服时间尺度限制的关键性。 提出了未来研究的指导框架:文章最后为未来的MD模拟研究提出了一个包含九个关键考量因素的综合性框架,旨在提高研究的严谨性、可靠性和可比性,对该领域具有重要的指导价值。 批判性总结与展望 这篇综述为我们提供了一个极佳的窗口,让我们得以窥见计算模拟如何在对抗阿尔茨海默病这一复杂挑战中扮演日益重要的角色。作者通过对特定两类化合物(内源性和重定位药物)的聚焦,使得综述内容既具有代表性,又具有很强的临床转化启示。其最大的价值在于,它不仅告诉我们“知道了什么”,更重要的是,它系统性地总结了“如何才能知道得更准”,即那九条极具实践意义的模拟指导原则。 一个潜在的局限性在于,综述主要集中在小分子与Aβ肽本身的相互作用上。然而,在真实的生物环境中,Aβ的聚集还受到许多其他因素的影响,如细胞膜、金属离子、伴侣蛋白等。未来的MD研究需要构建更复杂的、更接近生理环境的模拟体系,以探索在这些因素存在下,抑制剂的作用机制是否会发生改变。 展望未来,随着计算能力的飞速发展(如专用计算硬件Anton 3和百亿亿次级超算)和算法的不断进步(如结合AI的增强采样方法),MD模拟的时间和空间尺度将得到前所未有的扩展。我们可以期待,未来的模拟将能够覆盖从单体折叠到寡聚体形成乃至纤维成熟的整个聚集路径,并在接近细胞尺度的复杂环境中,实时观察药物分子如何精准地“拆解”这些致病聚集体。这将把基于结构的AD药物设计,真正带入一个原子精度、动态可视的全新时代。
Drug Design
· 2025-08-20
AI-Assisted Molecular Docking: How Autoparty Transforms Manual Pose Inspection into Transferable Models
AI陪你看靶点:Autoparty如何将”人工看Pose”的”祖传手艺”变成可传承的模型 本文信息 标题: Autoparty: Machine Learning-Guided Visual Inspection of Molecular Docking Results 作者: Laura Shub, Magdalena Korczynska, Duncan F. Muir, Fang-Yu Lin, Brendan W. Hall, Alan M. Mathiowetz, and Michael J. Keiser 单位: University of California, San Francisco; Pfizer Research & Development 引用格式: Shub, L., Korczynska, M., Muir, D. F., Lin, F.-Y., Hall, B. W., Mathiowetz, A. M., & Keiser, M. J. (2025). Autoparty: Machine Learning-Guided Visual Inspection of Molecular Docking Results. Journal of Chemical Information and Modeling, 65, 7817-7826. 摘要 在虚拟药物筛选流程中,由人类专家对潜在药物化合物进行审查是至关重要的一环。然而,鉴于人类能够实际检查的分子数量相对于虚拟筛选的庞大规模而言极为有限,加速这一过程的需求日益迫切。此外,计算药物化学家在评估不同对接姿态时可能存在不一致,并且目前没有标准化的方法来记录这些注释。为了应对这些挑战,我们提出了Autoparty,一个容器化的工具。Autoparty利用本地化的主动学习技术进行药物发现,促进了“人在环路中”的模型训练,从而能够外推出人类的直觉判断。我们利用多种不确定性量化指标来向用户查询信息最丰富的样本进行模型训练,从而限制了所需的人类专家训练标签数量。收集到的注释会填充到一个持久且可导出的本地数据库中,以供广泛的下游应用。在一个真实的案例研究中,纳入Autoparty使得在193个经过实验测试的化合物中,命中率比单独使用形状相似性方法提高了40%。 背景 在计算机辅助药物设计(CADD)的广阔领域中,虚拟筛选(Virtual Screening, VS)是早期药物发现的基石。这个过程就像一个巨大的漏斗,从数十亿甚至更多的分子库开始,通过一系列计算步骤——库的准备、分子对接、打分和排序、聚类和过滤——逐步筛选,最终期望在漏斗的末端得到几十到一百个最有希望的候选分子进入实验验证。 然而,这个看似自动化的流程中存在一个关键的、近乎“手工作坊”式的瓶颈——人工审查(Manual Inspection),也被药物化学家们戏称为“挑分子派对(Hit Picking Parties)”。由于对接程序使用的打分函数存在固有的局限性(源于生物物理的抽象和打分项权重的难题),计算出的高分分子中常常混杂着大量的假阳性。为了去伪存真,经验丰富的计算药物化学家必须亲自上阵,在三维软件中逐一检查排名靠前的分子的对接姿态(pose),评估其与靶点口袋的相互作用是否合理、构象是否稳定等。研究发现,经过专家审查挑选的分子,其后续实验的成功率和活性强度,通常都显著优于仅靠打分函数筛选的结果。 这个“人工审查”环节虽然效果显著,但其弊端也显而易见: 可扩展性极差:一个专家或团队能审查的分子数量极为有限(通常在1000个左右),这与动辄数十亿的分子库规模形成鲜明对比。大量有潜力的、但排名稍靠后的“假阴性”分子因此被永远地埋没。 主观性和不一致性:不同的专家可能会有不同的判断标准和偏好,甚至同一个专家在不同时间也可能做出不一致的评估。 知识无法传承:专家的“火眼金睛”是一种内隐的直觉和经验,很难被量化和记录下来,形成一套标准化的知识体系供他人学习或机器利用。 关键科学问题 本文旨在解决的核心科学问题是:如何规模化、标准化并最终模型化药物发现中至关重要但效率低下的“人工审查”环节?具体而言,能否开发一个工具,它不仅能记录专家的决策,还能通过机器学习主动学习专家的“直觉”,训练出一个能够模拟专家判断的模型,并利用这个模型去赋能更大规模的分子筛选,从而打破人工审查的瓶颈,提高药物发现的效率和成功率? 创新点 提出Autoparty工具:开发了一个基于Python的容器化Web应用,首次将“人在环路中”的主动学习(Active Learning, AL)框架应用于对接结果的人工审查环节。 主动学习与不确定性量化:模型并非被动学习,而是通过多种不确定性量化(Uncertainty Quantification, UQ)方法(如集成学习、Dropout、距离度量),主动挑选出对模型训练“信息量最大”(即模型最“拿不准”)的分子姿态,请求人类专家进行标注,从而用最少的专家标注数据训练出最有效的模型。 专家知识的捕获与复用:所有的人工注释(打分)都被保存在一个持久化、可导出的SQL数据库中。这不仅为项目创建了一个可追溯的决策记录,更重要的是,积累的数据可用于训练一个能模拟专家直觉的机器学习模型,该模型可被应用于筛选更多的分子。 真实世界验证的显著效果:在一个与辉瑞公司合作的前瞻性药物筛选项目中,使用Autoparty辅助决策,使得最终测试的化合物命中率(hit rate)提升了40%。 研究内容 核心方法:Autoparty工作流详解 Autoparty是一个集成了前端交互界面和后端机器学习引擎的完整系统。其核心思想是通过一个主动学习循环,让机器在与人类专家的互动中,逐步学会如何评估一个对接姿态的好坏。 图1:虚拟筛选流程与主动学习概览。 a) 药物发现的“漏斗”展示了标准的筛选步骤以及剩余的分子数量(近似值),这激发了对确保有前景的分子进入实验测试的工具的需求。b) “人在环路中”的主动学习训练范式。起始数据集缺少许多真实标签。“神谕”(人类)最初为模型训练标记一个随机子集。初始模型为未标注的数据预测标签及其不确定性。“神谕”对选定的样本进行标注。此过程重复进行,直到达到标签配额或期望的准确度。 图2:Autoparty工作流与用户交互示意图。 a) 用户与Autoparty的“前端”功能进行交互。这些功能包括上传初始筛选结果,导入可选的预先存在的注释,以及为新分子打分。用户还可以从数据库中导出所有现有的打分和预测。显示的分子是对接到AmpC β-内酰胺酶中的ZINC000000002896 (F)和ZINC000000058902 (A)。b) Autoparty的“后端”功能自动辅助“挑分子”过程。Autoparty在上传时计算每个蛋白-配体复合物的相互作用和LUNA相互作用指纹(IFPs)。Autoparty使用用户选择的架构和置信度评估程序来训练一个机器学习模型。可用选项包括集成学习(ensemble),其中使用各个模型之间的方差作为置信度的度量;dropout,它在随机“丢弃”神经网络权重的同时多次重新预测同一个样本以计算得分分布;以及距离(distance),它使用新样本与训练集中样本的拓扑相似性。后端还保存用户提供的打分,训练模型以预测人类标签,并根据采集函数对化合物进行排序。 graph TD direction LR subgraph "前端 (Front End) - 用户交互" A("1. 上传筛选结果<br/>(蛋白, 对接分子)") --> B("2. 人工评估姿态<br/>(打分 A-F)"); B -- "标注数据 (Grades)" --> C_BE; D_BE -- "待标注分子<br/>(Selected Molecules)" --> B; B --> E("3. 导出最终预测"); end subgraph "后端 (Back End) - 自动处理" direction LR subgraph "输入与特征" A_Molecules -- "分子" --> F("计算相互作用<br/>和IFPs"); end subgraph "主动学习循环" C_BE["训练ML模型"] -- "使用" --> F; C_BE --> G["预测所有分子<br/>(分数 ŷ, 不确定性 σ)"]; G --> D_BE; subgraph "UQ模块" H["集成学习"] I["Dropout"] J["距离度量"] end C_BE -- "选择UQ方法" --> H & I & J; end subgraph "数据与输出" G --> K["保存到数据库"]; K -- "输出" --> E_Final; E_Final[("最终打分和预测")] --> E; end end 1. 输入表示:从3D结构到相互作用指纹 (IFP) 当用户上传对接结果后,Autoparty的后端首先使用LUNA工具包计算每个蛋白-配体复合物的分子间相互作用,如氢键、疏水作用、范德华作用等。 随后,这些三维的相互作用信息被编码成一个固定长度的向量,即相互作用指纹(Interaction Fingerprints, IFPs)。与只编码分子自身化学结构的传统指纹不同,IFPs能够同时捕捉配体和口袋界面的几何与生物物理特性,这对于学习结合模式至关重要。 2. 主动学习循环与模型训练 初始阶段:用户首先需要对少量(默认100个)由对接分数排序的分子进行打分(A-F)。 模型训练:一旦收集到足够的初始标注,Autoparty就会在后端训练一个机器学习模型(默认为一个由3个独立神经网络组成的委员会模型)。该模型学习从IFP到人类专家打分的映射关系。 不确定性量化与分子选择:训练好的模型会对库中所有未标注的分子进行预测,同时给出每个预测的不确定性。Autoparty提供了多种UQ方法: 集成学习 (Ensemble):通过比较委员会中多个独立模型的预测差异来衡量不确定性。分歧越大,不确定性越高。 Dropout:在单个模型中,通过多次预测并随机“丢弃”部分神经元,根据预测结果的分布来计算不确定性。 距离度量 (Distance):新样本与训练集中最近邻样本的距离被用作不确定性的代理。 “人在环路”:系统根据采集函数(acquisition function)(例如,默认选择不确定性最高的分子)将新的、信息量最大的分子推送给用户进行标注。这个“标注-训练-预测-选择”的过程不断循环,直到达到预设的标注数量或模型收敛。 3. 界面与功能 Autoparty提供了一个简洁的Web界面。用户可以在浏览器中直观地看到3D的蛋白-配体相互作用图,并给出A(非常好)、B(好)、C(一般)、D(差)、F(非常差)的评分。 模型仪表盘可以实时监控训练过程中的损失函数曲线和模型性能。 图3:Autoparty网页界面。 a, 筛选上传界面。除了必需的蛋白质和单独的分子文件外,用户可以指定一个属性来对初始注释的分子进行排序。用户还可以为相互作用计算提供特定的LUNA配置。b, “挑分子”界面,用于人在环路的主动学习训练。当前分子及其计算出的蛋白质位点相互作用(钙依赖性蛋白激酶CDPK1,PDB ID: 3T3U)显示在可能分配的等级之上。右上角显示当前模式(注释 vs. 审查)和排序方法(分数、不确定性、分歧、随机),以及到其他操作(例如,筛选数据集选项)和模型训练面板的下拉菜单。c, 模型仪表盘,显示训练曲线(左)和模型在训练迭代中的准确率历史(右)。 实验结果与分析 1. 回顾性案例研究:在UCSF公开数据集上的验证 作者在两个公开的、包含大量对接结果和实验活性数据的大规模筛选项目(靶点为AmpC β-内酰胺酶和多巴胺D4受体)上,对Autoparty进行了回顾性验证。 为了模拟真实场景,他们故意从训练集中排除了所有已知的活性分子及其结构类似物。 结果(AmpC靶点): 使用Autoparty预测的A或B等级作为额外过滤器,可以将人工审查的命中率从21.7%提升到33.8%。 如果完全依赖Autoparty的预测(A或B级),在所有实验测试过的分子上,命中率达到了37.4%,高于任何其他筛选方法。 结果(D4靶点): Autoparty的表现不如人工审查,但其命中率(18.9%)仍高于随机筛选(14.5%)。 值得注意的是,对于对接分数很差的分子,Autoparty预测为A级的化合物仍然达到了22%的命中率,远高于该分数段的整体命中率(7.6%)。这有力地证明了Autoparty有潜力从被传统方法忽略的低分区域“挖掘”出被埋没的活性分子。 图4:UCSF回顾性案例研究。 a,c AmpC和b,d D4靶点上,用户打分(蓝色)与Autoparty对实验测试分子的预测打分(粉色)的分布统计和混淆矩阵。e,f 化学空间的PCA可视化,显示了所有分子(灰色)、用户打分的分子(粉色)、高分分子(蓝色)和实验确认的活性分子(橙色)的分布。活性分子(橙色)及其结构相似的分子被主动地从Autoparty训练中排除。 2. 前瞻性案例研究:与辉瑞公司的真实药物筛选项目合作 这是对Autoparty最有力的验证。辉瑞的团队使用Autoparty辅助一个针对未公开靶点的虚拟筛选项目。 团队首先对72个化合物进行了人工标注,然后训练了一个Autoparty模型。 结果: 他们最终测试了193个由“其他方法”(高对接分数+形状互补性)筛选出的分子。 在这193个分子中,如果只看“其他方法”的筛选结果,命中率(IC₅₀ < 30 μM)为7.4%。 而如果只看Autoparty预测为A或B级的分子,命中率则达到了10.4%,相比之下提升了40%。 更重要的是,在两种方法都推荐的分子中,命中率达到了10.8%,而Autoparty不推荐但其他方法推荐的分子,命中率仅为5.3%。这表明Autoparty成功地扮演了“过滤器”的角色,剔除了大量假阳性。 图5:Autoparty前瞻性案例研究。 a) 用户分配的等级(蓝色)和Autoparty分配的等级(粉色)的计数。两种分布相似,尽管Autoparty将更高比例的化合物分配为C级,这可能对应于与获得注释的那些IFP不相似的IFP。值得注意的是,Autoparty没有分配F级,这表明模型无法从单个注释中学习到人类分配等级的模式。两种方法分配A级的比例相似,占人类注释的43%和预测等级的32%。b) Autoparty与其他方法选择的化合物和命中率的维恩图。两种方法都选择的分子,其命中率超过了任一单独选择方法的命中率。 Q&A Q1: Autoparty是如何处理不同专家之间可能存在的打分不一致问题的? A1: Autoparty本身的设计并没有直接解决专家间的分歧,但它提供了一个框架来缓解这个问题。首先,所有的打分都被记录在数据库中,这使得团队可以追溯和讨论有争议的分子。其次,“Review”模式下的“Disagreement”排序功能会高亮出那些模型高置信度预测与人类专家先前标注不符的分子,促使专家重新审视和思考,有助于达成共识。长远来看,通过收集不同专家的标注,甚至可以训练能够反映特定专家偏好或团队共识的模型。 Q2: 为什么选择相互作用指纹(IFPs)作为模型的输入,而不是更复杂的3D图神经网络? A2: 这是一个在模型复杂度和数据量之间的权衡。论文中提到,在小数据集的情况下,基于指纹的表示与更复杂的消息传递神经网络(如图神经网络)的性能相当。考虑到“人工审查”环节能产生的标注数据量非常有限(通常几百到一千个),使用计算高效且性能稳健的IFPs是一个非常务实和明智的选择。它能快速训练模型,并为主动学习循环提供及时的反馈。 Q3: 主动学习中的“不确定性量化(UQ)”具体是如何帮助模型更快地学习的? A3: UQ的核心思想是让模型知道自己“不知道什么”。一个刚开始训练的模型可能对某些类型的分子(比如化学结构新颖或相互作用模式罕见)的打分非常“不确定”或“纠结”。主动学习策略正是利用这一点,优先将这些模型最“困惑”的分子推送给专家。专家对这些信息量最大的样本进行标注,能最高效地帮助模型填补知识盲区、修正错误认知,从而用最少的标注数据达到最好的学习效果,避免了在模型已经很“自信”的区域浪费专家宝贵的时间。 Q4: Autoparty这个工具是否可以用于虚拟筛选之外的其他任务? A4: 是的,论文结尾提到了这一点。虽然Autoparty是为虚拟筛选的“人工审查”设计的,但其核心框架——捕获人类对三维结构化数据的直觉判断——具有更广泛的应用潜力。例如,用户可以不基于主观的“好坏”来打分,而是基于实验测得的活性值(如IC₅₀)进行分箱打分。这样,Autoparty就可以被用来训练一个定量的结构-活性关系(QSAR)模型,直接从对接姿态预测分子的活性区间。 Q5: 这个工具是否能完全取代计算药物化学家? A5: 完全不能。恰恰相反,Autoparty的设计理念是增强而非取代人类专家。它是“人在环路中”的工具,其性能的上限取决于输入的人类专家知识的质量。专家的角色从一个重复性的体力劳动者(审查成百上千个分子),转变为一个模型训练师和决策者。专家通过标注少量关键分子来“教会”AI自己的判断逻辑,然后让AI去完成大规模的初步筛选,最后专家再对AI筛选出的精华进行最终定夺。它将专家从繁重的工作中解放出来,使其能专注于更具创造性的策略思考。 关键结论与批判性总结 核心结论 成功开发了Autoparty,一个创新的、容器化的Web工具,通过“人在环路中”的主动学习,高效地训练机器学习模型来模拟和扩展计算药物化学家的专业直觉。 实现了对专家审查过程的规模化,通过主动学习和不确定性量化,用最少的专家标注(几百个)训练出能有效筛选数千乃至数万个分子的模型。 建立了标准化的注释数据库,将专家的隐性知识转化为持久、可复用的数字资产,为模型迭代和团队知识传承提供了基础。 在真实世界的前瞻性药物发现项目中得到验证,与辉瑞公司合作的案例表明,使用Autoparty辅助筛选,可将命中率有效提升40%,并成功富集了高活性化合物。 批判性总结与展望 Autoparty是连接人类专家直觉与机器计算规模之间鸿沟的一次非常成功和巧妙的尝试。它没有试图用一个通用的、端到端的模型去解决复杂的药物发现问题,而是精准地切入了“人工审查”这个长期存在且公认的痛点,并提供了一个极为务实的解决方案。其最大的贡献在于,它不仅是一个提效工具,更是一个知识捕获和传承的平台,使得宝贵的专家经验不再是“一次性”的消耗品,而是可以被累积、学习和放大的数字资产。 潜在的局限性在于,模型的性能高度依赖于初始标注专家的水平和一致性。如果专家的判断本身存在偏差,模型也只会放大这种偏差。此外,目前使用的IFP虽然高效,但在捕捉复杂的变构效应或长程相互作用方面可能不如3D图神经网络等更前沿的模型。 未来的发展方向将非常广阔。首先,可以将更先进的表示学习方法(如等变图神经网络)整合到后端,以期在拥有更多数据后获得更高的预测精度。其次,可以将Autoparty的框架从对接后的筛选,扩展到药物设计的更多环节,例如基于生成模型产生分子的筛选、ADMET性质的预测等。最终,这类“人机协作”的工具将成为未来药物研发的标准配置,让科学家能够站在AI的肩膀上,更快、更准地发现新药。
Drug Design
· 2025-08-18
AI-Driven Drug Discovery: Iterative Machine Learning for Discovering Potent Parkinson's α-Synuclein Inhibitors
AI炼丹新范式:用迭代式机器学习发现帕金森病α-突触核蛋白的高效抑制剂 本文信息 标题: Discovery of potent inhibitors of a-synuclein aggregation using structure-based iterative learning 作者: Robert I. Horne, Ewa A. Andrzejewska, Parvez Alam, Z. Faidon Brotzakis, Ankit Srivastava, et al. 单位: University of Cambridge, National Institutes of Health (NIH), Indiana University School of Medicine, etc. 引用格式: Horne, R. I., Andrzejewska, E. A., Alam, P., Brotzakis, Z. F., Srivastava, A., Aubert, A., … & Vendruscolo, M. (2024). Discovery of potent inhibitors of α-synuclein aggregation using structure-based iterative learning. Nature Chemical Biology, 20, 634-645. 摘要 机器学习方法有望降低传统药物发现流程的成本和失败率。对于神经退行性疾病而言,这个问题尤为紧迫,因为开发能够改变病程的药物一直极具挑战性。为了解决这个问题,我们在此描述了一种机器学习方法,用于识别α-突触核蛋白(α-synuclein)聚集的抑制剂,该过程与帕金森病及其他突触核蛋白病相关。由于α-突触核蛋白聚集体的增殖是通过自催化的二级成核过程发生的,我们的目标是识别能够结合聚集体表面催化位点的化合物。为实现这一目标,我们以迭代的方式使用基于结构的机器学习,首先识别,然后逐步优化二级成核抑制剂。我们的研究结果表明,这种方法能够轻松地识别出比以往报道的化合物效力高出两个数量级的抑制剂。 背景 帕金森病(PD)是最常见的神经退行性运动障碍,影响着全球超过65岁人群中2-3%的人口。这场旷日持久的“健康”与“衰老”的战争,其核心病理特征之一是α-突触核蛋白(αS)的异常聚集。正常情况下,αS蛋白在神经元中发挥着重要生理功能;然而,一旦它错误折叠并聚集形成纤维状的“团块”,就会产生神经毒性,最终导致神经元的死亡,尤其是在大脑的黑质区域。当运动症状出现时,神经系统的损伤往往已相当严重。因此,开发能够有效抑制αS聚集的化合物,被认为是治疗帕金森病最具前景的策略之一。 然而,神经退行性疾病的药物研发之路异常艰难,至今仍缺乏能够根治或显著延缓病程的药物。传统的药物发现方法,如高通量筛选,不仅成本高昂,而且成功率极低(通常低于1%)。近年来,对αS聚集过程的动力学研究揭示了一个关键环节:二级成核(secondary nucleation)。在这个过程中,已形成的αS纤维聚集体会催化游离的单体蛋白在其表面错误折叠和聚集,形成新的聚集体核心,从而实现聚集过程的“指数级”扩增。这就像滚雪球一样,是导致αS病理迅速扩散的主要机制。因此,靶向并抑制二级成核过程,成为一个极具吸引力的药物设计策略。 关键科学问题 本文旨在解决的核心科学问题是:在药物研发早期阶段普遍存在实验数据稀疏的困境下,如何利用机器学习方法,建立一个高效、可靠且能够自我优化的闭环系统,用于从庞大的化学空间中快速发现并迭代优化出能够特异性抑制αS蛋白二级成核过程的新型、高效小分子抑制剂? 创新点 提出迭代式主动学习策略:构建了一个“预测-测试-再学习”的闭环工作流。模型根据少量初始数据进行预测,实验验证后将新数据反馈给模型进行再训练,从而在数据稀疏的场景下逐步提升模型的预测能力和发现效率。 精准靶向二级成核:整个药物发现策略从始至终都聚焦于抑制αS聚集的二级成核步骤,这是一个基于深刻病理机制理解的精准打击策略。 高效的机器学习模型组合:采用随机森林回归器(RFR)与高斯过程回归器(GPR)的组合模型。RFR提供了强大的预测性能,而GPR则能评估预测的不确定性,使得在选择化合物时可以平衡“高预测效力”和“高信息量”(即探索未知化学空间),有效避免模型陷入局部最优。 惊人的效力提升:通过该方法发现的苗头化合物,其抑制效力比本领域已知的、甚至已进入临床试验的分子(如Anle-138b)高出两个数量级。 研究内容 核心方法:三阶段迭代学习工作流 作者设计了一个分三步走的策略来探索化学空间,并最终锁定高效抑制剂。 图1:本文所述化学空间探索三个阶段的示意图。a, 通过对接模拟预测具有良好结合能力的68个分子中,我们最初通过实验测试确定了4个活性分子(“对接组”)。这四个分子增加了αS聚集的t₁/₂。b, 然后,我们在化学空间中围绕这四个母体化合物进行了近程Tanimoto相似性搜索。我们选择了Tanimoto相似性截断值>0.5的分子(“近程相似性对接组”),随后进行了Tanimoto相似性截断值>0.4的远程相似性搜索(“远程相似性对接组”)。然后应用机器学习方法,使用观察到的数据从一个源自ZINC数据库、与母体结构Tanimoto相似性>0.3的化合物库(“评估集”)中预测有效的分子。c, 预测和实验测试的连续迭代产生了更高的优化率(定义为使标准化的聚集半衰期增加到2倍以上的分子百分比),并且平均而言,分子的效力高于先前相似性搜索中识别出的分子。对识别出的有效分子也进行了验证实验。 graph TD direction LR subgraph "药物发现流程" subgraph "阶段一" direction LR D["~200万个CNS MPO优化的<br/>分子虚拟对接"] --> E["68个分子<br/>实验测试"] --> F[("4个初始命中<br/>(Hits)")] end subgraph "阶段二" direction LR G[("4个初始命中<br/>作为母核")] --> H["近程相似性搜索<br/>(Tanimoto > 0.5)"] --> I["远程相似性搜索<br/>(Tanimoto > 0.4)"] end F -- "作为起点" --> G subgraph "阶段三" direction LR J[("所有实验数据<br/>(161个分子)作为训练集")] --> K["1.告知(Inform)<br/>训练ML模型"] --> L["2.预测(Predict)<br/>从~9000个分子库中<br/>预测高分分子"] --> M["3.测试(Test)<br/>实验验证预测分子"] --> J end H -- "产生数据" --> J I -- "产生数据" --> J end 阶段一:对接策略 (Docking Strategy) 目标:从海量分子库中找到最初的“种子”分子。 过程:研究人员首先在先前研究中使用的αS纤维聚集体结构(PDB: 6CU7)上,使用软件(Fpocket, CamSol)识别出一个位于纤维侧面的潜在结合口袋。该口袋由His50-Lys58和Thr72-Val77残基构成,具有较低的溶解性和易于结合的特性。然后,他们从一个包含约200万个经过中枢神经系统多参数优化(CNS MPO)的分子库中,使用两种不同的对接软件(AutoDock Vina, FRED)进行虚拟筛选。 结果:通过筛选和Tanimoto相似性聚类(阈值为0.75),最终得到了79个代表性分子(centroids),即每个簇的代表。其中68个可供购买并进行了体外实验测试。实验发现,有4个分子(48, 52, 68, 69)能够有效抑制αS聚集,它们构成了后续研究的“母核”或“父代结构”。 阶段二:相似性搜索策略 (Search Strategy) 目标:在初始命中的分子周围快速扩展化学空间,找到更多活性分子。 过程:以4个母核分子为起点,在ZINC15数据库中进行两轮相似性搜索。 近程搜索:使用较高的Tanimoto相似性阈值(>0.5),寻找与母核结构非常相似的分子。 远程搜索:使用较低的相似性阈值(>0.4),寻找与母核结构有一定差异的分子。 结果:近程搜索的命中率(optimization rate)较高,而远程搜索的命中率急剧下降到仅4%,且测试了三倍多的化合物。命中率的计算方式为:在一个集合中,能够将聚集反应的半衰期(t₁/₂)延长至对照组两倍以上的分子所占的百分比。这表明,仅靠传统的结构-活性关系和相似性搜索,很难在远离初始母核的化学空间中高效地发现新分子。 阶段三:主动学习策略 (Active Learning Strategy) 目标:利用机器学习,在更广阔但相关的化学空间中智能地寻找高效抑制剂。 过程:这是一个“设计-测试-学习”的闭环。 告知 (Inform):将前两个阶段获得的所有161个分子的实验数据(包括活性和非活性分子)作为初始训练集。 预测 (Predict):训练一个机器学习模型,用它来预测一个包含约9000个分子的“评估库”(该库由与4个母核有Tanimoto相似性>0.3的分子构成)中分子的抑制活性。 测试 (Test):购买并实验验证模型预测排名最高的约60个分子。 迭代:将新测试的数据加入训练集,重复步骤1-3,共进行了四轮迭代。 机器学习模型细节 分子表示:使用连接树变分自编码器 (Junction Tree Variational Autoencoder) 将分子的SMILES字符串转换为低维度的连续向量(潜在向量),这是模型能够“理解”分子结构的基础。 预测模型:采用随机森林回归器(RFR)和高斯过程回归器(GPR)的堆叠模型。RFR负责主要的活性预测,而GPR则对RFR的残差进行拟合,并提供一个关键的预测不确定性度量。这使得模型在选择下一个要测试的分子时,不仅会选择那些预测活性高的,也会适当选择那些模型“不确定”但可能带来新信息的分子。 模型性能:在训练集上,该组合模型在R²得分、平均绝对误差和均方根误差方面均优于其他模型组合(如多层感知器、线性回归器等)。具体的性能参数展示在补充图1和补充表1中。当用该模型拟合聚集实验数据时,获得的R²值在0.2到0.3之间。 实验结果与分析 本文核心Result部分的思路图 graph TD A("起点:<br/>传统药物发现策略") --> B; subgraph "1. 初始策略与瓶颈" direction LR B["对接策略 (Docking)<br/>- 200万分子库<br/>- 获得4个活性母核"] --> C["相似性搜索 (Similarity Search)<br/>- 近程搜索: 命中率尚可<br/>- 远程搜索: 命中率骤降至**4%**"] --> D{("瓶颈:<br/>传统方法难以<br/>拓展新化学空间")} end D --> E; subgraph "2. 机器学习迭代策略的成功" direction LR E["主动学习闭环<br/>(Active Learning Loop)<br/>- ‘预测-测试-再学习’<br/>- RFR+GPR模型 (含不确定性)"] --> F["性能提升<br/>- 命中率: 4% -> **21.4%**<br/>- 平均效力持续增强 (图3a)"] --> G{("突破:<br/>成功探索新化学空间<br/>并持续优化")} end G --> H; subgraph "3. 发现超高效分子 (I4.05)" direction LR H["效力对比 (图2)<br/>- KIC₅₀ = 0.52 μM<br/>- **比Anle-138b强约70倍**"] --> I["作用机制分析<br/>- 不影响纤维延伸 (图2c)<br/>- **显著减少寡聚体** (图2d)"] --> J{("成果:<br/>发现全新、高效且<br/>机制明确的抑制剂")} end J --> K; subgraph "4. 作用机制验证" direction LR K["靶点结合验证 (SPR, 图4)<br/>- 与αS纤维**高亲和力结合**<br/>- KD值达**纳摩尔级别 (13-68 nM)**"] --> L["特异性验证<br/>- **对Aβ42无活性** (图4d)"] --> M{("确认:<br/>分子通过结合纤维<br/>特异性抑制二级成核")} end M --> N; subgraph "5. 生物学相关性验证" direction LR N["病理种子抑制实验 (RT-QuIC, 图5)<br/>- **有效抑制帕金森病(DLB)<br/>脑源性种子的聚集**"] --> O["寡聚体直接量化 (µFFE, 图6)<br/>- **显著减少寡聚体的<br/>数量和大小**"] --> P{("关键验证:<br/>分子对真实病理<br/>聚集体有效")} end P --> Q(("最终结论:<br/>迭代式ML成功发现高效、新颖且<br/>具生物学相关性的αS二级成核抑制剂")); 机器学习迭代的成功 命中率和效力持续提升:随着机器学习的迭代(从第1轮到第3轮),发现的有效分子的平均效力(以标准化的聚集半衰期t₁/₂表示)和命中率都在稳步提高。第1、2、3轮的命中率分别为12.5%、17.2%和21.4%,这比传统高通量筛选(<1%)的效率高出一个数量级,并且显著优于远程相似性搜索(4%)。 探索新化学空间:图3:机器学习药物发现方法的迭代结果。a, 不同阶段(远程搜索,迭代1,迭代2和迭代3)在25μM浓度下有效先导化合物的标准化的t₁/₂(n=2次重复;中心度量为平均值;误差为标准差)。水平虚线表示有效先导化合物分类的界限,即标准化的t₁/₂=2。对于远程搜索,测试了69个分子,而对于迭代1、2和3,测试的分子数分别为64、64和56。请注意,最有效的分子在观察的时间尺度内完全抑制了聚集,因此标准化的t₁/₂表示为实验的整个持续时间。b, 项目中从近程搜索(CS)开始,到远程搜索(LS),再到迭代1、2和3(I1, I2和I3),有效分子(+)和无效分子(-)的流向。每个分支都标有分子来源(例如,p48)。在远程搜索阶段,损耗达到最高点,之后随着每次迭代逐渐改善。 发现超高效抑制剂 效力碾压:在低浓度下,通过第四轮迭代发现的明星分子14.05展现出惊人的抑制效果。研究人员计算了半数抑制动力学常数(KIC₅₀),即能将聚集半衰期延长50%所需的浓度。分子14.05的KIC₅₀值为0.52 μM,而母核分子69和Anle-138b的该值分别为18.2 μM和36.4 μM。这意味着14.05的效力比这些参照物高出约35-70倍。 特异性作用机制:实验表明,这些新发现的抑制剂不影响αS纤维的延伸过程,这非常重要,因为抑制延伸可能会导致毒性更强的寡聚体累积。计算表明,这些分子能够有效延迟和减少寡聚体峰值的出现。图2:迭代学习发现的分子(I4.05)与一种目前处于临床试验阶段的αS聚集抑制剂(Anle-138b)的性能比较。a, 在有分子或1% DMSO存在下,10μM的αS溶液与25nM种子的动力学曲线(pH 4.8, 37°C)(n=3次重复;中心度量为平均值;误差为标准差(s.d.))。在初始筛选中,除第4次迭代外,所有分子均在2.5摩尔当量(25μM)下进行筛选,然后将有效分子在更低浓度下进行进一步验证:0.4μM(蓝色)、0.8μM(蓝绿色)、1.6μM(橙色),并以25μM的Anle-138b作为比较(红色圆圈)。1% DMSO阴性对照以紫色显示。以分子I4.05为例。实验结束时,通过Pierce BCA蛋白检测试剂盒在t=125小时检测到的αS单体浓度对终点进行归一化。b, 三种不同分子Anle-138b(紫色)、母体结构69(淡紫色)和I4.05(蓝色)存在下的近似反应速率(取为1/t₁/₂,在0和100之间归一化;中心度量为平均值)。I4.05的KIC₅₀由拟合曲线(蓝色)与水平虚线的交点指示。c, 还进行了高浓度种子实验(5μM种子,所有其他条件与a相同,n=3次重复;中心度量为平均值;误差为s.d.),以观察对延伸速率的任何影响,并结合从a中得到的二级成核速率来计算寡聚体通量。d, 使用从a和c中得到的速率,计算I4.05与临床试验分子Anle-138b的寡聚体通量。 生物学验证:结合亲和力与靶向病理聚集体 直接结合证据:使用表面等离子共振(SPR)技术,作者证实了分子14.05能够以纳摩尔级别的亲和力(在pH 4.8时K_D=68 nM,pH 8时K_D=13 nM)直接结合到αS纤维上。相比之下,Anle-138b在pH 4.8下未检测到结合,在pH 8下的亲和力也仅为微摩尔级别(K_Dapprox8.1 μM)。这两个数量级的亲和力差异与观察到的效力差异完美匹配。 靶点特异性:分子14.05对阿尔茨海默病相关的Aβ42蛋白的聚集和纤维结合均无明显效果,表明其并非泛泛的淀粉样蛋白抑制剂,而是对αS具有高度特异性。图4:分子与αS纤维的结合。a, 小分子与αS纤维上目标结合口袋结合的示意图。b, 在pH 4.8和pH 8下,不同浓度的I4.05与通过种子法生成的αS纤维结合的SPR响应曲线,并附有相应的分子结构。显示了每个分子浓度的原始数据(点)和相应的拟合曲线(实线)(n=2次重复)。y轴显示响应单位(RU)。αS纤维以2000 pg mm⁻²的浓度固定在CM5 Cytivia芯片上。拟合对应于1:1动力学结合模型,在pH 4.8时得到KD为68 nM,在pH 8时为13 nM。误差为平均值的标准误差(s.e.m.)。c, 不同浓度Anle-138b的SPR响应曲线。显示了每个分子浓度的原始数据(点)(n=2次重复)。在pH 4.8时无法获得准确的拟合。在pH 8时,1:1动力学结合模型得出的近似KD为8.1μM。误差为s.e.m.。d, 在1% DMSO或不同浓度I4.05存在下,2μM Aβ42的种子诱导动力学(40nM种子,n=2次重复;中心度量为平均值;误差为标准差)和SPR响应曲线(n=2次重复)。I4.05不能有效抑制Aβ42的二级成核或与Aβ42纤维结合。Aβ42纤维以2000 pg mm⁻²的浓度固定在CM5 Cytivia芯片上。 抑制病理相关聚集体:最关键的验证来自使用路易体痴呆(DLB)患者脑组织提取物作为“种子”的RT-QuIC实验。DLB中的αS纤维结构与帕金森病中的一致。结果显示,所有通过机器学习发现的苗头分子,都能有效抑制由真实病人脑源性病理种子诱导的αS聚集,并且效果优于母核分子。而Anle-138b在此实验条件下反而加速了聚集。图5:RT-QuIC脑源性种子扩增实验。a, RT-QuIC实验的示意图。使用来自患有DLB的患者脑组织的聚集体诱导αS聚集。来自患有CBD的患者脑部样本作为阴性对照。b, 在CBD种子存在下,7μM αS溶液的动力学曲线(pH 8, 42°C,以1分钟为间隔摇晃400 rpm,n=4次重复;中心度量为平均值;误差为标准差(s.d.))。CBD样本为1% DMSO(蓝色),7μM Anle-138b(蓝绿色),母体分子(橙色),I1.01(紫色),I3.02(红色),I3.08(青绿色)和I4.05(浅蓝色)。在此条件下,蓝绿色的Anle-138b诱导了聚集。c, 在DLB种子存在下,7μM αS溶液的动力学曲线(n=4次重复;误差为s.d.;所有其他条件与b相同)。DLB样本为1% DMSO(紫色),3.5μM分子(蓝色),7μM分子(蓝绿色)和25μM分子(橙色)。Anle-138b再次表现出加速而非抑制聚集。 对MSA病理种子同样有效:该分子对另一种突触核蛋白病——多系统萎缩症(MSA)患者的脑源性种子也表现出抑制活性。 直接测量寡聚体:通过微流控自由流电泳(µFFE)技术,研究人员能够直接分离并量化反应体系中的寡聚体。结果显示,在DMSO对照组中存在大量寡聚体,而加入分子13.02后,寡聚体的数量和大小均显著减少,而Anle-138b处理组的寡聚体数量甚至比对照组还多。图6:使用μFFE技术量化αS寡聚体。右上角:用AlexaFluor 488标记的αS(100μM, pH 7.4, 37°C,200rpm摇晃5分钟和静置1分钟的循环,n=4次重复;误差为标准差)补充了0.5μM种子和1% DMSO(紫色)或50μM Anle-138b(蓝绿色)或13.02(蓝色)在1% DMSO中。在这些条件下,Anle-138b轻微加速聚集,其中由于摇晃,断裂机制可能再次起作用,而13.02则减缓了聚集。在聚集时间进程的9小时处提取样品,并离心以从混合物中去除纤维,仅留下αS单体和可溶性寡聚体物种用于μFFE分析。左下角:μFFE方法的示意图,显示了经过AlexaFluor 488标记的αS寡聚体混合物进行μFFE。流体流动方向由箭头显示。电场的差异偏转使得在分析过程中能够将单体群体与寡聚体群体分离开。中下和右下角:对每个样品中检测到的聚集体群体的分析。条形图的y轴绘制了每个样品发出的平均光子数,该数值与颗粒数量和大小成正比。插图中标明了每个颗粒发出的平均光子数。 Q&A Q1: 本文得到的分子是抑制聚集还是结合αS纤维? A1: 两者都是,而且是因果关系。分子的作用机制是首先结合到αS纤维上,通过占据纤维表面的催化位点,从而抑制了二级成核过程,最终达到了抑制整个聚集反应的效果。SPR实验(图4)直接证明了分子与纤维的高亲和力结合,而动力学实验(图2)则证明了其对聚集的抑制效果。因此,可以说“结合αS纤维”是手段,“抑制聚集”是最终目的和结果。 Q2: 为什么这项研究一开始要用虚拟对接,而不是直接从机器学习开始? A2: 这是一个非常好的策略性问题。机器学习,尤其是在药物发现这样的复杂领域,需要一个合理的起点。在没有任何实验数据的情况下,模型无法知道应该学习什么样的分子特征。虚拟对接在这里扮演了“先锋”的角色,它基于蛋白质的3D结构,从数百万个分子中初步筛选出几十个最有可能与目标口袋结合的候选者。尽管对接的准确性有限,但它成功地提供了4个具有初步活性的“火种”(母核分子),为后续的相似性搜索和更关键的机器学习迭代提供了宝贵的初始训练数据和探索方向。 Q3: 为什么模型选择随机森林(RFR)和高斯过程(GPR)的组合,而不是更“时髦”的深度学习模型? A2: 这体现了在数据稀疏场景下建模的智慧。深度学习模型通常需要大量的训练数据才能表现良好。而本研究的初始训练集只有161个分子,对于深度学习来说太少了,很容易过拟合。随机森林是一种集成模型,对小数据集有很好的鲁棒性。更重要的是,与GPR的组合引入了不确定性量化的能力。GPR不仅能预测一个值,还能告诉我们这个预测有多“自信”。这使得主动学习策略可以更智能地选择下一个要测试的分子:既要“利用”已知的知识(选择预测活性高的),也要“探索”未知的领域(选择模型不确定,但可能带来新信息的分子)。 Q4: 实验中发现的抑制剂对体外重组蛋白纤维和病人脑源性纤维都有效,这是否说明两者结构很相似? A4: 这是一个非常深刻的观察。作者指出,他们最初用于对接和筛选的重组αS纤维结构(PDB: 6CU7)与后来从病人大脑中解析出的病理纤维结构(PDB: 8A9L)其实是不一样的。然而,他们在补充图S16中对比发现,这两种不同的纤维多晶型物在目标结合口袋区域存在一定的结构相似性。作者认为,这种口袋的相似性可能是“侥幸的”,但也正是因为这种相似性,使得基于重组蛋白发现的抑制剂,也能够幸运地对病理相关的聚集体起作用。这提示我们,即使体外模型与体内病理结构不完全一致,但如果能靶向一个保守的关键功能位点,仍然可能开发出有效的药物。 Q5: 为什么在RT-QuIC实验中,Anle-138b反而加速了αS的聚集? A5: 作者也注意到了这个“反常”现象。他们推测这可能与Anle-138b据报道的低溶解度有关。RT-QuIC实验条件(pH 8,剧烈振荡)与最初的筛选条件(pH 4.8,静置)有很大不同。在这些条件下,低溶解度的Anle-138b可能自身形成微小的聚集体或胶束,这些颗粒反而可能作为新的成核表面,异构地诱导了αS的聚集,从而表现出加速效应。这凸显了在不同实验条件下评估化合物活性的重要性。 Q6: 聚类时使用的“代表性分子”是如何定义的? A6: 在这项研究中,“代表性分子”(centroids)是通过Tanimoto相似性聚类产生的。具体来说,他们将对接分数最高的10,000个化合物,使用基于Morgan指纹的Tanimoto相似性度量进行聚类,相似性截断值为0.75。每个形成的簇(cluster)中,会选出一个分子作为该簇的代表,这个分子就是“代表性分子”或“质心”。这么做的目的是为了在保证化学多样性的前提下,减少需要进行实验测试的化合物数量。 Q7: 机器学习模型的训练效果具体如何?R²值是多少? A7: 论文中提到,研究团队测试了多种机器学习模型的组合,最终发现RFR-GPR堆叠模型在预测对接分数时表现最好。虽然在预测实际的、数据量较小的聚集实验数据时,QSAR模型的R²值表现“一般”(modest),但这主要是由于训练数据稀疏造成的。当模型用于预测数据量稍大的对接分数时,其R²值是前者的三倍,达到了约0.6-0.7。具体的R²值和其他性能指标在补充图S1和补充图S6中有详细展示。 补充信息(SI)中的亮点 模型选择的严谨性(图S1):SI详细展示了多种机器学习模型(线性回归、多层感知器、随机森林、高斯过程及其组合)的学习曲线。这表明作者经过了严谨的模型比较和选择,最终确定RFR-GPR组合是针对该问题的最优解,而不是随意选择了一个模型。 化学空间的演化(图S2, S14):SI中的图表直观地展示了从最初的母核分子到经过多轮迭代后发现的高效抑制剂,其化学结构是如何一步步演变的。可以看出,模型保留了母核69中的一些关键药效团(如吡唑烷二酮环),同时对其他部分进行了大胆的修饰,实现了“探索式优化”。 模型可解释性的尝试(图S15):作者利用SHAP(Shapley Additive Explanations)技术,尝试打开机器学习的“黑箱”。他们通过分析SHAP值,将潜在空间中的维度与分子中的特定化学亚结构(如吡唑烷二酮、色原酮等)关联起来。这表明,模型不仅仅是在进行无意义的拟合,而是在学习和识别与活性相关的、具有化学意义的结构特征。 病理结构口袋的相似性(图S116):这是解释为什么药物有效的一个关键证据。SI中直接对比了体外重组纤维和病人脑源性纤维的冷冻电镜结构,并指出了两者在目标结合口袋区域的相似性,为药物的广谱有效性提供了结构基础。 关键结论与批判性总结 核心结论 成功建立并验证了一个迭代式、基于结构的机器学习药物发现流程,能够高效地识别和优化靶向α-突触核蛋白二级成核过程的抑制剂。 该方法在数据稀疏的早期药物发现阶段表现出色,其命中率(最终达到21.4%)比传统高通量筛选高出一个数量级,并且显著优于传统的相似性搜索策略。 发现了多个新型、高效的αS聚集抑制剂,其中最优秀的分子(14.05)在体外实验中的抑制效力(KIC₅₀ = 0.52 μM)和与αS纤维的结合亲和力(Kᴅ = 13-68 nM)方面,均比已进入临床试验的参照分子Anle-138b高出约两个数量级。 验证了抑制剂的生物学相关性,证明其不仅对体外重组αS纤维有效,还能抑制从帕金森病(DLB)和多系统萎缩症(MSA)患者脑组织中提取的病理相关聚集体的扩增,并且对Aβ42蛋白无交叉反应,显示出高度特异性。 批判性总结与展望 这项研究是机器学习赋能神经退行性疾病药物发现的一次精彩示范。它巧妙地将基于病理机制的深刻理解(靶向二级成核)与前沿的主动学习策略相结合,为在数据稀疏这一普遍困境下如何高效“炼丹”提供了一个极具操作性的范例。其发现的化合物效力之高,令人印象深刻,不仅为帕金森病的治疗提供了新的候选分子,也强有力地证明了该方法的巨大潜力。 该方法最值得称道的智慧在于其“迭代”和“不确定性导向”的核心思想。它不是试图一步到位地找到“神药”,而是通过快速的“预测-验证”循环,让模型在与实验的“对话”中不断学习和进化,最终逼近最优解。 尽管如此,该方法仍存在局限性,最主要的是其依赖于一个预设的化合物筛选库,这限制了其探索全新化学结构的能力。正如作者所言,结合生成式人工智能(Generative AI)和强化学习,实现从头分子设计,将是该领域的下一个突破口。此外,将药代动力学、毒性等多重参数纳入优化目标,将使其更贴近真实的药物研发需求。总而言之,这项工作为蛋白质错误折叠疾病的药物发现开辟了一条充满希望的新路径,也预示着AI驱动的闭环式药物研发将成为未来的主流。
Drug Design
· 2025-08-16
VMD Gets a New Tool! PACKMOL-GUI: One-Stop Solution for Complex Molecular System Building
VMD再添利器!PACKMOL-GUI:一站式搞定复杂分子体系的“搭积木”难题 本文信息 标题: PACKMOL-GUI: An All-In-One VMD Interface for Efficient Molecular Packing 作者: Jian Huang, Chenchen Wu, Xiner Yang, Zaixing Yang, Shengtang Liu, Gang Yu 单位: Soochow University, Children’s Hospital of Zhejiang University School of Medicine 引用格式: Huang, J., Wu, C., Yang, X., Yang, Z., Liu, S., & Yu, G. (2025). PACKMOL-GUI: An All-In-One VMD Interface for Efficient Molecular Packing. Journal of Chemical Information and Modeling, 65, 778-784. 摘要 PACKMOL是计算化学领域广泛使用的分子建模工具。然而,长期以来,它一直缺乏一个强大的、集参数设置与分子和几何约束可视化于一体的开源图形用户界面(GUI),这在很大程度上阻碍了其巨大优势的发挥。为了解决这一局限,我们开发了一款名为PACKMOL-GUI的VMD插件,它利用了Tcl/Tk工具包的动态可扩展性。该GUI允许用户通过一个直观的面板配置PACKMOL的所有参数,同时借助VMD软件,能够方便地可视化分子结构以及包括立方体、盒子、球体等在内的各种几何约束。VMD与PACKMOL之间的无缝交互,为构建复杂的分子系统提供了一个直观、高效的一体化平台。 背景 分子动力学(MD)模拟是研究复杂分子系统热力学和动力学行为的核心计算方法。在MD模拟工作流程中,一个至关重要的前提步骤是构建一个包含多种分子混合物的、合理的初始构象。想象一下,要在一个模拟盒子中搭建一个复杂的细胞膜体系,你需要精确地放置成百上千个脂质分子、水分子,甚至还有蛋白质和离子,这就像是在一个微观世界里玩一个极其精密的“搭积木”游戏。 为了解决这个分子“堆叠”或“填充”的问题,PACKMOL应运而生,并成为该领域应用最广泛的程序之一。它允许用户在定义的空间区域内(如球体、立方体或更复杂的形状)放置指定数量的不同类型的分子,同时避免原子间的严重重叠。然而,PACKMOL的强大功能长期以来被其原始的命令行操作方式所束缚。用户需要手动编写包含大量坐标、几何约束和分子类型的文本输入文件,这个过程不仅繁琐、耗时,而且极易出错。更重要的是,用户无法直观地看到自己设置的几何约束区域与分子之间的关系,只能在运行结束后通过可视化软件检查结果,这使得调试过程非常低效。 尽管之前有研究者尝试开发PACKMOL的GUI,例如GEMS-Pack和Atomistica.online,但它们仍存在诸多不足。GEMS-Pack目前已无法访问,并且其依赖的Python 2.7和PyQt5技术栈面临被淘汰的风险,给安装带来挑战。而Atomistica.online则在PACKMOL参数设置、分子与几何约束的可视化方面功能有限,并且有计算时间限制。因此,科研社区迫切需要一个友好的、开源的、并且能将参数设置、分子可视化和约束可视化三者无缝集成的GUI工具。 关键科学问题 本文旨在解决的核心科学问题是:如何为功能强大但操作繁琐的PACKMOL程序开发一个稳定、开源且功能全面的一体化图形用户界面,使其能够无缝集成到主流的分子可视化软件(如VMD)中,从而将复杂的命令行输入文件生成过程,转变为一个直观的、“所见即所得”的交互式建模体验,最终大幅提升构建复杂分子体系的效率和便捷性? 创新点 VMD插件形式:利用VMD广泛的用户基础及其通过Tcl/Tk脚本的动态可扩展性,将PACKMOL的功能直接集成到科研人员熟悉的可视化环境中,无需修改VMD源码或重新编译。 一体化平台:首次实现了一个集参数配置、分子结构可视化和几何约束实时可视化于一体的完整工作流。用户可以直接在VMD窗口中看到设置的几何形状(如球体、盒子),极大地增强了操作的直观性。 用户友好设计:提供了丰富的内置功能以提升效率,包括一个包含常用分子(脂质、溶剂、离子等)的共享数据库,以及基于体积或表面积自动估算最大可容纳分子数的功能。 开源与跨平台:该工具是开源的,并且由于VMD本身支持Windows、Linux和macOS,PACKMOL-GUI也天然地支持这些主流操作系统。 研究内容 核心方法:PACKMOL-GUI工作流详解 PACKMOL-GUI的设计遵循PACKMOL程序本身的数据流逻辑,将整个建模过程分解为一系列有序的步骤。用户在VMD的“Extensions”菜单中启动插件后,便可进入其主界面。 图1:PACKMOL-GUI工作流概览 整个工作流程可以清晰地划分为几个核心模块,从通用参数的初始化开始,到分子导入、空间约束定义,最终生成输入文件并运行PACKMOL。 graph TD direction LR subgraph "PACKMOL-GUI 核心工作流" A("VMD Main<br/>Extensions->PACKMOL") --> B("初始化通用参数"); subgraph "通用参数" direction LR C["PACKMOL路径<br/>公差/文件类型/pbc<br/>输出目录等"] end B -- "设置" --> C; B --> D("导入分子"); subgraph "分子数据库" direction LR E[("可用数据集")] end D -- "从数据库加载" --> E; D --> F("设置分子数量"); F --> G("定义空间约束"); subgraph "几何约束可视化" direction LR H["球体/椭球体<br/>圆柱/平面/盒子<br/>高斯曲面"] end G -- "实时显示几何形状" --> H; G --> I("生成输入文件<br/>并运行PACKMOL"); I --> J("输出文件"); end 图2:PACKMOL-GUI的布局 PACKMOL-GUI的界面布局遵循自上而下的逻辑顺序,分为五个核心模块,每个模块由不同颜色的虚线边框明确区分。 通用参数模块 (General Parameters Module): 首次使用时,用户需要指定本地PACKMOL程序的可执行文件路径。 该模块允许设置全局参数,如公差(tolerance)、输出文件类型(filetype)、周期性边界条件(PBC)等。 所有设置(如输出目录、参数等)都会被保存在一个名为packmol_info.json的文件中,方便下次使用。 为了方便用户,界面右侧还内嵌了PACKMOL的用户手册,可随时查阅。 分子导入模块 (Molecule Import Module): 用户可以通过“Import”, “Delete”, “Refresh”按钮来导入、删除或同步分子列表。 该模块集成了一个包含常用生物分子、溶剂、气体分子、离子和纳米材料的数据库,极大地便利了复杂系统的建模。例如,离子类别甚至包括了放射性核素离子。 一个关键特性是自动估算最大分子数。我们知道,在一个有限的空间里能塞进多少分子是有限的。PACKMOL-GUI提供了两种估算方法: 体积估算法 \[N_{vmax}=\frac{V_{constraints}}{V_{molecule}}\] 公式的通俗解释 这个公式用于估算在一个给定的约束体积 $V_{constraints}$ 中,最多可以填充多少个分子。$N_{vmax}$ 是最大分子数,$V_{molecule}$ 是单个分子的体积。这个体积值可以通过MoloVol等工具计算得出。 表面积估算法(针对膜系统) \[N_{smax}=\frac{S_{constraints}}{APL_{molecule}}\] 公式的通俗解释 对于脂双层这样的膜系统,更关心的是在膜的表面能铺多少个脂质分子。$N_{smax}$ 是最大脂质分子数,$S_{constraints}$ 是约束形状提供的膜表面积,$APL_{molecule}$ 是每个脂质分子的平均占用面积(Area Per Lipid)。 约束模块 (Constraints Module): 这是PACKMOL程序最具特色的功能,也是该GUI的核心。 用户可以为导入的分子或其中的特定原子添加、修改或删除约束。 位置约束: 可以定义分子位于某个几何形状的“内部(inside)”、“外部(outside)”、“上方(over)”或“下方(below)”。 几何类型: 支持多种几何形状,包括立方体、盒子、球体、椭球体、平面、圆柱体和高斯曲面。 实时可视化: 当用户输入几何参数并按下回车键后,相应的几何形状会立即在VMD的主显示窗口中被绘制出来。用户还可以通过界面上的单选按钮控制形状和标签的显示/隐藏,并修改线条粗细、颜色等,实现了真正的“所见即所得”。 输入文件生成与执行模块 (Input File Generation and Execution Module): 在所有参数配置完成后,点击“generate”按钮,即可在左侧的文本框中看到生成的PACKMOL输入文件。 用户可以点击“save”保存该文件,同时为了防止文件丢失,程序在生成时会自动在工作目录下保存一个带时间戳的副本。 确认无误后,点击“run”按钮即可在后台调用PACKMOL程序执行计算。 输出日志模块 (Output Log Module): PACKMOL程序的实时运行状态和输出信息会被重定向到该模块的文本框中,方便用户监控执行过程并快速定位和修正输入文件中的错误。 案例研究 为了展示PACKMOL-GUI的强大性能,作者复现了两个复杂的分子体系构建任务。 案例一:构建双层棕榈酸球形囊泡 这是一个来自PACKMOL官网的经典案例,目标是构建一个被水溶液包围的、内部也含有水核的脂质囊泡。 图3:内外均有水的双层球形囊泡示例 这个复杂的体系需要对水分子和棕榈酸分子施加四种不同的空间几何约束。 内部水核 (water-0):被约束在一个半径为13 Å的球体内部。 内层脂质 (palmitoyl-1):其亲水头部被约束在一个半径为14 Å的球内,而疏水尾部则被约束在一个半径26 Å的球外。 外层脂质 (palmitoyl-2):其疏水尾部被约束在一个半径29 Å的球内,而亲水头部则被约束在一个半径41 Å的球外。 外部溶剂 (water-3):被约束在一个边长为90 Å的立方体盒子内部,同时还要满足位于半径为43 Å的球体外部的条件。 在PACKMOL-GUI中,用户可以直观地看到这几个层层相套的球形和立方体约束(如图3a所示),并使用Molcontroller工具将不同分子移动到各自的几何区域内进行预览,从而确保约束设置的准确性。 案例二:阳离子MOF材料富集放射性离子 这个案例来自作者之前的研究,目标是构建一个包含阳离子金属有机框架(MOF)材料SCU-103、多种竞争性阴离子(OH⁻, NO₃⁻, SO₄²⁻, ⁹⁹TcO₄⁻)、抗衡离子和大量水分子的复杂体系。作者提到,在之前的工作中,他们使用GROMACS和Molcontroller等工具迭代构建这个体系,过程非常繁琐耗时。 图4:用于吸附⁹⁹TcO₄⁻的阳离子MOF SUC-103 使用PACKMOL-GUI,这个过程变得异常高效。 MOF约束:首先将SCU-103材料放置在由一个蓝色盒子定义的中心区域。 离子约束:在MOF表面的上下两侧,使用黄色和橙色的盒子来定义各种离子的初始分布区域。 溶剂约束:最后,使用一个赭石色的盒子来定义整个水溶剂的边界。 通过GUI的可视化功能,用户可以清晰地看到代表不同约束区域的彩色盒子(如图4a所示),从而快速、准确地完成整个复杂系统的初始构象搭建。 Q\&A Q1: PACKMOL-GUI相比于之前的GEMS-Pack等GUI工具有哪些本质上的优势? A1: 最核心的优势是深度集成与可视化。PACKMOL-GUI是作为VMD的插件运行的,这意味着它能直接利用VMD强大的分子可视化和操作能力。用户在设置几何约束时,可以实时在VMD窗口中看到这些约束(如球体、盒子)的3D表示,并可以同时显示分子,这是之前工具所不具备的。这种“所见即所得”的方式从根本上解决了命令行操作“盲人摸象”的痛点。此外,它是一个活跃维护的开源项目,避免了旧工具有的技术栈过时和无法访问的问题。 Q2: 安装和使用PACKMOL-GUI对用户的技术背景有什么要求? A2: 要求非常低。用户需要预先安装好VMD和PACKMOL。PACKMOL-GUI的安装过程非常简单,只需将下载的文件夹放置到VMD的插件目录中,并在VMD的启动文件中添加一行命令即可。整个过程无需编译,并且有详细的README文件指导。熟悉VMD基本操作的用户可以非常快速地上手。 Q3: 既然PACKMOL-GUI如此强大,它是否存在一些潜在的局限性? A3: 尽管论文没有专门讨论局限性,但可以推断出几点。首先,它的性能和稳定性完全依赖于VMD。如果VMD在处理超大规模体系(例如数百万原子)时变得卡顿,那么GUI的交互体验也会下降。其次,虽然GUI简化了操作,但正确设置物理化学上合理的约束仍然需要用户的专业知识。例如,在囊泡案例中,如何确定内外层脂质的约束半径,仍然需要用户对手头体系的尺寸有清晰的理解。最后,GUI的最终产物是PACKMOL的输入文件,如果PACKMOL本身在处理某些极端复杂的几何约束时收敛困难,GUI也无法解决这个后端计算的根本问题。 关键结论与批判性总结 核心结论 成功开发了一款名为PACKMOL-GUI的VMD插件,它首次为PACKMOL提供了一个集参数设置、分子可视化和几何约束实时可视化于一体的强大、开源图形用户界面。 实现了与VMD的无缝集成,创建了一个直观、高效的一体化平台,用户可以通过“所见即所得”的方式交互式地构建复杂的分子系统。 显著提升了建模效率,通过内置的分子数据库、自动分子数估算和清晰的模块化界面,将原本繁琐耗时的命令行操作转变为简单的图形化点击和设置。 通过两个复杂的案例研究(球形囊泡和MOF吸附体系),证明了PACKMOL-GUI在处理真实科研问题时的高效性和可靠性。 批判性总结与展望 PACKMOL-GUI的出现,无疑是计算化学和分子模拟领域一个极其重要且实用的工程实践成果。它精准地解决了PACKMOL这个“叫好不叫座”(功能强大但使用不便)工具的核心痛点,极大地降低了构建复杂分子体系初始构象的门槛。通过将其巧妙地植入VMD这一事实上的行业标准可视化软件中,作者确保了该工具能被最广泛的科研群体快速接受和使用。可以预见,该插件将极大地促进VMD和PACKMOL的用户群体增长,并成为教授分子模拟课程、进行探索性建模的必备工具。 潜在的局限性在于,该工具的价值主要体现在“提效”而非“创新”。它没有改变PACKMOL的算法核心,因此无法解决PACKMOL本身可能存在的收敛性或算法上的难题。 未来的发展方向可能包括:1)与更多的分子操纵或模拟设置工具(如Molcontroller的更深度集成)联动,实现更复杂的自动化建模流程。2)引入机器学习模型,根据分子类型和约束形状,智能推荐更优的堆叠策略或参数。3)进一步扩充和维护其内置的分子数据库,使其成为一个更加全面的分子建模资源库。
Molecular Dynamics
· 2025-08-15
Less Charge, Better Effect? Deciphering How Hydrophobic Interactions Enhance Gene Delivery Efficiency
电荷少,效果好?解密疏水作用如何助力高效基因递送 本文信息 标题: Role of Charge Density of Polycations in DNA Complexation and Condensation 作者: Jianxiang Huang, Yangwei Jiang, Dong Zhang, Jingyuan Li, Youqing Shen, Ruhong Zhou 单位: 浙江大学生命科学学院定量生物学中心 引用格式: Huang, J., Jiang, Y., Zhang, D., Li, J., Shen, Y., & Zhou, R. (2025). Role of Charge Density of Polycations in DNA Complexation and Condensation. Biomolecules, 15(7), 983. https://doi.org/10.3390/biom15070983 摘要 聚阳离子基因载体在基因递送领域已被广泛研究,其电荷密度在凝聚核酸中扮演着关键角色。最近,我们合成了两种具有不同电荷密度的聚阳离子:聚(2-(二甲氨基)乙基甲基丙烯酸酯)(表示为A100)和一种由2-(四氢亚甲基亚氨基)乙基甲基丙烯酸酯与2-(二异丙氨基)乙基甲基丙烯酸酯以3:1进料比共聚的聚合物(表示为B75D25)。尽管B75D25基载体的电荷密度较低,但其展现出比A100基载体更高的转染效率,这启发了一个假说:疏水相互作用,而不仅仅是高电荷密度,增强了DNA的复合与基因递送。本研究旨在通过分子动力学(MD)模拟研究DNA与B75D25和A100的复合过程,以探究这些差异背后的分子机制。我们的模拟显示,DNA被B75D25相当均匀地覆盖,并且这种复合不仅由与DNA的静电吸引驱动,更重要的是由B75D25之间的疏水相互作用驱动。相反,由于A100之间强烈的静电排斥,只有一小部分A100能与DNA结合。我们的结果揭示了疏水相互作用对低电荷密度B75D25与DNA复合的贡献。这些结果表明,高电荷密度可能并非DNA凝聚和高效基因递送的必要条件。 背景 基因治疗,通过将治疗性核酸(如DNA)递送到目标细胞以纠正遗传缺陷,正逐渐成为一种前景广阔的革命性医疗策略。然而,脆弱的核酸分子无法独自“闯荡”复杂的体内环境,它们需要被包裹在载体中,以保护其免受降解,并帮助其穿透细胞膜的壁垒。目前,临床上使用的基因疗法多依赖于病毒载体,但其高昂的成本、有限的装载能力、潜在的免疫原性和致癌风险,极大地限制了其广泛应用。 因此,开发更安全、更经济的非病毒载体成为了该领域的关键。其中,聚阳离子是一类极具潜力的非病毒载体。它们是带有正电荷的长链聚合物,能够通过静电吸引力与带负电的DNA结合,并将其“压缩”成纳米级别的致密颗粒(称为“polyplex”),从而保护DNA并促进其进入细胞。长期以来,该领域的一个核心设计准则是:聚阳离子的电荷密度越高,其与DNA的结合力就越强,形成的颗粒就越致密,基因递送效率也理应越高。这个直观的理论指导了许多载体的设计。 关键科学问题 然而,近期的实验结果开始挑战这一传统认知。本文作者团队前期合成并测试了两种结构相似但电荷密度差异巨大的聚阳离子:A100(在pH 7时约有50%的单元带正电,高电荷密度)和B75D25(在pH 7时仅有约10%的单元带正电,低电荷密度)。实验结果惊人地发现,低电荷密度的B75D25所介导的基因转染效率,反而显著高于高电荷密度的A100。 这一反常现象引出了本研究的核心科学问题:为何在静电吸引力明显更弱的情况下,低电荷密度的B75D25反而能成为更优秀的基因载体? 是什么被忽略的关键物理化学作用力在其中扮演了更重要的角色?本研究旨在通过全原子分子动力学模拟,从分子层面深入剖析这两种聚阳离子与DNA相互作用的动态过程,揭示这一反常现象背后的物理机制。 创新点 挑战传统认知:通过原子级别的模拟证据,有力地挑战了“电荷密度越高越好”的传统基因载体设计准则。 揭示关键机制:首次从分子动力学角度,清晰地揭示并量化了聚阳离子间的疏水相互作用在稳定DNA复合物中的主导作用。 提供新设计思路:研究结果表明,通过巧妙地平衡疏水性与静电相互作用,可以设计出电荷密度更低、潜在毒性更小且效率更高的非病毒基因载体,为未来的载体设计提供了新的方向。 研究内容 核心方法:全原子分子动力学模拟 为了在原子尺度上“观察”DNA与聚阳离子的相互作用,研究者构建了精细的计算机模拟体系。他们将一段标准的B型DNA(Drew-Dickerson十二聚体)置于水盒子中央,周围环绕着24条聚阳离子链(A100或B75D25),并加入离子以模拟生理盐浓度。随后,利用经典的GROMACS软件进行长达数百纳秒(ns)的分子动力学模拟,追踪每一个原子的运动轨迹。 graph TD subgraph "体系构建" direction LR A["DNA模型<br/>Drew-Dickerson十二聚体"] --> C; B["聚阳离子模型<br/>A100 (高电荷) 或 B75D25 (低电荷)"] --> C; end subgraph "模拟与分析" direction LR C{{"MD模拟<br/>GROMACS软件<br/>数百纳秒轨迹"}} --> D[("轨迹分析")]; end subgraph "关键分析手段" direction LR D --> E["COM距离<br/>分析整体结合趋势"]; D --> F["接触分析<br/>区分疏水与静电相互作用"]; D --> G["PMF计算<br/>量化相互作用强度"]; end classDef main fill:#e6f2ff,stroke:#007bff,stroke-width:2px; class C,D main; 结果与分析 本文的研究思路遵循着“观察反常现象 -> 提出假说 -> 精细化验证 -> 得出结论”的经典科研逻辑,如下图所示: graph TD A["<b>现象</b><br/>低电荷B75D25完全包裹DNA<br/>高电荷A100仅部分结合"] --> B{{"<b>核心假说</b><br/>B75D25的优异性能<br/>由<b>链间疏水作用</b>主导,<br/>而非链与DNA间的静电作用"}}; subgraph "假说验证" direction LR B --> C["<b>证据1:接触分析</b><br/>B75D25链间以疏水接触为主"]; B --> D["<b>证据2:自由能计算</b><br/>拉开B75D25需克服巨大能量壁垒<br/>(40.6 kcal/mol)"]; end subgraph "结论" direction LR E(<b>主要结论</b><br/>疏水作用是低电荷载体<br/>形成稳定包裹的关键) --> F(<b>最终推论</b><br/>平衡疏水与静电是更优的设计策略); end A --> B C & D --> E A --> F classDef observation fill:#e6f2ff,stroke:#007bff,stroke-width:2px; classDef hypothesis fill:#e8fef0,stroke:#28a745,stroke-width:2px; classDef evidence fill:#fff,stroke:#6c757d,stroke-width:2px; classDef conclusion fill:#fff8e1,stroke:#ffc107,stroke-width:2px; class A observation; class B,G hypothesis; class C,D evidence; class E,F conclusion; 1. 反常识的包裹现象:为何“弱者”胜出? 模拟结果首先从宏观上复现了实验的怪异现象。对于低电荷密度的B75D25体系,24条聚阳离子链在模拟开始后迅速向DNA靠拢,并在约25 ns内全部聚集在DNA周围,形成了一个厚度可达2.5 nm的、完整且均匀的保护层。相反,对于高电荷密度的A100体系,尽管其与DNA的静电吸引力更强,但由于A100链之间强烈的同种电荷排斥力,平均只有约7条(最多约10条)链能够成功结合到DNA上,其余大部分都被排斥在外,未能形成有效的保护层。补充材料中的数据显示(图S7),B75D25的包裹层在25 ns内就迅速稳定地包含了全部24条聚合物链,而A100的包裹层始终只有不到一半的链参与,定量地证实了这种包裹效率的巨大差异。 图2:聚阳离子-DNA的复合过程及体系的最终模拟构象。 (a) DNA与聚阳离子之间平均质心(COM)距离随时间的变化。阴影误差带代表平均值的标准误差。(b) 从DNA开始的净电荷分布。误差棒代表平均值的标准误差。(c) B75D25/DNA复合物的最终模拟构象,虚线圆标记了电荷中和距离 $R_{0}$ 以内的区域。(d) A100/DNA复合物的最终模拟构象。 2. 揭秘B75D25的“隐藏力量”:疏水相互作用 既然静电吸引无法完全解释B75D25的优异包裹能力,研究者将目光投向了另一种重要的作用力:疏水相互作用。通过精细的接触分析,他们发现,在B75D25形成的保护层中,聚阳离子链与链之间的相互作用,主要由非极性原子间的接触(即疏水相互作用)所主导,其接触数量显著高于极性原子间的接触。这表明,B75D25链倾向于彼此“抱团”,形成一个稳定的疏水核心,从而将DNA包裹在内。 图3:B75D25聚合物间的疏水相互作用。 (a) B75D25的疏水接触表面积随时间的变化。(b) B75D25之间的接触原子对(红色线为极性-极性对,绿色线为非极性-非极性对)。(c) B75D25与DNA之间的疏水接触表面积随时间的变化。(d) B75D25与DNA之间的接触原子对。 为了进一步量化这种“抱团”的力量有多强,研究者通过伞形采样模拟计算了将一条B75D25链从复合物中拉出的自由能代价(PMF)。结果显示,拉出一条B75D25链需要克服高达 $40.6\ \mathrm{kcal/mol}$ 的能量壁垒,这是一个非常巨大的数值,强有力地证明了B75D25聚合物之间的疏水聚集是其形成稳定保护层的根本原因。 图4:沿着反应坐标(定义为被选择的B75D25链的COM与DNA的COM之间的距离)的平均力势(PMF)。 插图显示了用于PMF计算的反应坐标。 3. 重新审视静电相互作用 分析同样证实,B75D25的质子化胺基与DNA的磷酸骨架之间确实存在静电吸引和氢键作用。然而,这些相互作用的强度和数量都相对温和。相比之下,A100与DNA形成的静电相互作用虽然更强,但这种强作用力是一把“双刃剑”,它同时也导致了A100链之间更强烈的排斥,最终阻止了它们形成有效的整体包裹。这一电荷密度的差异在补充材料的静电势表面图中(图S2)得到了直观的展示,A100表面呈现出大片的强正电势(蓝色),而B75D25表面则大部分呈中性(白色)。因此,B75D25的成功策略可以总结为:利用温和的静电吸引将自身“锚定”在DNA表面,再依靠强大的链间疏水作用力完成“自组装”,形成稳定外壳。 图5:DNA与B75D25聚合物的相互作用。 (a) B75D25聚合物的质子化胺氮原子围绕DNA磷酸磷原子的径向分布函数。(b) DNA(P)与B75D25(质子化N)相互作用的代表性快照。(c) 接触数的时程演化。(d) 氢键数量的时程演化。 Q\&A Q1:“疏水接触表面积”具体是指什么?它指的是B75D25链与链之间,还是B75D25与DNA之间的接触? A1:这是一个非常关键的区别。本文分析了两种疏水接触表面积:一种是B75D25链与链之间的(图3a),另一种是B75D25与DNA之间的(图3c)。结果显示,链与链之间的疏水接触表面积(最终达到约 $180\ \mathrm{nm}^2$)远大于链与DNA之间的(约 $5\ \mathrm{nm}^2$)。您观察得非常正确,DNA的疏水碱基主要位于双螺旋内部,其暴露在表面的主要是亲水的磷酸脱氧核糖骨架。因此,B75D25与DNA的直接疏水作用相对较弱。这恰恰反过来强化了本文的核心论点:驱动B75D25形成稳定多层包裹的主要力量,并非来自与DNA的直接作用,而是来自B75D25链与链之间强大的疏水“抱团”效应。 Q2:B75D25的非极性接触比极性接触多,有没有可能是因为它本身的非极性原子就比极性原子多?作者是否考虑了这一点? A2:这是一个非常深刻的问题,触及了数据归一化的核心。确实,从化学结构上看,B75D25的疏水单元(TMI)占75%,其非极性碳氢原子在数量上就远多于极性质子化氮原子。…… 小编觉得就应该是说明自己跟自己是疏水,那大部分原子都是非极性的当然是非极性接触。。 B75D25和DNA的结合仍然是静电驱动的,但大量B75D25和DNA的结合是疏水主导。 Q3:为什么后续的几张图(如PMF和RDF分析)主要表征B75D25,而没有对A100进行同样的分析? A3:这反映了研究的逻辑聚焦。在初步的模拟中,研究已经明确了一个核心现象:B75D25成功形成了稳定的多层包裹,而A100因为强烈的内部排斥而失败了。因此,后续研究的核心科学问题就变成了:“成功者”B75D25究竟是靠什么机制成功的? 于是,后续的PMF(测量聚集强度)和RDF(测量静电作用)等精细分析,都是为了深入刻画B75D25的成功机制。对A100进行PMF分析的意义不大,因为它根本没有形成一个可供“拉开”的稳定聚集体。作者在补充材料(图S12)中确实也计算了A100的RDF,并证实了其与DNA存在很强的静电吸引。 小编觉得还是可以拉的…… Q4:这项研究对未来设计基因载体有何具体的指导意义? A4:它提供了一个全新的设计范式。传统的设计思路是尽可能增加聚合物的正电荷。而本研究表明,一个更优的策略是“疏水与静电的协同设计”。未来的基因载体可以设计成这样:1)保留适量的正电荷,足以让载体与核酸发生初始的静电吸引;2)引入可控的疏水基团,利用疏水效应驱动载体分子自组装成稳定的纳米颗粒核心。这种设计不仅可能提高包裹效率和稳定性,还可能因为总体电荷较低而降低细胞毒性。 Q5:高电荷密度的A100与DNA之间存在很强的静电吸引,这个事实如何支撑“链间静电排斥是其失败主因”的结论? A5:这个逻辑是成立的,它通过排除法得出了结论。首先,补充材料(图S6, S12)的数据证实了A100与DNA的吸引力非常强(甚至强于B75D25)。这就排除了“吸引力不足”是A100包裹失败的原因。既然吸引力足够强,但大部分A100链依然无法靠近DNA,那么必然存在一个更强大的、阻止它们靠近的拮抗力。在水溶液和离子环境中,对于带有大量同种电荷的A100分子链来说,这个力只能是它们彼此之间的静电排斥力。因此,正是因为“与DNA的吸引力很强”这个前提,我们才能更有信心地断定,是“链间的排斥力”阻止了更多A100的结合。 也不算支撑,就是排除了一个答案 Q6:研究的核心论点是疏水作用“主导”了B75D25的包裹行为,但图5也显示了稳定的静电和氢键相互作用。我们如何客观评估这两种作用力的相对重要性? A6:这是一个非常深刻的批判性问题。作者的“疏水主导”论点主要基于两个证据:1)链间的非极性接触数量远超极性接触(图3b);2)将一条链从聚集体中拉开需要克服巨大的能量壁垒($40.6\ \mathrm{kcal/mol}$,图4)。然而,正如您所指出的,图5也清晰地显示了B75D25与DNA之间存在着峰值尖锐的径向分布函数(RDF)和持续存在的氢键,这证明静电相互作用同样不可或缺。 一个更严谨的解读是:静电吸引是“必要非充分”条件,而疏水作用是“决定性”因素。可以这样理解:静电吸引像是“船锚”,负责将第一批B75D25分子链从溶液中捕获并锚定到DNA表面。没有这个初始步骤,B75D25链将只是在溶液中随机漂浮。然而,仅靠这个“船锚”不足以形成一个稳定厚实的保护层,因为链与链之间仍然存在一定的排斥。此时,强大的链间疏水作用开始扮演主角,它像“万能胶”一样,将已经锚定和新到来的B75D25链紧密地粘合在一起,克服了它们之间的排斥力,最终形成了那个完整的多层包裹结构。因此,静电作用负责“启动”,而疏水作用负责“建成并稳定”。 Q7:研究比较了50%带电的A100和10%带电的B75D25。是否存在一个“最佳电荷密度”的甜点区? A7:这是一个极好的问题,也是本研究未能直接回答的。本文通过两个极端的例子,雄辩地证明了“越高越好”的理论是错误的,并揭示了疏水作用的重要性。但这确实留下了一个开放性问题:是否存在一个最佳的平衡点?例如,一个25%或30%带电、同时保持疏水性的聚合物,是否会表现出比B75D25更优的性能?本研究的结论强烈暗示了这样一个“甜点区”的存在,即电荷密度既要足够强以启动与DNA的结合,又要足够弱以避免过度的链间排斥。探索这个最佳区间,将是后续研究中一个非常有价值的方向。 Q8:模拟使用的是一段短的、线性的DNA。真实世界中的DNA(如质粒)是环状且超螺旋的,这会对结果产生什么影响? A8:这个问题触及了模型简化与生物现实之间的差距。使用短链DNA是计算模拟中的常见简化,但真实情况远为复杂。超螺旋的质粒DNA具有更紧凑的结构和更高的局部电荷密度,这可能会增强与聚阳离子的初始静电吸引。然而,其复杂的拓扑结构也可能对聚合物的缠绕和包裹方式提出新的挑战。例如,聚合物链可能被“卡”在DNA的扭结中。此外,本文的模拟也没有考虑DNA末端效应,而补充材料(图S8)中的周期性DNA模拟初步探讨了这一点。总的来说,虽然本研究揭示的基本物理原理(静电vs疏水)很可能同样适用,但这些原理在更复杂的DNA拓扑结构上如何具体表现,仍需进一步的研究。 关键结论与批判性总结 关键结论 本研究通过全原子分子动力学模拟,为“低电荷密度聚阳离子B75D25比高电荷密度聚阳离子A100具有更优的基因转染效率”这一反常实验现象提供了深刻的分子机制解释。研究明确指出,一个成功的基因载体不仅需要与DNA有足够的静电吸引力,聚合物链之间的相互作用也同样至关重要。 对于B75D25,强大的链间疏水相互作用是主导力量,它驱动聚合物自发地聚集、包裹在DNA周围,形成了一个稳定且完整的保护层。 对于A100,过高的电荷密度导致了强烈的链间静电排斥,这种排斥力超过了其与DNA的吸引力,使得大多数聚合物链无法靠近DNA,最终导致包裹失败。 因此,本研究的核心结论是:聚阳离子的包裹能力与其电荷密度并非简单的正比关系。适度的疏水性可以有效补偿较弱的静电吸引,通过链间聚集效应,同样能形成稳定的DNA复合物,并可能因为较弱的结合力而有利于在细胞内更高效地释放DNA,从而实现更优的基因递送。 批判性总结 潜在影响:这项工作为非病毒基因载体的设计提供了全新的、反传统的设计思路。未来的研究者在设计新型聚阳离子载体时,或许应该将目光从“如何最大化电荷”转向“如何巧妙地平衡静电与疏水相互作用”,这可能为开发出更低毒、更高效的基因治疗工具开辟新的道路。 研究局限性:作者在文中也坦诚地指出了本研究的局限性,主要包括分子动力学模拟的时间尺度限制和计算中使用的力场精度可能存在固有偏差。 未来展望:为了克服这些局限,未来的研究可以采用粗粒化模拟等方法来探索更长的时间和空间尺度。最重要的是,本研究的计算发现迫切需要进一步的实验验证,例如通过细胞摄取、内涵体逃逸等实验,来证实这种以疏水作用为主导的包裹机制是否真的能转化为最终的体内基因递送优势。
Nano Polymers
· 2025-08-14
When Physics Meets AI: How Deep-CovBoost Precisely Targets COVID-19's Weak Spots
当物理模拟遇见AI:Deep-CovBoost如何精准狙击新冠病毒”软肋”? 本文基本信息 标题:整合基于物理的模拟与数据驱动的深度学习是开发靶向主蛋白酶抑制剂的稳健策略 (Integrating Physics-Based Simulations with Data-Driven Deep Learning Represents a Robust Strategy for Developing Inhibitors Targeting the Main Protease) 团队:浙江大学周如鸿(Ruhong Zhou)团队 作者:Yanqing Yang, Yangwei Jiang, Dong Zhang, Leili Zhang, Ruhong Zhou 期刊:Journal of Chemical Information and Modeling (化学信息与建模杂志) 发表日期:2025年7月28日 (Accepted) DOI:10.1021/acs.jcim.5c01307 摘要 冠状病毒主蛋白酶(main protease)对病毒复制至关重要,是一个经过充分验证的抗病毒靶点。在此,我们提出了一个名为 Deep-CovBoost 的计算流程,该流程整合了深度学习与自由能微扰(FEP)模拟,以指导针对冠状病毒主蛋白酶的基于结构的抑制剂优化。从一个已报道的非共价抑制剂出发,该流程通过预测模型生成并优先排序了新的类似物,随后通过FEP和分子动力学模拟进行了严格的验证。这一方法成功鉴定出了一系列优化的化合物(例如,I3C-1, I3C-2, I3C-35),它们通过与先前未被充分利用的S4和S5亚口袋结合,增强了与靶点的亲和力。这些结果凸显了将基于物理的方法与AI驱动的方法相结合,在加速先导化合物优化和抗病毒药物设计方面的巨大潜力。 背景 自21世纪以来,β-冠状病毒已三次对全球公共卫生构成严重威胁,包括2003年的SARS、2012年的MERS,以及由SARS-CoV-2引发的COVID-19大流行。尽管疫苗和口服抗病毒药物的开发取得了巨大成功,但病毒的持续变异和免疫逃逸能力,意味着开发新型、广谱的抗冠状病毒药物,以应对未来潜在的疫情,仍然是一项紧迫的全球性任务。 在众多抗病毒靶点中,冠状病毒的主蛋白酶(Mpro)因其在病毒复制中的核心作用以及在多种冠状病毒间的高度保守性,成为了一个极具吸引力的药物设计靶点。它像一把“分子剪刀”,负责将病毒的蛋白前体切割成多个功能性蛋白单元,是病毒生命周期中不可或缺的一环。 关键科学问题 目前已获批的抑制剂,如Paxlovid中的奈玛特韦,虽然临床有效,但存在一些局限性。首先,它是一种共价抑制剂,通过与靶蛋白形成不可逆的化学键来发挥作用,这虽然强效,但也带来了潜在的脱靶效应和安全性风险。其次,它需要与另一种药物“利托那韦”联用以减缓其在体内的代谢,而利托那韦可能干扰其他药物的代谢,导致复杂的药物-药物相互作用(DDI),限制了其在合并用药患者中的使用。 因此,开发高效、安全、无需增强剂的非共价抑制剂成为了一个重要的研究方向。COVID Moonshot 正是一个旨在应对这一挑战的全球性、开放科学的药物发现项目。该项目筛选并公开了大量靶向主蛋白酶的非共价抑制剂片段及其活性数据,为后续研究提供了宝贵的起点。然而,从这些初步的“先导化合物”到一个真正有效的药物分子,需要经历漫长而昂贵的“先导化合物优化”过程。核心的科学问题是:如何才能在由先导化合物衍生出的、数以万计甚至百万计的广阔化学空间中,快速、准确地预测出哪种结构修饰能够最大程度地提升药物活性,从而精准指导化学合成,避免资源浪费? 创新点 为了应对这一挑战,本文的研究团队创造性地提出了一个名为 Deep-CovBoost 的计算框架。其核心创新点在于将两种强大的计算方法无缝整合,形成“AI海选”与“物理精算”的协同策略: 数据驱动的深度学习:利用AI模型,从海量的现有抑制剂数据中学习“构效关系”,从而能够对数以万计的新分子进行快速、大规模的活性预测和虚拟筛选,高效探索化学空间。 基于物理的自由能微扰(FEP):利用精确的物理学原理,对AI筛选出的少数精英候选分子进行高精度的结合自由能计算,从而对它们的活性进行可靠的验证和排序。 这种策略结合了AI的速度和广度与物理模拟的深度和准度,旨在极大地加速先导化合物的优化进程。 研究内容 方法:Deep-CovBoost 框架详解 研究团队以COVID Moonshot项目公开的非共价抑制剂 I3C-0 ($IC_{50} = 19.73 \mathrm{nM}$)作为优化的起点,其整体技术路线可以通过下面的流程图清晰地展示: 阶段一:确定优化“热点” (结合图1) 研究首先通过500 ns的分子动力学(MD)模拟评估了 I3C-0 在口袋中的稳定性。结果显示,其核心骨架非常稳定,而 C’R’+R2 基团则表现出较大的波动性,表明该区域的相互作用较弱,是进行结构改造以提升活性的关键“热点”。随后,团队利用来自ChEMBL数据库和COVID Moonshot项目的分子片段,通过合理的化学反应规则替换了I3C-0的C’R’+R2部分,构建了一个包含12万个新分子的内部化合物库。 图1:(A) SARS2、SARS和MERS主蛋白酶的序列比对,突出显示了活性位点中的关键残基(红框)。 (B) 主蛋白酶二聚体及其催化机制的卡通表示。 (C) I3C-0与主蛋白酶形成的复合物的晶体结构(PDBid: 7GLB)。 (D) Deep-CovBoost框架中整合基于物理的FEP与数据驱动的深度学习的示意工作流程。 (E) I3C-0与主蛋白酶的结合模式及活性位点中亚口袋的分布。 (F) I3C-0在MD模拟中的RMSD曲线,显示了整个分子、核心原子(蓝色)和C’R’+R2基团原子(红色)的均方根偏差。 阶段二:深度学习模型海选 (结合图2) 此阶段的核心是构建一个精准的AI预测模型。团队构建了一个基于消息传递神经网络(Message Passing Neural Network, MPNN)的深度学习模型。该模型的巧妙之处在于,它不直接预测单个分子的绝对活性,而是以分子对作为输入,直接预测这两个分子因结构差异导致的相对结合自由能变化($\Delta\Delta G$)。模型在包含707个Moonshot化合物的数据集上进行了训练,学习了分子结构的微小差异如何导致活性的变化。训练完成后,这个AI模型被用来快速预测内部化合物库中12万个分子相对于起点分子I3C-0的活性变化,并筛选出最优的候选者进入下一轮。 图2:构建用于评估靶向主蛋白酶小分子活性的模型的工作流程。它包括五个关键步骤:数据整理(A)、模型构建(B)、5折交叉验证(C)、外部测试(D)和模型预测(E)。 阶段三:FEP精确验证 对于AI筛选出的精英分子,团队采用了计算成本高昂但极为精确的自由能微扰(FEP)方法进行最终验证。FEP基于严格的统计力学原理,能够高精度地计算一个分子被“炼金术”式地转变为另一个分子时的自由能变化($\Delta\Delta G$),从而准确预测活性的提升或下降。 结果与讨论 1. 成功发现活性显著提升的新抑制剂 通过上述流程,团队成功发现了一系列活性优于起点分子I3C-0的新抑制剂。其中,I3C-1 ($\Delta\Delta G = -3.69 \mathrm{kcal/mol}$) 和 I3C-2 ($\Delta\Delta G = -3.71 \mathrm{kcal/mol}$) 的结合亲和力得到了数量级的提升。 图3:(A) 展示深度学习与FEP结合用于先导化合物优化的流程图。 (B) C’R’基团优化的FEP结果,新生成的类似物表示为I3C-1到I3C-13。 2. 揭示S4/S5亚口袋的关键作用 机理分析揭示了这些新分子活性提升的结构基础。起点分子I3C-0主要占据S1, S2, S3亚口袋,而其不稳定的C’R’基团附近存在着未被充分利用的S4和S5亚口袋。研究发现,将I3C-0中的六元内酰胺环(C’基团)修改为五元环,能够改变其连接的R’基团的空间朝向,使其正好可以延伸并占据S4和S5亚口袋。这种新的结合模式与FDA批准的药物奈玛特韦(Nirmatrelvir)在该区域的结合模式表现出惊人的相似性,从而带来了显著的亲和力增强。这完美解释了为何结构上的微小改变能带来活性的巨大飞跃。 图4:(A) 使用Deep-CovBoost框架对I3C-0的C’R’基团进行优化。 (B)和(C) 成功发现了活性显著增强的I3C-1和I3C-2。 (D)和(E) I3C-1、I3C-2与奈玛特韦同主蛋白酶的结合模式比较。 3. 多轮、多位点迭代优化 第一轮优化大获成功后,团队并未止步。他们以活性最高的分子之一 I3C-2 作为新的起点,再次启动了完整的Deep-CovBoost流程,针对S4和S5亚口袋中的R5基团进行第二轮优化。这一轮迭代同样成果斐然,再次发现了一系列活性更强的分子,如 I3C-34 ($\Delta\Delta G = -1.36 \mathrm{kcal/mol}$) 和 I3C-35 ($\Delta\Delta G = -1.01 \mathrm{kcal/mol}$)。MD模拟证实,这些新分子能更好地嵌入S4和S5亚口袋,并与关键残基形成更稳定的氢键网络。 图5:I3C-34 (A)、I3C-35 (B)和I3C-36 (C)与主蛋白酶的分子动力学结果及相互作用分析。 4. 广谱性潜力分析 为了评估新发现抑制剂对抗不同冠状病毒的潜力,团队还测试了I3C-1和I3C-34与SARS和MERS主蛋白酶的结合。MD模拟结果显示,这两种化合物在三种不同的冠状病毒主蛋白酶活性口袋中都表现出稳定的结合构象。这表明,通过Deep-CovBoost发现的抑制剂具有成为广谱抗冠状病毒药物的潜力,为应对未来可能出现的新型冠状病毒储备了宝贵的技术和候选药物。 图6:I3C-1 (A)和I3C-34 (B)与SARS2、SARS和MERS主蛋白酶的MD模拟RMSD曲线,以及与关键活性位点残基的接触频率。 技术细节 Q\&A Q1:本文的核心策略是“AI预测”和“FEP计算”的结合,两者之间的相关性如何?AI预测的结果足够可靠吗? A:这是一个非常关键的问题。研究发现,AI模型预测的$\Delta\Delta G$值与FEP计算的$\Delta\Delta G$值之间存在中等但显著的正相关(皮尔逊相关系数PCC在0.5到0.54之间)。这意味着AI的预测趋势是基本正确的,能够有效地从海量分子中富集出高活性候选者。然而,相关性并非完美,也说明了AI预测存在一定的“噪音”和不确定性。因此,AI的角色是高效的“漏斗”,用于大规模地排除劣质分子;而FEP则是必不可少的“精密天平”,用于对AI筛选出的少数精英分子进行最终的、高精度的验证。两者结合,实现了效率与准确性的最佳平衡。 Q2:研究中提到S4和S5亚口袋“未被充分利用”,这在药物设计中意味着什么? A:在基于结构的药物设计中,靶蛋白的活性口袋通常被划分为不同的亚口袋。一个理想的药物分子应该能像拼图一样完美地填满这些口袋,并与关键残基形成有利的相互作用。“未被充分利用”意味着先导化合物I3C-0未能有效地占据S4和S5这两个空间,导致其与蛋白的结合存在“缺口”,这是其亲和力未能达到最优的主要原因。因此,这些未被利用的亚口袋就成为了药物优化的“机会窗口”。本研究的成功之处就在于,通过结构修饰,让新的分子成功地“长”进了这个机会窗口,从而获得了额外的结合亲和力。 Q3:为什么MD模拟在确定优化“热点”时如此重要? A:静态的晶体结构只能提供一个瞬时的“快照”,而分子在生理环境中是动态的。通过长时间的MD模拟,研究者可以观察到配体在口袋中的动态行为。在本研究中,MD模拟发现I3C-0的核心骨架部分RMSD很小(蓝色曲线,图1F),表明其结合非常稳定,不应轻易改动;而C’R’+R2基团的RMSD则非常大(红色曲线),说明它在口袋中“摇摆不定”,与蛋白的相互作用很弱。这种动态的不稳定性,恰恰暴露了分子中最需要被优化、且最有可能通过改造来提升亲和力的“软肋”或“热点”。 Q4:多轮优化(例如从I3C-2到I3C-34)是纯靠FEP计算吗? A:不是的。多轮优化同样遵循了完整的Deep-CovBoost流程。研究者以第一轮优化得到的高活性分子I3C-2为新的起点,再次利用分子片段库对其R5基团进行修饰,生成了新一批的候选分子库。然后,同样先用深度学习模型进行快速海选,筛选出最有潜力的分子,最后再用FEP进行高精度验证。这体现了该框架的迭代优化能力。 Q5:FEP计算的准确性如何保证? A:为了确保FEP计算的可靠性,研究者采取了多重措施。首先,他们在正式筛选前,用4个已知活性数据的分子对FEP方法进行了基准测试,计算结果与实验值的相关性非常高,证明了该方法在此体系中的准确性。其次,对于每一个FEP计算,他们都进行了三次独立的重复模拟,并确保总模拟时间足够长(每个任务总计超过348 ns),以获得充分的采样和收敛的自由能结果。 关键结论与批判性总结 关键结论 本研究成功开发并验证了一个名为 Deep-CovBoost 的计算药物设计框架,该框架巧妙地结合了深度学习的速度与广度和自由能微扰(FEP)的精度与深度。通过应用该框架,研究团队以一个公开的先导化合物为起点,成功设计并(在计算中)验证了一系列具有更高活性、且具备广谱抗冠状病毒潜力的新型非共价抑制剂。这项工作为应对未来可能出现的新型冠状病毒疫情,提供了一个高效的虚拟筛选和药物发现流程。 批判性总结 优势 (Strengths): 方法论创新:将AI快速筛选与物理精确计算相结合的范式,是现代计算药物设计领域的一个优秀范例,有效平衡了计算效率与准确性。 结果可靠性高:研究不仅依赖于AI的预测,更使用严谨的FEP方法对关键候选分子进行了验证,并通过长时间MD模拟深入分析了作用机理,使结论具有较高的可信度。 潜在应用价值广:所发现的新分子表现出对多种冠状病毒主蛋白酶的抑制潜力,具有开发为广谱药物的前景。 局限性与未来展望 (Limitations & Future Directions): 缺乏实验验证:本研究的所有活性评估均在计算层面完成。尽管FEP被认为是“黄金标准”的计算方法,但最终的活性仍需通过真实的化合物合成与体外/体内生物实验来最终确认。这是从计算到现实最关键的一步。 模型泛化性:深度学习模型是在与I3C-0骨架相似的化合物上训练的,其对于全新化学骨架的预测能力(泛化性)可能有限。 反馈循环的缺失:作者在讨论中提到,将FEP计算出的高精度数据反哺给AI模型进行再训练,是一个极具潜力的优化方向,但这并未在当前工作中实现。建立这样一个“AI预测 -> FEP验证 -> AI再训练”的主动学习闭环,将是未来进一步提升该框架效率和智能性的关键。
Drug Design
· 2025-08-13
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
Polymer Condensate Knowledge and Analysis Methods
高分子凝聚体知识和分析方法 1.1 奠基性的Voorn-Overbeek (V-O)模型:一种基于焓的视角及其局限性 聚电解质复合物(PEC)的早期理论研究可以追溯到Voorn和Overbeek的开创性工作 。V-O理论首次尝试为两种带相反电荷的聚合物在溶液中发生的液-液相分离(即凝聚)现象提供一个定量的热力学描述。该模型的核心思想是将PEC的形成过程视为两种主要热力学力量之间竞争的结果: 混合熵(Entropy of Mixing):基于Flory-Huggins聚合物溶液理论,该项描述了聚合物链和溶剂分子在整个体系中随机混合的趋势。混合熵总是倾向于使体系保持均一的溶解状态,是抵抗相分离的主要力量。 静电吸引(Electrostatic Attraction):基于Debye-Hückel稀电解质溶液理论,该项描述了带相反电荷的聚合物链之间的库仑吸引能。这种静电吸引是驱动聚合物链聚集并形成复合物的动力。 根据V-O模型,当静电吸引能的增益足以克服混合熵的损失时,体系的吉布斯自由能降低,从而发生相分离,形成富含聚合物的凝聚相和稀薄的上清相。该模型成功地预测了PEC相图的基本双节线形状,为理解这类现象提供了最初的理论框架。 然而,随着实验技术和理论物理的深入发展,V-O模型的局限性也日益凸显。现在普遍认为,该模型过于简化,甚至在某些核心观点上具有误导性 。其主要缺陷在于: 错误归因驱动力:V-O模型认为PEC的形成主要是由焓驱动的,即直接的静电吸引能(一个负的焓变,ΔH<0)是主要贡献。然而,后来的大量实验,特别是等温滴定量热法(ITC)研究表明,许多PEC的形成过程焓变很小,甚至可能是吸热的(ΔH>0),而整个过程是由巨大的熵增驱动的 。 忽略链的连接性:该模型将聚合物链上的电荷视为可以自由移动的独立点电荷,完全忽略了聚合物链的共价连接性 。这导致它无法解释聚合物链在从自由舒展的线团状态转变为受限的复合物状态时所伴随的显著的构象熵损失。 忽视关键物理现象:V-O模型未能包含两个对聚电解质体系至关重要的物理现象:其一是反离子凝聚(Counterion Condensation),其二是对于弱聚电解质的电荷调控(Charge Regulation) 。这两个现象从根本上改变了对体系静电相互作用和熵变的理解。 对于当前的HA/OP体系模拟,V-O模型的价值主要在于其历史和概念层面。它正确地指出了混合熵与静电吸引之间的对抗关系,但未能准确刻画驱动力的真实性质和量级。用户的体系由柔性、带电的生物大分子(HA)和合成聚合物(OP)组成,其行为远比简单的点电荷模型复杂。因此,V-o模型无法为理解和解释用户观察到的模拟现象提供充分的物理依据。 1.2 现代热力学图景:反离子释放作为主导的熵驱动力 现代对PEC形成的理解已经从以焓为中心的V-O模型,转向了以熵为核心的物理图景。这一转变的关键在于认识到反离子在其中的决定性作用。 曼宁凝聚理论(Manning Condensation Theory) 对于像HA和质子化的OP这样电荷密度较高的聚电解质,其强大的静电场会迫使一部分带相反电荷的小离子(即反离子,如HA周围的Na⁺和OP周围的Cl⁻)紧密地“凝聚”在聚合物链的周围,形成一个动态的离子氛。这一现象由Manning理论所描述,它指出,这种凝聚会持续到聚合物链的表观线性电荷密度降低至一个普适的临界值以下为止 。这些凝聚的反离子虽然仍可移动,但其活动范围被极大地限制在聚合物链附近,失去了大部分平动自由度。 熵驱动的复合物形成(Entropy-Driven Complexation) 当带相反电荷的聚阳离子和聚阴离子相互靠近并形成一个直接的“本征离子对”(intrinsic ion pair)时,它们各自凝聚的反离子就被“释放”到本体溶液中 。每一个被释放的反离子都从受限状态变为自由状态,这导致体系的平动熵急剧增加。对于长链聚合物,成百上千个反离子的集体释放会带来巨大的正熵变(ΔS_{release}$≫0),这构成了PEC形成过程最主要的、压倒性的热力学驱动力 。 焓变与构象熵的制衡作用 与巨大的反离子释放熵相比,焓变(ΔH)通常扮演次要角色。ITC实验和分子模拟均表明,ΔH的值相对较小,并且其符号(放热或吸热)和大小依赖于具体的聚合物化学结构、盐浓度和溶剂化效应等复杂因素 。因此,复合物的形成并非主要源于“异性相吸”的能量降低。 与此同时,存在一个重要的、抵抗复合物形成的熵力——构象熵的损失(ΔSconf<0)。柔性的聚合物链(如HA和OP)在自由溶液中倾向于采取无规线团构象,以最大化其构象熵。当它们被束缚进一个结构更为紧凑的复合物中时,其可及的构象数目大大减少,导致构象熵的显著降低 。 因此,PEC形成的净吉布斯自由能变化(ΔG=ΔH−TΔS)是一个微妙的平衡:巨大的、有利的反离子释放熵(−TΔSrelease≪0)必须足以克服不利的构象熵损失(−TΔSconf>0)以及任何不利的焓变。这个物理图像清晰地解释了为何PEC的形成对盐浓度、温度等环境因素如此敏感,因为这些因素直接影响着反离子释放这一核心驱动项。在用户的模拟中,观察到的HA与OP的自发聚集,正是反离子释放熵战胜了聚合物构象熵损失的宏观体现。 2. 弱聚电解质的协同效应? 当HA链和OP链相互靠近,准备形成复合物时,它们之间的强静电吸引会创造一个与本体溶液截然不同的局部静电势场。这个局域场会反过来影响HA羧基和OP侧链的质子化/去质子化平衡,即发生pKa值的偏移。这种聚合物电荷状态与其周围环境相互作用、自我调节的反馈机制,被称为电荷调控(Charge Regulation) 。 电荷调控机制意味着,HA和OP的复合过程并非简单的“正负电荷吸引”,而是一个协同过程:复合物的形成促进了聚合物链的进一步电离,而电离程度的增加又反过来增强了复合物的稳定性 。这一机制极大地增强了弱聚电解质之间的结合亲和力,是理解您观察到的稳定纳米颗粒形成的核心物理化学原理之一,也是现代聚电解质理论区别于早期模型的关键进展。 电荷调控的后果 显著增强的结合亲和力:CR效应相当于一个正反馈回路。OP的接近使HA更带电,更带电的HA又更强烈地吸引OP,这种协同作用极大地增强了两者之间的结合亲和力。因此,使用固定电荷模型的模拟会严重低估弱聚电解质体系的复合物稳定性 。 一级相变特征:包含CR的模拟研究表明,弱聚电解质的凝聚过程随pH的变化可以表现为不连续的、类似一级相变的突变行为,在临界pH附近存在一个显著的自由能垒,分隔开结合态与非结合态 。 1.4 动力学路径与层级组装 聚电解质复合物的形成并非一步到位的过程,而是遵循一个跨越多个时间尺度的层级组装(Hierarchical Assembly)路径 。理解这一动力学过程对于正确解读有限时间的分子模拟快照至关重要。 第一步:初级复合物的形成(纳秒 - 微秒):当两种聚电解质溶液混合时,在极短的时间尺度内(纳秒至微秒),单根聚阳离子链和单根聚阴离子链会通过扩散控制的碰撞迅速结合,形成小的、通常是可溶的“初级复合物” 。时间分辨散射实验已经证实,这一初始聚集步骤可以在几毫秒内完成 。 第二步:次级聚集与熟化(微秒 - 秒):这些初级复合物作为构筑基元,通过布朗运动进一步碰撞、聚集,形成尺寸更大的次级聚集体。这个过程相对缓慢,并可能涉及多种机制,如布朗凝聚(cluster-cluster aggregation)或奥斯特瓦尔德熟化(Ostwald ripening),即大尺寸团簇通过“吞噬”溶解的小尺寸团簇而生长 。 第三步:动力学捕获与亚稳态(秒 - 小时):在次级聚集过程中,体系的动力学可能会急剧减慢,导致其被“捕获”在某个非平衡的亚稳态结构中,而无法在实验或模拟的时间尺度内达到真正的热力学平衡态(例如,一个宏观的凝聚相)。这种“动力学捕获”(Kinetic Trapping)现象在PEC体系中非常普遍,形成的亚稳态结构可以持续存在数分钟乃至数小时 。最终的结构形态对混合顺序、混合速率等制备历史高度敏感 。 流变学基础概念 1. 什么是高斯链 (Gaussian Chain)? 想象一下,一根非常非常长的链条(比如您的HA或OP聚合物),它由许多可以自由旋转的化学键连接而成。在溶液中,由于分子的热运动(布朗运动),这根链条会不断地随机摆动、卷曲,形成一个杂乱无章的线团。 高斯链模型就是描述这种状态的一个理想化数学模型。它将整条聚合物链简化为一系列通过无质量、零体积的“虚拟键”连接起来的点(珠子)。它最核心的特征是,其统计行为可以用高斯分布(正态分布)来描述。具体来说: 物理图像:一个随机行走的线团,像一团耳机线。 关键特性:链的两端点之间的距离(末端距,end-to-end distance)的概率分布遵循高斯分布。这意味着链条最可能处于不远不近的卷曲状态,而完全伸直或完全折叠成一点的概率极低。 重要性:它是一个极其强大的简化模型,抓住了聚合物无规卷曲的本质,是后续更复杂理论(如Rouse模型)的基础。 2. 什么是$\Theta$溶剂 (Theta Solvent)? 聚合物链在溶剂中并非总是“自由自在”的。它会与溶剂分子以及链自身的其他链段发生相互作用。 良溶剂 (Good Solvent):聚合物链段更“喜欢”和溶剂分子待在一起,而不是和其它链段挤在一起。这会导致链排斥自己,线团会溶胀、伸展,尺寸比理想状态大。 不良溶剂 (Poor Solvent):聚合物链段之间更“喜欢”彼此,而不喜欢溶剂。这会导致链段自身塌缩成一个紧密的球,以减少与溶剂的接触,尺寸比理想状态小。 Θ溶剂 (或 Θ点) 就是介于这两种极端情况之间的一种“不好不坏”的理想溶剂。在这种溶剂中,聚合物链段-链段之间的吸引力,与链段因占据空间而产生的排斥力,被溶剂恰到好处地完美平衡了。 物理意义:在$\Theta$溶剂中,聚合物链的行为就像一个理想的高斯链,其尺寸被称为无扰尺寸 (unperturbed dimensions)。这为实验测量聚合物的本征性质(如键长、键角等)提供了一个理想的基准状态。 高分子动力学模型 Rouse模型 (小蛇模型) 适用对象:未缠结的聚合物链,通常是链长较短,或者在$\Theta$溶剂或熔体中的情况。 物理图像:将一条高斯链想象成由一串珠子(代表链段)和弹簧(代表熵弹性)组成。每个珠子都在做布朗运动,同时被相邻的弹簧拉扯。整个链条的运动就像一条小蛇在水中自由地蠕动,不受周围链的阻碍。 意义:它成功地描述了短链聚合物的黏弹性和扩散行为。 Reptation模型 (爬行模型) 适用对象:高度缠结的长链聚合物,比如您背景中描述的凝聚相。 物理图像:想象一条长蛇(我们的目标聚合物链)被困在一个由许多固定钢管组成的迷宫里。这条蛇无法左右移动,因为它被周围的钢管(代表其他缠结的聚合物链)限制住了。它唯一的运动方式就是像爬行动物一样,沿着自己身体形成的“管道”向前或向后“蠕动”或“爬行”。当蛇头爬出旧管道时,它会随机选择一个新方向,形成新的管道路径。 意义:这个模型天才般地解释了为什么长链聚合物的黏度和松弛时间会与其分子量(链长)的三次方成正比,这是一个非常强的依赖关系。它完美地捕捉了“拓扑约束”或“缠结”对聚合物运动的巨大限制作用。 Rouse 模型 (Rouse Model) Rouse 模型是描述未缠结聚合物链在溶液或熔体中动力学行为的基石。它建立在一系列理想化的物理假设之上,旨在捕捉单条聚合物链在黏性流体中由热运动驱动的基本动态。 1. 模型的物理图像与核心假设 珠簧模型 (Bead-Spring Model) 将一条聚合物链粗粒化为 N 个“珠子”(beads),由 N−1 个无质量的“谐波弹簧”(harmonic springs)连接。 部件 物理含义 珠子 (Bead) 代表一个子链(subchain),足够大→可在流体中独立运动;足够小→内部结构可忽略;所有与溶剂的摩擦力集中于此 弹簧 (Spring) 代表链段间的熵弹性;偏离平均构象→熵减→恢复力;理想化为胡克定律弹簧 作用在每个珠子上的力(忽略惯性项,总力为零) 弹簧力:来自相邻珠子通过弹簧施加的拉力(第 i−1 和 i+1 珠子对第 i 珠子) 摩擦力:珠子在黏性溶剂中运动受到的阻力,与速度成正比,斯托克斯定律,摩擦系数 $\zeta$ 随机力 (布朗力):溶剂分子的随机热碰撞,驱动链条运动的根本原因 2. 数学描述与主要预测 郎之万方程 (Langevin Equation)(第 i 个珠子) \(\zeta \frac{d\vec{r}_i}{dt} = -k(\vec{r}_{i+1}-\vec{r}_i) - k(\vec{r}_{i-1}-\vec{r}_i) + \vec{f}_i(t)\) 其中 $k$ 为弹簧力常数,$\vec{f}_i(t)$ 为作用在第 i 个珠子上的随机布朗力。 正交简正模 (Normal Modes) 通过数学变换,将整条链的复杂耦合运动分解为一系列独立、具有不同波长的集体运动模式,称为 Rouse 模。 模式 $p$ 物理含义 $p=0$ 整条链的质心平动 $p=1$ 最大尺度运动:链两端反向,中间不动(最慢模式) $p=2$ 链分为两段,反向运动 … … $p$ 越大 运动尺度越小,速度越快 松弛时间 \(\tau_p \approx \frac{\zeta N^2 b^2}{6\pi^2 k_B T}\frac{1}{p^2} \quad (p=1,2,\dots,N-1)\) $b$ 为有效键长。 最长松弛时间 (Rouse 时间) \(\tau_R = \tau_1 \propto N^2\) 核心预测 物理量 与链长 $N$ 的关系 备注 松弛时间 $\tau_R$ $\tau_R \propto N^{2}$ 整条链完全“忘记”初始构象所需时间 扩散系数 $D$ $D \propto N^{-1}$ 单条链质心扩散 零剪切黏度 $\eta_0$ $\eta_0 \propto N$ 聚合物溶液或熔体 Reptation 模型 (爬行模型) 当聚合物链变得很长,彼此之间发生大量拓扑缠结 (Topological Entanglements) 时,Rouse 模型便失效了。因为一条链的运动不再是自由的,而是受到了周围其他链形成的“笼子”的强烈束缚。Reptation 模型正是为了描述这种在缠结体系中的链动力学而提出的。 1. 模型的物理图像与核心概念 管道 (The Tube) 想象一条长链(我们称之为“目标链”)身处一个由许多其他长链组成的“意大利面”中。由于拓扑约束(链不能相互穿越),目标链的横向运动被完全限制。它只能在一个由周围链形成的虚拟“管道”内运动。 原初路径 (Primitive Path) 这个管道的中心线,可以看作是目标链在忽略了小尺度快速振动后所遵循的骨架路径。它的长度 $L$ 通常小于链完全伸直的长度,但大于其平衡的回转半径。 爬行运动 (Reptation) 在管道模型的约束下,链的唯一有效运动方式就是像蛇一样,沿着自己的管道轮廓进行一维的曲线运动,即“爬行”。链的末端会不断地“爬出”旧管道,并随机选择新方向,从而形成新的管道部分。 2. 松弛机制与主要预测 Reptation 模型认为,一条被缠结的链要完全松弛其构象,主要通过以下机制: 爬行 (Reptation) 这是最主要的松弛机制。链需要通过爬行运动,完全离开其最初所在的旧管道。这个过程所需的时间被称为脱离时间 (Disengagement Time, $τ_d$)。由于链在管道内进行的是类似 Rouse 的一维运动,可以推导出: \(τ_d \propto \frac{L^2}{D_{\text{tube}}} \propto N^3\) 其中,$L \propto N$ 是管道长度,$D_{\text{tube}} \propto N^{-1}$ 是链在管道内的扩散系数。这是 Reptation 模型最核心的预测。 轮廓长度涨落 (Contour Length Fluctuation) 链的末端可以在管道内进行类似“呼吸”的伸缩运动。这种快速的涨落可以松弛链末端的构象,但对链中心的松弛贡献不大。 约束释放 (Constraint Release) 管道本身并不是永恒固定的,它是由周围的链组成的。当周围的链也通过爬行运动移开时,对目标链的约束就会“释放”,允许目标链进行一些横向运动。对于极长链,这个过程相比于爬行来说较慢,通常作为次级修正。 核心预测 | 物理量 | 与链长 $N$ 的关系 | 实验验证 | | ——————- | ———————— | ———————————- | | 松弛时间 $τ_d$ | $τ_d \propto N^{3}$ | 实验值约 $N^{3.4}$,理论修正后吻合 | | 扩散系数 $D$ | $D \propto N^{-2}$ | — | | 零剪切黏度 $\eta_0$ | $\eta_0 \propto N^{3.4}$ | 与大量实验数据高度吻合 | 通过这两个模型,我们可以看到聚合物物理如何通过简洁而深刻的物理图像,成功地将微观的链长与宏观的材料黏弹性联系起来,并根据体系是否缠结,给出了截然不同的预测。 从平衡态分子动力学轨迹计算流变学性质:原理与实践 本文档旨在为从平衡态分子动力学(MD)模拟轨迹中计算关键流变学性质提供一份详尽的理论与实践指南。内容涵盖了基本物理原理、核心计算公式、具体操作步骤以及对常见问题的解答,力求在保持专业性的同时,为具有本科物理化学基础的研究者提供清晰的指引。 核心物理原理:涨落-耗散定理 在深入具体计算之前,有必要理解其背后的统一物理思想——涨落-耗散定理(Fluctuation-Dissipation Theorem)。 该定理是统计力学的基石之一,它深刻地揭示了宏观与微观世界的联系。简而言之,它指出:一个系统在平衡态附近自发产生的微观涨落(Fluctuation),已经内含了该系统在受到外部扰动时将如何响应并耗散(Dissipation)能量的全部信息。 对于分子模拟而言,这意味着我们无需通过施加真实的剪切或拉伸(即非平衡MD)来测量材料的宏观力学响应。取而代之,我们可以运行一个足够长的平衡态模拟,通过分析系统内部物理量(如压力张量、分子取向)的自发涨落,来精确计算其宏观流变学性质,如黏度、弹性模量等。这一方法的核心数学工具即为格林-久保关系(Green-Kubo Relations)。 无需外力,就能从“噪声”里读出材料的黏度与模量 概念 角色 与格林-久保的关系 涨落 平衡态下的自发扰动 输入数据 耗散 外力驱动下的能量损失 预测目标 格林-久保积分 数学桥梁 把涨落谱积分→黏度、弹性模量 流变学性质的计算方法 在展开具体计算方法前,首先解答两个关键的基础性问题。 问:压力张量是整个系统的,计算出的黏度等性质也针对整个系统吗? 答:是的,您计算出的性质是整个模拟盒子(Simulation Box)的平均宏观性质。 MD软件(如GROMACS)计算的压力张量是基于盒子内所有原子间的相互作用力,因此它反映的是整个体系的宏观应力状态。 因此,通过格林-久保关系计算出的黏度、模量等,是整个模拟体系的有效(effective)流变学性质。 具体解读需要结合您的模拟体系设置: 场景一:单个纳米凝胶颗粒 + 大量溶剂。如果您的模拟盒子中包含一个HA/OP纳米凝胶颗粒并被大量水分子包围,那么计算出的黏度将是这个非均相体系的有效黏度。这个值会受到颗粒体积分数的影响,但主要反映了纳米凝胶颗粒对整体流动性的贡献。 场景二:周期性边界下的凝聚相。如果您通过周期性边界条件(PBC)模拟的是一个充满了HA/OP凝聚相的体系(即盒子内几乎没有游离水),那么计算出的黏度就是该凝聚相的体相黏度(bulk viscosity)。 问:为什么压力张量的非对角线元素代表剪切应力? 想象一下流体中一个微小的正方形单元。力作用在它的四个边上。 正应力(Normal Stress)与对角线元素: 作用在垂直于边上的力,我们称之为正应力。比如,作用在x方向的边上、且力本身也沿x方向的力,记为$P_{xx}$。 这些力会导致正方形单元被压缩或拉伸,改变其体积,但不会改变其直角的形状。 压力张量的对角线元素($P_{xx},P_{yy},P_{zz}$)就代表了这些正应力。它们的平均值就是我们通常所说的静水压力(Hydrostatic Pressure)。 剪切应力(Shear Stress)与非对角线元素: 作用在平行于边上的力,我们称之为剪切应力。比如,作用在x方向的边上(即垂直于x轴的那个面),但力本身却沿着y方向的力,记为$P_{xy}$。 这个力会试图让流体的不同层面相互滑动。就像推一本厚书的顶面,书会发生倾斜变形。这种力导致正方形单元的形状发生改变(从正方形变成菱形),但其体积保持不变。 因此,压力张量的非对角线元素($P_{xy},P_{yx},P_{xz},…$)就精确地定义了这些剪切应力。它们是导致流体流动的直接原因,因此也是计算黏度等流变性质所必须分析的核心物理量。 以下是从平衡态MD轨迹计算三种关键流变学性质的具体原理和步骤。 1. 剪切黏度 (Shear Viscosity, η) 物理意义:衡量流体抵抗剪切形变能力的物理量。它是区分“液体”与“固体”行为的基本指标。 计算原理:基于格林-久保关系,黏度可由剪切应力自相关函数(Stress Autocorrelation Function, SACF)的时间积分得到。 \[η=\frac{V}{k_B T}\int_0^∞\langle P_{\alpha \beta}(t)\,P_{\alpha \beta}(0)\rangle\,dt\] 公式解析 $V$:模拟盒子的体积 $k_B$:玻尔兹曼常数 $T$:体系的绝对温度 $P_{\alpha \beta}$:压力张量的非对角线(剪切)分量,其中 $\alpha \neq \beta$ (例如 $P_{xy}, P_{xz}, P_{yz}$) $\langle P_{\alpha \beta}(t) P_{\alpha \beta}(0) \rangle$:剪切应力自相关函数;描述 $0$ 时刻的自发剪切应力涨落,经时间 $t$ 后仍保留的相关性,通常随 $t$ 增大而衰减 $\langle \dots \rangle$:系综平均;实际操作中,对轨迹所有可能的时间起点进行平均 计算步骤 数据提取 使用 MD 分析软件(如 GROMACS 的 gmx energy)从能量文件(.edr)提取压力张量非对角线分量($P_{xy}, P_{xz}, P_{yz}$)的时间序列 计算 ACF 利用 gmx analyze 或 Python 脚本计算每个剪切分量的自相关函数 统计平均 为提高信噪比,将三条 SACF($P_{xy}, P_{xz}, P_{yz}$)平均,得到总 SACF 曲线 数值积分 对平均后的 SACF 曲线数值积分,求曲线下面积 代入公式 将积分值及常数($V, T, k_B$)代入上式,得剪切黏度 $η$ 2. 应力松弛模量 (Stress Relaxation Modulus, G(t)) 物理意义:表征材料黏弹性的核心物理量。它描述了当材料受到一个瞬时单位应变后,其内部应力随时间松弛的过程。$G(t)$ 的衰减形态直接揭示了材料是更偏向液体还是固体。 计算原理:$G(t)$ 与剪切应力自相关函数(SACF)直接成正比。实际上,它是计算黏度过程中的一个“副产品”。 \[G(t)=\frac{V}{k_B T}\langle P_{\alpha \beta}(t)\,P_{\alpha \beta}(0)\rangle\] 公式解析:该公式右侧正是格林-久保关系中被积分的部分。这意味着,我们计算黏度时得到的 SACF 曲线,经过一个常数因子的缩放,其本身就是应力松弛模量 G(t)。 计算与分析: 计算出平均的 SACF 曲线。 将该曲线上每个点的值乘以常数因子 $\frac{V}{k_B T}$。 绘制 $G(t)$ 随时间 $t$ 变化的曲线(通常使用 log–log 坐标轴)。 解读曲线: 若 $G(t)$ 快速衰减至零,表明体系是黏性流体。 若 $G(t)$ 衰减至一个有限的平台值 ($G_{eq}$),表明体系是弹性固体或化学交联凝胶。 若 $G(t)$ 在很长的时间尺度上缓慢衰减,呈现复杂的幂律行为,则表明体系是典型的黏弹性液体或物理凝胶。这条曲线是证明您的 HA/OP 纳米凝胶柔软、可变形性质的最直接定量证据。 3. 链松弛时间 (Chain Relaxation Time, τ) 物理意义:衡量单条聚合物链在拥挤环境中通过热运动“忘记”其初始构象和取向所需的时间。它反映了材料在分子层面的动力学特征,与 Rouse 和 Reptation 等模型紧密相关。 计算原理:通过计算聚合物链末端距矢量的自相关函数并对其积分得到。 \[\tau=\int_0^∞ C(t)\,dt \quad \text{其中} \quad C(t)=\frac{\langle \vec{R}(t)\cdot\vec{R}(0)\rangle}{\langle |\vec{R}(0)|^2\rangle}\] 公式解析: $\vec{R}(t)$:时刻 $t$ 单条聚合物链的末端距矢量,定义为(链尾原子坐标)–(链首原子坐标)。 $\langle \vec{R}(t)\cdot\vec{R}(0)\rangle$:末端距矢量的自相关函数,主要衡量链在不同时刻取向的相关性。 $C(t)$:归一化的自相关函数,其值从 $C(0)=1$ 开始,随时间衰减至 0。 $\tau$:$C(t)$ 曲线下的面积,代表链取向相关的特征时间。 计算步骤: 提取矢量:遍历轨迹,计算体系中所有同类聚合物链(例如所有 HA 链)在每一帧的末端距矢量 $\vec{R}$。 计算 ACF:对每条链的 $\vec{R}(t)$ 时间序列计算其自相关函数。 系综平均:将所有同类链的 ACF 结果进行平均,得到统计可靠的平均 ACF。 归一化与积分:对平均后的 ACF 归一化得到 $C(t)$,再对其进行数值积分,即可得到链松弛时间 $\tau$。 总结 下表总结了这三种流变学性质的计算要点: 物理性质 物理意义 核心公式 (Green-Kubo) 所需 MD 输出 剪切黏度 $\eta$ 抵抗流动的能力,流体性的基本度量 $\displaystyle \eta=\frac{V}{k_B T}\int_0^\infty\langle P_{\alpha\beta}(t)\,P_{\alpha\beta}(0)\rangle\,dt$ 压力张量 $P_{xy},P_{xz},P_{yz}$ 应力松弛模量 $G(t)$ 黏弹性的直接体现,描述应力如何随时间松弛 $\displaystyle G(t)=\frac{V}{k_B T}\langle P_{\alpha\beta}(t)\,P_{\alpha\beta}(0)\rangle$ 同上 链松弛时间 $\tau$ 链“忘记”其初始取向的时间,反映分子层面动力学 $\displaystyle \tau=\int_0^\infty\frac{\langle\vec R(t)\cdot\vec R(0)\rangle}{\langle \vec R(0) ^2\rangle}\,dt$ 末端距矢量 $\vec R(t)$ 通过这些计算,您可以从分子模拟的角度,为您的 HA/OP 纳米凝胶的材料属性及其独特的生物学功能(如皮肤渗透性)提供坚实的、定量的物理机制支撑。
Field Knowledge
· 2025-07-18
Unlocking T-Cell Proximity Control: How LAG-3 Proximity to TCR Enables Precision Autoimmune Therapy
【Cell】 解锁免疫“刹车”新用法:强制T细胞“邻近”可精准治疗自身免疫病 一、 本文基本信息 摘要 在自身免疫性疾病中,针对致病性T细胞的治疗一直充满挑战。淋巴细胞活化基因-3(LAG-3)是一种主要在活化T细胞上特异性表达的抑制性检查点受体,已知其可与主要组织相容性复合物II类分子(MHC-II)结合。然而,本研究表明,仅仅与MHC-II相互作用不足以实现LAG-3的最佳功能。相反,由同源肽-MHC-II分子介导的LAG-3与T细胞受体(TCR)的空间邻近性,而非与CD4共受体的邻近性,才是介导CD4+ T细胞抑制的关键。从机制上看,LAG-3通过其胞内FSAL基序与TCR信号组分CD3ε形成凝聚体,从而破坏CD3ε与淋巴细胞特异性蛋白激酶(Lck)的结合。为了利用LAG-3与TCR的邻近性并最大化其依赖的T细胞抑制作用,我们开发了一种Fc功能减弱的LAG-3/TCR抑制性双特异性抗体,以绕过对同源肽-MHC-II的需求。这种方法能够强效抑制CD4$^{+}$和CD8$^{+}$ T细胞,并有效缓解小鼠自身免疫模型的症状。我们的发现揭示了一种复杂且有条件的检查点调控机制,并强调了靶向LAG-3/TCR顺式邻近性对于治疗那些缺乏有效且耐受性良好的免疫疗法的T细胞驱动的自身免疫性疾病具有重要意义。 原文引用信息 Du, J., Chen, H., You, J., Hu, W., Liu, J., Lu, Q.,… & Wang, J. (2025). Proximity between LAG-3 and the T cell receptor guides suppression of T cell activation and autoimmunity. Cell,88,-18. https://doi.org/10.1016/j.cell.2025.06.004 二、 研究背景与科学问题 2.1 免疫系统的“双刃剑”:自身免疫病的困境 免疫系统是人体的精密防御体系,其核心职责是区分“自我”与“非我”,精准清除外来病原体,同时保护自身组织。然而,当这套精密的识别系统出现故障,免疫细胞便会错误地攻击自身健康的组织和器官,导致自身免疫性疾病的发生。这类疾病种类繁多,包括1型糖尿病、类风湿性关节炎、多发性硬化症等,影响着全球数以亿计的人口。在许多自身免疫病中,T淋巴细胞(T细胞)的过度活化被认为是驱动疾病进展的核心元凶。 近年来,自身免疫病的发病率在全球范围内,尤其是在工业化国家,呈现出快速上升的趋势。一个广受关注的理论是“卫生假说”(Hygiene Hypothesis)或其修正版“老朋友假说”(Old Friends Hypothesis)。该假说认为,现代社会过于洁净的环境、抗生素的广泛使用以及生活方式的改变,减少了人们在生命早期接触微生物的机会。这种暴露的缺乏可能导致免疫系统未能得到充分的“训练”和“教育”,使其调控机制发育不全,从而更容易对自身抗原产生过度反应,增加了患过敏性和自身免疫性疾病的风险。这一宏观背景凸显了深入理解免疫调控机制、开发新型精准免疫疗法的迫切性。 2.2 免疫检查点LAG-3:一个熟悉又陌生的“刹车”分子 为了防止免疫反应过度而伤及自身,免疫系统进化出了一系列“刹车”机制,即免疫检查点。这些分子通常是表达在免疫细胞表面的抑制性受体,当它们被激活时,能够抑制免疫细胞的功能,维持免疫稳态。其中,淋巴细胞活化基因-3(LAG-3,又称CD223)是一个关键的抑制性检查点,主要在活化的T细胞上高表达。 LAG-3在结构上是CD4分子的同源物,属于I型跨膜蛋白,其胞外区包含四个免疫球蛋白(Ig)样结构域(D1-D4)。它最主要的配体是主要组织相容性复合物II类分子(MHC-II),同时也能够与纤维蛋白原样蛋白1(FGL1)等其他分子结合。与更为人熟知的PD-1和CTLA-4检查点类似,LAG-3在癌症和慢性感染中标志着T细胞的“耗竭”状态。研究表明,LAG-3与PD-1常常在耗竭的T细胞上共表达,并通过互补的、非冗余的通路协同抑制T细胞功能。因此,靶向LAG-3已成为继PD-1/CTLA-4之后肿瘤免疫治疗的又一重要方向。 2.3 关键科学问题与核心创新点 尽管LAG-3作为免疫“刹车”的重要性已广为人知,但一个核心的谜题长期悬而未决:LAG-3究竟是如何通过与配体结合,将抑制信号传递到细胞内部,从而精确地关闭T细胞的活化引擎的? 其具体的分子作用机制一直不甚明了,被形容为一个“充满谜题的分子”。 本项发表于《细胞》杂志的研究,正是为了解开这个谜题。研究团队通过一系列精巧的实验设计,取得了多项突破性进展,为我们描绘了一幅全新的LAG-3功能图景。其核心创新点可概括为: 揭示了全新的“空间邻近依赖”抑制模型:颠覆了传统的“配体结合即激活”的认知,证明LAG-3的抑制功能需要其与T细胞受体(TCR)在空间上足够靠近才能实现。 阐明了LAG-3在分子水平“釜底抽薪”的物理机制:发现LAG-3的胞内结构域可以直接干扰TCR早期信号通路中关键蛋白复合物的形成。 基于新机制,开创性地设计了“激动型”双特异性抗体BiTS:将基础科学发现迅速转化为一种全新的治疗策略,通过人为强制LAG-3与TCR的邻近来增强其抑制功能。 在多种自身免疫病动物模型中验证了BiTS的强大治疗潜力:证明了这一新策略在1型糖尿病、自身免疫性肝炎和多发性硬化症模型中的有效性,展示了其广阔的临床应用前景。 三、 核心研究内容深度解析 3.1 发现一:LAG-3的抑制功能依赖于其与TCR的“空间邻近” 传统观点认为,抑制性受体的功能主要由其与配体的结合直接触发。然而,本研究的第一个重大发现是,对于LAG-3而言,情况并非如此简单。 研究团队首先构建了一个“简化系统”,即利用不表达天然MHC-II的人工抗原提呈细胞(aAPC)。他们发现,当这些aAPC只表达能够结合LAG-3但不能识别TCR的“非同源”MHC-II分子时,即使LAG-3与MHC-II成功结合,也无法有效抑制T细胞的活化。相反,只有当aAPC表达能够同时被TCR和LAG-3识别的“同源”肽-MHC-II复合物时,LAG-3才表现出强大的抑制功能。 这一现象引出了一个大胆的假设:MHC-II分子可能不仅仅是LAG-3的配体,更像一个“桥梁”,其关键作用是将在细胞膜上原本分离的LAG-3和TCR拉到一起。 只有当LAG-3与TCR在空间上足够“邻近”时,它的抑制“刹车”才能被踩下。 图 1. LAG-3 在同源 pMHC II 存在时介导 CD4+ T 细胞抑制 A. B 细胞与 CD4+ T 细胞界面的配体-受体互作示意图 B. 经 mock 或小鼠 LAG-3 转导的 DO11.10 T 细胞与负载 OVA323-339 同源肽的 LK35.2 B 细胞共培养后的 IL-2 产量(n=3) C. 表达同源 pMHC II 的 aAPC 与 LAG-3+ T 细胞界面互作示意图 D-E. 小鼠 LAG-3 CAR Jurkat NF-κB-GFP 报告 T 细胞与 mock 或 I-Aᵈ OVA323-339 aAPC 共培养的代表性图像及 GFP 信号定量 F-G. 经 mock 或小鼠 LAG-3 转导的 DO11.10 T 细胞被同源 I-Aᵈ OVA323-339 aAPC 激活后的 IL-2 产量及 LAG-3 抑制率(n=3) H-M. 人 LAG-3 CAR 与 mock 或 HLA-DR1 HA306-318 aAPC 共培养的代表性图像及 GFP 信号定量(n=3) N-O. 经 mock 或人 LAG-3 转导、携带 HA1.7 TCR 的 Jurkat NFAT-GFP 报告 T 细胞被 HLA-DR1 HA306-318 aAPC 激活后的 GFP 阳性细胞百分比及 LAG-3 抑制率(n=4) 为了直接验证这一“空间邻近假说”,研究团队设计了一个极为精妙的实验。他们利用一种化学诱导的异源二聚化系统(rapalog系统),在该系统中,可以通过加入一种小分子药物(rapalog)来强制细胞膜上的两种不同蛋白物理性地靠近。他们将TCR的激活分子(抗CD3抗体)与FRB蛋白融合,将非同源MHC-II分子与FKBP12蛋白融合。在没有rapalog时,TCR和LAG-3(通过非同源MHC-II结合)是分离的;而加入rapalog后,FRB和FKBP12结合,从而强制性地将TCR和LAG-3拉到了一起。 结果惊人地清晰:在加入rapalog后,即便没有同源MHC-II的参与,T细胞的活化也受到了显著抑制。这一实验无可辩驳地证明了,LAG-3的抑制功能并不绝对依赖于特定的配体信号,而是由其与TCR的物理邻近性所“授权”的。这是一个全新的、以空间构象为核心的免疫调控模型。 图 2. TCR 空间邻近性对 MHC II/LAG-3 介导的 CD4+ T 细胞抑制至关重要 A. 表达膜锚定抗小鼠 CD3(anti-CD3MT)和非同源 pMHC II(pMHC class IINC)的 aAPC 设计示意图,用于解耦 MHC II 类分子与 CD4+ T 细胞 TCR 的相互作用 B. 流式细胞术检测三种 aAPC 克隆的 anti-CD3MT 表达水平(相对于亲本细胞的 MFI) C-D. 小鼠 LAG-3+ 3A9 T 细胞被上述 aAPC 克隆激活后的 IL-2 产量,有无非同源 I-Aᵇ OVA323-339 的瞬时过表达 E-H. 涉及 anti-CD3MT aAPC 的 IL-2 产量及抑制率分析,包括有无非同源 pMHC II、mock 与 LAG-3 转导的 3A9 T 细胞对比、同型对照与抗 LAG-3(M8)处理对比 I-K. rapalog 诱导异源二聚体实验的示意图、构建设计及流式细胞术检测标记表达(相对于亲本细胞的 MFI) L-N. mock 或小鼠 LAG-3 转导的 3A9 或 DO11.10 T 细胞被表达 rapalog 诱导异源二聚体的 aAPC 激活后的 IL-2 抑制率 3.2 发现二:深入分子内部——LAG-3如何通过破坏“信号凝聚体”来“釜底抽薪” 既然空间邻近是关键,那么下一个问题是:当LAG-3被拉到TCR旁边后,细胞内部究竟发生了什么?为了回答这个问题,研究团队将目光投向了细胞内信号转导的最前沿——生物分子凝聚体(Biomolecular Condensates)。 LAG-3的胞内域(ICD)可以直接与TCR复合物的关键组分CD3ε相互作用。 当LAG-3的ICD被强制带到TCR附近时,它会竞争性地结合CD3e,从而破坏CD3ε与激酶Lck的结合,导致这个至关重要的“信号凝聚体”无法有效形成或维持稳定。 Lck是启动TCR下游信号瀑布的“第一把钥匙”,Lck与CD3ε的分离,相当于直接切断了信号的源头,导致T细胞活化被有效终止。 为了进一步精确定位LAG-3 ICD中的功能区域,研究团队进行了一系列突变分析。结果显示,LAG-3 ICD中两个保守的基序——FSAL基序和EP基序——对于破坏CD3ε/Lck凝聚体以及发挥抑制功能至关重要,而另一个已知的KIEELE基序在此过程中的作用相对较弱。这与以往研究中关于这些基序功能重要性的争论提供了新的见解。 下表总结了关键的突变分析结果: 突变体 突变对象 关键区域/基序 对CD3ε/Lck凝聚体的影响 T细胞抑制功能影响 推断作用 F483A/L486A LAG-3 FSAL Motif 破坏作用丧失 显著减弱 直接参与或稳定与CD3ε的相互作用 ΔEP LAG-3 EP Motif 破坏作用部分减弱 部分减弱 可能通过静电作用协同FSAL基序发挥功能 ΔKIEELE LAG-3 KIEELE Motif 影响较弱 影响较弱 在此邻近模型中的作用非主导 CD3ε BRS基序突变 CD3ε Basic Rich Sequence (BRS) 与LAG-3凝聚能力丧失 - CD3ε上与LAG-3和Lck结合的关键位点 CD3ε mPRS CD3ε Proline Rich Sequence (PRS) 未提及对凝聚体影响(实验显示不影响与LAG-3的凝聚体形成 ) - 非LAG-3与CD3ε结合及破坏CD3ε/Lck凝聚体的关键区域 CD3ε mRK CD3ε RK Motif 未提及对凝聚体影响(实验显示不影响与LAG-3的凝聚体形成 ) - 非LAG-3与CD3ε结合及破坏CD3ε/Lck凝聚体的关键区域 LAG-3 F475A/L478A LAG-3 类似FSAL基序区域(与F483A/L486A类似位置突变) 未明确提及(推测类似F483A/L486A突变体影响 ) 未明确提及(推测抑制功能减弱 ) 可能与FSAL基序功能相似,参与与CD3ε的相互作用 这些发现共同揭示了一个精巧的分子机制:LAG-3通过物理邻近,直接干预TCR信号凝聚体的形成,从源头上关闭了T细胞的活化开关。 图 3. LAG-3 胞内域破坏 CD3ε/Lck 凝聚体 A-F. 溶液中 100 μM 人 CD3ε 与 LAG-3 ICD 的凝聚体形成实验,展示野生型或磷酸化状态的 CD3ε 及野生型或 F483A/L486A 突变的 LAG-3(n=5) G-O. 支持脂质双层(SLB)上 5 μM 磷酸化 CD3ε 与 Lck(开放形式 K273R/Y505F 突变或截短型 LckUD-SH3-SH2)的凝聚体形成实验,有无 5 μM 人或小鼠 LAG-3 ICD 及其他抑制性受体 ICD(n=5/6) P-S. 流式细胞术验证 mock 或人 / 小鼠 LAG-3(野生型或突变体)转导的 Jurkat NFAT-GFP 报告 T 细胞或 3A9 T 细胞中 LAG-3 的表达及抑制功能 3.3 发现三:从机制到疗法——“强制邻近”催生新型激动型双特异性抗体BiTS 这项研究最激动人心的部分在于,它没有停留在基础机制的发现,而是迅速将这一新知识转化为了创新的治疗策略。既然“强制邻近”是激活LAG-3抑制功能的关键,那么是否可以设计一种药物来主动实现这一点呢? 答案是肯定的。研究团队为此设计了一种双特异性抗体(Bispecific Antibody, BsAb)。 一个“手臂”:靶向并结合T细胞表面的LAG-3分子。 另一个“手臂”:靶向并结合同一T细胞表面的TCR复合物。 通过这种设计,BiTS分子就像一根强有力的“分子绳索”,将LAG-3和TCR强行“捆绑”在一起,人为地创造并稳定了发挥抑制功能所必需的“空间邻近”状态。为了避免在体内引发不必要的免疫反应(如抗体依赖的细胞毒性作用,ADCC),研究人员还对其Fc片段进行了N297G突变改造,使其成为一种“功能沉默”的抗体。 体外实验结果证实了这一设计的有效性:BiTS能够以剂量依赖的方式,强效抑制CD4$^{+}$和CD8$^{+}$ T细胞的活化。重要的是,这种抑制作用是严格依赖于LAG-3的——当作用于不表达LAG-3的T细胞时,BiTS的抑制效果大幅减弱,证明其功能确实是通过激活LAG-3通路实现的。 图 4. LAG-3/TCR 双特异性抗体(BiTS)介导 LAG-3 依赖性 T 细胞抑制 A. LAG-3/TCR BiTS 设计及 LAG-3 结合破坏的 BiTS 突变体(BiTSmut)示意图 B. 流式细胞术检测 100 nM BiTS 和 BiTSmut 与 TCR+LAG-3+ 细胞、TCR+LAG-3- 或 TCR-LAG-3+ B3Z 细胞的结合 C. mock 或 LAG-3 转导的 CD4+ TCR+(3A9)或 CD8+ TCR+(B3Z)T 细胞被 anti-CD3MT aAPC 激活后,在有无 10 nM BiTS、BiTSmut 或同型对照存在下的 IL-2 产量(n=3) D-E. 不同浓度 BiTS 或 BiTSmut 对 IL-2 产量的抑制作用及半最大抑制浓度(IC50)(n=3) 图 5. LAG-3/TCR BiTS 强效抑制抗原特异性 CD4+ 和 CD8+ T 细胞反应 A. CD4+ TCR+(3A9)或 CD8+ TCR+(B3Z)T 细胞分别被 I-Aᵏ HEL50-62 CD86+ aAPC 或负载 OVA257-264 的 mutuDC 激活后,在 10 nM BiTS、BiTSmut 或同型对照存在下的 IL-2 产量(n=3) B-D. BiTS、BiTSmut 或 Ly-TCR(无 LAG-3 臂)对 mock 或小鼠 LAG-3 转导的 CD4+ TCR+(3A9)或 CD8+ TCR+(B3Z)T 细胞 IL-2 产量的抑制作用及 IC50(n=3) 3.4 深度对比:BiTS vs. Relatlimab——同一靶点,两种截然相反的疗法 BiTS的出现,使得LAG-3这个靶点呈现出一种迷人的“双重人格”。为了更好地理解BiTS的创新性,有必要将其与已上市的LAG-3靶向药物——Relatlimab——进行对比。 Relatlimab是百时美施贵宝(BMS)开发的全球首个获批的LAG-3抑制剂,它与PD-1抑制剂Nivolumab组成的复方制剂(商品名Opdualag)已被批准用于治疗黑色素瘤。Relatlimab是一种拮抗型(Antagonist)单克隆抗体,其作用机制是阻断LAG-3与其配体(如MHC-II)的结合。在癌症治疗中,肿瘤细胞利用LAG-3通路来抑制T细胞的抗肿瘤活性;而Relatlimab通过切断这条通路,相当于“松开刹车”,重新释放T细胞的杀伤力,从而达到治疗癌症的目的。 而本研究中的BiTS则恰恰相反,它是一种激动型(Agonist)双特异性抗体。它的目标不是“松开刹车”,而是“踩死刹车”。在自身免疫病中,T细胞的过度活化是致病根源,因此需要抑制而非激活它们。BiTS通过强制LAG-3与TCR邻近,主动激活LAG-3的抑制信号,从而精准地“沉默”致病T细胞。 下表清晰地对比了这两种基于同一靶点的、截然不同的治疗策略: 特性 BiTS(本文研究) Relatlimab(已上市抗癌药) 抗体类型 双特异性激动型抗体 (Bispecific Agonist) 单克隆拮抗型抗体 (Monoclonal Antagonist) 作用机制 强制LAG-3与TCR邻近,激活抑制信号 阻断LAG-3与配体结合,解除抑制信号 对T细胞功能的影响 抑制 (Suppression) 激活 (Activation) 治疗领域 自身免疫病 (Autoimmune Diseases) 癌症 (Cancer) 核心科学原理 空间邻近诱导信号调控 配体-受体阻断 这种“一靶两用”的现象,深刻揭示了对靶点生物学机制的深入理解,是如何催生出功能完全相反但同样具有巨大潜力的创新疗法的。 3.5 发现四:BiTS在多种自身免疫病模型中展现强大治疗潜力 基础机制的阐明和创新分子的设计最终都需要在活体模型中得到验证。研究团队在多种经典的自身免疫病小鼠模型中评估了BiTS的治疗效果,结果令人振奋: 1型糖尿病模型(RIP-OVA模型):这是一种由CD8$^{+}$ T细胞攻击胰岛β细胞导致的疾病模型。结果显示,与对照组相比,BiTS治疗显著延缓了糖尿病的发生,并有效保护了小鼠免于发病。组织学分析也证实,BiTS治疗组小鼠胰岛的T细胞浸润(胰岛炎)程度显著降低。 自身免疫性肝炎模型:这是一种由记忆性CD8$^{+}$ T细胞驱动的肝脏炎症模型。BiTS治疗极大地减轻了肝脏的炎症损伤和CD8$^{+}$ T细胞浸润。单细胞测序分析进一步揭示,BiTS不仅减少了致病性T细胞的数量,还深刻改变了它们的活化状态和功能表型。 多发性硬化症模型(EAE模型):这是一种主要由CD4$^{+}$ T细胞介导的中枢神经系统自身免疫病模型。无论是在疾病发生前的预防性治疗,还是在疾病高峰期的治疗性给药,BiTS均能有效降低疾病的临床评分,改善小鼠的神经功能症状。 这些在不同疾病背景、由不同T细胞亚群(CD4$^{+}$或CD8$^{+}$)驱动的模型中取得的一致性阳性结果,强有力地证明了BiTS作为一种平台型疗法的巨大潜力,有望用于治疗多种T细胞介导的自身免疫性疾病。 图 6. LAG-3/TCR BiTS 抑制 CD8+ T 细胞活化并预防糖尿病 A-C. WT 或 Lag3-/- OT-I T 细胞被负载 OVA257-264 肽的 mutuDC 激活后,在 10 nM 同型对照、BiTSmut 或 BiTS 存在下的流式细胞术点图及 IL-2/IFN-γ 产量(n=3) D-E. RIP-OVA 糖尿病模型示意图及糖尿病发病率(每组 n=8,采用 Kaplan-Meier 检验) F-G. 糖尿病小鼠胰岛的代表性组织学图像(无胰岛炎、peri - 胰岛炎、胰岛炎)及组织学评分(每组分析 >10 个胰岛) 图 7. LAG-3/TCR BiTS 改善 CD8+ T 细胞介导的肝炎 A-B. IND-PALF 患者与 Dx-PALF 患者肝组织中免疫相关基因的 RNA-seq 分析及 GO 富集分析 C-D. 抗 - 4-1BB 处理后肝炎小鼠的肝损伤指标(ALT)及肝内 T 细胞亚群分析(n=4-9/5) E-I. 肝炎小鼠肝内免疫细胞的单细胞 RNA-seq 分析,包括 UMAP 降维、细胞类型鉴定及 CD8+ T 细胞亚群的效应 / 记忆基因特征评分 J-O. 肝内 CD8+ T 细胞与髓系细胞的配体 - 受体互作分析及炎症因子水平检测(n=5) 五、 关键结论与批判性总结 5.1 本文关键结论 本研究系统性地揭示了免疫检查点LAG-3的一个全新且精密的调控机制,并基于此开发了一种极具潜力的自身免疫病新疗法。其核心结论如下: 机制重定义:LAG-3的抑制功能并非简单地由配体结合触发,而是“有条件的”,其高效发挥作用的前提是与TCR在细胞膜上形成空间邻近。 分子通路阐明:在空间邻近的条件下,LAG-3的胞内结构域(ICD)通过与CD3ε直接相互作用,破坏了TCR活化所必需的CD3ε/Lck信号凝聚体,从而“釜底抽薪”式地终止了T细胞活化。 创新疗法开发:基于“强制邻近”原理,研究团队设计了激动型双特异性抗体BiTS,它能将LAG-3和TCR强行拉近,从而高效、精准地抑制T细胞功能。 广谱潜力验证:BiTS在1型糖尿病、自身免疫性肝炎和多发性硬化症等多种动物模型中均展现出强大的治疗效果,证明了其作为一种平台型疗法治疗T细胞介导的自身免疫病的广阔前景。 5.2 专家评述与展望 这项工作无疑是免疫学和药物研发领域的一项里程碑式研究,其意义深远,不仅重塑了我们对一个重要免疫检查点的认知,更开辟了一条全新的治疗途径。 意义与优势 LAG-3生物学的范式转移:该研究将我们对LAG-3的理解从一个简单的“配体-受体”模型,提升到了一个复杂的、依赖于“空间构象和信号组织”的全新层面。这种“条件性刹车”机制或许可以解释一个长期存在的现象:为何相比于PD-1,LAG-3在生理条件下的抑制功能显得更为温和。这可能是一种进化上的安全设计,通过增加激活门槛,避免在不适当的情况下过度抑制T细胞,从而为免疫系统提供了更精细的调控层次。 开创“邻近诱导信号调控”新药模式:BiTS的设计理念极具开创性。在药物研发领域,利用小分子诱导蛋白邻近以降解靶蛋白的PROTACs和分子胶技术已是热点。而BiTS则将这一“邻近诱导”概念从“降解”扩展到了“信号调控”领域,代表了一类全新的治疗模式—— 邻近诱导型生物大分子(Proximity-Inducing Biologics)。这为未来针对其他受体对的信号调控药物开发提供了宝贵的范例和理论基础。 严谨优雅的实验设计:从构建简化的人工细胞系统,到利用化学诱导工具精准验证核心假说,再到体外凝聚体实验和多种动物模型的验证,整个研究逻辑链条清晰、证据确凿,体现了极高的科学严谨性和创新性。 局限性与未来方向 尽管这项研究取得了重大突破,但从实验室走向临床,仍有诸多挑战需要克服,同时也为未来的研究指明了方向。 临床转化的挑战: 双特异性抗体的开发壁垒:作为一种复杂的生物大分子,双特异性抗体的生产工艺(CMC)复杂、成本高昂。此外,其独特的结构可能带来不可预测的免疫原性(即诱发抗药抗体),以及独特的毒性谱,如可能引发细胞因子释放综合征(CRS)或神经毒性,这些都是临床开发中必须密切关注和解决的问题。 患者选择生物标志物的缺失:这是BiTS未来临床成功的关键。自身免疫病具有高度异质性,并非所有患者都适合BiTS治疗。未来的临床试验必须建立一套精准的生物标志物(Biomarker)策略来筛选最可能获益的患者群体。基于本研究的机制,潜在的生物标志物可能包括: 致病T细胞的LAG-3表达水平:只有当致病T细胞高表达LAG-3时,BiTS才能有效发挥作用9。 TCR克隆型与疾病驱动因素:识别出由特定T细胞克隆驱动疾病的患者亚群。 基线信号通路状态:评估患者T细胞内源性TCR信号通路的活化状态,可能有助于预测其对BiTS的敏感性。 开发有效的生物标志物是实现精准医疗、提高T细胞疗法成功率的核心0。 在难治性疾病中的定位:对于那些对现有多种疗法(如TNF-α抑制剂、JAK抑制剂等)均无反应的“难治性类风湿关节炎”(D2T RA)患者,他们往往已经耗尽了标准治疗方案。BiTS这种全新机制的疗法,可能为这部分具有巨大未满足医疗需求的患者带来新的希望。 未来研究方向: 机制的进一步深化:LAG-3的胞内域是否还有其他未知的结合蛋白?它是否会影响除Lck之外的其他激酶?这些问题值得进一步探索。 “邻近诱导”概念的拓展:是否可以将这一设计理念应用于其他共刺激或共抑制受体对,开发出更多用于“打开”或“关闭”免疫反应的工具? 小分子药物的探索:是否有可能开发出能够模拟BiTS功能的小分子“分子胶”,通过口服给药,实现更便捷的治疗? 总而言之,这项研究不仅为我们解锁了免疫检查点LAG-3的深层奥秘,更重要的是,它将深刻的机理洞察转化为一种极具前景的创新疗法。BiTS的成功开发,为攻克T细胞介导的自身免疫性疾病这一顽疾点亮了一盏新的明灯,也为整个药物研发领域带来了关于“空间邻近性”的宝贵启示。
Field Knowledge
· 2025-07-01
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
FE-ToolKit: A Versatile Software Suite for Analysis of High-Dimensional Free Energy Surfaces and Alchemical Free Energy Networks
FE-ToolKit:一个用于分析高维自由能表面和炼金术自由能网络的多功能软件套件 📖 本文基本信息 摘要 自由能模拟在酶设计、药物发现和生物分子工程等多种生物学应用中发挥着关键作用 。要表征复杂酶促反应机理背后的高维自由能表面,需要通过伞形采样或弦方法模拟进行广泛的采样 。准确地对大型配体库的靶标结合自由能进行排序,则依赖于组织成热力学网络的全面炼金术自由能计算 。这些方法的预测准确性取决于强大且可扩展的工具,用于进行全网络数据分析并从异构模拟数据中提取物理性质 。在这里,我们介绍了FE-ToolKit,一个多功能的软件套件,用于自动分析自由能表面、最小自由能路径和炼金术自由能网络(热力学图) 。 引用信息 Giese, T. J., Snyder, R., Piskulich, Z., Barletta, G. P., Zhang, S., McCarthy, E., Ekesan, Ş., & York, D. M. (2025). FE-ToolKit: A Versatile Software Suite for Analysis of High-Dimensional Free Energy Surfaces and Alchemical Free Energy Networks. Journal of Chemical Information and Modeling, 65(17), 5273–5279. https://doi.org/10.1021/acs.jcim.5c00554 引言 在现代计算化学与生物物理学领域,自由能计算是理解和预测分子识别、反应机理及构象动力学等核心科学问题的基石。然而,这些计算本身面临着巨大的挑战,主要源于分子构象空间的广阔性以及对稳健统计方法和严格误差分析的内在需求。为应对这些挑战,FE-ToolKit应运而生。它是一个综合性的集成软件包,旨在为两类主要的计算问题——高维自由能面(Free Energy Surface, FES)的表征和炼金术自由能网络的分析——提供一个模块化、面向工作流程的解决方案生态系统。 本报告将遵循该工具包的结构,深入剖析其三个核心组成部分:首先是利用ndfes程序进行自由能面的构建与分析;其次是采用edgembar程序执行可扩展的炼金术网络计算;最后是介绍fetkutils中一系列增强计算效率与数据质量的辅助工具。为了给读者提供一个清晰的概览,下表总结了FE-ToolKit生态系统中的关键程序及其核心功能。 表1:FE-ToolKit程序生态系统 程序/脚本 核心功能 ndfes 使用MBAR/vFEP方法,根据伞形采样数据计算N维FES。 ndfes-path-analyzesims.py 为表面加速弦方法(SASM)提取当前迭代的样本并准备ndfes元文件。 ndfes-path 在静态FES上优化最小自由能路径,并为下一次迭代生成新的模拟输入。 edgembar 对单个炼金术变换(“边”)进行MBAR分析,并生成其有效目标函数。 edgembar-WriteGraphHtml.py 执行炼金术自由能的网络范围分析,并生成交互式HTML报告。 fetkutils-tischedule.py 优化炼金术自由能计算中的λ调度,以提高采样效率。 ndfes-AvgFESs.py 平均多个独立的FES,并根据试验间的方差调整不确定性。 ndfes-CombineMetafiles.py 将多个元文件合并为一个,以聚合采样数据。 ndfes-PrintFES.py 将FES检查点文件中的数据打印为人类可读的文本格式。 Figure 1. FE-ToolKit consists of ndfes for calculating N-dimensional free energy surfaces, edgembar for analyzing alchemical free energy networks using the EdgeMBAR method, and FE-ToolKit utilities (fetkutils) for optimizing schedules of alchemical states. 第一部分:使用ndfes构建和分析自由能形貌 ndfes是FE-ToolKit中用于将偏置模拟(biased simulation)数据转化为有意义的多维自由能面(Free Energy Surface, FES),并识别其上最可能转变路径的核心组件。本节将详细阐述其理论基础、核心方法及实现细节。 1.1 伞形采样与集体变量(CVs)的原理 伞形采样(Umbrella Sampling)是一种成熟的增强采样技术,常用于计算分子构象变化、化学反应或分子解离/结合等过程的自由能。它通过施加人工偏置势(biasing potential)来克服高自由能垒,从而确保沿特定过程坐标的充分采样。 在FE-ToolKit的语境中,这些过程坐标被称为“反应坐标”(Reaction Coordinates)或更广为人知的“集体变量”(Collective Variables, CVs)。CVs是描述所研究过程的一组低维坐标。本文中的示例并未指定具体的分子体系(例如,某个特定的蛋白或反应),而是作为通用教程进行展示。但其中使用的CVs是该领域的典型代表,例如以埃(Å)为单位的原子间距离,或以度(degrees)为单位的角度或二面角。 1.2 从偏置数据到无偏表面:MBAR与vFEP方法 核心问题是如何将来自多个独立的、仅探索了CV空间小范围的偏置模拟数据,整合成一个全局的、无偏的自由能面。FE-ToolKit为此提供了两种功能强大且互为补充的先进方法。 多态贝内特接受率(MBAR)方法 MBAR 是一种在统计上被证明是最优的数据重权(reweighting)技术。其核心思想是:所有偏置模拟(每个模拟是一个“态”)的采样数据可以被汇集起来,通过一个优化的权重因子,来估计任何一个“态”(包括我们最感兴趣的无偏物理态)的性质。 详细的原理见下一篇推送。 变分自由能剖面(vFEP)方法 vFEP是一种参数化方法,与MBAR不同,它不直接计算离散点的概率,而是假设整个自由能表面(FES)可以用一个全局的、连续光滑的解析函数 $F_h(\xi;p)$ 来建模。其核心思想是通过光滑函数拟合能量地貌,类似于用一条平滑的数学曲线或曲面来拟合整个能量地形。 vFEP通过最大化观测到所有偏置模拟样本的对数似然函数来找到最优的函数参数 $p$。该方法使用基数B样条作为基函数来构建全局函数 $F_h(\xi;p)$。B样条是一种标准化的、柔性的“曲线积木”,每个基函数在空间的一小块区域内有值,其他地方为零,特别适合描述规则网格上的函数。 详细的原理见下一篇推送。 vFEP与MBAR互补。MBAR是非参数化的,忠实于原始数据,但在数据稀疏区域可能结果不连续或噪声多;vFEP是参数化的,假设FES平滑,能提供平滑连续的表面并便于后续分析,但可能引入模型偏见。用户可根据具体问题选择合适工具或联合使用进行交叉验证。 1.3 寻找最优路径:表面加速弦方法(SASM) 在获得了FES之后,下一个重要任务是识别连接两个稳定态(如反应物和产物)的最小自由能路径(Minimum Free Energy Path, MFEP)。ndfes-path 程序为此实现了弦方法的一个先进变体——表面加速弦方法(SASM)。 SASM的迭代过程 SASM的迭代流程针对的是一个特定的反应过程或构象转变(例如一个蛋白的开闭运动,或一个配体的解离路径),而不是一次性处理多个不同的配体。其核心思想是,它将路径(“弦”)的表示与用于生成FES的伞形采样解耦。 它的可靠性来源于一个“数据驱动的、渐进精化的”迭代过程: 初始猜测与采样:基于一个初始猜测的路径进行初步的伞形采样。 聚合与分析:使用ndfes-path-analyzesims.py脚本收集当前及所有先前迭代的全部采样数据。随后,运行ndfes程序,基于这些聚合数据计算出当前对全局FES的最佳估计。 路径优化:ndfes-path程序读取步骤2中生成的静态FES,并在此固定的表面上优化弦的位置,以找到当前对MFEP的最佳估计。 采样精化与迭代:最后,ndfes-path生成新的模拟输入文件。这些文件会在新优化的路径周围放置新的伞形采样窗口以提高路径局部的分辨率,或在路径的末端进行采样以将其扩展到未探索的区域。随后返回步骤2,进行下一轮迭代。 这个策略通过利用全部历史数据来不断修正全局FES,确保路径优化总是在最可靠的表面上进行,从而防止路径在FES定义不清的区域中“迷失”,加速收敛至真实的MFEP。 graph LR %% 定义节点和边的样式 classDef startNode fill:#E8F8F5,stroke:#16A085,stroke-width:2px,font-family:SimHei classDef processNode fill:#EAF2F8,stroke:#5499C7,stroke-width:2px,font-family:SimHei classDef loopArrow stroke:#E74C3C,stroke-width:2.5px,stroke-dasharray: 5 5 %% 节点定义 A("1.初始猜测与采样<br/>基于初始路径进行初步伞形采样") B["2.聚合与分析<br/>程序:ndfes-path-analyzesims.py 与 ndfes<br/>聚合所有历史数据并计算全局FES"] C["3.路径优化<br/>程序:ndfes-path<br/>在固定的FES上优化路径"] D["4.采样精化<br/>程序:ndfes-path<br/>生成新的伞形采样窗口"] %% 流程连接 A --> B B --> C C --> D D -- "返回步骤2<br/>进行下一轮迭代" --> B %% 为节点和边应用样式 class A startNode class B,C,D processNode linkStyle 3 stroke:#c0392b,stroke-width:2px 1.4 最终的自由能面:结构与内容 ndfes的最终输出是一个离散化的多维网格,存储在一个信息详尽的XML格式的检查点文件中。这个输出远不止是能量值,网格中的每个“箱”(bin)都包含了用于分析和质量评估的丰富数据。 表1:一个ndfes FES箱的数据结构(MBAR模型) 数据字段 描述与单位 重要性 Bin坐标 (<bidx>) 标识箱在多维网格中位置的一组整数索引。 定义了FES上的一个特定离散点。 自由能 (<val>) 箱中心的自由能值,单位为kcal/mol。 计算的主要结果,描述了该状态的相对稳定性。 标准误差 (<err>) 自由能值的不确定性,通过自助法(bootstrap)估计,单位为kcal/mol。 衡量结果的统计置信度,是误差分析的关键。 Bin布居数 (<size>) 落入该箱的原始样本数量。 表明该区域的采样质量;数量过少可能意味着结果不可靠。 重权熵 (<re>) 一个介于0和1之间的无量纲数。 衡量不同偏置模拟之间的重叠程度,越接近1越好。 第二部分:使用edgembar进行网络范围的炼金术计算 FE-ToolKit 的 edgembar 组件为相对自由能计算提供了一个强大且可扩展的解决方案,尤其适用于处理大规模的配体结合或溶剂化能研究。 2.1 炼金术网络范式 为了计算相对结合或溶剂化自由能,通常会构建一个热力学循环。这些计算可以被直观地表示为一个图形网络:网络中的节点(nodes)代表不同的分子(如配体),而连接两个节点的边(edges)则代表在这两个分子之间进行的炼金术转换。 每条边关联的值是相对自由能差,记为 $\Delta\Delta G$。例如,在计算相对结合自由能时,该值定义为 $\Delta\Delta G_{(ab)} = \Delta G_{(ab),protein} - \Delta G_{(ab),water}$。这个值直接反映了配体 B 相对于配体 A 与靶标蛋白结合的优势或劣势程度。 2.2 EdgeMBAR 方法:一种可扩展的网络分析策略 当我们需要比较一系列配体(例如候选药物分子)与同一靶点的结合能力时,通常会构建一个“炼金术自由能网络”。edgembar 是 FE-ToolKit 中为此类任务量身定做的核心组件。它采用了一种创新性的 EdgeMBAR 方法,将复杂的网络分析问题分解为几个清晰、高效的步骤。 graph TD %% 定义节点样式 classDef inputNode fill:#FEF9E7,stroke:#F39C12,stroke-width:2px,font-family:SimHei classDef stepNode fill:#EAF2F8,stroke:#5499C7,stroke-width:2px,font-family:SimHei classDef innovationNode fill:#E8DAEF,stroke:#8E44AD,stroke-width:2px,font-family:SimHei classDef solveNode fill:#D5F5E3,stroke:#229954,stroke-width:2px,font-family:SimHei classDef outputNode fill:#E8F8F5,stroke:#16A085,stroke-width:2px,font-family:SimHei %% 节点定义 A("炼金术自由能网络<br/>包含所有边的原始模拟数据") B["<b>步骤一:隔离与表征</b><br/>对每一条边独立进行MBAR分析<br/>得到无约束自由能 g<sub>(ab)</sub>"] C["<b>步骤二:抽象为有效模型<br/>(核心创新)</b><br/>将每条边的复杂目标函数<br/>近似为简单的二次函数<br/>提取 g<sub>(ab)</sub> 和置信度 k<sub>(ab)</sub>"] D["<b>步骤三:线性代数求解</b><br/>整合所有边的 g 与 k 信息<br/>构建并求解全局线性方程组"] E("最终网络解 <b>c</b><br/>得到所有配体全局一致的<br/>有约束自由能(CFE)") %% 流程连接 A --> B B --> C C --> D D --> E %% 为节点应用样式 class A inputNode class B stepNode class C innovationNode class D solveNode class E outputNode 步骤一:隔离与表征(Isolation & Characterization) 在这一阶段,edgembar 将复杂的网络拆解开,对其中的每一条“边”(edge)进行独立的、高精度的分析。 通俗解释:可以把构建整个自由能网络比作绘制一幅完整的国家地图。传统方法可能试图一次性测量和绘制所有省份,计算量巨大且容易出错。EdgeMBAR 则更像“分而治之”:它先向每个省(每一条边)派出一位独立的“本地勘探专家”。这位专家只负责深度勘探自己省内的地形,完全不受邻省情况的干扰。 技术实现:对于网络中任意一条代表“配体 a → 配体 b”转换的边 (ab),程序首先会构建其完整的“边目标函数” $F_{(ab)}(G_{(ab)})$。该函数是这条边所有相关模拟试验(包括不同环境、阶段和重复试验)的 MBAR 目标函数的总和。 通过最小化这个局部的目标函数($G_{(ab)}^{} = \arg\min F_{(ab)}(G_{(ab)})$),可以得到该边在完全独立、不受网络中其他边影响时的无约束相对自由能(unconstrained relative free energy),记为 $g_{(ab)} = \Delta\Delta G_{(ab)}^{}$。这代表了这条边基于其自身模拟数据得出的“最真实”的自由能值。 步骤二:抽象为有效模型(Abstraction to an Effective Model) 这是 EdgeMBAR 方法的核心创新 所在。在进行全局网络分析时,程序并不直接使用那个包含了所有原始数据、形式复杂的 $F_{(ab)}$,而是用一个极其简单的二次函数(即抛物线)来近似模拟其在最小值 $g_{(ab)}$ 附近的行为。 通俗解释:那位“本地勘探专家”在完成详细勘探后,并不会把所有密密麻麻的原始测绘数据都上报给总部。他只提交一份极其凝练的报告:“我省的平均海拔是 $g_{(ab)}$,我对这个值的置信度是 $k_{(ab)}$。” 技术实现:这个近似的二次“有效目标函数”形式如下: \[\tilde{F}_{(ab)}(x) \approx F_{(ab)}(G_{(ab)}^{*}) + \frac{k_{(ab)}}{2}(x - g_{(ab)})^{2}\] 这个简单的抛物线精确地抓住了关于这条边计算结果的两个最关键信息: 最可能的自由能值 ($g_{(ab)}$):即抛物线的最低点位置,代表了独立的边分析给出的最佳估计值。 结果的置信度或精度 ($k_{(ab)}$):这是抛物线的“力常数”,决定了曲线的陡峭程度。$k_{(ab)}$ 越大,抛物线越“瘦削”,意味着微小的自由能偏差 $x - g_{(ab)}$ 都会导致目标函数值急剧上升。这表明模拟数据非常肯定地指向 $g_{(ab)}$ 这个值,因此该计算结果的置信度越高、统计误差越小。反之,一个平坦的抛物线($k_{(ab)}$ 很小)则代表了较大的不确定性。 步骤三:可扩展的线性代数求解(Scalable Linear Algebra Solution) 通过将网络中的每一条边都抽象成一个简单的二次函数,原本棘手的、需要处理海量原始数据的非线性优化问题,被神奇地转化为了一个可以解析求解的线性代数问题。 通俗解释:总部现在收到了来自所有省份的标准化报告($g_{(ab)}$ 和 $k_{(ab)}$)。为了绘制一张全局一致的国家地图,总部只需执行一个简单的“加权平均”过程:找到一组能最好地同时满足所有本地报告,且优先采纳那些置信度($k_{(ab)}$ 值)更高的报告的“官方海拔值”($c_a, c_b, \dots$)。 技术实现:整个网络的全局目标函数现在是所有边的有效目标函数之和,这是一个简单的二次型: \[F_{\text{graph}}(\mathbf{c}) = \sum_{(ab)}^{N_{\text{edge}}} \frac{k_{(ab)}}{2} (c_b - c_a - g_{(ab)})^2\] 其中 $\mathbf{c}$ 是一个包含了所有节点(配体)待求的相对自由能 $c_a, c_b, \dots$ 的向量。最小化这个函数等价于求解一个线性方程组,其闭合解形式非常简洁: \[\mathbf{c} = \mathbf{M}^{-1} \cdot \mathbf{X}^T \cdot \mathbf{K} \cdot \mathbf{g}\] 这里的 $\mathbf{g}$ 是所有无约束自由能构成的向量,$\mathbf{K}$ 是所有力常数构成的对角矩阵,$\mathbf{X}$ 和 $\mathbf{M}$ 是描述网络拓扑结构(即节点如何被边连接)的矩阵。 这种方法的优势是巨大的: 计算效率极高:求解线性方程组远比处理海量原始数据和最小化非线性函数要快得多。 出色的可扩展性:如果网络中增加了一条新的边,我们只需对这条新边执行一次步骤一和步骤二,然后几乎可以瞬时解出新的全局网络结果。而传统方法可能需要从头重新分析整个网络,成本高昂。 步骤四:得到网络解以后能做什么?——从无约束到约束分析 求解出向量 $\mathbf{c}$(即所有配体的相对自由能)后,我们可以进行一系列深刻的分析,这正是edgembar的核心价值所在。 计算有约束自由能(Constrained Free Energy, CFE) 求解该线性方程组的主要目的之一就是计算有约束自由能。 定义:向量 $\mathbf{c}$ 中的解,代表了在满足全局热力学循环闭合条件下,对所有配体相对自由能的最佳估计 。网络中任意两点(例如配体 a 和配体 b)的自由能差 $c_b - c_a$,就是该路径的有约束自由能(CFE)。 与无约束自由能(UFE)的对比:与之对应的是我们在步骤一中得到的无约束自由能(UFE),即 $g_{(ab)}$。UFE 是单条边“认为”自己应该有的值,而 CFE 是它在整个关系网中为了“合群”(满足热力学一致性)而必须调整到的值。 诊断价值:比较 CFE 和 UFE 的差异,即 Shift($ CFE - UFE $),是一个极其重要的诊断指标。一个很大的 Shift 值意味着这条边的独立计算结果与网络中的其他邻居存在严重冲突,表明这条边的模拟数据可能存在问题,需要仔细检查 。 整合实验数据进行进一步约束 edgembar 的强大之处还在于,它允许将外部的高精度数据(如已知的实验测量值)作为额外的、更强的约束条件整合到网络分析中 。 实现机制:该功能通过拉格朗日乘子法(Lagrange’s method of undetermined multipliers)实现 。它在最小化全局目标函数 $F_{\text{graph}}(\mathbf{c})$ 的同时,额外施加了一组线性约束,强制要求网络中某些边的 CFE 值必须等于给定的实验值 。 实际操作:用户可以通过在 edgembar-WriteGraphHtml.py 脚本中使用 --expt FILENAME 和 --constrain LIGA~LIGB 等命令行选项来轻松实现这一功能 。 意义:这使得我们可以利用已知的、可靠的实验数据来“锚定”整个自由能网络,从而提高对未知配体自由能的预测精度。 深入的诊断与质量评估 最终的“graph report”(HTML 格式的图报告)提供了丰富的诊断指标,帮助用户全面评估网络质量 。 表 2:网络分析中的关键诊断指标 指标 全称 描述与意义 UFE / dUFE Unconstrained Free Energy 边的无约束自由能及其标准误,来自独立的边分析 。 CFE / dCFE Constrained Free Energy 边的有约束自由能及其标准误,来自网络全局分析的结果 。 Force Constant ($k_{(ab)}$) 有效目标函数中的二次项系数,反映了自由能曲线的陡峭程度。 “力常数”越小,表示独立计算该边自由能的不确定性越大,其结果在网络整合中的权重也相应较低。 Shift Shift 网络自洽后的边自由能与独立计算的边自由能之差的绝对值:$ \Delta\Delta G_{\text{network}} - \Delta\Delta G_{\text{isolated}} $。该值较大时,表明网络整合显著改变了该边的自由能估计,可能暗示网络中存在不一致性或该边的初始计算存在偏差。 CC Cycle Closure error 任何一个闭合环路的 UFE 之和的绝对值,直接衡量网络的不一致程度 。 Average Cycle Closure (ACC) 遍历某条边的所有独立闭合路径的循环闭合误差的平均值。 ACC 值较大同样标志着该边是网络不一致性的主要来源,需要仔细检查与之相关的模拟数据。 LMI Lagrange Multiplier Index 一个无量纲数,衡量一条边对整个网络施加的“应力”或“张力” 。值越大,表明该边与网络其余部分的矛盾越大。 OFC2 Objective Force Constant 目标函数力常数的两倍 (2k(ab)),衡量 UFE 计算结果的置信度 。 2.3 实用的网络分析与诊断 FE-ToolKit 的设计理念是赋能专家用户,因此 edgembar 及其配套脚本不仅提供最终的自由能数值,还输出了大量的诊断数据,以评估结果的可靠性和整个网络的一致性。edgembar-WriteGraphHtml.py 脚本生成的交互式 HTML 报告是一个强大的可视化工具,用户可以用它来探索网络图、节点、边和循环的详细属性。为了有效利用这些诊断信息,理解关键指标的含义至关重要。 补充细节:edgembar 的输入与输出 输入要求: edgembar 的输入是一个 XML 文件,该文件组织模拟数据到环境、阶段、试验和状态的层次结构中。 每个试验的数据是一组名为 “efep_tlam_elam.dat” 的文件集合,其中 tlam 是采样状态,elam 是文件中制表的势能状态。 文件的第一列是模拟时间(皮秒),第二列是势能(kcal/mol)。如果需要,还可以包含额外列用于不同环境和目标势能。 输出与报告: edgembar 的输出被组织成数据结构并写入 Python 文件,可直接导入其他脚本进行分析。 执行 Python 输出会总结结果到一个 HTML 格式的 “边报告” 中。 edgembar-WriteGraphHtml.py 脚本读取多个 edgembar 输出,计算配体自由能,并总结结果到一个 HTML 格式的 “图报告” 中,比较孤立边自由能与配体自由能差异,并包含闭合路径及其闭合误差的表格。 实际应用案例 假设我们正在进行一项大规模的配体结合自由能计算,以筛选潜在的药物分子。我们构建了一个包含 100 个配体的网络,每个配体与相邻配体之间都有边连接,形成一个复杂的热力学网络。使用 edgembar,我们可以: 对每条边进行独立分析,计算其无约束相对自由能 $g_{(ab)}$ 和力常数 $k_{(ab)}$。 将每条边的结果抽象为二次有效目标函数,构建整个网络的全局目标函数。 求解线性方程组,得到所有配体的相对自由能。 利用 edgembar-WriteGraphHtml.py 生成的 HTML 报告,检查 Shift、LMI 和 ACC 等诊断指标,识别网络中的潜在问题边。 针对问题边进行进一步的模拟或调整计算参数,优化网络一致性。 通过这种系统性的分析和诊断流程,edgembar 不仅提供了准确的相对自由能计算结果,还帮助研究人员深入理解网络中各边和节点的相互作用,为药物设计和分子模拟提供了宝贵的指导。 第三部分:辅助工具与实用工作流程 (fetkutils) 如果说 ndfes 和 edgembar 是执行核心科学分析的“主力部队”,那么 fetkutils 工具集就是保障整个研究工作流程顺畅、高效、可靠的“精英后勤与工程团队”。它解决了两个在自由能计算中普遍存在、至关重要的实践问题:如何用最少的资源达到最高的计算效率,以及如何确保用于分析的数据是稳定可靠的。 优化模拟效率:“智能的领航员” (fetkutils-tischedule.py) 核心思想:与其亡羊补牢,不如未雨绸缪。 在进行昂贵的炼金术自由能计算时,一个常见的效率瓶颈是不同炼金术状态(λ态)之间的转换不顺畅。可以把这个过程想象成一场长距离接力赛,如果其中某两个赛段的交接棒(状态交换)非常困难,那么整个团队的速度都会被拖慢。天真地将“接力点”(λ值)均匀分布,往往不是最高效的策略。 fetkutils-tischedule.py 工具提供了一种主动优化的智能策略。它就像一位经验丰富的教练,在正式比赛前,先让队员们进行一次简短的“测试跑”(即“预烧”模拟),以识别出哪些交接棒环节是薄弱点。然后,它利用这些测试数据,为正式比赛量身定做一套最优的接力方案(即优化的λ调度表)——在困难的交接区段,让接力点靠得更近,在轻松的区段则拉得更远。 这个“先侦察,再规划”的策略,能够确保最终进行的、计算成本高昂的生产性模拟从一开始就在最优化的路径上运行,从而显著节省宝贵的计算资源和研究时间。 确保数据质量:“严谨的质检员”(自动化平衡检测) 核心思想:用客观的算法取代主观的人眼判断。 分子模拟的轨迹数据,就像刚从工厂生产出来的产品,必须经过严格的质量检验才能使用。每条轨迹的开头部分都是系统从初始状态走向平衡的“预热”或“适应”阶段,这部分数据是不稳定、不可靠的,必须被准确地切除。在面对成百上千条模拟轨迹时,手动检查并决定切割点不仅繁琐,而且极易引入研究者的主观偏见。 FE-ToolKit 内置的自动化平衡检测算法就是一位不知疲倦且铁面无私的“质检员”。它会自动审查每一条轨迹的关键数据流(如能量波动),并运用一套严格的统计检验流程来做出判断。它会反复“考察”数据,直到找到一个明确的、不再有系统性漂移或剧烈波动的稳定“生产区域”。 这个自动化流程提供了一种可重复的、客观的方法来筛选数据,从源头上保证了只有高质量、已平衡的样本才能被用于最终的自由能分析,这对于确保科学结论的可靠性至关重要。 其他工具功能概览 ndfes-AvgFESs.py:用于合并来自独立重复试验的结果,并正确地传递误差,这对于评估结果的稳健性至关重要。 ndfes-CombineMetafiles.py:一个实用的工具,用于聚合来自多个模拟集的数据,简化了对大规模伞形采样数据的管理。 ndfes-PrintFES.py:用于从二进制的检查点文件中提取数据,并将其转换为人类可读的文本格式,方便后续处理或绘图。 ndfes-genbias:一个专门用于处理非谐波偏置势的程序。这体现了工具包的灵活性,但文档也明确指出,使用该程序会在效率和易用性上有所取舍。 它们共同构成了面向工作流程的完整工具链。 结论 FE-ToolKit不仅仅是一个程序的集合,它体现了对现代自由能计算的一种连贯而强大的构想。通过对其核心组件和设计理念的深入剖析,可以总结出几个贯穿始终的主题: 可扩展的严谨性:无论是通过SASM中的解耦策略,还是EdgeMBAR中革命性的抽象方法,该工具包始终在追求统计上最优的严谨性的同时,确保方法能够扩展到日益复杂的系统中。 赋能专家用户:从提供MBAR和vFEP两种FES构建方法,到输出详尽的网络诊断指标,FE-ToolKit的设计处处体现了对专业用户的尊重,为他们提供了深入分析和验证计算结果所需的全部工具。 模块化的工作流程设计:工具包由一系列目标明确、可协同工作的脚本和程序组成,形成了一个从实验设计(如λ调度优化)、数据生成、核心分析到最终结果可视化的完整生态系统。 抽象的力量:EdgeMBAR方法是这一点的最佳体现。通过将复杂的边目标函数抽象为一个简单的二次模型,它成功地将一个难以处理的全局优化问题转化为一个易于求解的线性问题,这正是计算科学中优雅解决方案的典范。 综上所述,FE-ToolKit为计算科学家提供了一个从头至尾的解决方案,引导研究人员高效、自信地应对从基础反应机理到大规模药物设计等领域中极具挑战性的自由能计算问题。 局限性与未来展望 尽管FE-ToolKit功能强大,但根据原文的描述,其在当前版本中仍存在一些局限性,并指明了未来的发展方向: 特定组件的功能限制: 工具包中提供了一个用于处理通用偏置势的程序 ndfes-genbias,但作者明确建议除非绝对必要,否则不推荐使用。 主要原因是 ndfes-genbias 需要写入非常大的输入文件,对内存工作站的要求很高。 此外,该程序尚不能执行vFEP方法,并且在聚合来自多个重复试验的数据时,由于“偏置索引”可能会失效,操作起来非常谨慎和困难。 性能与实现: 核心的网络分析程序 edgembar 是一个用C++编写的、支持OpenMP并行的实现,但原文明确指出它目前缺乏GPU加速功能。在当前大规模计算日益依赖GPU的背景下,这可能在处理超大规模网络时成为一个潜在的性能瓶颈。 当前版本的功能待完善之处: 对于在不同温度下进行的模拟,并试图在某个特定温度下分析其自由能面的功能,原文提到这部分功能尚未经过广泛测试,且初步测试表明结果可能会受到显著的数值噪声影响。 在能量单位方面,当前版本的图报告和边报告中的能量单位是固定的(kcal/mol)。原文提到未来的版本将允许用户选择输出的能量单位,暗示了当前版本在这方面缺乏灵活性。 持续发展的需求: 作者在结尾处指出,FE-ToolKit将继续被开发和维护,以支持新兴的集成自由能方法。这表明该工具包虽然在处理当前主流方法上非常成熟,但仍需不断迭代,以跟上计算化学领域快速涌现的新技术和新方法。
Molecular Dynamics
· 2025-06-23
FE-ToolKit Methodology Deep Analysis: Mathematical Derivations and Physical Interpretations
FE-ToolKit方法学深度解析:推公式和物理意义 第一部分:使用ndfes构建和分析自由能形貌 伞形采样与集合变量(CVs)的原理 谐波偏置势 (Harmonic Biasing Potential) 的定义 在 $ndfes$ 中,用于伞形采样的谐波偏置势由以下函数形式定义: \[W(\xi) = \sum_{d=1}^{N_{dim}} k_{d} (\xi_{d} - \xi_{0,d})^2\] 其中,$\xi_{d}$ 是第 $d$ 个集合变量(CV)的值,$\xi_{0,d}$ 是伞形窗(umbrella window)的中心位置,而 $k_{d}$ 是谐波系数。 一个必须注意的实践细节是,ndfes 所采用的公式(与 Amber 等主流模拟软件一致)省略了传统物理学中弹簧势能公式前导的 $1/2$ 因子。传统公式通常写作: \[W(\xi) = \sum_{d=1}^{N_{dim}} \frac{k_{\text{spr},d}}{2} (\xi_{d} - \xi_{0,d})^2\] 这意味着在配置输入文件时,用户提供给 $ndfes$ 的谐波系数 $k_{d}$ 应该是传统物理意义上弹簧常数 $k_{\text{spr},d}$ 的一半。这种对实际应用细节的明确,体现了该工具包在设计上的严谨性,旨在帮助用户避免因定义不一致而导致的常见配置错误。 多态贝内特接受率(MBAR)方法 公式的通俗解释 我们的最终目标是得到无偏的自由能 $F_h(\xi)$,它与无偏概率分布 $\rho_h(\xi)$ 的关系由统计力学的基本公式定义: \[F_{h}(\xi) = -k_B T \ln \rho_{h}(\xi)\] 其中,$k_B$ 是玻尔兹曼常数,$T$ 是温度。对于一个离散的箱(bin)$m$,其概率可以看作是所有样本点落入该箱的加权总和: \[\rho_{h}(\xi_{m}) = \sum_{k=1}^{K_{h}} \sum_{n=1}^{N_{hk}} \delta(\xi_{m} - \xi(r_{hkn})) \omega_{h}(r_{hkn})\] 这里的 $\delta(\cdot)$ 函数判断样本是否在箱内,关键在于权重 $\omega_h$。这个权重告诉我们,一个在偏置模拟中采样到的点,在真实的、无偏的世界里应该有多“重要”。其公式为: \[\omega_{h}(r_{hkn}) = \frac{\exp[\beta F_{h} - \beta U_{h}(r_{hkn})]}{\sum_{k'=1}^{K_{h}} N_{hk'} \exp[\beta F_{hk'} - \beta U_{hk'}(r_{hkn})]}\] 简单来说,这个权重是一个校正因子。它的物理意义是:将一个在人工偏置(biased)环境下得到的观测样本,其重要性(或贡献度)修正回它在真实物理(unbiased)环境下应有的水平。 为了理解这一点,我们需要从一个更简单的概念“重要性采样”说起,然后将其推广到MBAR的复杂情况。 1. 从一个简单的例子说起:重要性采样 (Importance Sampling) 想象一个思想实验: 我们的目标: 测量一个山脉(代表真实的、无偏的能量形貌)中,海拔低于1000米区域的平均温度。 我们的工具: 一个有故障的探测器,它更喜欢在海拔高的山峰上着陆采样(代表一个有偏置的模拟),而在山谷里采样很少。 如果我们直接平均所有采集到的温度数据,由于大部分数据来自寒冷的山峰,我们得到的平均温度一定会远低于真实的谷底平均温度。这就是偏置(bias)。 如何校正?对于每一个采集到的数据点,我们需要乘以一个“权重”: 如果在山峰(探测器喜欢去的地方)采集到一个数据点,我们需要降低它的权重,因为它被过采样了。 如果幸运地在山谷(探测器不喜欢去的地方)采集到一个数据点,我们需要大大增加它的权重,因为它被欠采样了。 这个权重具体应该是多少呢?直观上,它应该是:权重∝我们的探测器实际在该地点采样的概率/一个地点在真实世界中应该被采样的概率。这个比值就是“重要性权重”的核心思想。 变量解释 变量 含义 $r_{hkn}$ 一个具体的系统快照(sample),即一组包含所有原子坐标的构象。下标 $hkn$ 表示这个快照是在哈密顿量 $h$(通常是无偏的物理系统)和偏置势 $k$(第 $k$ 个伞形窗)下进行的模拟中的第 $n$ 个样本。 $U_{h}(r_{hkn})$ 将样本 $r_{hkn}$ 的构象代入无偏的物理势能函数中计算得到的无偏势能。 $U_{hk’}(r_{hkn})$ 将样本 $r_{hkn}$ 的构象,代入到另一个偏置模拟 $k’$ 的势能函数中计算得到的偏置势能。这是“重权”的关键,即用一个实验的样本来评估它在另一个实验条件下的能量。 分子的详细解析 分子项是 $\exp[\beta F_{h} - \beta U_{h}(r_{hkn})]$。要理解它,我们首先需要明确 $F_h$ 的含义。 $F_h$ 是什么? $F_h$ 是整个无偏物理系统的亥姆霍兹自由能,它是一个描述系统整体热力学性质的常数,与任何一个具体的微观构象无关。它由系统的配分函数 $Z_h$ 决定: \[F_h = -k_B T \ln Z_h\] 配分函数 $Z_h$ 是对系统所有可能构象的玻尔兹曼因子求和: \[Z_h = \sum_{i} \exp(-\beta U_{h,i})\] 什么是玻尔兹曼因子?对于一个特定的微观构象 $r_{hkn}$,其玻尔兹曼因子是 $\exp[-\beta U_{h}(r_{hkn})]$。这个值本身是一个未归一化的、相对的概率。能量越低的构象,其玻尔兹曼因子越大,出现的可能性也越大。 分子究竟是什么? 根据 $F_h$ 的定义,我们可以推导出: \[\exp(\beta F_h) = \exp(- \ln Z_h) = \frac{1}{Z_h}\] 因此,分子可以重写为: \[\exp[\beta F_{h} - \beta U_{h}(r_{hkn})] = \exp(\beta F_h) \times \exp(-\beta U_h(r_{hkn})) = \frac{\exp[-\beta U_h(r_{hkn})]}{Z_h}\] 这个完整的项 $\frac{\exp[-\beta U_h(r_{hkn})]}{Z_h}$ 才是该构象 $r_{hkn}$ 在无偏物理系统中出现的真实的、归一化的概率。所以,整个分子项代表的是真实概率,其核心是玻尔兹曼因子。 分母是什么? 通过将分母设置为对所有偏置实验的总和,MBAR确保了信息的最大化利用。任何一个构象,无论它是在哪个窗口被采样的,它的权重都是综合考虑了所有其他窗口的信息后计算出来的。这种“全局视野”使得MBAR在理论上比只考虑相邻窗口重叠的WHAM等方法更为精确和高效。 这是一种将所有信息源进行最佳组合的方式,以推断真实世界的分布。 这个过程的难点在于,权重 $\omega_h$ 的计算依赖于所有偏置态的自由能 $F_{hk’}$,而这些自由能本身又是待求量。因此,这是一个必须通过自洽迭代求解的方程组,MBAR算法的核心就是高效地解决这个问题。 变分自由能剖面(vFEP)方法 与MBAR不同,vFEP是一种参数化方法。它不直接计算离散点的概率,而是假设整个FES可以用一个全局的、连续光滑的解析函数 $F_h(\xi;p)$ 来建模。 vFEP的核心思想:用光滑函数拟合能量地貌 可以这样理解:如果说MBAR是在地图上测量并标注出一系列离散点的海拔高度,那么vFEP则是尝试找到一条单一的、平滑的数学曲线(或曲面)来完美地拟合这整个山脉的地形。vFEP通过最大化观测到所有偏置模拟样本的对数似然函数来找到最优的函数参数 $p$。 \[p^* = \arg\max \left\{ -\sum_{k=1}^{K_h} \left( \ln Z_{hk} + \sum_{n=1}^{N_{hk}} \beta F_{hk}(\xi(r_{hkn}); p) \right) \right\}\] 这里的核心是,通过调整参数 $p$ 来让我们的模型 $F_h(\xi;p)$ 变得最好。 基函数详解:基数B样条 (Basis Functions Explained: Cardinal B-splines) 为了构建这个全局函数 $F_h(\xi;p)$,vFEP使用了一种强大而灵活的数学工具——B样条。 什么是B样条? 通俗理解:可以把B样条想象成一种标准化的、柔性的“曲线积木”。每一块“积木”(一个B样条基函数)都是一个平滑的、钟形的局部曲线,它只在空间的一小块区域内有值(不为零),在其他地方都为零。 基数(Cardinal)的含义 特指这些“积木”的节点(knots)是等间距分布的。这使得它们特别适合用来描述在规则网格上定义的函数,比如FES计算的自由能表面。 B样条与CVs(距离、角度)的关系 这正是理解vFEP的关键。B样条基函数 $B_i(\xi)$ 的自变量 $\xi$ 就是我们定义的集合变量(CV)。 一维情况(如原子间距离): 假设我们的CV $\xi$ 是原子A和原子B之间的距离。那么,一个一维的B样条基函数 $B_i(\xi)$ 就是一个关于这个距离的函数。例如,一个基函数 $B_5(\text{distance})$ 可能被中心设置在3.0 Å处,它的形状像一个平滑的“小山包”,只在距离为2.5 Å到3.5 Å的区间内有值,而在其他距离值上都为零。整个一维的FES就是由许多这样的、沿着距离坐标轴排布的“小山包”加权叠加而成。 二维情况(如距离和角度): 假设我们的CVs是距离 $\xi_1$ 和角度 $\xi_2$。此时,基函数就是一个二维的B样条 $B_{i,j}(\xi_1, \xi_2)$。现在,这个“积木”不再是线上的“小山包”,而是一个在(距离,角度)平面上的“平滑土堆”。例如,一个基函数 $B_{5,10}(\text{distance}, \text{angle})$ 可能中心位于 (3.0 Å, 90°),并且只在一个小的矩形区域(比如距离在2.5-3.5 Å之间,同时角度在80°-100°之间)有值。 vFEP的应用:构建最终的FES vFEP的最终目标,就是将整个自由能表面表示为这些B样条“积木”的线性组合: \[F(\xi) = \sum_i c_i B_i(\xi)\] $B_i(\xi)$:是我们预先定义好的、固定形状和位置的B样条基函数(“积木”)。 $c_i$:是待优化的系数,可以理解为每一块“积木”所需要的高度(权重)。 vFEP通过复杂的优化算法,找到一组最优的系数 $c_i$,使得由这些“积木”搭建起来的最终FES曲面,能够最好地拟合我们从分子动力学模拟中得到的所有采样数据。 vFEP vs. MBAR:互补的方法论 工具包中同时包含这两种方法并非冗余,而是反映了数据建模中的一个根本性权衡。 MBAR:非参数化,更忠实于原始数据,但在数据稀疏的区域,其结果可能不连续或充满噪声。 vFEP:参数化,假设了FES的平滑性,因此总能给出一个平滑、连续的表面,并且具有解析形式,便于后续分析(如求导寻找MFEP),但可能因函数形式选择不当而引入模型偏见。 提供这两种方法使用户能够根据具体问题选择最合适的工具,或同时使用两者进行交叉验证,这是严谨科学研究的关键实践。 重权熵的解释 重权熵(reweighting entropy)是一个关键的质量评估指标。对于一个给定的箱 $m$,其重权熵 $S_t(\xi_m)$ 定义为: \(S_{t}(\xi_{m}) = -\frac{\sum_{h,k,n} \delta(\xi_{m} - \xi(r_{hkn})) \frac{\omega_{t}(r_{hkn})}{s_{tm}} \ln \frac{\omega_{t}(r_{hkn})}{s_{tm}}}{\ln \left(\sum_{h,k,n} \delta(\xi_{m} - \xi(r_{hkn}))\right)}\) 其中,$s_{tm}$ 是对箱 $m$ 的总权重贡献。这个公式本质上是计算了对箱 $m$ 有贡献的所有样本权重的香农熵,并进行了归一化。 直观解释:可以把它理解为对该箱有贡献的偏置模拟(伞形窗)的有效数量。 值接近1:表示来自多个不同伞形窗的样本都对这个箱做出了均匀的贡献。这意味着不同伞形窗之间在该区域的相空间重叠良好,重权结果非常可靠。 值接近0:表示这个箱的自由能值几乎完全由来自少数几个甚至一个伞形窗的样本决定。这意味着该区域的相空间重叠很差,重权结果可能存在较大偏差,统计上不可靠。 第二部分:使用edgembar进行网络范围的炼金术计算 1. 边目标函数 $F_{(ab)}$ 到底是什么? 边目标函数 $F_{(ab)}$ 是为网络中一条特定的边(即一个从配体 a 到配体 b 的炼金术转换)构建的总目标函数,用于估计该边所有中间 $\lambda$ 状态的自由能。其构建方式如下: 1.1 最小单元:单次重复试验的目标函数 $F_{(ab)est}$ 对于一次炼金术模拟(例如,在特定环境 e、特定阶段 s 的一次重复试验 t),我们会在多个 $\lambda$ 插入值下进行采样。MBAR 方法为这一次重复试验构建了一个目标函数 $F_{(ab)est}$。这个函数输入是该次试验中所有 $\lambda$ 状态的待求自由能(向量 $G_{(ab)est}$),输出是一个标量值。当这个函数达到最小值时,对应的输入 $G_{(ab)est}$ 就是 MBAR 方法给出的对这些状态自由能的最佳估计。 公式如下: \[\begin{aligned} & F_{(a b) e s t}\left(\mathbf{G}_{(a b) e s t}\right)=\frac{1}{N_{\mathrm{s},(a b) e s t}} \sum_{j=1}^{N_{\mathrm{s},(a b) e s t}} \sum_{k=1}^{N_{\mathrm{s},(a b) e s t j}} / & \ln \left(\sum _ { l = 1 } ^ { N _ { \text { state } , ( a b ) e s t } } \operatorname { e x p } \left[-\beta U_{(a b) e s}\left(\mathbf{r}_{(a b) e s t j k} ; \lambda_l\right)\right.\right. / & \left.\left.\quad-b_{(a b) e s t l}\right] \right)+\sum_{i=1}^{N_{\text {state },(a b) e s t}} \frac{N_{\mathrm{s},(a b) e s t i}}{N_{\mathrm{s},(a b) e s t}} b_{(a b) e s t i} \end{aligned}\] 1.2 构建完整的边目标函数 $F_{(ab)}$ 一条边 (ab) 的计算通常包含多个组成部分:两种环境(如靶标环境和参考环境)、多个阶段(如去电荷、范德华变换、加电荷)和多次重复试验。边目标函数 $F_{(ab)}$ 是将这条边所包含的所有最小单元的目标函数 $F_{(ab)est}$ 加权求和: \[F_{(ab)}(G_{(ab)}) = \sum_{e} \sum_{s=1}^{N_{stage}} \frac{\sum_{t=1}^{N_{trial,(ab)es}} F_{(ab)est}(G_{(ab)est})}{N_{trial,(ab)es}}\] 这里 $G_{(ab)}$ 是一个包含该边所有环境中、所有阶段、所有重复试验里、所有 $\lambda$ 状态自由能的巨大向量。 2. 核心问题一:目标函数 $F_{(ab)est}$ 的意义是什么?目标是什么? 这个目标函数的意义源于统计学中的最大似然估计(Maximum Likelihood Estimation)原理。 2.1 目标:找到最“可信”的自由能 简单来说,edgembar(以及其底层的 MBAR 方法)的目标是:寻找一组自由能值($G_{(ab)est}$),使得我们观测到的所有模拟数据出现的总概率最大。 换句话说,我们在问这样一个问题:“假设真实的自由能是这个样子的(由 $G_{(ab)est}$ 描述),那么我能做实验采集到我手上这堆数据的可能性有多大?” 我们要做的就是不断调整对“真实自由能”的猜测(即调整 $G_{(ab)est}$ 的值),直到这个可能性达到最大。 2.2 $F_{(ab)est}$:负对数似然函数 在数学上,直接最大化一个由许多概率连乘的函数(似然函数)很困难,通常我们会转而最小化它的负对数形式。目标函数 $F_{(ab)est}$(如您截图中的 eq. 21)正是这个负对数似然函数。 似然函数 (Likelihood): $L(G) \propto P(\text{观测到所有数据} \mid \text{给定自由能 } G)$ 目标函数 (Objective Function): $F(G) = -\ln(L(G))$ 因此,最小化目标函数 $F_{(ab)est}$ 就等价于最大化我们观测到这组模拟数据的概率。这个最小化问题的解,就是 MBAR 方法给出的对各个 $\lambda$ 状态自由能的最优统计估计。 3. 核心问题二:函数的输入是什么? 要构建并求解目标函数 $F_{(ab)est}$,edgembar 需要以下两类直接来自模拟的原始数据: 3.1 势能矩阵 (The Potential Energy Matrix) 这是最关键的输入。对于在某个炼金术状态 $\lambda_j$ 下进行模拟得到的一个构象(样本)$r_{jk}$,我们不仅需要知道它在自身势能函数 $U(r_{jk}; \lambda_j)$ 下的能量,还需要计算它在所有其他炼金术状态 $\lambda_l$ 的势能函数下的能量 $U(r_{jk}; \lambda_l)$。这正是 eq. 21 中 $\ln$ 函数内部求和项 $\exp[-\beta U_{(ab)es}(r_{(ab)estjk}; \lambda_l)]$ 所需要的输入。这个交叉计算的势能矩阵是实现重权和信息组合的基础。 3.2 每个状态的样本数 (Number of Samples per State) 即 eq. 22 中的 $N_{\mathrm{s},(ab)esti}$。这告诉算法每个状态采样了多少数据,用于正确的统计加权。 公式如下: \[N_{\mathrm{s},(a b) e s t}=\sum_{i=1}^{N_{\mathrm{stat},(a b) e s t}} N_{\mathrm{s},(a b) e s t i}\] \[b_{(a b) e s t i}=-\ln \frac{N_{\mathrm{s},(a b) e s t i}}{N_{\mathrm{s},(a b) e s t}}-\beta G_{(a b) e s t i}\] 4. 核心问题三:为什么最小化 $F_{(ab)}$ 得到的是“无约束”相对自由能 $g_{(ab)}$? “无约束”在这里的含义是,计算这条边 (ab) 的自由能时,完全不考虑网络中任何其他边的信息或限制。例如,对于一个 a→b→c→a 的三角形环路,在计算 a→b 这条边时,完全不考虑 b→c 和 c→a 的存在,也不强制要求三条边的 $\Delta\Delta G$ 之和必须为零(即循环闭合条件)。 结论: 最小化 $F_{(ab)}$ 得到的是无约束自由能 $g_{(ab)}$,因为 $F_{(ab)}$ 的数学构造决定了它是一个只包含单条边信息的“局部”优化问题。 graph LR %% 定义节点样式 classDef inputNode fill:#FEF9E7,stroke:#F39C12,stroke-width:2px,font-family:SimHei classDef processNode fill:#EAF2F8,stroke:#5499C7,stroke-width:2px,font-family:SimHei classDef outputNode fill:#E8F8F5,stroke:#16A085,stroke-width:2px,font-family:SimHei %% 节点定义 A("<b>第一步:输入</b><br/>提供所有模拟轨迹<br/>计算交叉势能矩阵与各状态样本数") B["<b>第二步:构建目标函数</b><br/>edgembar利用输入数据<br/>构建F<sub>(ab)est</sub>函数"] C["<b>第三步:最小化</b><br/>程序求解 G<sup>*</sup><sub>(ab)est</sub> = argmin F<sub>(ab)est</sub><br/>得到一组最优的中间状态自由能"] D("<b>第四步:计算物理量</b><br/>利用中间态自由能 G<sup>*</sup><br/>计算最终结果,如 ΔG 和 ΔΔG") %% 流程连接 A --> B B --> C C --> D %% 为节点应用样式 class A inputNode class B,C processNode class D outputNode 第三部分:辅助工具与实用工作流程 (fetkutils) 3.1 优化模拟效率 核心问题:模型函数 $O(\lambda_i, \lambda_j)$ 的形式是什么? 为了能够预测任意 $\lambda$ 对之间的交换接受率$O(\lambda, \lambda’)$,而不仅仅是“预烧”模拟中实际计算过的那些点,FE-ToolKit 构建了一个连续的、可解析的数学模型。这个模型的构建过程精巧,分为几个步骤。 核心思想与目标 模型的目标是创建一个连续函数 $O(\lambda, \lambda’)$,它必须满足两个基本条件: 再现性:对于所有在“预烧”模拟中已计算过的 $\lambda$ 对 $(\lambda_i, \lambda_j)$,模型预测值必须等于观测到的平均接受率,即 $O(\lambda_i, \lambda_j) = O_{ij}$。 同一性:任何状态与自身的交换接受率必须为 1,即 $O(\lambda, \lambda) = 1$。 简化问题的坐标变换 为了更容易地满足上述的“同一性”条件,程序首先进行了一个坐标变换(平面直角坐标系旋转45度),从 $(\lambda, \lambda’)$ 变换到新的坐标系 $(u, v)$: \(u(\lambda, \lambda') = \frac{\lambda - \lambda'}{\sqrt{2}}\) \(v(\lambda, \lambda') = \frac{\lambda + \lambda'}{\sqrt{2}}\) 在这个新坐标系中,当 $\lambda = \lambda’$ 时,总有 $u = 0$,这使得处理 $O(\lambda, \lambda) = 1$ 这个条件变得非常方便。 模型函数的核心结构:指数衰减 模型函数 $O(\lambda, \lambda’)$ 的核心结构是一个关于状态间“距离” $u$ 的指数衰减函数: \(O(\lambda, \lambda') = \exp\left(\dfrac{-z(u(\lambda, \lambda'), v(\lambda, \lambda'))}{|u(\lambda, \lambda')|}\right)\) 这个形式巧妙地保证了当 $\lambda = \lambda’$ 时,$u = 0$,整个指数项为 $e^0 = 1$,自动满足了“同一性”条件。 物理本质:交换成功率随自由能差ΔG增大而指数下降 函数衰减的快慢,即交换接受率如何随着 $\lambda$ 的差异而降低,则完全由指数函数 $z(u, v)$ 决定。 关键的指数函数 $z(u, v)$:多象限径向基函数 模型最精妙的部分在于 $z(u, v)$ 的构造。它并非一个简单的常数或函数,而是由多象限径向基函数 (multiquadric radial basis function, RBF) 叠加而成: \(z(u, v) = \sum_{ij} w_{ij} \varphi(\sqrt{(u - u_{ij})^2 + (v - v_{ij})^2})\) 可以把它看作是在每个原始数据点 $(u_{ij}, v_{ij})$ 上放置一个“影响力锥”,其形状由径向基函数 $\varphi(r) = \sqrt{1 + (\epsilon r)^2}$ 定义。 权重 $w_{ij}$:每个“影响力锥”的高度或强度由一个待定的权重 $w_{ij}$ 控制。 最终的 $z(u, v)$:在空间中任意一点 $(u, v)$ 的值,就是所有这些“影响力锥”在该点贡献的总和。 参数化:求解权重 $w_{ij}$ 最后一步就是确定所有未知的权重 $w_{ij}$。这是通过建立并求解一个线性方程组来实现的: \(\sum_{kl} A_{(ij),(kl)} w_{kl} = z_{ij}\) 等式右边的 $z_{ij}$ 是根据“预烧”模拟中观测到的接受率 $O_{ij}$ 反算出来的目标指数值。 $A_{(ij),(kl)}$ 是一个由径向基函数构成的系数矩阵。 \[\underbrace{\begin{bmatrix} A_{11} & \cdots & A_{1n} / \vdots & \ddots & \vdots / A_{n1} & \cdots & A_{nn} \end{bmatrix}}_{\text{径向基矩阵}} \underbrace{\begin{bmatrix} w_1 / \vdots / w_n \end{bmatrix}}_{\text{权重}} = \underbrace{\begin{bmatrix} z_1 / \vdots / z_n \end{bmatrix}}_{\text{目标值}}\] 成果:获得可预测任意λ对交换率的连续模型 → 生成最优λ调度表 🚀 🌀 3.2 约束优化:SSC多项式降维策略 痛点分析 在进行自由能计算时,通常需要优化一系列的λ值(λ-schedule),以确保模拟的效率和准确性。然而,标准的优化方法需要调整 $N-2$ 个λ点,这不仅计算量大,而且容易受到预烧模拟噪声的影响,导致过拟合问题。例如,如果预烧模拟的采样不够充分,可能会导致优化后的λ值分布不合理,影响最终的自由能计算结果。 SSC方案核心:以约束换鲁棒性 为了克服这些问题,提出了一种基于 SSC(Smoothstep Softcore)多项式 的优化策略。核心思想 是通过引入约束条件,将优化问题从高维空间(需要调整 $N-2$ 个λ值)降低到低维空间(只需调整1-2个参数),从而显著降低对噪声的敏感性,提高优化的鲁棒性。 数学工具:SSC多项式 SSC多项式是一种特殊的多项式函数,用于生成平滑的λ值分布。常用的SSC多项式包括三阶和五阶两种: 多项式类型 公式 特性 三阶 $ S_1(\lambda) = -2\lambda^3 + 3\lambda^2 $ 端点平滑约束 五阶 $ S_2(\lambda) = 6\lambda^5 - 15\lambda^4 + 10\lambda^3 $ 更高阶导数约束 三阶多项式:保证在 $\lambda = 0$ 和 $\lambda = 1$ 时,函数值和一阶导数连续,确保端点平滑。 五阶多项式:除了上述特性外,还保证了更高阶导数的连续性,使得整个函数更加平滑。 优化实操:从高维到低维 通过引入SSC多项式,可以将复杂的λ值优化问题简化为调整少数几个参数。具体方法如下: 对称调度(1参数优化) 对于对称的λ值分布,可以使用一个参数 $\alpha$ 来生成整个λ调度表。公式如下: \(S(\lambda;\alpha) = (2-\alpha)S_1(\lambda) + (\alpha-1)S_2(\lambda)\) 参数范围:$\alpha \in [1,2]$ 操作:只需调整 $\alpha$,即可自动生成对称的λ序列。这种方法特别适用于对称的自由能变化,能够显著减少优化的复杂度。 非对称调度(2参数优化) 如果自由能变化是非对称的,可以使用两个参数 $\alpha_0$ 和 $\alpha_1$ 来生成非对称的λ调度表。公式如下: \(S(\lambda;\alpha_0,\alpha_1) = (1-\lambda)S(\lambda;\alpha_0) + \lambda S(\lambda;\alpha_1)\) 参数范围:$\alpha_0, \alpha_1 \in [1,2]$ 操作:通过调整 $(\alpha_0, \alpha_1)$,可以适应左右不对称的自由能变化。这种方法虽然比对称调度复杂一些,但仍然比直接优化 $N-2$ 个λ值要简单得多。 总结 通过引入SSC多项式,可以将复杂的λ值优化问题简化为调整少数几个参数,从而显著降低对噪声的敏感性,提高优化的鲁棒性。这种方法不仅适用于对称的自由能变化,还可以通过引入两个参数来适应非对称的变化,具有广泛的应用前景。 🌀 自动化平衡检测:确保数据质量的“守门员” 在分子模拟中,初始阶段的轨迹通常反映了系统从一个非平衡的初始状态逐渐弛豫到热力学平衡的过程。这部分“未平衡”的数据必须被丢弃,否则会严重影响自由能计算的准确性。FE-ToolKit 提供了一个自动化的算法来客观地确定需要丢弃多少数据。 核心思想 该算法的核心思想是,它不依赖于人眼观察,而是通过一个迭代式的、基于多重统计检验的投票系统来判断一个给定的数据段是否稳定。它从假设“0%的数据需要被丢弃”开始,对剩余的“生产区域”(production region)进行检验。如果检验不通过,它会增加需要丢弃的数据比例(例如,增加5%),然后对新的、更短的“生产区域”重复检验,直到该区域通过所有测试。 分析对象:什么数据被检验? 算法并不直接分析原子的三维坐标,而是分析一个能够反映系统能量状态的一维时间序列数据。 伞形采样:检验的是偏置势能随时间变化的数据。 炼金术模拟:检验的是相邻λ态之间的势能差。为了更加稳健,它会同时分析“前向”的能量差(即从 $\lambda_i$ 采样,在 $\lambda_{i+1}$ 下计算能量)和“后向”的能量差(即从 $\lambda_i$ 采样,在 $\lambda_{i-1}$ 下计算能量)。如果两种分析建议的平衡时间不同,算法会保守地选择更长的那一个。 “三局两胜”的迭代检验流程 对于每一个提议的“生产区域”,算法会执行以下三个统计检验。如果其中任意两个检验失败,则该数据段被判定为“未平衡”,需要增加舍弃的数据量,进入下一轮迭代。 检验编号 检验名称 检验方法 判定标准 1 Welch’s t-检验 将数据在时间上平均分成前后两半,用Welch’s t-检验判断均值差异 如果p值小于预设阈值(默认0.05),则检验失败 2 均值差异容忍度 计算两半数据均值之差的绝对值 如果差值小于用户定义的容忍度 $d_{tol}$(默认0.1 kcal/mol),则检验通过 3 线性回归漂移检测 对整个“生产区域”数据进行线性回归,用Wald卡方检验判断斜率是否显著不为零 如果斜率显著不为零,则检验失败 检验一:Welch’s t-检验(检验统计显著性) 方法:将提议的“生产区域”数据在时间上平均分成前后两半。Welch’s t-检验被用来判断这两半数据的均值是否存在统计学上的显著差异。 判定:如果t检验给出的p值小于一个预设的阈值(默认为0.05),则认为前后两半的均值有显著不同,暗示数据尚未稳定,该检验失败。 检验二:均值差异容忍度(检验化学显著性) 方法:同样将数据分成两半,但这次直接计算两个均值之差的绝对值。 判定:如果这个差值小于一个用户定义的、在化学或物理上有意义的容忍度 $d_{tol}$(默认为0.1 kcal/mol),则认为这个差异是可以接受的,该检验通过。这个检验是t检验的一个重要补充,它防止了因数据方差极小而导致的、统计上显著但物理上无意义的微小差异被误判为未平衡。 检验三:线性回归漂移检测(检验系统性趋势) 方法:对整个“生产区域”的数据进行线性回归,得到一个斜率。然后使用Wald卡方检验来判断这个斜率是否在统计上显著不为零。 判定:如果有统计学证据表明斜率不为零(即存在系统性的能量漂移),则认为数据仍处于弛豫过程中,该检验失败。 这个三检验投票系统结合了对统计波动、实际差异幅度和系统性趋势的考量,提供了一种比单一检验更稳健、可重复且客观的方法来截断模拟数据,从而确保用于最终自由能分析的数据质量。
Molecular Dynamics
· 2025-06-23
Ubuntu Virtual Memory (Swap) Setup Tutorial: Enhance System Performance
在 Ubuntu 中增加虚拟内存(Swap)教程 在 Ubuntu 系统中增加虚拟内存(即交换空间,Swap)可以有效提升系统在内存不足时的性能。以下是详细的操作步骤: 一、检查当前交换空间 首先,您需要检查当前系统的交换空间情况。打开终端并运行以下命令: sudo swapon --show 如果命令没有输出,说明当前系统没有启用交换空间。如果有输出,则会显示现有交换文件或分区的信息(例如 /swapfile)。 二、创建新的交换文件 方法一:使用 fallocate 命令(推荐) 运行以下命令创建一个新的交换文件: sudo fallocate -l 4G /swapfile_new -l 4G:指定交换文件大小为 4GB。您可以根据需求调整大小,例如使用 8G 表示 8GB。 /swapfile_new:新交换文件的路径。您可以自定义文件名,但需确保后续步骤中路径一致。 方法二:使用 dd 命令(若 fallocate 不可用) 如果 fallocate 命令不可用,可以使用 dd 命令创建交换文件: sudo dd if=/dev/zero of=/swapfile_new bs=1G count=4 bs=1G:每次写入 1GB 数据。 count=4:写入 4 次,生成 4GB 文件。 三、设置交换文件的权限 为了安全起见,设置交换文件的权限,使其仅限 root 用户访问: sudo chmod 600 /swapfile_new 四、格式化交换文件 将创建的文件标记为交换空间: sudo mkswap /swapfile_new 五、启用交换文件 运行以下命令启用新创建的交换文件: sudo swapon /swapfile_new 六、验证交换空间 检查新增的交换空间是否生效: sudo swapon --show 您还可以查看内存使用情况以确认交换空间的变化: free -h 七、配置开机自动挂载 为了使交换文件在系统重启后仍然有效,需要将其添加到 /etc/fstab 文件中: 打开 /etc/fstab 文件进行编辑: sudo nano /etc/fstab 在文件末尾添加以下内容: /swapfile_new none swap sw 0 0 保存并退出编辑器(在 nano 中,按 Ctrl+O 保存,按 Ctrl+X 退出)。 注意事项 调整交换文件大小:根据系统需求和使用场景调整交换文件的大小。一般建议交换文件大小为物理内存的 1-2 倍,但具体大小取决于您的应用场景。 权限管理:确保交换文件的权限设置正确,避免非授权访问。 性能考量:虽然增加交换空间可以缓解内存不足的问题,但过度依赖交换空间可能会降低系统性能,因为磁盘 I/O 速度远低于内存。 通过以上步骤,您可以成功增加 Ubuntu 系统的虚拟内存(Swap),从而提升系统的整体性能和稳定性。 希望这份教程对您有所帮助!如果您在操作过程中遇到任何问题,欢迎随时提问。 Pandoc 生成 PDF 时字体问题解决方案教程 一、问题概述 在使用 Pandoc 将 Markdown 文件生成 PDF 时,如果指定使用 Times New Roman 字体,可能会遇到错误。这是因为 Times New Roman 是 Windows 系统的默认字体,在 Linux 或 macOS 上默认未安装。此外,对于中文支持,也需要确保系统中存在相应的中文字体。 二、检查字体是否安装 在 Linux 系统中 打开终端,运行以下命令查看系统中已安装的字体: fc-list :lang=zh # 查看中文字体 fc-list | grep "Times New Roman" # 查找 Times New Roman 字体 如果没有输出,说明系统中未安装该字体。 在 macOS 系统中 使用 Font Book 应用程序检查字体是否安装。 在 Windows 系统中 打开“字体”文件夹(通常在 C:\Windows\Fonts),查找“Times New Roman”字体。 三、安装所需字体 安装 Times New Roman 字体 对于 Ubuntu/Debian 系统: 运行以下命令安装 Microsoft 核心字体,其中包含 Times New Roman: sudo apt-get update sudo apt-get install ttf-mscorefonts-installer 在安装过程中,可能需要接受许可协议。安装完成后,运行以下命令刷新字体缓存: sudo fc-cache -fv 对于 CentOS/RHEL 系统: 使用以下命令安装字体: sudo yum install curl curl-devel sudo rpm -Uvh http://li.nux.ro/download/fedora/epel/5/i386/epel-release-5-4.noarch.rpm sudo yum install ttf-mscorefonts-installer 对于 macOS 系统: 从官方渠道下载并安装 Microsoft Office for Mac,它会附带安装 Times New Roman 字体。或者,您可以手动下载字体文件并安装。 安装中文支持字体 如果您需要在 PDF 中显示中文,还需要安装中文字体。例如,在 Ubuntu/Debian 系统上,可以安装 texlive-lang-chinese 包: sudo apt install texlive-lang-chinese 该包包含中文支持的宏包(如 ctex),是 Debian 官方维护的包,具有良好的兼容性。 四、配置 Pandoc 使用正确字体 在 Pandoc 命令中指定字体时,确保使用的字体名称与系统中实际存在的字体名称完全匹配。例如: pandoc input.md -o output.pdf --pdf-engine=xelatex --css style.css -V mainfont="Times New Roman" -V CJKmainfont="AR PL UMing CN" mainfont:指定西文字体。 CJKmainfont:指定中文字体。 五、生成 PDF 的 Python 函数示例 以下是一个使用 Pandoc 生成 PDF 的 Python 函数示例,确保路径和字体名称正确: import subprocess import logging from pathlib import Path log = logging.getLogger(__name__) def generate_pdf_with_pandoc(md_path: Path, css_path: Path, output_pdf_path: Path) -> bool: """ 使用 Pandoc 和 XeLaTeX 生成 PDF 文件。 参数: md_path: 输入的 Markdown 文件路径。 css_path: CSS 文件路径(可选)。 output_pdf_path: 输出的 PDF 文件路径。 返回: PDF 生成成功返回 True,失败返回 False。 """ log.info(f"Attempting PDF generation with Pandoc for {md_path}.") pandoc_cmd = [ 'pandoc', str(md_path), '-o', str(output_pdf_path), '--pdf-engine=xelatex', '--css', str(css_path), '-V', 'mainfont=Times New Roman', '-V', 'CJKmainfont=AR PL UMing CN' ] result = subprocess.run(pandoc_cmd, capture_output=True, text=True, encoding='utf-8') if result.returncode != 0: log.error(f"Pandoc failed. Stderr: {result.stderr}") return False log.info(f"Successfully generated PDF with Pandoc at {output_pdf_path}") return True 六、验证和测试 验证字体安装: 运行 fc-list 命令,检查是否列出了 Times New Roman 和中文字体。 确保字体名称与 Pandoc 命令中指定的名称完全一致。 测试 PDF 生成: 使用上述 Python 函数或直接运行 Pandoc 命令生成 PDF。 打开生成的 PDF 文件,检查字体显示是否正确。 七、总结 通过以上步骤,您可以解决 Pandoc 在生成 PDF 时找不到指定字体的问题。确保系统中安装了所需的字体,并在 Pandoc 命令中正确指定字体名称。对于中文支持,安装 texlive-lang-chinese 包是一个推荐的解决方案。希望这份教程能帮助您顺利完成 PDF 生成任务。 如果您在操作过程中遇到任何问题或需要进一步的帮助,欢迎随时提问。
Techniques
· 2025-06-21
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
Python Project Management: Managing Multiple Python Applications
多Python项目的管理 问题一:“还有没有类似的更容易配置的?” 当然有!如果您觉得 Supervisor 的 .conf 文件语法稍显繁琐,那么有一个在业界同样广受欢迎且以易用性著称的工具非常适合您:PM2。 PM2 (Process Manager 2) 是一个主要为 Node.js 设计,但对 Python 等语言支持也极其出色的进程管理器。 优点: 命令行极其简单直观:使用 pm2 start, pm2 stop, pm2 list, pm2 logs 等命令就能完成所有操作。 配置文件更友好:使用 JSON 或 JS 格式的配置文件(通常叫 ecosystem.config.js),比 INI 格式更灵活,也更贴近现代开发习惯。 内置负载均衡:可以轻松地以“集群模式”启动您的应用,自动利用服务器的所有CPU核心。 内置监控:pm2 monit 命令提供了一个漂亮的终端仪表盘,实时监控 CPU 和内存占用。 如何使用 PM2 管理您的所有服务: 安装 PM2 (通常需要 Node.js 环境): # 首先安装 Node.js 和 npm sudo apt-get install nodejs npm # 然后通过 npm 安装 PM2 sudo npm install pm2 -g 创建 ecosystem.config.js 配置文件: 在您的工作根目录 /root/work/ 下,创建一个名为 ecosystem.config.js 的文件,内容如下。这个文件等同于 Supervisor 的所有 .conf 文件的总和,但更清晰。 // /root/work/ecosystem.config.js module.exports = { /** * Application configuration section * http://pm2.keymetrics.io/docs/usage/application-declaration/ */ apps: [ { name: "literature-analysis", script: "gunicorn", args: "--workers 4 --bind 0.0.0.0:5000 --timeout 120 app:app", cwd: "./literature-analysis/", interpreter: "/opt/miniconda3/envs/download/bin/python", watch: false, autorestart: true, log_date_format: "YYYY-MM-DD HH:mm:ss", error_file: "./log/literature-analysis.err.log", out_file: "./log/literature-analysis.out.log", }, { name: "tiantuan-communication", script: "gunicorn", args: "--workers 4 --bind 0.0.0.0:5001 --timeout 120 app:app", cwd: "./Tiantuan-Communication/", interpreter: "/opt/miniconda3/envs/Tiantuan/bin/python", watch: false, autorestart: true, log_date_format: "YYYY-MM-DD HH:mm:ss", error_file: "./log/tiantuan-communication.err.log", out_file: "./log/tiantuan-communication.out.log", }, { name: "literature-review", script: "gunicorn", args: "--workers 4 --bind 0.0.0.0:5002 --timeout 120 app:app", cwd: "./literature_review/", interpreter: "/opt/miniconda3/envs/Tiantuan/bin/python", watch: false, autorestart: true, log_date_format: "YYYY-MM-DD HH:mm:ss", error_file: "./log/literature-review.err.log", out_file: "./log/literature-review.out.log", }, { name: "ppt-generator", script: "gunicorn", args: "--workers 4 --bind 0.0.0.0:5003 --timeout 120 app:app", cwd: "./ppt_generator/", interpreter: "/opt/miniconda3/envs/Tiantuan/bin/python", watch: false, autorestart: true, log_date_format: "YYYY-MM-DD HH:mm:ss", error_file: "./log/ppt-generator.err.log", out_file: "./log/ppt-generator.out.log", }, { name: "personal-rag", script: "gunicorn", args: "--workers 2 --bind 0.0.0.0:6001 --timeout 300 app:app", // RAG 可能需要更长的超时和更少的 worker cwd: "./Personal-RAG/", interpreter: "/opt/miniconda3/envs/Tiantuan/bin/python", watch: false, autorestart: true, log_date_format: "YYYY-MM-DD HH:mm:ss", error_file: "./log/personal-rag.err.log", out_file: "./log/personal-rag.out.log", // 为这个特定的服务注入环境变量 env: { "HF_HOME": "/root/.cache/huggingface", "HF_HUB_CACHE": "/root/.cache/huggingface/hub" } }, { name: "profile-visualization", script: "gunicorn", args: "--workers 4 --bind 0.0.0.0:6002 --timeout 120 app:app", cwd: "./Profile_Visualization/", interpreter: "/opt/miniconda3/envs/Tiantuan/bin/python", watch: false, autorestart: true, log_date_format: "YYYY-MM-DD HH:mm:ss", error_file: "./log/profile-visualization.err.log", out_file: "./log/profile-visualization.out.log", } ] }; 一键启动所有服务: pm2 start ecosystem.config.js 常用命令: pm2 list # 查看所有服务状态 pm2 logs literature-review # 查看单个服务的日志 pm2 restart all # 重启所有服务 pm2 stop personal-rag # 停止单个服务 结论:对于追求命令行效率和简洁配置的用户来说,PM2 是 Supervisor 一个极佳的、更易上手的替代品。 对于您在 ecosystem.config.js 中设置的 out_file,答案是:不会被覆盖 (overwrite),而是会被追加 (append)。 当您使用 pm2 restart <服务名> 或 pm2 restart all 重启服务时,PM2 的默认行为是将新的标准输出日志(stdout)添加到现有 out_file 文件的末尾。 这样做的好处是,您可以保留服务历次运行的完整日志历史,方便排查问题。 如果您确实希望在每次重启时都得到一个全新的、干净的日志文件,您需要手动操作,例如: 先停止服务:pm2 stop literature-review 手动删除日志文件:rm ./log/literature-review.out.log 再启动服务:pm2 start literature-review 或者,您也可以使用 PM2 的日志管理命令来清空日志:pm2 flush literature-review。 问题二:“宝塔面板是否适合很多Python项目的管理?” 这是一个非常好的问题。答案是:宝塔面板(BT Panel)非常适合快速部署和初级管理,但不一定适合复杂、专业化的项目管理。 宝塔面板是一个带图形化界面(Web UI)的服务器管理软件,它的核心优势在于极大地简化了服务器运维。 优点 (为什么它很吸引人): 图形化操作:您可以通过点击鼠标来部署项目、配置Nginx反向代理、管理数据库、查看负载,几乎无需编写命令行。 一站式体验:集成了网站环境(Nginx/Apache)、数据库(MySQL)、FTP、安全管理等,非常方便。 快速部署:它有一个“Python项目管理器”插件,您只需选择项目目录、启动文件和端口,点击“部署”,它就会在后台帮您配置好 Gunicorn 和进程守护(通常是 systemd)。 缺点 (专业开发者需要考虑的权衡): “黑盒”效应:宝塔为您自动完成了所有配置,但您也因此不清楚底层的 systemd 单元文件或 gunicorn 的具体启动参数是什么。一旦出现问题,排查起来会非常困难,因为您不了解它的内部工作原理。 灵活性和定制性差:您只能使用它提供的选项。如果您需要非常精细的配置(比如特定的 Gunicorn 参数、复杂的环境变量注入),宝塔面板可能无法满足。 增加了不必要的复杂度和安全风险:宝塔本身是一个庞大的软件,它为服务器增加了一个额外的软件层,这本身就可能带来性能开销和潜在的安全漏洞。 可移植性差:您的所有部署都依赖于宝塔面板。如果有一天您想迁移到一台没有安装宝塔的服务器,您几乎需要从头开始重新配置所有服务,因为您无法简单地“导出”宝塔为您生成的底层配置。 适用场景: 对 Linux 命令行不太熟悉,希望通过图形界面管理服务器的用户。 需要快速搭建和部署标准Web应用(如网站、博客)的场景。 个人项目或小型团队,且对配置的精细化控制要求不高的项目。 结论:如果您追求的是极致的简单快捷,并且不介意牺牲一些底层的控制力和透明度,那么宝塔面板是完全可以用来管理您的多个Python项目的。但如果您追求的是专业、透明、可移植和可高度定制的部署方案,那么直接使用 Supervisor、PM2 或 Docker 会是更好的选择。 总结与最终建议 工具 易用性 灵活性/定制性 稳定性/健壮性 可移植性 学习曲线 Supervisor 中等 高 高 中等 中等 PM2 高 高 高 中等 低 宝塔面板 极高 (GUI) 低 中等(依赖面板) 低 极低 Docker Compose 中等 极高 极高 极高 高 给您的建议: 如果您喜欢命令行的直接与高效,但觉得 Supervisor 配置文件略显麻烦,PM2 是您的最佳选择。它在易用性和功能强大之间取得了完美的平衡。 如果您希望完全通过图形界面操作,快速看到结果,不关心底层实现,宝塔面板可以胜任。 如果您着眼于未来的职业发展和项目的长期可维护性,我依然强烈推荐您投入时间学习 Docker Compose,它将为您打开通往现代化应用部署的大门。
Techniques
· 2025-06-20
Complete Guide to Python Multi-Project Management Tools: From Beginner to Expert
Python多项目管理工具完全指南:从入门到选择 当你的服务器上运行着多个Python项目时,如何优雅地管理它们就成了一个重要问题。本文将介绍4种主流的Python项目管理工具,帮助你选择最适合自己的解决方案。 一、为什么需要进程管理工具? 假设你有5个Python Web应用需要在服务器上持续运行: 每个应用都需要在系统重启后自动启动 某个应用崩溃时需要自动重启 需要方便地查看日志和监控状态 想要统一管理所有应用 手动管理这些进程是噩梦般的体验。这时,你就需要专业的进程管理工具。 二、四大主流工具详解 1. Supervisor - 经典稳定的老牌选手 Supervisor 是Python社区的经典进程管理工具,以稳定性著称。 主要特点 ✅ 成熟稳定:经过多年验证,bug极少 ✅ 功能完整:支持进程分组、事件通知、Web界面等 ❌ 配置较繁琐:需要编写INI格式的配置文件 快速上手 # 安装 sudo apt-get install supervisor # Ubuntu/Debian sudo yum install supervisor # CentOS/RHEL # 为每个项目创建配置文件 sudo nano /etc/supervisor/conf.d/myproject.conf 配置文件示例: [program:myproject] command=/path/to/venv/bin/gunicorn --workers 4 --bind 0.0.0.0:5000 app:app directory=/path/to/project user=www-data autostart=true autorestart=true stdout_logfile=/var/log/myproject.log stderr_logfile=/var/log/myproject.error.log 常用命令 sudo supervisorctl status # 查看所有进程状态 sudo supervisorctl restart myproject # 重启特定项目 sudo supervisorctl tail -f myproject # 实时查看日志 2. PM2 - 现代化的全能选手 ⭐推荐 PM2 原本是为Node.js设计的,但对Python支持也非常出色,是目前最易用的进程管理器。 主要特点 ✅ 极其易用:命令简洁直观 ✅ 配置灵活:支持JSON/JS格式配置 ✅ 功能丰富:内置监控、负载均衡 ❌ 需要Node.js环境 快速上手 # 安装(需要先安装Node.js) npm install pm2 -g # 直接启动一个Python应用 pm2 start app.py --interpreter python3 # 或使用配置文件管理多个项目 创建 ecosystem.config.js 配置文件: module.exports = { apps: [ { name: "web-app-1", script: "gunicorn", args: "--workers 4 --bind 0.0.0.0:5000 app:app", cwd: "./project1/", interpreter: "/usr/bin/python3", autorestart: true, log_date_format: "YYYY-MM-DD HH:mm:ss", }, { name: "web-app-2", script: "gunicorn", args: "--workers 2 --bind 0.0.0.0:5001 app:app", cwd: "./project2/", interpreter: "/usr/bin/python3", autorestart: true, env: { "DATABASE_URL": "postgresql://localhost/mydb" } } ] }; 常用命令 pm2 start ecosystem.config.js # 启动所有项目 pm2 list # 查看运行状态 pm2 logs web-app-1 # 查看特定项目日志 pm2 monit # 实时监控(超酷的界面!) 💡 提示:PM2的日志是追加模式,不会在重启时覆盖。使用 pm2 flush 可以清空日志。 3. 宝塔面板 - 图形化的便捷选择 宝塔面板提供了完整的Web界面,让服务器管理变得像操作Windows一样简单。 主要特点 ✅ 图形界面:完全不需要命令行 ✅ 一站式管理:集成了Web服务器、数据库等 ✅ 极易上手:点点鼠标就能部署 ❌ 灵活性差:高度定制化需求难以满足 ❌ “黑盒”操作:不了解底层实现,出问题难排查 使用体验 安装宝塔面板后,通过浏览器访问管理界面 安装”Python项目管理器”插件 点击”添加项目”,选择项目目录和启动文件 设置端口号,点击”启动”即可 ⚠️ 注意:宝塔面板适合新手快速上手,但不适合需要精细控制的专业项目。 4. Docker Compose - 专业团队的首选 Docker Compose 代表了现代化的容器化部署方案。 主要特点 ✅ 完全隔离:每个项目运行在独立容器中 ✅ 环境一致:开发、测试、生产环境完全相同 ✅ 易于迁移:一个命令就能在新服务器上重现整个环境 ❌ 学习曲线陡峭:需要理解容器化概念 配置示例 创建 docker-compose.yml: version: '3.8' services: web-app-1: build: ./project1 ports: - "5000:5000" environment: - DATABASE_URL=postgresql://db/myapp restart: always web-app-2: build: ./project2 ports: - "5001:5001" volumes: - ./data:/app/data restart: always 三、如何选择? 📊 工具对比表 特性 Supervisor PM2 宝塔面板 Docker Compose 易用性 ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐ 灵活性 ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐ ⭐⭐⭐⭐⭐ 稳定性 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐ 学习成本 中等 低 极低 高 适合人群 传统运维 大多数开发者 新手 专业团队 🎯 选择建议 如果你是新手,想快速看到效果: 首选 宝塔面板(图形界面) 次选 PM2(命令简单) 如果你是个人开发者,追求效率: 强烈推荐 PM2 ⭐⭐⭐⭐⭐ 如果你在传统企业环境: 选择 Supervisor(运维团队熟悉) 如果你在现代化团队,追求最佳实践: 选择 Docker Compose 四、快速决策指南 问自己以下问题: 你熟悉命令行吗? 不熟悉 → 宝塔面板 熟悉 → 继续下一题 你需要极致的灵活性吗? 需要 → Docker Compose 一般需求 → 继续下一题 你喜欢简洁的命令和现代化的工具吗? 是的 → PM2(最佳选择) 更喜欢传统稳定 → Supervisor 五、总结 对于大多数Python开发者来说,PM2是最平衡的选择:既简单易用,又功能强大。但记住,没有绝对最好的工具,只有最适合你当前需求的工具。 建议的学习路径: 🚀 先用 PM2 快速上手 📚 有时间时学习 Docker,这是未来趋势 🎯 根据实际需求,灵活选择合适的工具 最后提醒:无论选择哪个工具,都要记得定期备份配置文件和项目数据! 希望这篇指南能帮助你找到最适合的Python项目管理方案。如果觉得有帮助,欢迎分享给更多需要的朋友!
Techniques
· 2025-06-20
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
Doxorubicin Nuclear Entry Mechanisms: A Comprehensive Review
阿霉素进核机制综述 阿霉素自由状态的核转运机制 穿膜与胞质分布:*阿霉素(DOX)是一种小分子蒽环类抗癌药物(分子量约543 Da),可以通过被动扩散跨越质膜进入细胞。其两亲性(pH 7.4时对数D值约2.4)使其易于溶解于膜脂质层并穿过细胞膜。早在1985年就有研究表明,蒽环药物主要以被动扩散方式进入细胞,这对药物耐受有重要影响。进入胞质后,游离DOX可在胞质中自由扩散,但因其带正电的性质(pKa≈8.2),在酸性细胞器(如溶酶体)中易被质子化并滞留。这意味着部分DOX可能被*内吞体/溶酶体隔离,减少进入细胞核的有效浓度。研究显示DOX会在酸性晚期内体和溶酶体中蓄积。因此,提高内体/溶酶体pH值可增加DOX在细胞内的游离量;例如,添加质子泵抑制剂能提升内体pH,从而增强DOX的核内分布和抗肿瘤效力。 与核孔的相互作用:*由于DOX分子相对较小,它可以在不存在主动运输信号的情况下通过核孔复合体(NPC)的选择性屏障*被动扩散进入细胞核。NPC由多种核孔蛋白(nucleoporins)构成,在核膜上形成通道结构。NPC的亲水通道充满了FG重复序列的核孔蛋白,形成一个允许小分子自由通过而限制大分子扩散的选择性屏障。一般而言,<~40 kDa的分子可通过NPC自由扩散。DOX的分子量远低于这一阈值,因此无需借助主动核进口受体即可进入细胞核。换言之,DOX不含经典核定位序列(NLS),其进核主要依赖浓度驱动的被动扩散。不过,核孔的通透性也受细胞状态调控:核骨架/核膜结构会影响NPC的开放程度。例如,有研究表明细胞骨架与核骨架的力学联系可调节DOX进入细胞核的通量。当细胞通过外界作用使核纤维和细胞骨架瞬时松弛时,NPC对DOX的通透性增加,核内DOX流入加快;而细胞在软基质上长期培养导致机械张力降低时,核对DOX的通透性下降。由此可见,NPC并非静止通道,其通透性会因细胞机械环境变化而改变。 膜转运载体的作用:*除了被动扩散外,某些载体蛋白介导的过程也能影响DOX进入细胞的效率。一些溶质转运蛋白被鉴定为DOX的摄取通道。例如,有机阳离子转运蛋白SLC22A16被证明可介导癌细胞对DOX的主动摄取。在表达SLC22A16的Xenopus卵母细胞中,DOX的摄入呈现可饱和的动力学特征(K_m约5.2 μM)。过表达SLC22A16能增强白血病细胞对DOX的敏感性,说明该转运蛋白增加了细胞内累积的DOX水平。同样,有机阴离子转运多肽OATP1A2(SLCO1A2)也被报道可以转运DOX进入细胞(相反,OATP1B1/1B3对DOX摄取的贡献很小)。这些载体在某些组织或癌细胞中高表达,如SLC22A16在急性白血病和部分实体瘤中过度表达,OATP1A2在肝脏、肿瘤血管等部位存在。有研究发现,在弥漫性大B细胞淋巴瘤患者中,SLC22A16基因缺失与化疗(包括DOX)疗效降低相关,提示缺乏该转运体会削弱DOX对肿瘤的作用。因此,在自然状态下,**膜转运蛋白的表达差异**会导致不同细胞摄取DOX的能力不同:转运体丰富的细胞可主动摄入更多DOX,而缺乏这些载体的细胞主要依赖缓慢的被动扩散。需要注意的是,与摄入方向相反的是*外排转运蛋白(如ATP结合盒(ABC)家族)会将DOX泵出胞外,其中多药耐药泵P-糖蛋白(P-gp/MDR1)对DOX的外排尤为重要。P-gp广泛存在于肿瘤细胞膜和正常组织的屏障细胞中,能主动将DOX泵出细胞,从而降低胞内有效浓度。在P-gp高表达的耐药癌细胞中,DOX的累积量仅相当于野生型敏感细胞的20%左右,进入细胞核的净通量也降低近一半。加入P-gp抑制剂(如维拉帕米、环孢素A或PSC833)可将耐药细胞中DOX的积累提高到敏感细胞的70-80%,同时部分恢复其对药物的敏感性。因此,DOX在未经修饰状态下进入细胞核的效率取决于被动扩散、载体摄取和外排泵三者的净效应。 载药系统对DOX核转运路径的影响 为了提高DOX在肿瘤细胞核内的富集、减少对正常组织的毒性,研究者开发了多种药物递送系统(如脂质体、聚合物纳米粒等)。这些载药系统可以显著改变DOX进入细胞和细胞核的途径。总体而言,纳米载体通过内吞途径进入细胞,然后在细胞内释放DOX,从而实现与游离DOX不同的分布动力学。下面按不同载体类型进行讨论: 脂质体与纳米粒载体:*脂质体是最成熟的DOX载药系统之一,典型产品如Doxil(长循环PEG化脂质体DOX)。与游离DOX直接透膜不同,脂质体携带的DOX通常通过*胞吞作用进入肿瘤细胞。PEG化脂质体在血流中长循环并富集于肿瘤组织(EPR效应),进入肿瘤后被肿瘤细胞内吞,随后在内体/溶酶体内释放DOX。pH响应型脂质体通过设计在酸性环境(如内体pH≈5-6)下膜结构不稳定,从而更快速释放DOX。一项研究比较了酸敏脂质体(SpHL-DOX)与非酸敏脂质体(nSpHL-DOX)在HeLa细胞中的行为:结果发现,SpHL-DOX进入细胞的速度更快,能够更迅速地在内吞途径中释放DOX,并在细胞核内产生更强的药物累积。SpHL-DOX更高的核累积量引发了更显著的细胞凋亡(如激活caspase-3),而非酸敏脂质体则由于释放缓慢,核内DOX水平较低。此外,加入氯喹或蛋白酶体抑制剂E64d以干预溶酶体功能,可进一步增强酸敏脂质体的细胞毒作用,表明加速内吞体逃逸能提高DOX进入细胞核的效率。与之相反,游离DOX由于无需内吞即可扩散进入细胞,通常在更短时间内达到细胞核。实验显示游离DOX处理6小时内就大量出现在细胞核中(符合其被动扩散机制)。但游离DOX也更易被外排泵清除,缺乏肿瘤选择性。相比之下,脂质体等纳米载体通过尺寸排除效应可以一定程度上规避P-gp的作用(P-gp对300–2000 Da的小分子作用显著,对纳米颗粒不能直接泵出)。有报道指出,脂质体包封可逆转部分耐药性:一方面脂质体使DOX隔离于细胞外,P-gp无法立即作用;另一方面脂质体与P-gp的相互作用可能抑制其泵出功能。因此,脂质体载体不仅提高了肿瘤组织中的药物递送,还通过改变入胞路径而在细胞内提高核输送效率。 聚合物纳米粒与杂化载体:*聚合物胶束、聚合物-脂质杂化纳米粒等载体同样通过*内吞作用进入细胞,并通过促内体逃逸等机制将DOX释放到胞质,从而增强调入细胞核的药物量。例如,一种聚合物-脂质杂化纳米粒(PLN)将DOX与阴离子聚合物复合后包裹。研究发现,在P-gp过表达的耐药乳腺癌细胞中,DOX-PLN处理可显著提高细胞内DOX的摄入量和滞留时间,远超游离DOX。荧光成像显示,经过DOX-PLN递送,更多药物进入细胞核,并且载体的脂质成分也进入了细胞。内吞途径抑制实验进一步揭示,巨胞饮/吞噬作用是这些纳米粒进入细胞的主要方式。机制上,这种纳米载体通过内吞绕过了细胞膜上P-gp的直接外排,部分DOX伴随载体一起被内吞,躲过了P-gp泵出,然后在细胞内释放并保持更高的滞留。因此,该策略使耐药细胞内的DOX净累积增加,从而克服了一定程度的耐药性。另一项研究将DOX通过共价键偶联到大分子上形成 聚合物药物偶联物,如TAT-PEG-多肽-DOX自组装纳米粒(150 nm左右)。HCT8/ADR耐药结肠癌细胞经这种纳米药物处理后,细胞内DOX摄取显著增加,并绕过P-gp介导的外排,细胞内药物保留时间延长。更重要的是,该纳米药物增强了药物在细胞核的分布,在细胞核内累积更多DOX,强烈抑制了DNA/RNA合成。体内实验也表明此纳米制剂对耐药肿瘤有更好的抑瘤效果。总的来说,聚合物纳米载体通过尺寸效应和亚细胞分布差异,使DOX在癌细胞内(特别是细胞核内)的有效浓度提高,减少了多药泵的影响。 核定位和靶向递送:*一些载体通过*添加核定位序列(NLS)或其他靶向配体来专门增强DOX的核转运。NLS是富含碱性氨基酸的短肽序列,能够被核输入蛋白(importin α/β)识别并将其携带的货物运入细胞核。尽管DOX本身无NLS,但研究人员将NLS肽偶联到纳米颗粒表面或与DOX结合,从而借助细胞自身的核进口机制提高DOX进核效率。Misra等制备了NLS修饰的PLGA纳米粒载DOX(粒径约226 nm),在乳腺癌MCF-7细胞中显示出显著增强的核靶向输送:与未修饰纳米粒或游离DOX相比,NLS-纳米粒处理使更多DOX进入细胞核,细胞毒性大幅提高(MTT测得IC_50下降,以游离DOX的17.6 μM降至2.3 μM)。共聚焦显微镜观察也证实,NLS修饰纳米粒使DOX在细胞核的定位明显增加。同样,将HIV-TAT等穿膜/核导向肽与DOX或载体结合也是有效策略。Pan等的研究将DOX与TAT-PEG-多肽组装成纳米颗粒,发现其细胞摄取率更高且核内药物分布显著加强,能够克服结肠癌耐药细胞的P-gp介导耐药。此外,配体靶向也是改变DOX分布的途径之一。例如,将DOX与铁转运蛋白转铁蛋白(Tf)*偶联可利用癌细胞过度表达的Tf受体(TfR/CD71)进行靶向递送。TfR在多种肿瘤(如乳腺癌)中表达上调,在正常细胞中相对较低。Relecka等的研究表明,DOX–Tf偶联物选择性地增加了乳腺癌细胞内的DOX累积,同时对正常内皮细胞的毒性显著降低:与游离DOX相比,DOX–Tf使正常内皮细胞的存活率提高了3.5倍,而在癌细胞中毒性更强。这说明靶向配体介导的递送既*增强了肿瘤细胞对DOX的核内积累,又减少了正常细胞的摄取,体现出对肿瘤的选择性。总之,各类载药系统通过改变细胞摄取途径(如利用受体介导胞吞代替被动扩散)以及促进核靶向,提高了DOX在肿瘤细胞核内的浓度。从分子机制上看,载药系统为DOX打开了新的“进核通路”:内吞途径使其绕过了质膜外排泵、靶向序列使其借用了细胞主动核进口机制。这些设计均旨在提高DOX对肿瘤细胞核的有效打击,同时降低对正常细胞核的毒副作用。 肿瘤细胞与正常细胞机制差异 DOX进核机制在不同类型细胞间可能存在显著差异。癌细胞与正常细胞在膜转运蛋白表达、能量代谢、核膜结构及细胞周期状态等方面的不同,都会影响DOX的入核效率: 膜转运与耐药相关差异:*癌细胞常出现膜运输蛋白表达重编程。例如,某些肿瘤高表达DOX摄取载体(如SLC22A16、OATP1A2),这可能使DOX更易进入这些细胞的胞质和细胞核。相反,有些正常组织细胞可能几乎不表达这些载体,主要依靠缓慢的被动扩散来吸收DOX。**外排泵P-gp**在未经药物压力的正常细胞中表达通常较低,而许多经历过化疗选择压力的肿瘤细胞会过度表达P-gp等MDR蛋白。这意味着在相同浓度下,耐药肿瘤细胞往往将大部分DOX泵出,核内累积浓度偏低;而正常细胞由于缺乏高效泵出,反而可能在核内积累较高DOX水平并发生毒性(典型例子是心肌细胞累积DOX导致心脏毒性)。Shen等比较了P-gp过表达的耐药癌细胞与其亲代敏感细胞中的DOX分布,发现耐药细胞核内DOX含量不到敏感细胞的一半。临床上,人们尝试通过*联合P-gp抑制剂或使用非P-gp底物型载药系统来提高癌细胞核内DOX水平,同时希望正常组织因P-gp低而不至于过度蓄积药物。 能量依赖性与代谢差异: 游离DOX主要通过被动过程进出细胞,不直接消耗细胞能量;而载药纳米系统进入细胞常需要能量驱动的内吞。因此,细胞代谢水平的差异会影响DOX的入核效率。肿瘤细胞通常具有活跃的代谢和内吞活动,可加速对纳米药物的摄取;相反,某些正常分化细胞(如静止期细胞)代谢率低,内吞途径不活跃,对载药系统的摄入效率较低。实验上,在4℃低温或存在ATP生成抑制剂(如叠氮化钠)时,内吞作用会被抑制,载药DOX进入细胞核的路径几乎被切断,而游离DOX的被动扩散则受温度影响较小(但膜流动性降低仍会减缓扩散)。Wong等的研究用吞噬抑制剂处理细胞,观察到纳米载DOX的内吞被阻断,核内荧光显著下降。这类能量依赖性的验证说明:肿瘤细胞高度活跃的摄取途径对载药DOX核转运至关重要,而在低代谢状态下(如正常细胞或低温条件),这些途径受限导致核内药物减少。 核膜结构与细胞力学差异:*癌细胞的核骨架组成和核孔功能常与正常细胞不同。许多癌细胞下调Lamin A/C等核纤层蛋白,使细胞核更加柔软、变形性更强,以利于侵袭和增殖。这种核结构变化可能影响NPC的密度和通透性。**核孔复合体数量**在不同细胞中的密度也不同:增殖活跃的细胞通常拥有更多的NPC以满足大量核质交换的需求。侵袭性强的癌细胞系中,提取的裸露细胞核对DOX的通透性彼此存在差异;一般来说,恶性程度高的细胞核膜可能更“漏”,允许DOX更快进入核内。同时,DOX本身对核结构也有影响。一些报道指出DOX处理可导致核膜相关蛋白的变化,如核纤层B1蛋白水平下降,可能使核稳定性降低。核膜的完整性和NPC功能的改变都会反馈影响DOX的核内积累。近期有研究从*力学角度揭示:增强细胞核-细胞骨架的联结(例如培养在硬质基质上)会减少DOX进入细胞核,而短时间内破坏肌动蛋白、微管或核纤层则瞬时提高DOX核内摄取。这提示肿瘤细胞经常具有异常的细胞骨架和核骨架互动(例如许多肿瘤细胞展现核膜不规则、核纤层变薄),从而可能天然更容易让DOX进入细胞核。相反,正常细胞核骨架完整,机械张力维持,NPC或许更严格地控制分子进出。机械性“松弛”可视为一种促进药物核进口的方式:比如使用低剂量紫杉醇预处理肿瘤细胞可“力学诱导”核膜更通透,实验证实这使随后加入的DOX核摄取量显著提高。因此,肿瘤细胞独特的核结构/力学生态(柔软的核、异常的核孔功能等)可能是其DOX进核机制与正常细胞不同的内在原因之一。 细胞周期因素:细胞周期影响DOX进核有两个方面:(1) 增殖状态: DOX主要作用于DNA,因此对分裂活跃的细胞毒性更强。S期时细胞核DNA展开供复制,可能增加DOX结合机会;G2/M期时若DOX进入,可干扰有丝分裂。而静止期(G0)细胞核膜稳定、代谢慢,DOX进入和作用都相对减少。(2) 有丝分裂核膜破裂:*在细胞进入有丝分裂时,核膜暂时解体,胞质与染色体无屏障交流。在这一阶段,无需通过NPC,DOX即可直接接触到染色质。对于游离DOX而言,这提供了一个“机会窗口”使其大量结合染色体DNA,从而在分裂后子核中保持高浓度。这部分解释了为何DOX对高速分裂细胞有更强杀伤力。不过对于正常细胞而言,很多处于分化静止状态,不经历频繁的核膜崩解,因此DOX只能通过NPC缓慢进入核内,对这些细胞的影响相对较小(但如心肌等非分裂细胞由于缺乏外排机制,仍可能积累DOX导致慢性毒性)。值得注意的是,一些抗癌新策略正是利用细胞周期差异,如同步化肿瘤细胞于有丝分裂期以增加药物摄入,或将正常细胞停滞于特定周期保护它们避免药物伤害。这些都凸显了*细胞周期对DOX进核效率的影响。总的来说,肿瘤细胞(特别是高度增殖、具耐药表型的)与正常细胞在DOX进核机制上的差异是多因素叠加的结果,包括膜运输体系、能量代谢、核结构和细胞周期等方面。这些差异为我们提供了靶向肿瘤细胞核转运的策略依据,也提醒我们在研究DOX作用时应区分分析细胞种类。 下表总结了DOX进入细胞核的不同路径及其涉及的关键蛋白或影响机制: DOX进核路径 关键蛋白/机制 参考文献 被动扩散跨膜 (自由DOX) - 无需载体,依赖浓度梯度;- 质膜脂质相容性(疏水-亲水平衡);- 分子量小于NPC排除限制,可自由透过核孔复合体。 载体介导跨膜 - 摄入载体:SLC22A16、OATP1A2等膜转运蛋白,将DOX主动转运入胞质;- 外排载体:P-gp、MRP等,将DOX泵出胞外,减少净内流。 内吞/纳米载体路径 - 胞吞相关:網格蛋白介导内吞、巨胞饮等将载药颗粒吞入;需要ATP能量;- 内体逃逸:pH敏感脂质体膜破裂或聚阳离子破膜,实现DOX从内体/溶酶体释放;- 尺寸效应:纳米粒避免P-gp识别,提高细胞内滞留。 NLS介导核进口 - 核定位序列(NLS):如经典的质朴霉素序列PKKKRKV,可偶联于DOX或载体;- 核输入蛋白:Importin-α/β识别NLS并穿行NPC运输复合物进入核;- 核孔蛋白:NPC中的FG核孔蛋白与importin相互作用开辟通道。 有丝分裂核膜开放 - 核膜消失:细胞进入M期时核膜解体,胞质与核物质混合;- 时机依赖:DOX在此阶段可直接接触染色体,大量嵌入DNA;- 非特异过程:不涉及特定载体蛋白,但仅发生于分裂细胞。 (间接体现周期影响) 表:阿霉素进入细胞核的主要路径及其关键机制。 DOX进核机制验证的关键实验步骤 深入研究和验证上述DOX进核机理,可通过多种细胞和分子实验手段相结合来实现。下面列出若干关键实验设计步骤: 实时荧光成像观测DOX定位:利用DOX本身的红色自发荧光或荧光标记的DOX,结合活细胞激光共聚焦显微镜,动态监测DOX从细胞外、胞质到细胞核的时空分布。例如,可在不同时间点拍摄细胞核内DOX荧光积累的图像,以量化进核速度。必要时也可采用高分辨率共聚焦及三维重构,精确定位DOX是弥散在核质中还是结合于染色质。对于超微结构定位,可用电子显微镜(EM)观察经高浓度DOX处理细胞的超薄切片,在细胞核区域辨识具有高电子密度的DOX-DNA复合物沉积。 利用共聚焦显微镜实时观测阿霉素(DOX)在细胞中的分布变化。(A)示意图:实验设置用于测量DOX进入细胞核的过程。(B)代表性图像:红色荧光为DOX与细胞核DNA嵌合,显示随时间推移DOX在细胞核内的积累。(C)量化曲线:DOX核荧光强度随时间上升,每条曲线代表单个细胞核。(D)示意图:DOX跨膜和入核过程,包括质膜通透(受MDR影响)和经核孔进入核内。本图由BioRender绘制。 干扰核转运相关蛋白:*采用基因敲低或敲除技术(siRNA或CRISPR-Cas9)靶向细胞的核转运机器,验证其对DOX进核的影响。首先,可敲低*核输入受体如importin-β或importin-α亚基,观察游离DOX和NLS修饰DOX输送的核荧光是否有变化。如果DOX主要经被动扩散,则干扰importin可能无明显影响;而对于NLS介导的载药系统,importin缺失应显著降低DOX核进入量。其次,干扰核孔复合体蛋白(如Nup62、Nup98等),破坏NPC选择性屏障,也能提供线索。例如,用siRNA降低关键FG重复核孔蛋白的表达,测定DOX在核/质的分布变化——若DOX被动通透受限于NPC,那么减少FG网架可能增大NPC孔径、提高DOX核内累积。相反,若干扰核孔蛋白导致核屏障功能紊乱,可能出现大分子漏入核,细胞死亡加快等现象,需要结合对照组进行判读。此外,化学抑制剂也可用来瞬时干扰核转运功能,如小分子INI-43抑制importin-β或小麦胚芽凝集素(WGA)封闭核孔,短时间处理细胞并观察DOX荧光变化,以支持基因敲除的结果。通过这些手段确认特定蛋白在DOX核转运中的作用,可进一步佐证相应机制(如验证NLS纳米粒确实经importin通路入核等)。 荧光共定位分析:*将DOX的荧光信号与细胞膜、核膜成分进行共定位观察,可直观了解DOX穿膜和入核过程中的空间关系。具体而言,可选用细胞膜荧光探针(如DiI膜染料)以及标记核膜/NPC的抗体(如抗Nup62、抗核孔复合体蛋白的抗体,结合二抗标记染色)进行染色。然后用共聚焦显微镜观察DOX荧光与这些标记的重叠情况。如在早期时间点,DOX荧光与质膜染料局部重叠,提示DOX可能在膜上聚集或通过膜微区进入;与核孔蛋白信号重叠则表明DOX在通过NPC入口处积累。特别对于*载药系统,可标记载体本身(例如在纳米粒上标记一种不同颜色的荧光)并追踪:观察载体荧光先集中于胞质囊泡再逐渐消失、同时DOX荧光转而出现在细胞核的过程。如果将溶酶体标记(LysoTracker绿色)一起观察,可发现DOX载体是否陷于溶酶体,以及加入氯喹等是否促使DOX从这些囊泡释放、进入核内。另外,通过FRET技术(若DOX荧光可以作为给体/受体)也可探测DOX与DNA或膜脂的距离改变,验证DOX是否与核内DNA结合定位。 动力学与能量依赖实验:*设计一系列实验以解析DOX进入细胞及细胞核的速度及其对能量的依赖程度。首先,可通过*时间梯度实验获取动力学参数:如将细胞暴露于DOX并在0、5、15、30、60分钟等不同时间点终止处理,立即固定细胞后测量核内DOX荧光强度,绘制时间-浓度曲线,估算半饱和时间t½等。这个实验对比自由DOX与载药DOX的曲线,可揭示载药系统是否加快或延缓了进核。其次,进行低温与代谢抑制实验:分别在37℃常温和4℃低温条件下处理细胞,同时设置加入ATP抑制剂(如叠氮化钠、2-脱氧葡萄糖组合)的一组,比较不同条件下DOX核内累积量。例如,观察到4℃时游离DOX仍有一定核进入(可能只是较慢),而载药DOX几乎无法进入细胞核,则证明载药途径高度依赖能量的主动过程。再如,在有氧和无氧条件下比较DOX分布,可验证线粒体能量对内吞的影响。最后,可加入特定途径的抑制剂鉴别内吞途径:如氯化铵/巴菲洛霉素A抑制溶酶体酸化,或用胰蛋白酶消化膜受体,或用药物抑制微管(秋水仙碱)和微丝(肌动蛋白,辣根硫蛋白)等,分别针对网格蛋白介导、巨吞饮、微管依赖运输等途径。通过这些抑制剂的组合,可以判定哪种内吞途径在载药DOX进核中占主要地位。举例来说,若使用菲利平(抑制小窝介导)显著降低DOX核荧光,而酵母多糖(抑制巨吞)无影响,则说明主要经网格蛋白途径。只有将动力学数据与能量依赖性结合分析,才能全面了解不同体系下DOX进核的限制步骤。 正常 vs 肿瘤细胞对比实验:选择代表性的正常细胞系与肿瘤细胞系,在相同条件下比较DOX的核转运效率和机制差异。这可以包括:(1) 定量摄取比较:采用高内涵成像或流式细胞术分别测定正常细胞和癌细胞在给药后一段时间内的核内DOX荧光强度平均值,比较其比例。预期可能看到某些正常细胞核内荧光低于肿瘤细胞(如有外排泵缺失的正常细胞,也可能相反);(2) 转运蛋白表达分析:通过qPCR或蛋白质印迹检测两类细胞中SLC22A16、OATP1A2、P-gp等相关载体的表达量,与功能结果相关联;(3) 共定位及超微结构对比:*利用上述荧光共定位手段,观察DOX在正常细胞中是否更多滞留于溶酶体(显示与LysoTracker高度重叠)而在肿瘤细胞中更多逃逸进入核。例如,一项针对DOX在肿瘤和正常心内膜细胞中的研究可能发现,肿瘤细胞溶酶体蓄积较少而正常细胞中DOX荧光大部分局限于周边囊泡。这些差异将有助于阐明为什么DOX对某些正常组织毒性大(可能因为缺乏有效外排/酸化机制)而对某些肿瘤反而作用弱(可能因为内吞隔离或外排过强)。(4) **细胞周期与增殖速率**:通过EdU掺入或Ki-67免疫染色确定细胞增殖水平,将其与DOX核摄取量相关联。预期增殖指数高的细胞系(通常肿瘤细胞)对DOX核摄取和损伤更敏感,而静止细胞则抗性更高。综上,通过平行对比实验,可以确认*肿瘤细胞在结构和功能上哪些特征促成了DOX更高的核内累积,从而为有针对性地改进药物递送提供依据(例如,对正常细胞高毒性的原因也可由此找到缓解策略)。 综而言之,阿霉素进核机制的研究需要多层次手段验证,从宏观成像到分子干预相结合。通过实时观察、特异干扰和跨细胞种比较等实验,我们能够全面描绘DOX穿膜、入核的路径蓝图,并解释不同类型细胞对这种经典化疗药物截然不同的响应。这不仅加深了对药物作用机理的理解,也将为提高阿霉素疗效、降低副作用的策略(如核靶向递药、克服耐药等)提供科学依据。
Field Knowledge
· 2025-06-17
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
Don't Eat Me vs Eat Me: Cellular Warfare and the Dual Functions of CD47 Peptides
『”别吃我” vs “吃我”』:细胞世界的攻防战,CD47肽的双重妙用 本文基本信息 标题:Suppressing or Enhancing Macrophage Engulfment through the Use of CD47 and Related Peptides (通过使用CD47及其相关肽抑制或增强巨噬细胞的吞噬作用) 期刊:Bioconjugate Chemistry Citation: Bioconjugate Chem. 2022, 33, 1989-1995 Corresponding Author: Dennis E. Discher Biophysical Engineering Laboratories and Bioengineering Graduate Group, University of Pennsylvania, Philadelphia, Pennsylvania 19104, United States orcid.org/0000-0001-6163-2229; Email: discher@seas.upenn.edu 摘要 外来颗粒和微生物在体内会被巨噬细胞迅速清除,尽管许多关键的摄取机制仍不清楚。“自身”细胞表达CD47,它作为巨噬细胞上SIRPα的抗吞噬配体发挥作用,特别是当促吞噬配体(如抗体)同时展示时。在此,我们综述了CD47及相关的“自身”肽作为巨噬细胞摄取的调节剂。与CD47或源自其SIRPα结合位点的肽共轭的纳米颗粒,可以在体外和体内抑制巨噬细胞的吞噬摄取,在展示CD47的病毒上也发现了类似的现象。因此,作为有效载荷的药物、染料和基因对靶细胞的递送效率得以提高。另一方面,癌细胞表达的CD47使其能够逃避巨噬细胞和免疫监视。这推动了针对CD47-SIRPα的可溶性拮抗剂的开发,从临床上的阻断性抗体到临床前模型中的合生肽。因此,**CD47及其肽正在成为具有双重用途的、抗击疾病的吞噬作用调节剂**。 mindmap root(CD47-SIRPα:细胞吞噬的双向调控枢纽) 背景:巨噬细胞的“敌我识别”挑战 **“吃我”信号**<br/>刺激吞噬外来物 **“别吃我”信号**<br/>保护自身细胞 **核心信号轴**<br/>CD47「自身ID卡」<br/>- SIRPα「ID阅读器」 策略一:抑制吞噬「增强递送」 ::icon(fa fa-paper-plane) **核心思想**<br/>为“友军”穿上“自身”的隐身衣 **应用一:纳米药物** **方法**<br/>将CD47或“自身”肽共轭到纳米颗粒表面 **效果**<br/>延长血液循环时间<br/>增强肿瘤靶向递送 **应用二:病毒载体** **方法**<br/>将CD47整合到慢病毒包膜<br/>将“自身”肽展示在AAV衣壳 **效果**<br/>降低免疫清除<br/>提高基因治疗效率 策略二:增强吞噬「癌症免疫治疗」 ::icon(fa fa-crosshairs) **核心思想**<br/>撕掉癌细胞的“ID卡”,使其暴露给免疫系统 **作用机制**<br/>使用可溶性拮抗剂<br/>阻断癌细胞CD47与巨噬细胞SIRPα的结合 **主要方法** **抗体疗法**<br/>针对CD47或SIRPα的单抗<br/>「如Magrolimab」 **重组蛋白**<br/>可溶性CD47/SIRPα作为诱饵 **“纳米自身”肽**<br/>多价肽高效阻断SIRPα **主要挑战**<br/>“抗原库”效应导致的在靶脱瘤毒性<br/>「如贫血、血小板减少」 结论与展望 **双重用途**<br/>同一靶点,可实现抑制与增强两种相反效果 **未来方向**<br/>优化靶向性,减少副作用<br/>进一步研究促吞噬信号的作用机制 引言 吞噬作用是一种古老而基础的细胞过程,指的是对一个目标的吞食行为。对于变形虫而言,细菌和真菌是其吞噬的目标,这个过程几乎不需要或完全不需要辨别。然而,在动物体内,诸如巨噬细胞之类的吞噬细胞必须识别、攻击并优先吞噬“异己”目标,同时避免伤害健康的“自身”细胞。这些先天性免疫吞噬细胞是宿主抵御各种大小入侵微生物的第一道防线。 吞噬作用由“吃我”信号所激发,这些信号会启动肌动蛋白细胞骨架的重塑,从而驱动巨噬细胞伸出突起以包裹——并随后内化和摧毁——一个“异己”目标。相关的驱动因素范围广泛,从高度特异性的生物分子相互作用物(如蛋白质-蛋白质相互作用),到特异性较低的表面效应物(如电荷、吸附的物质、配体模式),再到物理化学特征(如刚度、形状)。与这些“吃我”通路相对的,是能够抑制巨噬细胞摄取的“别吃我”信号分子。这篇简要综述将聚焦于通过调控特定的“别吃我”信号轴——CD47-SIRPα——来调节巨噬细胞对纳米颗粒、病毒和癌细胞清除方面的最新进展。 巨噬细胞检查点,CD47-SIRPα “自身标记”蛋白CD47是一种普遍表达的整合膜蛋白,它通过与巨噬细胞受体SIRPα相互作用来抑制吞噬摄取。尽管CD24与Siglec-10之间的相互作用可能是另一个潜在的巨噬细胞检查点,但CD47-SIRPα相互作用在许多高等动物中的研究更为透彻且更为保守。对巨噬细胞摄取的抑制作用涉及SIRPα胞质区的免疫受体酪氨酸基抑制基序(ITIM)的磷酸化,并激活磷酸酶SHP-1和SHP-2。 CD47与SIRPα之间的结合相互作用倾向于是物种甚至是品系特异性的,但也存在一些显著的交叉相互作用,例如人的CD47可以与NOD小鼠和猪的SIRPα结合,而猪的CD47也能与人的SIRPα结合。因此,这种受体-配体相互作用的抑制效应是由蛋白质的序列和结构决定的。 巨噬细胞高效清除体内循环异物的能力,常常阻碍了基于纳米颗粒的药物递送,无处不在的巨噬细胞的摄取作用使得药物难以到达预期的靶点,例如癌细胞。这催生了利用CD47来使固体颗粒和病毒更具耐受性,并增加纳米药物和基因靶向递送效率的想法。与此相辅相成的一个目标是拮抗CD47-SIRPα轴以增强吞噬作用,其中,基于抗体的阻断正迅速成为癌症免疫疗法中一个具有临床意义的新增手段,而小分子抑制性肽段的设计也带来了新的可能性。 xxxxxxxx 图1:“自身标记”CD47抑制巨噬细胞的吞噬作用 血清蛋白,如血液中的IgG抗体,会吸附到“外来”颗粒表面或与之特异性结合,刺激吞噬作用。然而,如果巨噬细胞表面的SIRPα与其配体CD47(表达在包括红细胞在内的“自身”细胞上)结合,这种吞噬摄取就会被抑制。 展示CD47和“自身”肽的纳米颗粒通过延迟清除来增强递送 静脉注射的纳米颗粒具有在所有组织和病灶部位循环的潜在优势。然而不幸的是,这类被注射的纳米颗粒通常在数分钟到数小时内就被单核吞噬细胞系统(MPS)清除,特别是肝脏和脾脏中的巨噬细胞。作为对比,新鲜的红细胞(RBCs)在输注后可以循环数周甚至更长时间,但最终同样会被巨噬细胞清除,尤其是在脾脏中。 巨噬细胞识别并清除一个纳米颗粒的具体机制尚不完全清楚。已知的是,血液中的血清蛋白会物理吸附并积聚在所有表面,形成一个“蛋白质冠”,这个冠可以与吞噬细胞的受体作用。其中最显著的是免疫球蛋白G(IgG),它可以结合并激活巨噬细胞的Fc受体(FcRs)。这个过程通常被称为调理作用(opsonization),它代表了生物材料领域长期以来的描述:纯净的化学物质在体内几乎总会被“污染”。聚乙二醇化(PEGylation)是延长纳米颗粒循环的经典方法,它倾向于延迟蛋白质在表面的物理吸附,但清除过程仅仅是被推迟了。 调理作用会导致与巨噬细胞的相互作用,但细胞与材料的相互作用还会受到物理性质的进一步调节,例如刚度、尺寸和曲率(形状),这些都已被证明是影响巨噬细胞清除纳米颗粒的因素。由于巨噬细胞的摄取,纳米颗粒的循环半衰期较短,这一局限性为修饰它们以使其更像“自身”提供了机会(如图2所示)。 将CD47的胞外域(约100个氨基酸)通过生物素化连接到涂有抗生物素蛋白的、细胞大小的聚苯乙烯微球上,足以在微球被抗生物素蛋白IgG调理后,抑制其被吞噬。重要的是,CD47对缺少IgG的微球没有影响。微球实验的成功鼓励了后续的纳米微珠研究,并推动了一种相关的、由21个氨基酸组成的“自身”肽的合成。 体内测试表明,CD47和“自身”肽都能通过延迟脾脏巨噬细胞的清除,来增加纳米微珠在小鼠体内的循环半衰期,从而极大地增强了肿瘤成像和药物在肿瘤部位的递送效率。随后,一个独立的实验室将“自身”肽连接到氧化石墨烯纳米片上,报告了相似的结果,并得出结论:“自身”肽比PEGylation更有效。其他实验室的研究也表明,用重组CD47或“自身”肽对纳米材料进行功能化,通常能延长循环时间、抑制清除并改善治疗效果。 另一项应用将“自身”肽连接到纳米脂质体上,与对照组纳米脂质体不同,研究者发现它们能够饱和并“钝化”肝脏巨噬细胞,从而增加了后续注射的其他纳米颗粒的循环时间和功效。在这些不同的纳米颗粒上,血清中起调理作用的IgG的沉积是否在结果中扮演了角色,通常尚不明确。尽管如此,各项研究都凸显了将CD47或更短的“自身”肽偶联到各种纳米材料上在多种应用中的实用价值。 xxxxxxxxxx 图2:CD47肽延长循环并增加靶向递送 载药纳米颗粒(左)和携带基因的慢病毒(右)由于被吞噬细胞摄取,其疗效有限。将CD47及相关的“自身”肽连接到纳米颗粒和病毒表面,它们可以与巨噬细胞上的SIRPα结合,帮助将其识别为“自身”,从而延长循环时间并增强靶向递送。 展示“自身”信号的病毒能够抑制吞噬作用并增强基因递送 基于病毒的基因递送已广泛用于临床,例如疫苗(如新冠病毒的刺突蛋白)和细胞的离体工程改造(如CAR-T细胞)。在静脉注射以实现靶向基因递送的尝试中,慢病毒(Lentivirus)和腺相关病毒(AAV)载体最为常见,但巨噬细胞同样会被激活以清除这些“天然的纳米颗粒”,这可能导致病毒诱导的炎症反应。许多团队尝试通过偶联合成聚合物来抑制单核吞噬细胞系统(MPS)介导的病毒清除,以期最小化调理作用;然而,这类修饰的空间位阻会妨碍病毒与目标靶点结合所必需的关键蛋白质相互作用。 慢病毒通常是在细胞系胞吐后收获的,因此,通过适当改造的细胞系过表达膜蛋白CD47,原则上可以产生展示CD47的慢病毒。已有两项独立研究确实成功生成了CD47-慢病毒,并证实其能减少与巨噬细胞的相互作用并改善基因递送效果。 第一项研究用对照组或CD47-慢病毒递送红色荧光蛋白(RFP)到分化的人类巨噬细胞培养物中,结果显示: CD47-慢病毒的转导效率比对照组低约3倍。 表达SIRPα的A549肺腺癌细胞优先被CD47-慢病毒转导。(不是抑制吗?) 后一个结果表明,SIRPα充当了CD47介导的附着和感染的“停靠受体”。在体内也观察到了相似结果:在A549肿瘤中,使用CD47-慢病毒的转基因表达水平更高,而肝脏和脾脏巨噬细胞中的表达则相对于对照组显著降低。研究还通过基于抗体的SIRPα相互作用抑制实验来验证其特异性。 第二项研究利用人源CD47来提高慢病毒在肝脏基因转移的效率。在确定了肝脏巨噬细胞会清除静脉注射的慢病毒后,研究发现CD47-慢病毒增加了对肝细胞的基因转移,同时减少了对巨噬细胞的转移。这些实验在两种小鼠模型中进行:一种是能表达与人源CD47结合的SIRPα的NOD小鼠,另一种是亲和力较弱的C57BL/6小鼠。结果显示,CD47-慢病毒在C57BL/6小鼠中的清除率更高。其安全性和有效性在与人类CD47和SIRPα序列同源性更高的非人灵长类动物中得到了进一步证实。 这些研究表明,展示CD47能够保护像慢病毒这样的有膜病毒免受巨噬细胞的清除,从而增强基因转移疗法的功效。与慢病毒类似,在临床上具有重要意义的腺相关病毒载体(AAV)上展示“自身”肽,在体外也导致了AAV的吞噬易感性降低。由于AAV没有膜包被,研究人员将“自身”肽直接引入AAV2的衣壳蛋白中,并用甘氨酸-丝氨酸接头(linker)连接以确保衣壳稳定并最小化病毒滴度的损失。这种插入对转导效率几乎没有影响,但与对照组AAV2相比,在人类巨噬细胞中,病毒的摄取量降低了多达10倍。当用抗SIRPα抗体进行阻断后,这种差异再次消失。 AAV的尺寸仅为20纳米,而慢病毒约为100纳米。鉴于CD47-SIRPα是吞噬摄取的特异性抑制剂,而非内吞作用的抑制剂,迄今为止CD47偶联病毒的研究结果,共同凸显了巨噬细胞对纳米颗粒进行吞噬的高效性。在细胞生物学文献中,吞噬作用常被认为仅与较大的实体(颗粒、凋亡细胞或微生物)相关,但早期对尺寸差异巨大的颗粒进行的实验,并未充分考虑到颗粒浮力的差异和其他尺寸效应。如果很少有小颗粒沉降,那么被摄取的自然就少。然而,浮力在体内并不重要。在上述纳米颗粒和病毒的研究中,肝脏和脾脏中的巨噬细胞之所以突出,是因为这些巨噬细胞排列在这些组织的血管壁上,从而能够直接、即时地接触到静脉注射的颗粒。尽管如此,巨噬细胞仍然存在于所有组织中,并且通常是肿瘤或穿刺/损伤部位等病灶处的主要细胞类型。摄取途径对于最终结果也很重要:例如,吞噬体(phagosomes)比内涵体(endosomes)对货物的氧化和破坏性更强。所有这些因素都对数十亿剂作为疫苗注射的病毒(例如,强生或牛津-阿斯利康新冠疫苗中由腺病毒递送的DNA)具有深远影响。 可溶性CD47-SIRPα拮抗剂增强吞噬作用 CD47在细胞表面普遍表达,但早在几十年前,人们不仅记录了CD47在卵巢癌中的过表达,而且在CD47序列被测定之前,用于肿瘤成像的抗体靶向最终也被证明能抑制吞噬作用。随后,针对其他癌症的CD47抗体靶向研究也相继展开,并有证据表明在人类肿瘤异种移植模型中存在治疗窗口,尽管最初尚不清楚这种IgG是抑制了吞噬作用,还是激活了FcR驱动的吞噬作用,或是两者兼有。 此外,一项关于在同系小鼠肿瘤模型中使用抗小鼠CD47治疗的研究,在后来的重复性验证中显示,抗CD47单药治疗没有任何抗肿瘤效果的迹象,反而显示出贫血副作用。这种单药治疗的负面结果在很大程度上也反映在了临床抗癌实践中,并且这与CD47基因敲除小鼠几乎正常(仅有极小缺陷且无明显贫血)的事实似乎是一致的。后一项由免疫学实验室得出的观察结果,一度引起了血液学家们对CD47所谓“自身标记”功能的极大怀疑。 与单药治疗形成对比的是,将拮抗CD47-SIRPα巨噬细胞检查点与一个“吃我”信号相结合的策略展现出了巨大的潜力,并催生了对可溶性拮抗剂研究的爆炸性增长。这些拮抗剂的范围从临床上的各种IgG设计和重组蛋白,到小分子肽,它们都作为可能的药物,对多种血液和实体恶性肿瘤显示出不同程度的疗效。 目前最先进的抗CD47疗法是一种名为magrolimab(或Hu5f9-G4)的人源化IgG4单克隆抗体,它能结合CD47并抑制其与SIRPα的结合,但由于IgG4与巨噬细胞FcR的亲和力较弱,因此不会主动激活巨噬细胞。然而,CD47在体内几乎所有细胞上的表达构成了一个“抗原库”(antigen sink),导致magrolimab等CD47靶向抑制剂的非特异性结合,从而引发了不可避免的在靶毒性,例如贫血和血小板减少症。为解决这一安全问题,正在进行的努力包括开发对CD47具有强结合力但对人红细胞亲和力低的纳米抗体。 靶向SIRPα受体可能更为安全,因为其表达更具限制性,尽管SIRPα的表达不仅限于髓系细胞,也延伸到了如上皮细胞等其他细胞。一些研究确实表明,抗SIRPα阻断与抗CD47同样有效,但能维持安全的血液学指标。一项工程化巨噬细胞的研究进一步证明,将SIRPα阻断与用肿瘤靶向IgG预激活FcR相结合,在缩小已形成的肿瘤方面是有效的。 最近,研究人员基于CD47上与SIRPα结合的β-发夹环结构,开发出了多价的8个氨基酸组成的“纳米自身”(nano-Self)拮抗剂。这些肽的变体能够有效阻断CD47-SIRPα的相互作用,并在低至5 nM的浓度下,增强人类巨噬细胞对经抗体调理的人红白血病细胞的内化。同一项研究中的其他观察结果,进一步证实了巨噬细胞上的CD47能与同一细胞上的SIRPα发生顺式相互作用,传递一种自抑制信号,这与早前的观察结果一致。 然而,并非所有将可溶性CD47多肽添加到培养的巨噬细胞中的研究都显示出吞噬作用的增强。奇怪的是,一项早期的研究报告称,用细菌表达的人源CD47蛋白,在体外反而降低了小鼠巨噬细胞对胶体乳液的吞噬作用。后续其他团队的研究表明,CD47的相互作用能力需要一种细菌所缺乏的翻译后N-末端修饰才能得到改善,并且特定的人-鼠CD47-SIRPα相互作用本身就特别弱,此外,可能还需要对目标进行IgG调理才能揭示出CD47-SIRPα阻断的效果。所有这些仍然是该领域未来发展中需要重点考虑的因素。 图3:用于免疫治疗的SIRPα-CD47可溶性拮抗剂 肿瘤细胞表达巨噬细胞检查点CD47以抑制吞噬作用。单独的IgG抗体调理作用因CD47的“别吃我”信号而不足以引发有效的吞噬。但多种策略可以拮抗这种抑制。目前至少有三种免疫治疗策略正在临床前和临床研究中进行:抗CD47或抗SIRPα的抗体、作为抑制剂的可溶性蛋白版本,以及相关的“自身”肽拮抗剂。小分子(绿色三角)最终可能被开发出来抑制CD47的转录,但仍需要一个“吃我”信号。 结论 SIRPα-CD47轴正成为一个在递送和治疗等多种应用中越来越有吸引力的靶点。展示CD47或相关肽段的纳米颗粒和病毒被巨噬细胞识别为“自身”,从而延迟了这些颗粒的吞噬,延长了循环时间,并增加了染料、药物和基因的靶向递送。未来需要进一步的研究来理解这些纳米颗粒和病毒上的促吞噬信号(即调理作用和蛋白质冠的形成)。 与此同时,旨在增强吞噬作用(特别是对癌细胞的吞噬)的可溶性拮ក抗剂正在持续开发和探索中,这展示了该研究领域发展的双重用途。在全身性注射拮抗剂(如抗CD47 IgG)后,限制其脱靶效应仍然是挑战。至少有一项近期的有趣尝试是使用纳米颗粒来同时阻断CD47并调理癌细胞,但这当然要求纳米颗粒既能躲避巨噬细胞,又能接触到肿瘤细胞。小尺寸有助于渗透到实体瘤中,而最近合成的一种紧凑的环状“纳米自身”肽已被证明能在体外增强原代巨噬细胞对经单抗靶向的黑色素瘤的吞噬,为体内的疗效测试奠定了基础。 CD47-SIRPα信号轴的双向应用策略对比 对比维度 策略一:增强递送 (模拟“别吃我”信号) 策略二:增强吞噬 (阻断“别吃我”信号) 核心思想 为药物/基因载体穿上“自身”隐身衣,使其逃避免疫系统清除。 撕掉癌细胞的“自身”伪装,使其暴露给免疫系统攻击。 关键分子工具 CD47蛋白或其衍生的“自身”肽,直接偶联在纳米载体(如纳米颗粒、病毒)表面。 可溶性拮抗剂,如:抗CD47/SIRPα抗体 (Magrolimab);重组蛋白/“纳米自身”拮抗肽 作用机制 载体表面的“自身”肽激活巨噬细胞SIRPα的抑制性信号通路,从而抑制对载体的吞噬作用。 拮抗剂阻断癌细胞CD47与巨噬细胞SIRPα的结合,从而解除对癌细胞吞噬作用的抑制。 主要应用领域 纳米药物递送(延长循环,增强肿瘤靶向)基因治疗(保护病毒载体,提高转导效率) 癌症免疫治疗(特别是与“吃我”信号药物联用,治疗血液瘤和实体瘤) 主要挑战与副作用 需确保修饰不影响载体自身的功能;蛋白质冠等其他清除机制的影响尚不明确。 严重的在靶脱瘤毒性 (on-target, off-tumor toxicity)因健康细胞(尤其是红细胞)也表达CD47,导致贫血、血小板减少等副作用。
Field Knowledge
· 2025-06-14
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
Interaction Mechanisms Between Dendrimer Nanoparticle Surfaces and Cell Membranes
树枝状大分子/纳米粒表面π体系与膜相互作用机理 表面含芳香π体系的纳米粒子在与磷脂双层接触时,可通过多种弱相互作用介导结合和穿透,包括π–π堆积、CH/π(芳香环与脂肪链CH键的相互作用)、阳离子–π作用以及疏水π作用等。研究表明,带电子云的芳香环能与膜中脂质的脂肪链或头部形成特殊稳定接触。例如,Cheng等发现在蛋白质中,磷脂酰胆碱(PC)头部的胆碱阳离子可通过形成“阳离子–π盒”与芳香残基(如酪氨酸)π平面发生强烈吸引:“the PC choline cation interaction with amino acid π systems forms the PC-specific site”。类似地,带氨基的磷脂酰乙醇胺(PE)或磷脂酰丝氨酸(PS)头部的铵离子也可与芳香π体系产生电荷–π相互作用;这些作用帮助粒子在膜表面定位。在膜疏水区,纳米粒子的芳香环可以与脂质烷基链的碳氢键形成CH–π或普通的范德华疏水作用。Efimova等研究的阳离子吡啶苯基树枝状聚合物中指出,含π键的苯基单元通过疏水作用插入脂肪链区:“hydrophobic interactions of phenylene units with the hydrocarbon tails of lipids were observed”,导致脂质双层形成缺陷。此外,π–π堆积往往发生在纳米粒子自身的芳香链之间或与另一芳香表面之间。例如,电子丰富的苯环与电子缺乏的全氟苯环有相反的电荷分布,相对的π四极矩使它们形成强稳定的π–π堆积:“the equal but opposite quadrupole moments of benzene and its highly fluorinated aromatic analogs allow… stabilizing π–π stacking interactions”。总之,各类π相互作用共同影响粒子与膜界面的结合强度、定位和动力学。 π体系电子属性对膜作用的影响 芳香基团的电子属性(富电子或缺电子)显著调节其与膜相互作用的模式。以Jordanova等人研究的两种喹啉(纳夫啶酰胺)树枝状聚合物为例:未取代的N,N-二甲基氨基-喹啉酰胺树枝体(Dab)(电子给予)深入并夹入了不饱和脂肪链的扭曲部位,使脂质尾部排序增强,而其3-溴衍生物Dab-Br(电子吸引)则主要留在脂质头部,通过静电与磷酸基作用。具体地说,作者报告:“Dab incorporates in the kink formed by POPC unsaturated tails… Dab-Br interacts electrostatically with the phosphate of phosphatidylcholine”。这表明电子丰富的π体系易插入膜疏水区,而带强吸电子基团的芳香环则倾向于停留在亲水头区,依赖静电结合。另一方面,芳香环的氟取代可彻底反转其电荷分布:蒙科维奇等指出,苯环密集的π电子云使其中心带负电,而全氟苯的π云被吸电子氟拉扯呈正电;两者形成互补四极矩,从而极易发生π–π叠加。全氟芳香族结构同时高度疏水,表现出类似“类疏水效应”的超疏水性,这意味着全氟芳香修饰的纳米粒表面对脂肪链区域具有更强的亲和力。因此,电子给出/吸引基团的引入不仅改变π–π和静电相互作用,还显著调控膜穿透和扰动能力。可见,通过化学修饰调节π体系的电子特性,是控制纳米粒膜结合方式的关键策略。 磷脂分子直接互作机理及模拟/实验证据 多项实验和模拟研究直接揭示了π基团与磷脂头部及尾部的相互机制。例如,阳离子吡啶苯基树枝体与含胆固醇的阴性脂质体研究发现:带高离子度外围(如D3^50+、D2^29+)的树枝体通过纯静电作用吸附于脂质体表面,这种结合可被盐洗脱,且不进入疏水层、对膜无破坏作用。相反,次生带负载(D2^15+)的树枝体在参与静电结合的同时,其内部苯基环还深入脂质尾部区与烷基链相互作用,形成难以逆转的缺陷。更极端的是小代(D1^6+),其高度疏水刚性结构直接破坏了膜结构,使脂质体崩解。这些结果强调了分子层面不同相互作用的协同效应。类似地,模拟研究也印证了π体系作用:All-atom MD显示,纯疏水的芳香聚合物纳米点(polydot)能自发穿透DPPC膜,而表面带羧基负电的polydot则被阻留在膜面。具体地,“不带电的芳香族polydot自发渗透膜,而羧基化的polydot需要外力才能进入膜内”。此外,石墨烯氧化物(GO)等二维π体系也与磷脂头区通过静电吸附,与尾区通过范德华力结合。一项Langmuir单层研究发现,GO同时插入DPPC的脂肪链、头部及水相中,其结合既有静电又有分散作用(类似CH/π与疏水作用)。综合来看,这些建模与实验结果从多角度验证了π相互作用在粒子–膜结合和扰动中的关键角色。 电子效应调控的实验与模拟支持 除上述具体实例外,还有不少研究通过改变π系统电子性质来测试膜相互作用的变化。例如,弗氟富化策略常用于调节π表面的极性和疏水性。蒙科维奇等的综述指出,全氟芳香体系的超疏水特征可以明显增加与脂质尾部的亲和,暗示类似改性可增强穿膜能力。实验上,对比带有不同电子属性取代基的树枝体也证实了这一点:富电子纳夫啶系树枝体导致脂肪链排列有序,而缺电子衍生物则主要作用于头部。另外,对于肽/蛋白体系,使用氟化芳香氨基酸替代技术可以区分c-π与膜插入效应,佐证了π电子密度对结合模式的影响。总体而言,既有的模拟和实验数据一致表明:通过引入电子给出/吸引基团改变π平面的极性与疏水性,确实会调控纳米粒与膜相互作用的强度和性质。 其他纳米粒示例 虽然上述例子主要涉及树枝状聚合物,但类似机制也见于其他芳香表面纳米粒。例如,以DPPC为模型脂质,酯芳烃聚合物(polydots)插入研究表明,无论纳米粒大小如何,其表面疏水度决定了跨膜能力。图1示例中展示了DPPC分子和聚对苯乙炔(polydot)结构,对应模拟中中性polydot穿透膜层,而阴离子端基化polydot留在膜表面。此外,类似石墨烯、纳米颗粒或有机微球等,只要表面含芳香π体系,同样可通过上述π相互作用机制调节膜结合。综上所述,不论是树枝体还是其他纳米粒,修饰不同π体系(电子云密度或取代基)均能显著影响其与磷脂分子的相互作用模式和生物界面行为。 表面刚性疏水结构对膜相互作用的影响 疏水“锚定”作用:研究指出,金刚烷等刚性脂环可作为脂质双层膜的“锚”。例如,Štimac等提出了“adamantane as an ‘anchor’ in the lipid bilayer”的概念,实验证实将金刚烷锚基引入脂质体后可牢固插入双层膜。类似地,带有疏水金刚烷基团的氨基脲化合物被包封在磷脂胆固醇脂质体中,其与膜的相互作用“could be ascribed mainly to the adamantane moiety”,提示金刚烷基团是驱动插入脂双层的主要因素。因此,引入刚性疏水环烃显著增强粒子与疏水膜内核的亲和力,促进吸附和插入。与此相对,未修饰或强正电荷表面的树枝状大分子往往只能通过静电吸附于膜表面而不易穿透。 膜结构扰动与通透性:疏水芳香环或烯烃基团可引发双层膜缺陷和通透性改变。Efimova等系统研究发现,当树枝状大分子外围带有一定量的疏水苯基单元时,苯基与脂质烷基链发生疏水相互作用,导致双层出现不可逆缺陷。例如,对应混合性树枝体 (D₂₁₅⁺) 在磷脂体中形成双层缺陷;而高度疏水且空间刚性的G1树枝体 (D₁₆⁺) 则“caused significant destruction of liposomal membranes”。相反,完全带电的树枝体 (D₃₅₀⁺、D₂₂₉⁺) 仅通过静电吸附在膜表面,不穿透内层,也不破坏膜结构。在脂质体模型中,带有疏水金刚烷基团的胍盐化合物使膜通透率略增(诱导约15%的荧光染料泄漏),但其结合疏水尾插入膜内核后并未引起剧烈破坏。相反,一旦外源疏水域在膜内形成有序域(如四氢萘或脂链聚集),可促进脂质重组。Verma等发现,表面具有有序排列的交替疏/亲水基团的纳米颗粒能“penetrate the plasma membrane without bilayer disruption”,而随机分布的则主要被内体捕获。这说明表面刚性序列化排列有利于非内吞通道穿膜。 膜蛋白/脂质重排效应:高分子–膜相互作用可诱导膜成分重排。文献指出,大分子结合膜后常伴随脂质或膜蛋白的聚集,促进脂质跨膜迁移并提高膜离子通透性。例如,AFM 实验证实,嵌入脂双层的金刚烷-肽链自发聚集成“域”(domain),将活性取代基(如糖基)暴露于膜外。这一“域”聚集机制表明,刚性疏水基团一面插入膜内,一面让亲水/活性团显示在外,可介导膜-膜间或膜蛋白识别、囊泡聚集,而无需破坏膜完整性。 细胞摄取效率与途径 摄取效率提高:引入疏水刚性基团通常能增强纳米粒子的细胞内化效率。树枝状大分子修饰大量疏水苯基或脂链后,整体疏水性提高,有利于跨膜扩散或内吞。例如,一项研究发现含ClPhIQ苯基配体的G4 PAMAM树枝体,其脂溶性显著上升,从而“allows for the dendrimeric molecule to pass into the cell”。相反,末端带亲水胺基的树枝体氨基质子化后很难穿透疏水膜。此外,多阳离子金刚烷基分支树枝体(HYDRAmers)在巨噬细胞和上皮细胞中表现出极高的摄取率,说明刚性疏水骨架有利于细胞吸收。 内吞途径选择性:不同修饰可改变纳米粒子进入细胞的途径。Russier等报道,多阳离子金刚烷基树枝体的一/二代在不同细胞中主要通过不同途径内化:第一代主要经由clathrin介导内吞和巨胞饮,而第二代对这些通路抑制剂的敏感性明显降低。这提示,修饰基团的类型和构型可调控主要内吞途径。另有研究表明,若粒子表面排列有序,可实现部分能量无关的直接穿膜(见上文)。总体来看,正电荷和疏水性增强的粒子往往进入内体/溶酶体途径,而高度有序或超疏水表面则可能绕过传统内吞通路直接进入胞质。 分子作用机理 疏水相互作用:刚性疏水基团(环烃、芳香或烯烃)通过疏水嵌入膜内核,提高粒子–膜结合。例如,上述胍盐化合物表明其脂链“could interact with the lipid bilayer with hydrophobic interactions as well, and not only with electrostatic interactions”。同样,苯环单元与脂双链的强疏水相互作用可导致双层缺陷。因此,疏水相互作用是插入和膜扰动的主要驱动力。 空间刚性诱导插入:刚性基团(如金刚烷笼)通过固定空间构型增强穿膜。金刚烷的笼状结构和高立体阻力使其在膜内形成稳定锚点。这种刚性使得带金刚烷的分子在膜内形成紧密“域”,难以散逸,同时将亲水部分推向膜外。与之类似,具有芳香环的刚性树枝体在插入膜时稳定性更高,可形成难逆转的膜缺陷。 聚集行为:表面刚性疏水基团还可诱导纳米粒子自身和膜组分的聚集。如前述,胍盐金刚烷分子在载于脂质体后,促使互补载脂体粘附并形成多室结构。Verma等观察到的条纹状纳米粒子穿膜现象也暗示粒子可聚集形成有利于穿膜的排列。这种聚集与有序排列可改变局部膜曲率或张力,从而促进渗透。 膜蛋白协同作用:虽然文献对膜蛋白特异性较少报道,但已有研究表明聚合物–膜相互作用可伴随膜蛋白的重排。例如,一些树枝体结合膜时可引起膜上蛋白和脂质的聚集。这可能意味着修饰表面基团还能影响纳米粒子与膜蛋白受体的相互作用,进而改变内吞和信号传导过程。 综上所述,表面修饰的刚性脂环、芳香环或烯基通过增强疏水性和刚性,明显调控了纳米粒子与细胞膜的相互作用:它们作为膜内核的“锚”,促进纳米粒子插入和聚集,从而诱导双层膜缺陷或增强膜通透性;同时,这些修饰基团显著影响细胞摄取效率和途径,如金刚烷基树枝体可高效进入细胞并根据代数和官能团性质选择不同的内吞机制。这些发现为设计具有特定膜-粒子界面行为的表面工程纳米载体提供了指导:通过合理引入刚性疏水基团和调控其空间排列,可以实现对粒子吸附、穿膜和细胞内化路径的精确控制。
Nano Polymers
· 2025-06-10
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
Molecular Dynamics Clustering Analysis and Heatmap Visualization
clustering First you should prepare a clus_result.dat file containing the frame IDs in each cluster, like this (the first number in each cluster is the centroid): cluster 1: 3722 3946 0 1 4 10 23 33 36 41 45 46 47 51 54 59 61 62 63 66 67 69 76 80 84 85 ...... cluster 2: 489 1886 2 3 5 8 9 11 13 14 16 17 18 19 20 21 22 24 25 27 30 31 32 34 35 37 38 39 40 42 43 44 48 49.... .... This is created in VMD through # http://github.com/anjibabuIITK/CLUSTER-ANALYSIS-USING-VMD-TCL set number 9 ;# number of clusters, others are tagged 'other' set rcutoff 1.5 ;# RMSD cutoff. unit: angstrom set step_size 1 set nframes [molinfo top get numframes] set inf 0 set nf $nframes set totframes [expr $nf - 1 ] set selA [atomselect top "fragment 1 and resid 149 to 156 and backbone"] ;# select the ligand set lists [measure cluster $selA num $number cutoff $rcutoff first $inf last $totframes step $step_size distfunc rmsd weight mass] set file [open "clus_result.dat" w] for {set i 1} {$i <= [llength $lists]} {incr i} { set lst [lindex $lists [expr $i-1]] puts $file [format "cluster %d: %d" $i [llength $lst]] puts $file $lst puts $file "" } close $file # save the coordinates of centroid structures set c01 [lindex [lindex $lists 0] 0] set sel [atomselect top all frame $c01] set real_frame [expr $c01+1] $sel writegro c01_${real_frame}.gro puts [format "write the centroid of 1st cluster: frame %d" $real_frame] set c02 [lindex [lindex $lists 1] 0] set sel [atomselect top all frame $c02] set real_frame [expr $c02+1] $sel writegro c02_${real_frame}.gro puts [format "write the centroid of 2nd cluster: frame %d" $real_frame] Then you plot this with Python: import matplotlib.pyplot as plt import numpy as np import os def read_vmd_clus_result(file): data = [] with open(file, 'r') as f: while f.readline().strip().startswith('cluster'): line = f.readline().strip() data.append([int(fr) for fr in line.split()]) _ = f.readline() # empty return data def get_id_with_time(data): # data: output from read_vmd_clus_result() # return: a list of tuples, (frame_id, cluster_id) # cluster_id starts from 1 id_with_time = [] for i in range(len(data)): cl = data[i] id_with_time += [(fr, i + 1) for fr in cl] id_with_time.sort(key=lambda x: x[0]) return id_with_time font_le = {'family': 'Times New Roman', 'weight': 'demibold', 'size': 16} font_la = {'family': 'Times New Roman', 'fontname': 'Times New Roman', 'weight': 'demibold', 'size': 24} font_tc = {'family': 'Times New Roman', 'fontname': 'Times New Roman', 'weight': 'demibold', 'size': 20} font_ti = {'family': 'Times New Roman', 'fontname': 'Times New Roman', 'weight': 'demibold', 'size': 28} font_hu = {'family': 'Times New Roman', 'fontname': 'Times New Roman', 'weight': 'demibold', 'size': 36} # a framework of the plot def plot_common(xlabel, ylabel, thickness=2, title=None, size=(8,6), xpad=6, ypad=0, title_pad=0, ticks_size=16, tight=False, ax_color='black'): fig, ax = plt.subplots(figsize=size) # fix the xlabel overflow problem for axis in ['top', 'bottom', 'left', 'right']: ax.spines[axis].set_linewidth(thickness) ax.tick_params(width=thickness) ax.tick_params(axis='y', colors=ax_color, labelcolor=ax_color) # plt.xticks(font='Arial', size=16, weight='bold') # plt.yticks(font='Arial', size=16, weight='bold') plt.xticks(font='Times New Roman', size=ticks_size, weight='demibold') plt.yticks(font='Times New Roman', size=ticks_size, weight='demibold') plt.xlabel(xlabel, fontdict=font_la, labelpad=xpad) plt.ylabel(ylabel, fontdict=font_la, labelpad=ypad, color=ax_color) if title is not None: plt.title(title, fontdict=font_ti, pad=title_pad) if tight: plt.tight_layout() return fig, ax def plot_clustering_id_with_time(idxs, nsperframe, biggest=10, path=None, point=False, size=(8,6), ssize=1): # plot the frame_id with cluster_id. Marking the selected centroid frame (point) with a star. # nsperframe: convert frame_id to nanosecond # biggest: biggest cluster_id shown. Other frames are tagged 'other'. plot_common(xlabel='Time (ns)', ylabel='Cluster ID', size=size) biggest = min(biggest, int(max(idxs))) plt.yticks(np.arange(biggest+1), labels=np.arange(biggest).tolist()+['Other']) x = np.arange(len(idxs))*nsperframe y = [min(i, biggest) for i in idxs] plt.scatter(x, y, s=ssize) if point: plt.scatter(point*nsperframe, idxs[point], marker='*', s=50, color='r') print("The number of clusters: {0:d}".format(len(set(idxs)))) print("The biggest cluster lasted for {0:.1f} ns ({1:.1%})".format(np.sum(idxs==1)*nsperframe, np.sum(idxs==1)/len(idxs))) print("The second cluster lasted for {0:.1f} ns ({1:.1%})".format(np.sum(idxs==2)*nsperframe, np.sum(idxs==2)/len(idxs))) print("The unclustered frames (>=no. {2:d}) occupies {0:.1f} ns or {1:.1%}".format(np.sum(idxs>=biggest)*nsperframe, np.sum(idxs>=biggest)/len(idxs), biggest)) print("The centroid of the biggest cluster is at {0:.1f} ns.".format(point*nsperframe)) if path is not None: plt.savefig(os.path.join(path,'cluster.png')) plt.show() path = 'xxxxxxxxx/clus_result.dat' data = read_vmd_clus_result(path) id_with_time = get_id_with_time(data) plot_clustering_id_with_time(np.array(id_with_time)[:, 1], 0.5, path=os.path.dirname(path), point=data[0][0], ssize=1.25) FEP single mutation heatmap Read data: ddG = read_single() # not provided here. customize yourselves. it's just a dictionary of mutation: ddG. # you must follow the format of E1A, E10A, etc. ddG = { 'E1A': -0.783225000000002, 'V2A': 0.379990000000001, 'T3A': -0.7186525, 'E4A': 2.6721, ..... } Then import pandas as pd from matplotlib import pyplot as plt import numpy as np import copy import seaborn as sns # also requires the above plot_common def get_matrix(ddG): columns = sorted(list(set([key[:-1] for key in ddG.keys()])), key=lambda x: int(x[1:])) rows = ['A', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'X', 'Y', 'Z'] df = pd.DataFrame(index=rows, columns=columns) df.iloc[:,:] = np.NAN # process into a matrix for key, value in ddG.items(): col, row = key[:-1], key[-1] df.loc[row, col] = value return df def heatmap_single(df): # Convert all entries to numeric values, replacing non-numeric entries with NaN df = df.apply(pd.to_numeric, errors='coerce') # NOTE: you can adjust the color here. The effect may vary with your ddG data range. cmap = sns.diverging_palette(h_neg=0, h_pos=240, n=15, as_cmap=True) # Mask for NaN values mask = df.isnull() # heatmap. no text means not done. the text color is adaptive to the background color fig, ax = plot_common('Residue Position', 'Mutant', size=(8, 10), xpad=6, ypad=0, ticks_size=14, tight=False) sns.heatmap(df, cmap=cmap, center=0, annot=True, mask=mask, fmt='.2f', cbar_kws={'label': '\u0394\u0394G (kcal/mol)', 'format': '%.2f'}, linewidths=0.5, linecolor='grey', annot_kws={'fontfamily': 'Arial'}) # Update colorbar font size cbar = ax.collections[0].colorbar cbar.ax.tick_params(labelsize=14) cbar.set_label('\u0394\u0394G (kcal/mol)', fontsize=18, weight='demibold', family='Arial') plt.show() df = get_matrix(ddG) heatmap_single(copy.deepcopy(df))
Techniques
· 2025-06-05
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
PostgreSQL Beginner Tutorial: From Installation to Daily Management
PostgreSQL 新手教程:从安装到日常管理 本教程旨在为初学者提供一个清晰、易懂的 PostgreSQL 上手指南,内容涵盖安装、初始化、用户创建、数据库操作以及常见问题解决。 1. 📦 安装 PostgreSQL 在开始之前,建议先更新您的系统包列表。以下命令适用于基于 RHEL/CentOS 的系统(使用 yum): sudo yum update -y sudo yum install postgresql postgresql-server postgresql-contrib -y postgresql: 包含客户端程序。 postgresql-server: 包含 PostgreSQL 服务器本身。 postgresql-contrib: 包含一些额外的贡献模块和工具。 安装过程中,如果系统提示有关依赖项的更新,请确认并继续安装。完成后,您可能会看到类似以下的输出,表明相关软件包已成功安装或更新: Dependency Updated: postgresql-devel.x86_64 0:9.2.24-9.el7_9 postgresql-docs.x86_64 0:9.2.24-9.el7_9 postgresql-libs.x86_64 0:9.2.24-9.el7_9 postgresql-server.x86_64 0:9.2.24-9.el7_9 Complete! 注意:对于其他 Linux 发行版(如 Debian/Ubuntu),安装命令会有所不同(例如 sudo apt-get install postgresql postgresql-contrib)。 2. 🚀 初始化数据库集群 这是非常关键的一步!PostgreSQL 安装完成后,并不会自动创建一个可用的数据库环境。您需要首先初始化一个“数据库集群”。一个数据库集群是一组数据库的集合,由单个 PostgreSQL 服务器实例管理。 sudo postgresql-setup initdb 此命令会在默认位置(通常是 /var/lib/pgsql/data)创建数据库集群所需的数据目录结构。 它还会生成一些核心的配置文件,例如 postgresql.conf(主配置文件,控制服务器行为)和 pg_hba.conf(客户端认证配置文件,控制哪些用户可以从哪些主机连接以及如何认证)。 如果这个步骤被跳过或者数据目录未正确初始化,后续启动 PostgreSQL 服务将会失败。 3. ▶️ 启动 PostgreSQL 服务 初始化数据库集群后,就可以启动 PostgreSQL 服务了: sudo systemctl start postgresql 为了让 PostgreSQL 在系统重启后自动启动(推荐做法),可以设置开机自启: sudo systemctl enable postgresql 4. 🩺 验证服务状态 启动服务后,检查其运行状态以确保一切正常: systemctl status postgresql.service 如果服务正常运行,您应该在输出中看到 Active: active (running) 字样以及服务的启动时间等信息。 5. 🔑 连接到 PostgreSQL (理解登录机制) 当您首次安装并初始化 PostgreSQL 后,系统会自动创建一个名为 postgres 的操作系统用户和一个同名的 PostgreSQL 超级用户(数据库角色)。 默认的登录方式(Peer Authentication): 在很多默认配置中,PostgreSQL 使用“peer”认证方式进行本地连接。这意味着,如果您的操作系统用户名与您尝试连接的 PostgreSQL 用户名相同,并且您有权访问数据库套接字文件,那么 PostgreSQL 会信任操作系统已经验证了您的身份,从而允许您无需密码直接登录。 这就是为什么我们使用以下命令以 postgres 操作系统用户的身份来连接 postgres 数据库超级用户: sudo -u postgres psql sudo -u postgres: 这部分命令的含义是“以操作系统用户 postgres 的身份执行后续命令”。 psql: 这是 PostgreSQL 的命令行交互式客户端工具。 执行此命令后,您可能会看到类似以下的提示: could not change directory to "/root" psql (9.2.24) Type "help" for help. postgres=# could not change directory to "/root": 这个提示通常可以忽略。它是因为您通过 sudo 切换到 postgres 用户,但 postgres 用户可能没有权限访问您当前所在的目录(例如 /root)。这不影响 psql 的连接和操作。 postgres=#: 这个提示符表明您已成功以 postgres 超级用户身份连接到了 PostgreSQL。postgres= 左边的 postgres 通常表示您当前连接的默认数据库名(也叫 postgres),= 表示您是超级用户 (# 也是超级用户的标志,不同版本或配置可能略有不同)。 关于指定数据库登录: 当您运行 psql 时,如果您不指定要连接的数据库,它会尝试连接一个与您当前操作系统用户名同名的数据库。由于我们使用了 sudo -u postgres psql,它会尝试以数据库用户 postgres 连接名为 postgres 的数据库。这个 postgres 数据库是一个在初始化时自动创建的默认管理用数据库。 简单来说,用户登录数据库时,PostgreSQL 会根据 pg_hba.conf 文件中的规则来验证您的身份。 psql 命令本身可以带有参数来指定用户名、数据库名、主机等,例如: psql -U <数据库用户名> -d <数据库名> -h <主机地址> 如果您不写这些参数,psql 会使用一些默认值(通常是当前操作系统用户名作为数据库用户名和数据库名)。 6. ✨ postgres 超级用户的特权和功能 在 PostgreSQL 中,postgres 用户(或任何被赋予 SUPERUSER 属性的角色)拥有数据库集群内的最高权限。这些特权和功能包括但不限于: 不受限制的访问权限:可以访问集群中的所有数据库和所有对象(表、视图、函数等),无视常规的权限检查。 创建和管理数据库:可以创建新的数据库 (CREATEDB 属性的体现)。 创建和管理角色(用户和组):可以创建、修改、删除其他用户和用户组 (CREATEROLE 属性的体现)。 修改配置参数:可以更改 PostgreSQL 服务器的配置参数(postgresql.conf 中的设置)。 执行特权操作:例如加载C语言函数、执行某些诊断或维护命令、绕过某些安全限制等。 复制权限:可以启动和管理流复制 (REPLICATION 属性的体现)。 绕过行级安全策略 (Row-Level Security)。 正是因为超级用户权限过大,通常不建议在日常应用程序中使用超级用户账户。 最佳实践是为应用程序创建具有完成其任务所需最小权限的普通用户。 7. 👤 创建新用户 在 psql 提示符 (postgres=#) 下,您可以使用 postgres 超级用户的权限来创建新的数据库用户(在 PostgreSQL 中称为“角色”)。 CREATE USER wangpeng WITH CREATEDB PASSWORD 'your_strong_password'; CREATE USER wangpeng: 创建一个名为 wangpeng 的新用户。 WITH CREATEDB: 授予该用户创建新数据库的权限。这是一个常见的权限,但不等同于超级用户。其他可选权限包括 SUPERUSER, CREATEROLE, LOGIN (默认就有), REPLICATION 等。 PASSWORD 'your_strong_password': 为新用户设置一个密码。请务必将其替换为一个强密码。 如果不指定 PASSWORD,用户将无法通过密码认证登录(可能需要其他认证方式)。 8. 📋 查看用户列表 要查看当前数据库集群中存在的所有角色(用户和组)及其属性,可以在 psql 中使用 \du 元命令: \du 输出示例: List of roles Role name | Attributes | Member of -----------+------------------------------------------------+----------- postgres | Superuser, Create role, Create DB, Replication | {} wangpeng | Create DB | {} Role name: 用户名。 Attributes: 该用户拥有的权限属性。 Member of: 该用户所属的用户组(这里为空)。 9. 🚪 退出 psql 当您完成在 psql 中的操作后,可以使用 \q 元命令退出: \q 或者直接按 Ctrl+D。 10. 🔑 普通用户修改自己的密码 一个已经创建的、具有登录权限的普通用户(例如我们前面创建的 wangpeng),可以在连接到数据库后修改自己的密码。 首先,该用户需要能够登录。假设 pg_hba.conf 已配置为允许密码认证(例如 md5),用户 wangpeng 可以这样登录(可能需要先退出 postgres 用户的 psql 会话): psql -U wangpeng -d postgres -h localhost -W (这里连接到 postgres 数据库只是为了执行 ALTER USER 命令,也可以连接到该用户有权限的其他数据库) 然后,在 psql 提示符下(此时应该是 wangpeng=> 或类似),执行: ALTER USER wangpeng WITH PASSWORD 'new_strong_password'; 这样,用户 wangpeng 就成功修改了自己的密码。 注意:普通用户只能修改自己的密码,不能修改其他用户的密码。只有超级用户或具有 CREATEROLE 权限的用户才能修改其他用户的密码或属性。 PostgreSQL 新手教程:创建和管理数据库 1. 创建数据库 一旦您以具有 CREATEDB 权限的用户(例如 postgres 超级用户或我们之前创建的 wangpeng)登录到 psql,就可以创建新的数据库了: -- 假设以 wangpeng 用户登录后执行 CREATE DATABASE mydatabase; 2. 为数据库创建专属普通用户 (推荐) 通常,为每个应用程序或主要功能创建一个专用的数据库用户是一个好习惯,而不是直接使用像 wangpeng 这样可能具有创建数据库权限的用户。 -- 假设仍以 postgres 或 wangpeng (有 CREATEROLE 潜质,或 postgres 执行) 登录 CREATE USER myapp_user WITH PASSWORD 'another_strong_password'; 这里我们创建了一个名为 myapp_user 的用户,它默认只具有 LOGIN 权限。 3. 授予用户对特定数据库的权限 新创建的 myapp_user 默认情况下对我们刚创建的 mydatabase 没有任何操作权限(除了连接,如果认证方式允许)。我们需要明确授予它权限: -- 授予 myapp_user 对 mydatabase 数据库的所有基本权限 GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myapp_user; -- (可选) 如果希望 myapp_user 能够在该数据库中创建表等对象, -- 可能还需要更改该数据库中默认 schema (如 public) 的权限, -- 或者为该用户创建一个专属的 schema 并授予权限。 -- 例如,允许在新数据库的 public schema 中创建对象: -- \c mydatabase -- 首先连接到目标数据库 -- GRANT CREATE ON SCHEMA public TO myapp_user; -- GRANT USAGE ON SCHEMA public TO myapp_user; -- 允许使用 public schema GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myapp_user;: 这授予了用户在 mydatabase 上的连接权限,以及在该数据库内创建 schema 的权限(如果默认权限允许)。但不包括在该数据库内创建表、序列等对象的权限,也不包括对已有对象的访问权限。对具体对象(表、视图、序列、函数等)的权限需要单独授予 (例如 GRANT SELECT, INSERT ON my_table TO myapp_user;)。 4. 使用新用户登录特定数据库 现在,myapp_user 可以尝试登录 mydatabase 了: # 在操作系统的命令行中执行 psql -U myapp_user -d mydatabase -h localhost -W -U myapp_user: 指定要使用的数据库用户名。 -d mydatabase: 指定要连接的数据库名。 -h localhost: 指定数据库服务器的主机地址(如果是本地服务器,此参数有时可以省略,取决于配置)。 -W: 强制提示输入密码。 成功登录后,提示符会变为类似 mydatabase=> (如果 myapp_user 不是超级用户)。 完整流程示例(概览) 以下是一个简化的完整流程,展示了从首次安装后的一系列操作: # (在操作系统命令行中) # 1. 初始化数据库(仅限首次安装 PostgreSQL 后执行一次) sudo postgresql-setup initdb # 2. 启动 PostgreSQL 服务 sudo systemctl start postgresql sudo systemctl enable postgresql # 设置开机自启 # 3. 切换到 postgres 操作系统用户并进入 psql sudo -u postgres psql # --- 以下命令在 psql (postgres=#) 提示符下执行 --- # 4. 创建一个新角色(用户)并赋予创建数据库的权限 CREATE USER db_admin WITH CREATEDB PASSWORD 'admin_password123'; # 5. (可选) db_admin 用户退出并重新登录,或继续以 postgres 操作 -- \q -- 退出 postgres 的 psql 会话 -- (如果退出了,则重新以 db_admin 登录) -- psql -U db_admin -d postgres -W (输入 admin_password123) -- 6. 创建一个新的数据库 (假设由 db_admin 创建) CREATE DATABASE new_application_db; # 7. 为应用程序创建一个权限更受限的用户 CREATE USER app_user WITH PASSWORD 'app_password456'; # 8. 授予 app_user 连接到新数据库的权限 GRANT CONNECT ON DATABASE new_application_db TO app_user; # 9. 切换到新数据库以授予更细致的权限 \c new_application_db # 10. 授予 app_user 在 public schema 中创建对象和使用 schema 的权限 GRANT CREATE ON SCHEMA public TO app_user; GRANT USAGE ON SCHEMA public TO app_user; -- (如果需要,还可以授予对特定表的 SELECT, INSERT, UPDATE, DELETE 权限) -- 例如: GRANT SELECT, INSERT ON TABLE my_table TO app_user; # 11. 退出 psql \q # --- psql 操作结束 --- # (可选) 12. 修改认证方式以允许密码登录 (如果默认是 peer) # 编辑 /var/lib/pgsql/data/pg_hba.conf 文件 # sudo vi /var/lib/pgsql/data/pg_hba.conf # 将相关 'local' 或 'host' 行的认证方法从 'peer' 或 'ident' 改为 'md5' 或 'scram-sha-256' # 例如: # local all all md5 # host all all 127.0.0.1/32 md5 # host all all ::1/128 md5 # (如果修改了 pg_hba.conf) 13. 重启 PostgreSQL 服务使配置生效 # sudo systemctl restart postgresql # 14. 以新创建的 app_user 登录到其专属数据库 # psql -U app_user -d new_application_db -h localhost -W # (输入 app_password456) 常见问题及解决方案 问题:PostgreSQL 服务启动失败 现象:执行 sudo systemctl start postgresql 时提示失败,日志中可能出现 Failed at step EXEC_START pre spawning, Unit entered failed state. 主要原因 数据目录未初始化:/var/lib/pgsql/data (或您系统上的默认数据目录) 不存在或为空。这是最常见的原因。 服务配置错误或权限问题。 解决方法 确保已初始化数据库集群:sudo postgresql-setup initdb 再次尝试启动服务:sudo systemctl start postgresql 检查服务状态和日志获取更详细错误信息:systemctl status postgresql.service 和 journalctl -xeu postgresql.service 问题:无法连接到 PostgreSQL (psql: could not connect to server: No such file or directory) 现象:执行 psql 时提示上述错误。 主要原因 PostgreSQL 服务未启动。 psql 尝试连接的 Unix 域套接字文件不存在(通常因为服务未运行或配置错误)。 解决方法 确保服务已启动:sudo systemctl status postgresql,如果未运行则 sudo systemctl start postgresql。 检查数据目录是否已正确初始化(应包含 PG_VERSION, global, pg_hba.conf 等文件):ls /var/lib/pgsql/data。 问题:认证失败(例如 Peer authentication failed for user "username") 现象:尝试使用特定用户和密码登录时,即使密码正确,也提示认证失败。 主要原因:pg_hba.conf 文件中配置的认证方法不允许您尝试的连接类型或用户使用密码认证。例如,对于本地连接,默认可能配置为 peer 或 ident 认证,而不是 md5 或 scram-sha-256 (密码认证)。 解决方法 修改 pg_hba.conf 文件 sudo vi /var/lib/pgsql/data/pg_hba.conf 找到与您的连接类型( local 表示 Unix 域套接字连接, host 表示 TCP/IP 连接)、数据库、用户匹配的行,将其最后的认证方法修改为 md5 (较旧,但兼容性好) 或 scram-sha-256 (更安全,推荐用于新版本)。 例如,要允许所有本地用户通过密码连接所有数据库: # TYPE DATABASE USER ADDRESS METHOD local all all md5 host all all 127.0.0.1/32 md5 host all all ::1/128 md5 注意:修改 pg_hba.conf 时要小心,不正确的配置可能导致无法连接。 all all 是一种比较宽松的配置,生产环境应根据需要进行限制。 重启 PostgreSQL 服务使配置生效: sudo systemctl restart postgresql 问题:登录后提示 “FATAL: database “username” does not exist” 现象:使用某个用户(例如 newuser)通过 psql -U newuser 登录时,如果该用户对应的同名数据库 (newuser) 不存在,会报此错误。 原因:psql 在未指定 -d <数据库名> 时,默认尝试连接与用户名同名的数据库。 解决方法 在登录时明确指定一个存在的数据库:psql -U newuser -d postgres (连接到默认的 postgres 数据库) 或 psql -U newuser -d mydatabase (连接到您已创建的 mydatabase)。 或者,如果您确实需要一个与该用户同名的数据库,请先以有权限的用户,如 postgres 登录并创建它: -- 以 postgres 用户或其他有权限用户执行 CREATE DATABASE newuser OWNER newuser; -- 创建数据库并将所有权赋给 newuser 附录:常用 PostgreSQL (psql) 命令速查 操作 PostgreSQL (psql) 命令/ 命令 安装 PostgreSQL sudo yum install postgresql postgresql-server postgresql-contrib -y 初始化数据库集群 sudo postgresql-setup initdb 启动服务 sudo systemctl start postgresql 查看服务状态 systemctl status postgresql.service 以postgres用户进入psql sudo -u postgres psql 列出所有数据库 \l 或 \list 连接到特定数据库 \c database_name 或 \connect database_name 列出当前数据库中的表 \dt 查看表结构 \d table_name 列出所有用户(角色) \du 列出所有schema \dn 显示当前连接信息 \conninfo 执行上一条命令 \g 编辑上一条命令 \e 显示帮助信息 \? (psql元命令帮助) 或 help; (SQL命令帮助) 退出 psql \q SQL 命令示例 创建用户 CREATE USER username WITH PASSWORD 'password'; 修改用户密码 ALTER USER username WITH PASSWORD 'new_password'; 创建数据库 CREATE DATABASE dbname; 删除数据库 DROP DATABASE dbname; 授予权限 GRANT ALL PRIVILEGES ON DATABASE dbname TO username; 授予表权限 GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE tablename TO username;
Techniques
· 2025-06-04
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
Understanding Structure Factor S(q) and Its Applications in Polyelectrolyte Phase Separation Studies
理解结构因子 $S(q)$ 及其在聚电解质相分离研究中的应用 本文的主要参考文献为[^1,2],内容由AI生成,如有错误恳请指出。 一、结构因子 $S(q)$ 理论与计算详解 1.1 什么是结构因子 $S(q)$?为什么要计算它? 结构因子,通常表示为 $S(\mathbf{q})$,是一个关键的物理量,用于描述材料内部原子或分子在不同空间尺度上的密度不均匀性或有序性。如果材料是完全均匀的,那么各个点的密度都一样;但实际材料总会有涨落。结构因子就是用来量化这种不均匀程度的。 在实验上,结构因子可以通过X射线、电子衍射和中子衍射等得到[^3](注:我们主要讨论的是 $S(\mathbf{q})$ )。当一束波(X射线、中子、光)入射到材料上时,会因为材料内部的密度不均匀而发生散射。测量到的散射强度 $I(\mathbf{q})$ 与结构因子 $S(\mathbf{q})$ 直接相关(通常是成正比,$I(\mathbf{q}) \propto S(\mathbf{q})$)。 这里的 $\mathbf{q}$ 是散射波矢(scattering wavevector)。它联系了实验测量的散射角与我们关心的材料内部结构尺度。 $\mathbf{q}$ 的方向与入射波和散射波方向的差异有关,反映了我们探测的结构在空间中的取向。 其模长 $q = \mathbf{q} $ 的大小与我们探测的空间尺度 $l$ 成反比,通常可以近似认为 $l \approx 2\pi/q$。这意味着: 小的 $q$ 值对应大的空间尺度(例如,大的团簇、相畴尺寸)。 大的 $q$ 值对应小的空间尺度(例如,原子间距、键长)。 通过分析散射强度随 $q$ 的变化,我们就能反推出材料在不同长度尺度上的结构信息。例如,如果 $S(q)$ 在某个 $q_0$ 处出现峰值,则表明体系中存在一个以 $l_0 \approx 2\pi/q_0$ 为特征长度的显著结构。 对于各向同性的体系(如液体、无序的聚合物溶液或粉末样品),其内部结构在所有方向上统计平均是相同的。因此,结构因子仅依赖于波矢的模长 $q$,可以简化记作 $S(q)$。 1.1.1 结构因子一阶矩 $\langle q \rangle (t)$ 的物理意义 特征波数 $\langle q \rangle (t)$ (Characteristic Wavenumber) 是用来定量表征相分离过程中结构特征尺寸的一个关键物理量。 结构因子 $S(q,t)$ 的一阶矩: 论文中明确指出,$\langle q \rangle$ 是通过含时结构因子 $S(q,t)$ 的一阶矩来定义的。其计算公式为: \(\langle q \rangle (t) = \frac{\int_0^\infty q S(q,t) \, dq}{\int_0^\infty S(q,t) \, dq}\) 这个公式的意义是:对所有波数 $q$ 进行积分(或在离散数据中求和),每个 $q$ 的”权重”是其对应的结构因子强度 $S(q,t)$。分子是加权后的波数总和,分母是总的结构因子强度(起到归一化作用)。 倒易空间中的平均特征尺度: $\langle q \rangle$ 作为 $S(q,t)$ 的加权平均波数值,反映了在时刻 $t$ 体系中占主导地位的结构特征(如网络的平均线宽或孔洞大小,或者液滴的平均尺寸)所对应的平均波数值。 与特征长度成反比: 波矢 $q$ 与实空间中的特征长度尺度 $l$ 成反比关系,通常可以认为 $l =2\pi/\langle q \rangle$。因此,特征波数 $\langle q \rangle$ 的减小直接反映了实空间中相畴(网络或液滴)特征尺寸 $l$ 的增大。 描述畴粗化过程: 在相分离后期,小的相畴会逐渐合并变大,这个过程称为“畴粗化” (Domain Coarsening)。在这个过程中,特征长度 $l$ 会随时间 $t$ 增大,因此,特征波数 $\langle q \rangle$ 会随时间 $t$ 减小。通过追踪 $\langle q \rangle$ 随时间的变化,可以定量地研究畴粗化的动力学过程及其标度行为。 1.2 从密度涨落到结构因子:数学定义 1.2.1 瞬时粒子密度及其傅里叶分量 要从微观层面理解材料或流体的结构,我们首先需要一种描述体系中粒子空间分布的方法。考虑一个包含 $N$ 个粒子的体系,在某个特定时刻 $t$,其瞬时单粒子密度 $\rho(\mathbf{r},t)$ 可以被精确地表示为体系中所有粒子在各自位置 $\mathbf{r}_i(t)$ 上的贡献之和。数学上,这通常通过狄拉克 $\delta$ 函数或双曲正切函数映射来实现: \[\rho(\mathbf{r},t) = \sum_{i=1}^{N} \delta(\mathbf{r} - \mathbf{r}_i(t))\] 这里的 $\delta(\mathbf{r} - \mathbf{r}_i(t))$ 是一个三维狄拉克 $\delta$ 函数。它的核心特性是:当 $\mathbf{r} = \mathbf{r}_i(t)$ 时,其值为无穷大;而当 $\mathbf{r} \neq \mathbf{r}_i(t)$ 时,其值为零。然而,它在整个空间的积分为1,即 \(\int \delta(\mathbf{r} - \mathbf{r}_i(t)) d\mathbf{r} = 1\) 因此,这个表达式的物理意义是:在粒子 $i$ 所在的位置 $\mathbf{r}_i(t)$ 处密度是无穷集中的,而在其他任何没有粒子的地方密度为零。 直接在实空间处理 $\rho(\mathbf{r},t)$ 来分析跨越不同空间尺度的结构特征(例如,从单个粒子的大小到宏观聚集体的尺寸)往往非常复杂。为了更有效地揭示这些结构信息,我们通常将其转换到倒易空间(reciprocal space),也常被称为傅里叶空间或 q-空间。这一转换通过傅里叶变换完成,它将实空间中的密度函数 $\rho(\mathbf{r},t)$ 分解为一系列具有不同波矢 $\mathbf{q}$ 的平面波(也称为密度波)的线性叠加。每个波矢 $\mathbf{q}$ 对应着一个特定的空间尺度(波长 $\lambda = 2\pi/ \mathbf{q} $)和方向。 密度场 $\rho(\mathbf{r},t)$ 在特定波矢 $\mathbf{q}$ 上的傅里叶分量 $\rho_{\mathbf{q}}(t)$(也常被称为密度涨落的傅里叶模式)定义为: \[\rho_{\mathbf{q}}(t) = \int_{\text{box}} e^{-i\mathbf{q}\cdot\mathbf{r}} \rho(\mathbf{r},t) \, d\mathbf{r}\] 其中积分在体系的整个体积(”box”)上进行,$i$ 是虚数单位。将上面瞬时密度的表达式代入此定义,我们可以得到 $\rho_{\mathbf{q}}(t)$ 的一个更直接的计算形式: \[\rho_{\mathbf{q}}(t) = \int_{\text{box}} e^{-i\mathbf{q}\cdot\mathbf{r}} \left( \sum_{j=1}^{N} \delta(\mathbf{r} - \mathbf{r}_j(t)) \right) \, d\mathbf{r}\] 利用狄拉克 $\delta$ 函数的筛选性质(即 $\int f(\mathbf{r})\delta(\mathbf{r}-\mathbf{a})d\mathbf{r} = f(\mathbf{a})$),上式简化为: \[\rho_{\mathbf{q}}(t) = \sum_{j=1}^{N} e^{-i\mathbf{q}\cdot\mathbf{r}_j(t)}\] $\rho_{\mathbf{q}}(t)$ 是一个复数。它的模长 $ \rho_{\mathbf{q}}(t) $ 反映了体系在波矢 $\mathbf{q}$ 所对应的空间尺度和方向上密度起伏的幅度,而它的相位则给出了这些密度波的相对位置信息。 1.2.2 结构因子 $S(q)$ 的定义 有了密度的傅里叶分量,我们就可以定义结构因子,它是表征材料平均结构的关键物理量。 静态结构因子 $S(\mathbf{q})$ 通常被定义为密度傅里叶分量的均方涨落,并除以粒子总数 $N$ 进行归一化: \(S(\mathbf{q}) = \frac{1}{N} \langle \rho_{\mathbf{q}}(t) \rho_{-\mathbf{q}}(t) \rangle\) 其中 $\langle \dots \rangle$ 表示对系统进行系综平均(例如,在平衡态下对所有可能的微观状态进行平均)或在足够长的时间内进行时间平均。 我们注意到 $\rho_{-\mathbf{q}}(t)$ 与 $\rho_{\mathbf{q}}(t)$ 的复共轭 $\rho_{\mathbf{q}}^*(t)$ 之间存在一个简单的关系。其推导如下: \(\rho_{-\mathbf{q}}(t) = \sum_{j=1}^{N} e^{-i(-\mathbf{q})\cdot\mathbf{r}_j(t)} = \sum_{j=1}^{N} e^{i\mathbf{q}\cdot\mathbf{r}_j(t)}\) 另一方面,$\rho_{\mathbf{q}}(t)$ 的复共轭是: \(\rho_{\mathbf{q}}^*(t) = \left(\sum_{j=1}^{N} e^{-i\mathbf{q}\cdot\mathbf{r}_j(t)}\right)^* = \sum_{j=1}^{N} (e^{-i\mathbf{q}\cdot\mathbf{r}_j(t)})^* = \sum_{j=1}^{N} e^{i\mathbf{q}\cdot\mathbf{r}_j(t)}\) 因此,我们得到 $\rho_{-\mathbf{q}}(t) = \rho_{\mathbf{q}}^*(t)$。 利用这个关系,静态结构因子可以更直观地写成: \(S(\mathbf{q}) = \frac{1}{N} \langle |\rho_{\mathbf{q}}(t)|^2 \rangle\) 这个定义清晰地表明,$S(\mathbf{q})$ 衡量了在波矢 $\mathbf{q}$ (即特定尺度和方向)上密度涨落的平均强度。在实验中(如X射线或中子散射),$S(\mathbf{q})$ 与散射强度直接相关。$S(\mathbf{q})$ 的峰值位置揭示了体系中占主导地位的特征长度或周期性结构。 在研究动态过程(例如相分离动力学、玻璃化转变等)时,我们更关心的是结构如何随时间演化。这时,含时结构因子 $S(\mathbf{q}, t)$ 成为一个重要的分析工具。在 Yuan & Tanaka (2025) 的研究中 [^1],它被类似地定义(通常,如果体系是各向同性的,或者我们只关心不同尺度上的平均结构演化,结构因子可以只表示为波矢模长 $q = |\mathbf{q}|$ 的函数,此时 $S(q,t)$ 是对所有方向的 $\mathbf{q}$ 进行平均的结果): \(S(q,t) = \frac{\langle \rho_q(t) \rho_{-q}(t) \rangle}{N}\) 与上式是等价的。 $S(q,t)$ 描述了在特定空间尺度 $q$ 上的结构特征如何随时间 $t$ 演变。例如,在相分离过程中,特征峰的位置会向更小的 $q$ 值移动(对应更大的结构尺寸),峰高也会增加。 1.3 高分子体系中结构因子的计算细节 在分子动力学 (MD) 或粗粒化 (CG) 模拟中计算 $S(q,t)$ 时,通常涉及以下步骤: 粒子选择: 原子级模拟:通常选择重原子或分子的质心 (COM)。 粗粒化模拟:选择代表性的粗粒化珠子 (bead)。 密度场计算: 将选定粒子的坐标映射到三维网格上,得到离散的密度场 $\rho(\mathbf{r},t)$。 可使用高斯平滑或其他平滑函数(如论文[1]中提到的双曲正切函数)处理点粒子密度,获得更连续的密度场。 傅里叶变换: 使用快速傅里叶变换 (FFT) 算法计算离散密度场的傅里叶分量 $\rho_{\mathbf{q}}(t)$。 通常会去除 $\mathbf{q}=0$ 的分量(直流分量),因为它代表体系的平均密度。 计算 $S(q,t)$: 根据 $S(\mathbf{q},t) = \frac{1}{N} \rho_{\mathbf{q}}(t) ^2$ 计算。 对于各向同性体系,进行球面平均 (spherical averaging),得到仅依赖于 $q$ 的标量函数 $S(q,t)$。 时间平均或演化: 对于静态结构因子 $S(q)$,需对多个时间步或独立轨迹的 $S(q,t)$ 进行平均。 研究动力学过程时,观察 $S(q,t)$ 或其导出量随时间 $t$ 的演化。 二、聚电解质相分离研究中的结构因子与特征波数[^1] 2.1 引言概述:从传统认知到新发现的科学突破 在生物体系和材料科学中,相反电荷聚电解质(PEs)通过相分离形成的凝聚层(coacervates)扮演着至关重要的角色。这些凝聚层不仅是理解生物凝聚体(如无膜细胞器)形成机制的关键,也为开发响应性智能材料提供了新思路。 传统观点的局限性:长期以来,科学界普遍认为聚电解质凝聚层主要形成球形液滴,其生长动力学遵循经典的液-液相分离(LLPS)机制。在这种传统框架下,凝聚层被视为简单的液滴,通过蒸发-凝结或碰撞-合并等机制长大,其特征尺寸遵循 $l \propto t^{1/3}$ 的生长规律。 革命性的新发现:然而,Yuan & Tanaka (2025) 通过包含流体动力学相互作用(HI)和静电相互作用的流体粒子动力学(FPD)模拟,彻底颠覆了这一传统认知。他们的研究揭示了一个惊人的现象:即使在半稀溶液中(体积分数仅约2.3%),相反电荷的聚电解质也能自发形成贯通的网络结构,而非传统认为的孤立液滴。 独特的生长规律:更令人瞩目的是,该网络结构在粗化过程中遵循一个独特的生长规律 $l \propto t^{1/2}$(其中 $l$ 是特征长度,$t$ 是时间)。这种自相似的生长行为在中性聚合物的不良溶剂体系中通常不存在。其背后的物理机制源于良溶剂中的聚电解质在整体电中性的约束下,由于空间电荷的不均匀性,表现出更弱但更长程的有效吸引力,导致形成的聚电解质富集相密度较低(约40%),界面张力也显著降低。 研究的核心科学问题: 相形态的决定因素:在何种条件下会发生液滴状或网络状的相分离?初始状态、体积分数、链长等因素如何影响最终形态? 畴粗化的自相似性:网络状相分离的畴粗化过程是否存在自相似性?其背后的物理机制是什么? 静电相互作用的独特作用:静电荷及其对称性对网络状相分离有何影响?与中性聚合物体系有何本质区别? 研究的重要意义:这项研究不仅挑战了我们对聚电解质凝聚层形成机制的基本认识,还为理解生物体系中的网络状凝聚体(如中心体组装、蛋白质颗粒等)提供了新的理论基础。同时,通过调控电荷不对称性来稳定网络结构的发现,为设计新型多孔材料和生物响应材料开辟了新途径。 2.2 模拟参数说明:$\sigma$、$\tau_{BD}$ 及无量纲化处理 在Yuan & Tanaka (2025) 的粗粒化模拟研究中,为了使结果具有普适性并便于比较,采用了无量纲化的处理方法。 2.2.1 基本长度单位 $\sigma$ $\sigma$ (sigma) 代表粗粒化模型中单体(monomer)或离子(ion)的直径。论文中设定: \[\sigma = 0.72 \text{ nm}\] 这个尺度对应于典型的水合离子直径,被用作基本的长度单位。在模拟中,所有的长度量都以 $\sigma$ 为单位进行无量纲化处理。 2.2.2 布朗时间 $\tau_{BD}$ $\tau_{BD}$ 是布朗时间 (Brownian time),代表一个粒子由于热运动扩散其自身直径 $\sigma$ 距离所需的特征时间尺度。根据Stokes-Einstein关系,布朗时间定义为: \(\tau_{BD} = \frac{\pi \sigma^3 \eta}{8 k_B T}\) 其中: $\eta$ 是溶剂粘度 $k_B$ 是玻尔兹曼常数 $T$ 是绝对温度 对于室温下的水($\eta \approx 10^{-3}$ Pa·s),计算得到: \[\tau_{BD} \approx 0.035 \text{ ns}\] 这意味着模拟的时间尺度从1微秒到10微秒不等,这在原子级模拟中是极具挑战性的。 2.2.3 无量纲特征波数 $\langle q \rangle \sigma / 2\pi$ 在图二中,y轴显示的是无量纲化的特征波数 $\langle q \rangle \sigma / 2\pi$。这个量的物理意义可以通过以下推导理解: 由于特征长度 $l \approx 2\pi / \langle q \rangle$,我们有: \[\frac{\langle q \rangle \sigma}{2\pi} = \frac{\sigma}{2\pi / \langle q \rangle} = \frac{\sigma}{l}\] 因此,$\langle q \rangle \sigma / 2\pi$ 表示的是单体直径 $\sigma$ 与体系特征长度 $l$ 的比值。 当相畴较小时,$l$ 小,$\langle q \rangle \sigma / 2\pi$ 大 随着相畴粗化,$l$ 增大,$\langle q \rangle$ 减小,$\langle q \rangle \sigma / 2\pi$ 随时间减小 这种无量纲化处理使得不同参数条件下的结果可以在同一坐标系中进行比较,揭示普适的标度行为。 2.3 双对数坐标图分析与核心发现 2.3.1 为什么使用双对数坐标图? 论文中图二 (Fig. 2) 将 $\langle q \rangle \sigma / 2\pi$ 对 $t/\tau_{BD}$ 绘制在双对数坐标上。这种作图方式的主要目的是检验数据是否满足幂律关系 (Power Law),即形如 $y = A \cdot x^m$ 的关系。若满足幂律关系,在双对数图上数据点会落在一条直线上,其斜率 (slope) 即为幂指数 $m$。 2.3.2 图二的关键发现 图 2 网络形成相分离过程中的区域粗化和时间尺度表征。 a, c, e: 在流体粒子动力学 (FPD) 模拟中,不同比耶鲁姆长度(Bjerrum length)lB=1.1σ (a)、lB=2σ (c) 和 lB=3σ (e) 条件下,特征波数 ⟨q⟩(定义为结构因子 S(q,t) 的一阶矩)随时间的演化过程 。 b, d, f: 通过布朗动力学 (BD) 模拟得到的结果 。误差棒代表了根据四次独立模拟计算得到的标准误差 。在电荷对称条件 (Na=Nc=40) 下,区域粗化过程在 FPD 模拟中遵循 ⟨q⟩∼t−1/2 的规律,而在 BD 模拟中则遵循 ⟨q⟩∼t−1/3 的规律 。 g: 二元带电聚电解质(PE)溶液在链长为 (Nc,Na)=(40,40)、比耶鲁姆长度分别为 lB=2σ(体积分数 ϕ≈0.38)和 lB=3σ(体积分数 ϕ≈0.42)时,其致密相的自中间散射函数 Fs(q,t) 。其中,q 选为结构因子 S(q) 第一个峰值对应的波数 。S(q) 和 Fs(q,t) 的定义参见“方法”部分。结构弛豫时间 τα 定义为 Fs(q,t) 衰减到 1/e 时的时间 。我们发现 τα≈70∼100τBD 。 h, i: 在比耶鲁姆长度分别为 lB=2σ (h) 和 lB=3σ (i) 条件下,相同聚电解质溶液的整体变形和剪切变形特征时间尺度(应变率的倒数,Δt/∣ϵbulk∣ 和 Δt/∣ϵshear∣)随时间的变化 。估算的区域变形时间尺度 τdef 约为 5∼10τBD 。这些结果表明,以 τα 为特征的粒子重排过程慢于区域变形过程,这说明网络粗化过程是由机械弛豫控制的 。 图二展示了不同条件下特征波数的时间演化: 电荷对称条件 (Na = Nc = 40): FPD模拟(含HI):图 2a, c, e 中,数据点在双对数图上呈现良好的线性关系,斜率为 -1/2 这表示 $\langle q \rangle \propto t^{-1/2}$,即特征长度 $l \propto t^{1/2}$ 这个标度关系在不同的Bjerrum长度($l_B = 1.1\sigma$ 到 $3\sigma$)下保持一致 BD模拟(不含HI):图 2b, d, f 中,斜率为 -1/3 表示 $\langle q \rangle \propto t^{-1/3}$,即特征长度 $l \propto t^{1/3}$ 虽然也形成网络结构,但粗化动力学不同 流体动力学相互作用的关键作用: HI对实现 $t^{1/2}$ 幂律至关重要 这一发现强调了在模拟聚电解质相分离时包含流体动力学效应的必要性 自相似性的体现: 幂律关系的存在通常意味着系统在粗化过程中表现出自相似性 (self-similarity) 这种自相似性在图3b中得到进一步验证:不同时刻的标度结构因子塌缩到同一主曲线上 2.4 物理机制解析:粘弹性相分离 通过对特征波数 $\langle q \rangle (t)$ 演化的分析,结合对弛豫时间尺度的比较(图2g-i),Yuan & Tanaka揭示了网络形成的物理机制: 动力学不对称性: 结构弛豫时间 $\tau_\alpha \approx 70-100\tau_{BD}$ 畴变形时间 $\tau_{def} \approx 5-10\tau_{BD}$ 由于 $\tau_\alpha \gg \tau_{def}$,密集相中的粒子重排跟不上快速的畴变形 粘弹性相分离 (VPS): 这种动力学不对称性激活了粘弹性效应 导致形成瞬态网络结构,而非传统的液滴 网络粗化由其力学弛豫控制,该弛豫受限于溶剂在网络中的渗透流动(孔隙弹性弛豫) 与中性聚合物的区别: 聚电解质在良溶剂中的有效吸引力较弱 形成的富集相密度较低(约40%,而中性聚合物约50%) 这种较松散的堆积促进了局部键弛豫,维持了自相似生长 2.5 电荷不对称的影响 当引入电荷不对称(如 Nc = 50, Na = 30)时: 粗化动力学显著减慢: 偏离 $t^{-1/2}$ 幂律 后期出现动力学慢化趋势 物理机制: 网络表面积累净电荷(图3d, 4b, 4d) 静电排斥阻碍进一步粗化 与中性聚合物的VPS不同,电荷不对称可以稳定网络结构 应用前景: 通过调节电荷不对称性可控制网络稳定性 为设计稳定的多孔材料提供新途径 三、实操指南:从模拟数据计算 S(q) 和拟合幂律指数 3.1 Python 代码实现与详细解读 以下Python函数展示了如何使用MDAnalysis和SciPy/NumPy从模拟轨迹计算 $S(q)$ 和特征波数 $\langle q \rangle$: def calculate_structure_factor( u: mda.Universe, frame_index: int, selection: str, n_bins: int = 64, q_max_factor: float = 0.5, # 计算到 q_max = q_max_factor * Nyquist频率 density_method: str = 'histogram' ) -> tuple[np.ndarray | None, np.ndarray | None, float | None]: """ 计算特定帧和原子选择的静态结构因子 S(q) 和特征波数 <q> 参数: u (mda.Universe): MDAnalysis Universe对象,包含轨迹 frame_index (int): 要分析的帧索引 selection (str): MDAnalysis选择字符串(如 'resname HA and name A') n_bins (int): 密度网格每个维度的格子数,默认64 q_max_factor (float): 计算q的最大值相对于Nyquist频率的比例 density_method (str): 密度计算方法,目前仅支持'histogram' 返回: tuple: (q_bin_centers, S_q_radially_averaged, char_q) - q_bin_centers: q值的数组 - S_q_radially_averaged: 对应的S(q)值 - char_q: 特征波数<q> """ if density_method != 'histogram': raise NotImplementedError("Only 'histogram' density method is currently supported.") try: # 确保轨迹定位到正确的帧 # 这在重复调用时很关键 u.trajectory[frame_index] except IndexError: print(f"Error: Frame index {frame_index} is out of bounds.") return None, None, None # --- 1. 选择原子并获取盒子尺寸 --- ag = u.select_atoms(selection) N = len(ag) if N == 0: return None, None, None from scipy.fft import fftn, fftshift, fftfreq from scipy import stats # 用于径向平均的binned_statistic coords = ag.positions # 假设是正交盒子,从dimensions属性获取 box_dims = u.dimensions[:3] if box_dims is None or np.any(box_dims <= 0): print(f"Error: Invalid box dimensions {box_dims} at frame {frame_index}.") return None, None, None # --- 2. 计算密度场 (rho_r) --- # 使用3D直方图将粒子坐标转换为密度场 ranges = [[0, L] for L in box_dims] try: rho_r, edges = np.histogramdd( coords, bins=n_bins, range=ranges, density=False # 获取计数,而非概率密度 ) except ValueError as e: print(f"Error during histogramming for frame {frame_index}: {e}") return None, None, None delta_xyz = box_dims / n_bins # 每个格子的尺寸 # --- 3. 计算 S(q) 网格 --- # 对密度场进行FFT得到傅里叶分量 rho_q = fftn(rho_r) # S(q) = |rho_q|^2 / N S_q_grid = (np.abs(rho_q)**2) / N if N > 0 else np.zeros_like(rho_r, dtype=float) # --- 4. 计算 q 向量和模长 --- # fftfreq给出归一化的频率,需要乘以2π/d得到波矢 qx = 2 * np.pi * fftfreq(n_bins, d=delta_xyz[0]) qy = 2 * np.pi * fftfreq(n_bins, d=delta_xyz[1]) qz = 2 * np.pi * fftfreq(n_bins, d=delta_xyz[2]) # 创建3D网格 qxg, qyg, qzg = np.meshgrid(qx, qy, qz, indexing='ij') q_magnitude_grid = np.sqrt(qxg**2 + qyg**2 + qzg**2) # --- 5. 径向平均 --- # 将FFT结果移动到中心(低频在中心) S_q_grid_shifted = fftshift(S_q_grid) q_magnitude_grid_shifted = fftshift(q_magnitude_grid) # 展平为1D数组以便进行统计 q_values_flat = q_magnitude_grid_shifted.ravel() S_q_values_flat = S_q_grid_shifted.ravel() # 确定q的范围和分辨率 q_min_res = np.min([np.min(np.abs(qi[qi!=0])) for qi in [qx, qy, qz] if np.any(qi!=0)]) if np.any([np.any(qi!=0) for qi in [qx, qy, qz]]) else 0.01 q_nyquist = np.min(np.pi / delta_xyz) if np.all(delta_xyz > 0) else 1.0 q_max_calc = q_max_factor * q_nyquist delta_q = q_min_res / 2.0 if delta_q <= 0: delta_q = q_max_calc / (n_bins // 2) if q_max_calc > 0 else 0.01 # 创建q的bins用于径向平均 if q_max_calc <= delta_q: q_bins = np.array([0, q_max_calc + delta_q]) if q_max_calc > 0 else np.array([0, 0.1]) else: q_bins = np.arange(0, q_max_calc + delta_q, delta_q) # 对每个q区间内的S(q)值求和 S_q_sum, _, binnumber = stats.binned_statistic( q_values_flat, S_q_values_flat, statistic='sum', bins=q_bins ) # 计算每个区间内的点数 counts, _, _ = stats.binned_statistic( q_values_flat, q_values_flat, statistic='count', bins=q_bins ) # 径向平均 = 总和 / 计数 S_q_radially_averaged = np.divide(S_q_sum, counts, out=np.zeros_like(S_q_sum), where=counts != 0) q_bin_centers = (q_bins[:-1] + q_bins[1:]) / 2 # --- 6. 计算特征波数 <q> --- # <q> = ∫q·S(q)dq / ∫S(q)dq if len(q_bin_centers) > 1: # 排除q=0的点(通常对应均匀背景) q_relevant = q_bin_centers[1:] S_q_relevant = S_q_radially_averaged[1:] # 只考虑S(q)显著大于0的点 valid_indices = np.where(S_q_relevant > 1e-9)[0] if len(valid_indices) > 0: q_relevant = q_relevant[valid_indices] S_q_relevant = S_q_relevant[valid_indices] # 计算一阶矩 numerator = np.sum(q_relevant * S_q_relevant) denominator = np.sum(S_q_relevant) char_q = numerator / denominator if denominator > 0 else np.nan else: char_q = np.nan else: char_q = np.nan return q_bin_centers, S_q_radially_averaged, char_q def calculate_sq_trajectory( u: mda.Universe, selection: str = 'resname HA and name A', n_bins: int = 64, start_frame: int = 0, stop_frame: int | None = None, step: int = 1, show_progress: bool = True, **kwargs # 传递额外参数给calculate_structure_factor ) -> np.ndarray: """ 计算整个轨迹的特征波数 <q> 随时间的演化 通过对每个指定帧调用 calculate_structure_factor 并收集特征波数 参数: u (mda.Universe): MDAnalysis Universe对象 selection (str): 原子选择字符串 n_bins (int): 密度网格的bins数 start_frame (int): 起始帧索引 stop_frame (int | None): 结束帧索引(不包含) step (int): 帧间隔 show_progress (bool): 是否显示进度条 **kwargs: 传递给calculate_structure_factor的额外参数 返回: np.ndarray: 包含每帧特征波数<q>的数组 """ all_char_q = [] n_frames_total = len(u.trajectory) if stop_frame is None: stop_frame = n_frames_total else: stop_frame = min(stop_frame, n_frames_total) # 确保不超过轨迹长度 frame_indices = range(start_frame, stop_frame, step) # 设置进度条 iterator = frame_indices if show_progress: try: # 尝试自动检测是否在notebook环境 if 'ipykernel' in str(type(getattr(__builtins__, '__dict__', {}).get('get_ipython'))): from tqdm.notebook import tqdm else: from tqdm import tqdm iterator = tqdm(frame_indices, desc="Calculating <q> per frame") except ImportError: print("tqdm library not found. Progress bar disabled.") # 遍历指定的帧 for frame_idx in iterator: q_bins, S_q, char_q = calculate_structure_factor( u=u, frame_index=frame_idx, selection=selection, n_bins=n_bins, **kwargs # 传递额外参数如q_max_factor ) all_char_q.append(char_q if char_q is not None else np.nan) return np.array(all_char_q) 3.2 代码解读要点 密度场构建: 使用3D直方图将离散的粒子坐标转换为连续的密度场 格子大小影响q空间的分辨率和最大可探测的q值 FFT计算: 使用快速傅里叶变换计算密度场的傅里叶分量 $S(q) = \rho_q ^2 / N$ 给出了每个q模式的强度 径向平均: 对于各向同性体系,将3D的S(q)数据按q的模长进行平均 使用binned_statistic高效实现 特征波数计算: 排除q=0的贡献(对应均匀背景) 只考虑S(q)显著的区域,避免噪声影响 3.3 幂律拟合实操指南 当您追踪 $\langle q \rangle (t)$ 并希望通过线性拟合其双对数图来确定幂律指数 $m$ (即 $\langle q \rangle \propto t^m$) 时,以下是重要的实操考虑: 观察双对数图: import numpy as np import matplotlib.pyplot as plt # 假设已经计算得到时间和特征波数数据 time_values = np.array([...]) # 时间数据 char_q_values = np.array([...]) # 特征波数数据 # 绘制双对数图 plt.figure(figsize=(8, 6)) plt.loglog(time_values, char_q_values, 'o-', label='Data') plt.xlabel('Time t') plt.ylabel('Characteristic wavenumber <q>') plt.grid(True, which="both", ls="-", alpha=0.2) plt.legend() plt.show() 选择合适的拟合区域: 并非所有数据点都适用于拟合。相分离过程复杂,通常仅在特定阶段表现清晰幂律 后期粗化阶段:这是通常关注的阶段。当相畴形成并开始粗化时,体系常进入自相似生长 避免早期和极后期:早期(成核/旋节线分解初期)或极后期(有限尺寸效应/平衡)可能偏离幂律 目视检查:找出数据点在双对数图上近似排列成直线的时间区间 拟合方法: # 选择拟合区间(例如,帧100到帧400) fit_start_frame = 100 fit_end_frame = 400 # 提取拟合区间的数据 fit_mask = (frame_indices >= fit_start_frame) & (frame_indices <= fit_end_frame) t_fit = time_values[fit_mask] q_fit = char_q_values[fit_mask] # 取对数 log_t = np.log10(t_fit) log_q = np.log10(q_fit) # 线性拟合 coeffs = np.polyfit(log_t, log_q, 1) slope = coeffs[0] # 这就是幂律指数m intercept = coeffs[1] # 计算拟合线 fit_line = 10**(slope * log_t + intercept) print(f"幂律指数 m = {slope:.3f}") print(f"特征长度生长指数 ν = {-slope:.3f}") 结果解释与物理意义: 拟合得到的斜率 $m$ 就是幂律关系 $\langle q \rangle \propto t^m$ 中的指数 特征长度的生长指数 $\nu = -m$,因为 $l \propto 1/\langle q \rangle$ 根据Yuan & Tanaka (2025): 若 $m \approx -0.5$ (即 $\nu=0.5$):指示由流体动力学和孔隙弹性主导的粘弹性相分离 若 $m \approx -0.33$ (即 $\nu=1/3$):对应经典扩散控制的粗化或无HI的情况 通过比较拟合斜率与理论/文献值,可推断体系主导的粗化机制 注意事项: 确保拟合区间有足够的数据点(通常至少跨越一个数量级的时间) 检查拟合的R²值,确保线性关系良好 考虑多次运行的统计误差 对于有噪声的数据,可以先进行适当的平滑处理 参考文献 [1] Yuan J.; Tanaka H. Network-forming phase separation of oppositely charged polyelectrolytes forming coacervates in a solvent. Nat. Commun. 2025, 16, 1517. (DOI: https://doi.org/10.1038/s41467-025-56583-6) [2] Hansen, J.-P.; McDonald, I. R. Theory of Simple Liquids, 4th ed.; Academic Press, 2013. [3] https://zh.wikipedia.org/wiki/%E7%BB%93%E6%9E%84%E5%9B%A0%E5%AD%90 or https://en.wikipedia.org/wiki/Structure_factor 本文编辑:摸鱼的帆仔 校对:AIB001
Field Knowledge
· 2025-06-03
GROMACS Defaults in Topology Files: Understanding comb-rule and nonbond_params
GROMACS 中 comb-rule 与 [nonbond_params] 参数解析 本文档旨在详细解释 GROMACS 拓扑文件中 [defaults] 指令下的 comb-rule(组合规则)以及 [atomtypes] 和 [nonbond_params] 部分中非键参数(特别是 Lennard-Jones 参数)的含义和解释方式。 一、[defaults] 指令详解 在 GROMACS 的拓扑文件(通常是 .top 文件或力场主 .itp 文件)中,[defaults] 指令用于设定非键相互作用的全局默认行为。 示例 [ defaults ] ; nbfunc comb-rule gen-pairs fudgeLJ fudgeQQ 1 2 no 1.0 1.0 参数解释 nbfunc (Non-bonded function type):定义非键势函数类型。 1:Lennard-Jones 势。这是绝大多数经典力场(如 AMBER, CHARMM, OPLS, Martini)使用的形式。 2:Buckingham 势。注意:根据 GROMACS 文档和社区讨论,Buckingham 势 (nbfunc = 2) 自 GROMACS 2019 版本后可能已被弃用或不再完全支持。 参考链接:https://gromacs.bioexcel.eu/t/how-use-desired-mixing-rule-in-gromacs/10409/3 comb-rule (Combination rule):定义当 [nonbond_params] 部分没有显式给出不同原子类型 i 和 j 之间的非键参数时,如何从各自的原子类型参数([atomtypes] 部分的参数)计算出交叉项参数。 gen-pairs (Generate 1-4 pairs):决定是否自动生成1-4相互作用对(即通过3个键连接的原子对)。 yes:根据成键信息自动生成,并通常与 fudgeLJ 和 fudgeQQ 联用。 no:不自动生成,1-4相互作用需要在 [pairs] 或 [pairtypes] 部分显式定义,或者由力场设计本身通过其他方式处理(如Martini)。 fudgeLJ:如果 gen-pairs = yes,此参数定义了1-4相互作用中 Lennard-Jones 部分的缩放因子。 fudgeQQ:如果 gen-pairs = yes,此参数定义了1-4相互作用中静电部分的缩放因子。 GROMACS comb-rule:对 [atomtypes] 参数的解释及交叉项的计算 comb-rule 的设置直接影响 GROMACS 如何解释 [atomtypes] 部分中的 V 和 W 列参数,以及在 [nonbond_params] 中没有显式定义一对原子类型间的非键参数时,如何计算这些交叉项参数。 https://manual.gromacs.org/current/reference-manual/topologies/parameter-files.html#non-bonded-parameters 1. [atomtypes] 中 V 和 W 参数的解释 根据 GROMACS 手册: 如果 comb-rule = 1: $V_{ii}$ 代表 $C_{6,ii} = 4 \epsilon_{ii} \sigma_{ii}^6$ (单位:kJ mol⁻¹ nm⁶) $W_{ii}$ 代表 $C_{12,ii} = 4 \epsilon_{ii} \sigma_{ii}^{12}$ (单位:kJ mol⁻¹ nm¹²) 此时 Lennard-Jones 势能通常写作: \[V_{LJ}(r) = \frac{C_{12,ij}}{r^{12}} - \frac{C_{6,ij}}{r^6}\] 如果 comb-rule = 2 或 3: $V_{ii}$ 直接代表 $\sigma_{ii}$ (单位:nm) $W_{ii}$ 直接代表 $\epsilon_{ii}$ (单位:kJ mol⁻¹) 此时 Lennard-Jones 势能通常写作: \[V_{LJ}(r) = 4 \epsilon_{ij} \left[\left(\frac{\sigma_{ij}}{r}\right)^{12} - \left(\frac{\sigma_{ij}}{r}\right)^6\right]\] 2. 交叉项参数的计算 (如果未在 [nonbond_params] 中显式定义) 对于 comb-rule = 1 和 3: GROMACS 使用几何平均来组合 $C_6$ 和 $C_{12}$ 参数: \[C_{6,ij} = \sqrt{C_{6,ii} \times C_{6,jj}}\] \[C_{12,ij} = \sqrt{C_{12,ii} \times C_{12,jj}}\] 注意:如果 comb-rule = 3,[atomtypes] 中的 $V_{ii}$ 和 $W_{ii}$ 被解释为 $\sigma_{ii}$ 和 $\epsilon_{ii}$。GROMACS 内部会先将它们转换为 $C_{6,ii}$ 和 $C_{12,ii}$,然后再应用上述几何平均规则。 对于 comb-rule = 2 (Lorentz-Berthelot 规则): GROMACS 使用算术平均组合 $\sigma$ 参数,使用几何平均组合 $\epsilon$ 参数: \[\sigma_{ij} = \frac{\sigma_{ii} + \sigma_{jj}}{2}\] \[\epsilon_{ij} = \sqrt{\epsilon_{ii} \times \epsilon_{jj}}\] 关于常见力场的组合规则说明 注意:常见力场(CHARMM、AMBER、OPLS等)与 GROMACS 中 comb-rule 参数的对应关系在文献中并不十分明晰,以下信息基于有限的资料整理推测: 力场 σ 组合规则 ε 组合规则 可能的 GROMACS 设置 备注 CHARMM 算术平均 几何平均 comb-rule = 2 如果 [atomtypes] 中提供的是 $\sigma_{ii}$ 和 $\epsilon_{ii}$ AMBER 算术平均 几何平均 comb-rule = 2 明确使用 Lorentz-Berthelot 规则 OPLS 几何平均 几何平均 comb-rule = 3 通常在 [nonbond_params] 中显式定义所有交叉项 算术平均是Lorentz提出的,几何平均是Berthelot提出的 也就是说,comb-rule = 1当然是万能的,但全原子一般是给出 $\sigma$ 和 $\epsilon$,其中comb-rule = 2 即Lorentz-Berthelot 规则,comb-rule = 3 即均为几何平均。 CHARMM:使用 Lorentz-Berthelot 规则。对 $\sigma$ (或NAMD里面,等效的 $R_{min}$) 使用算术平均,对 $\epsilon$ 使用几何平均。 \(R_{min,ij} = \frac{R_{min,ii} + R_{min,jj}}{2} \text{(等效于 $\sigma$ 的算术平均)}\) \[\epsilon_{ij} = \sqrt{\epsilon_{ii} \times \epsilon_{jj}}\] 参考:NAMD Mailing List - https://www.ks.uiuc.edu/Research/namd/mailing_list/namd-l.2009-2010/3885.html AMBER:明确使用 Lorentz-Berthelot 规则。根据 AMBER 手册节选:”For Amber force fields, cross terms involving different atom types i and j are evaluated according to the Lorentz/Berthelot mixing rules…“,可以自行查找 OPLS:OPLS 力场通常对 Lennard-Jones 参数 $\sigma$ 和 $\epsilon$ 都使用几何平均。 OPLS 力场的 GROMACS 实现通常没有 [nonbond_params] 。 NAMD参考文末 二、[atomtypes] 和 [nonbond_params] 中的参数解释 GROMACS 通过 [atomtypes] 和 [nonbond_params] (或 [pairtypes]) 这两个主要部分来定义非键相互作用参数。 参考:GROMACS Manual - Non-bonded parameters - https://manual.gromacs.org/current/reference-manual/topologies/parameter-files.html#non-bonded-parameters [atomtypes] 部分 此部分定义了每种原子类型自身 (ii) 的基本非键参数。这些参数的解释(是 $\sigma$, $\epsilon$ 还是 $C_6$, $C_{12}$)取决于 [defaults] 中设置的 comb-rule。 示例 (OPLS-AA 风格,通常 comb-rule = 1,意味着 V, W 是 $C_6$, $C_{12}$) [ atomtypes ] ;name at.num mass charge ptype V(c6) W(c12) ; V 和 W 的含义取决于 comb-rule O 8 15.99940 0.000 A 0.22617E-02 0.74158E-06 ; V(c6) = C6_ii, W(c12) = C12_ii OM 8 15.99940 0.000 A 0.22617E-02 0.74158E-06 ... [nonbond_params] 部分 此部分用于显式定义特定原子类型对 i 和 j 之间的非键相互作用参数。这里定义的参数将覆盖任何通过组合规则计算得到的参数。 示例1 ( comb-rule = 1 配合,参数为直接的 $C_{6,ij}$ 和 $C_{12,ij}$) [ nonbond_params ] ; i j func V(c6) W(c12) ; 列标题指明了是 C6 和 C12 O O 1 0.22617E-02 0.74158E-06 ; O-O 相互作用的 C6_ij 和 C12_ij O OA 1 0.22617E-02 0.13807E-05 ; O-OA 相互作用的 C6_ij 和 C12_ij ... V(c6):该原子类型对的 Lennard-Jones $C_{6,ij}$ 参数 (单位:kJ mol⁻¹ nm⁶)。 W(c12):该原子类型对的 Lennard-Jones $C_{12,ij}$ 参数 (单位:kJ mol⁻¹ nm¹²)。 示例2 (Martini 风格,参数为直接的 $\sigma_{ij}$ 和 $\epsilon_{ij}$) [ nonbond_params ] ; i j func sigma epsilon ; 列标题通常会指明是 sigma 和 epsilon P6 P6 1 0.470 4.990 ; P6-P6 相互作用的 sigma_ij 和 epsilon_ij P6 P5 1 0.470 4.730 ; P6-P5 相互作用的 sigma_ij 和 epsilon_ij ... i, j:相互作用的原子类型。 func:函数类型,1 表示 Lennard-Jones 12-6 势。 sigma:该原子类型对的 Lennard-Jones $\sigma_{ij}$ 参数 (单位:nm)。 epsilon:该原子类型对的 Lennard-Jones $\epsilon_{ij}$ 参数 (单位:kJ/mol)。 关键点:[nonbond_params] 中参数的含义(是 $\sigma$/$\epsilon$ 还是 $C_6$/$C_{12}$)直接由该力场文件在该部分的列定义(通常通过注释中的列标题)决定。func=1 只是表示它是一个12-6型的Lennard-Jones势,但参数的表达形式可以有两种。 三、Martini 力场的特殊性 对于 Martini 力场 (例如 martini_v3.0.0.itp): 参考文献:PCT Souza, et al., Nat. Methods, 2021. DOI:10.1038/s41592-021-01098-3 (看SI的表) [defaults] 指令 Martini 3 的主 .itp 文件通常包含: [ defaults ] ; nbfunc comb-rule 1 2 ; (通常 gen-pairs no, fudgeLJ/QQ 不适用或设为1.0) 这里的 comb-rule = 2 设定了默认的参数类型。 [atomtypes] 部分(真实示例) 在 Martini 3 中,[atomtypes] 部分的 $\sigma$ 和 $\epsilon$ 值都设为 0.0,因为 Martini 的核心在于珠子类型之间的相互作用矩阵: [ atomtypes ] ; name mass charge ptype sigma epsilon P6 72.0 0.000 A 0.0 0.0 P5 72.0 0.000 A 0.0 0.0 ... 这里的 sigma 和 epsilon 都是 0.0,表明它们仅是占位符。 [nonbond_params] 部分(真实示例) 这是 Martini 力场定义非键相互作用的关键。Martini 不依赖 GROMACS 的组合规则来生成不同珠子类型之间的相互作用参数。相反,它在 [nonbond_params] 部分显式地定义每一对珠子类型之间的 $\sigma_{ij}$ 和 $\epsilon_{ij}$: [ nonbond_params ] P6 P6 1 4.700000e-01 4.990000e+00 P6 P5 1 4.700000e-01 4.730000e+00 ... 注意这里: 没有列标题注释,但根据 Martini 文档,这些参数是 $\sigma_{ij}$ (第4列) 和 $\epsilon_{ij}$ (第5列) 所有珠子对的相互作用都被显式定义 因此,当 grompp 处理 Martini 拓扑时,它会优先使用 [nonbond_params] 中为特定珠子对定义的 $\sigma_{ij}$ 和 $\epsilon_{ij}$。只有当某一对珠子类型的相互作用没有在 [nonbond_params] 中显式定义时,才会退回到使用 [defaults] 中指定的 comb-rule 和 [atomtypes] 中的参数来尝试计算(但由于 [atomtypes] 中的值都是 0.0,实际上不会产生有意义的相互作用)。 详见上一篇: 总结 对于标准的 Martini 3 力场文件: [atomtypes] 中的 $\sigma$/$\epsilon$ 都是 0.0:它们是占位符,不用于计算。 核心的异类珠子对相互作用参数来自 [nonbond_params]:这是Martini设计的核心。 [nonbond_params] 中提供的是针对特定珠子对 ij 的 $\sigma_{ij}$ 和 $\epsilon_{ij}$:这些不是 $C_{6,ij}$ 和 $C_{12,ij}$。 [defaults] 中的 comb-rule = 2 在 Martini 中更多的是一个形式上的设定:因为所有相关的珠子对相互作用参数都是在 [nonbond_params] 中显式提供的。 四、总结:如何判断参数类型 判断 .itp 文件中非键参数是 ($\sigma$, $\epsilon$) 还是 ($C_6$, $C_{12}$) 的关键步骤: 1. 查看 [defaults] 指令中的 comb-rule 如果 comb-rule = 1,那么 [atomtypes] 中的 V 和 W 列倾向于是 $C_{6,ii}$ 和 $C_{12,ii}$。 如果 comb-rule = 2 或 3,那么 [atomtypes] 中的 V 和 W 列倾向于是 $\sigma_{ii}$ 和 $\epsilon_{ii}$。 2. 仔细阅读 [atomtypes] 和 [nonbond_params] 部分的列标题注释 如果列标题明确写着 sigma 和 epsilon,那么这些值就是 $\sigma$ 和 $\epsilon$。 如果列标题明确写着 V(c6) 和 W(c12),那么这些值就是 $C_6$ 和 $C_{12}$。 假定开发者不至于搞错,这是最直接的判断依据。 3. 查阅相应力场的原始文献和手册 这是最权威的判断依据。力场开发者会明确说明其参数的定义和使用方式。 实用建议 对于您的脚本而言,如果它需要同时处理可能来自不同力场的 .itp 文件,建议: 通过一个参数来指定当前处理的ITP文件中的非键参数是哪种类型 或者通过智能解析列标题来判断 对于 Martini 这样的特殊情况([atomtypes] 中都是 0.0),直接使用 [nonbond_params] 中的参数 其他参考资料 GROMACS Manual - MDP Options for LJ-PME combination rule: https://manual.gromacs.org/current/user-guide/mdp-options.html#mdp-lj-pme-comb-rule NAMD 的相关设置 NAMD Mailing List:https://www.ks.uiuc.edu/Research/namd/mailing_list/namd-l.2009-2010/3885.html “Yes, as is standard for the CHARMM force field NAMD uses arithmetic mean for sigma, geometric mean for epsilon by default. You can change this by adding ‘vdwGeometricSigma yes’ in the config file to support, e.g., OPLS.” NAMD User Guide:https://www.ks.uiuc.edu/Research/namd/3.0.1/ug/node25.html#7012 “vdwGeometricSigma:Use geometric mean, as required by OPLS, rather than traditional arithmetic mean when combining Lennard-Jones sigma parameters for different atom types.”
Molecular Dynamics
· 2025-05-31
Pytest Deep Dive Tutorial: Beginner-Friendly Guide to Python Testing
Pytest 深度入门教程 (初学者友好版) pytest 是一个功能丰富、易于使用且非常流行的 Python 测试框架。与 Python 内置的 unittest 模块相比,pytest 的语法更简洁、更灵活,并且拥有庞大的插件生态系统,能够极大地提升你的测试效率和体验。 想象一下,你是一位大厨,需要确保每一道菜品都符合标准。测试代码就像是品尝和检验菜品的过程,而 pytest 就是一套能帮你高效完成这个过程的顶级厨具和标准化流程。 为什么选择 Pytest? 简单易学,上手快: 你不需要学习复杂的类结构,直接使用标准的 Python 函数来编写测试。 断言(检查条件是否为真)直接使用 Python 内置的 assert 语句,非常直观。 强大的断言功能: pytest 对 assert 语句进行了智能处理。当断言失败时,它会提供非常详细的上下文信息,告诉你哪里出了错,以及相关变量的当前值,极大地帮助调试。 自动发现测试: 你只需要遵循简单的命名约定,pytest 就能自动找到你的测试文件和测试函数,无需手动注册。 丰富的插件生态系统: 拥有大量开箱即用的插件,例如: pytest-cov: 用于生成测试覆盖率报告。 pytest-xdist: 用于并行执行测试,加快测试速度。 pytest-django, pytest-flask: 用于集成主流Web框架。 还有更多用于报告、Mocking 等功能的插件。 优雅的 Fixtures (测试固件/夹具): 这是 pytest 的核心特性之一。Fixtures 提供了一种模块化、可重用的方式来管理测试的准备工作(setup)和清理工作(teardown)。你可以把它们看作是测试函数运行前需要准备好的“原材料”或“环境”。 灵活的参数化测试 (Parametrization): 可以非常方便地为同一个测试函数提供多组不同的输入数据和预期输出,避免编写大量重复的测试逻辑。 清晰的测试报告: 默认提供简洁明了的测试报告,通过插件还可以生成更详细的HTML报告。 安装 Pytest 安装 pytest 非常简单,只需要使用 pip: pip install pytest 安装完成后,你就可以在你的项目中使用 pytest 了。 你的第一个 Pytest 测试 pytest 通过遵循特定的命名约定来自动发现测试: 测试文件: 通常命名为 test_*.py (例如 test_calculator.py) 或 *_test.py (例如 calculator_test.py)。 测试函数: 在测试文件中,以 test_ 开头的函数会被识别为测试函数 (例如 def test_addition():)。 测试类 (可选): 如果你喜欢将相关的测试组织在类中,类名应以 Test 开头 (例如 class TestCalculator:),类中的测试方法同样以 test_ 开头。pytest 不需要测试类继承任何特定的基类。 让我们创建一个名为 test_example.py 的文件,并编写一个简单的测试: # test_example.py # 这是我们要测试的函数 def inc(x): return x + 1 # 这是我们的第一个测试函数 def test_increment_positive_number(): # "Arrange" (准备) - 定义输入和预期输出 input_value = 3 expected_value = 4 # "Act" (执行) - 调用被测试的函数 result = inc(input_value) # "Assert" (断言) - 检查结果是否符合预期 assert result == expected_value def test_increment_zero(): assert inc(0) == 1 def test_increment_negative_number(): assert inc(-5) == -4 代码解释: 我们定义了一个简单的函数 inc(x),它将输入值加1。 test_increment_positive_number 是一个测试函数。它遵循了“Arrange-Act-Assert”(AAA)模式: Arrange: 设置测试所需的初始条件和输入。 Act: 执行被测试的代码。 Assert: 验证结果是否与预期相符。 我们直接使用 assert 关键字来声明我们的期望。如果 inc(3) 的结果不等于 4,assert 语句会抛出 AssertionError,pytest 会捕获这个错误并将测试标记为失败。 运行你的测试 打开你的终端或命令行工具,导航到包含 test_example.py 文件的目录,然后简单地运行以下命令: pytest 发生了什么? pytest 会从当前目录开始,递归地查找所有符合命名约定的测试文件 (test_*.py 或 *_test.py)。 在找到的测试文件中,它会查找所有符合命名约定的测试函数 (test_*) 或测试类 (Test*) 中的测试方法。 然后,它会逐个执行这些测试。 最后,它会汇总结果并显示出来。 预期输出 (默认模式): ============================= test session starts ============================== platform ... -- Python ... plugins: ... collected 3 items test_example.py ... [100%] ============================== 3 passed in X.XXs =============================== collected 3 items: pytest 找到了3个测试函数。 test_example.py ...: 每个点 (.) 代表一个通过的测试。如果所有测试都通过,你会看到一串点。 3 passed in X.XXs: 总结信息,告诉你有多少测试通过以及花费的时间。 如果某个测试失败了,比如我们故意修改 test_increment_zero: # test_example.py # ... (其他代码不变) ... def test_increment_zero(): assert inc(0) == 2 # 故意写错,应该是 1 再次运行 pytest,输出会变成: ============================= test session starts ============================== platform ... -- Python ... plugins: ... collected 3 items test_example.py .F. [100%] =================================== FAILURES =================================== ___________________________ test_increment_zero ____________________________ def test_increment_zero(): > assert inc(0) == 2 # 故意写错,应该是 1 E assert 1 == 2 E + where 1 = inc(0) test_example.py:14: AssertionError =========================== short test summary info ============================ FAILED test_example.py::test_increment_zero - assert 1 == 2 ========================= 1 failed, 2 passed in X.XXs ========================== 注意看 FAILURES 部分,pytest 非常清晰地指出了: 哪个测试函数失败了 (test_increment_zero)。 失败的 assert 语句是什么 (assert inc(0) == 2)。 断言失败时的具体值比较 (assert 1 == 2),并且它还告诉我们 1 是 inc(0) 的结果。这种详细的错误报告是 pytest 的一大优势。 理解 -v (详细) 和 -q (静默) 参数 pytest 提供了不同的命令行选项来控制输出的详细程度。 pytest (无参数 - 默认模式): 如上所示,对每个通过的测试显示一个点 (.)。 失败的测试显示 F。 如果测试代码本身有错误(不是断言失败,而是比如语法错误或未捕获的异常),会显示 E。 最后会有一个总结,如果存在失败或错误,会有详细的失败信息。 pytest -v (verbose - 详细模式): 这个选项会为每个测试函数显示其完整的名称以及测试结果 (PASSED, FAILED, ERROR)。 当你有很多测试,并且想清楚地看到每个测试的执行状态时,这个模式非常有用。 pytest -v 如果所有测试都通过,输出示例: ============================= test session starts ============================== platform ... -- Python ... plugins: ... collected 3 items test_example.py::test_increment_positive_number PASSED [ 33%] test_example.py::test_increment_zero PASSED [ 66%] test_example.py::test_increment_negative_number PASSED [100%] ============================== 3 passed in X.XXs =============================== pytest -q (quiet - 静默模式): 这个选项会大幅减少输出信息。 如果所有测试都通过,它通常只输出最后的总结行,甚至可能什么都不输出(除了最终的退出码)。 只有在测试失败或出错时,它才会输出相关的错误信息和总结。 这个模式非常适合在持续集成 (CI) 系统中使用,因为你通常只关心是否有问题发生。 pytest -q 如果所有测试都通过,输出示例可能仅仅是: ============================== 3 passed in X.XXs =============================== 或者,如果CI环境配置为在成功时不输出,你可能什么都看不到。 如果你之前运行 pytest -q 没有看到任何关于测试通过的点的输出,那恰恰说明你的所有测试都成功通过了! -q 的设计目标就是在一切顺利时保持安静。 何时使用哪个参数? 日常开发,快速检查:pytest 想看每个测试的名称和状态,或者调试时:pytest -v 在自动化脚本或CI环境中,只关心失败:pytest -q 使用 assert 进行强大的断言 pytest 最棒的一点就是它允许你直接使用 Python 内置的 assert 语句。当 assert 后面的条件为 False 时,会引发 AssertionError。pytest 会捕获这个错误,将测试标记为失败,并提供非常丰富的调试信息,包括表达式中各个部分的值。 让我们看更多断言的例子。创建一个新文件 test_assertions.py: # test_assertions.py import pytest # 需要导入 pytest 来使用 pytest.raises # 要测试的函数 def get_user_info(user_id): if user_id == 1: return {"name": "Alice", "age": 30, "active": True} elif user_id == 2: return {"name": "Bob", "age": 24, "active": False} else: return None def divide(a, b): if b == 0: raise ValueError("Cannot divide by zero") # 注意:这里我们抛出 ValueError return a / b # 测试函数 def test_user_alice(): alice = get_user_info(1) assert alice is not None assert alice["name"] == "Alice" assert alice["age"] > 25 assert alice["active"] is True # 明确检查布尔值 def test_user_bob_inactive(): bob = get_user_info(2) assert bob["name"].startswith("B") assert not bob["active"] # 另一种检查 False 的方式 assert "email" not in bob # 检查字典中是否不包含某个键 def test_unknown_user(): unknown = get_user_info(99) assert unknown is None def test_division_normal(): assert divide(10, 2) == 5.0 assert divide(7, 2) == 3.5 def test_division_by_zero_custom_error(): # 测试函数是否按预期抛出了特定的异常 # pytest.raises 作为一个上下文管理器使用 with pytest.raises(ValueError) as excinfo: # 捕获 ValueError divide(10, 0) # 可选:检查异常信息是否符合预期 assert "Cannot divide by zero" in str(excinfo.value) def test_list_operations(): my_list = [10, 20, 30, 40] assert 20 in my_list assert 50 not in my_list assert len(my_list) == 4 # Pytest 的断言内省对于比较序列非常有用 # 如果下面这个断言失败了: assert my_list == [10, 20, 35, 40] # Pytest 会告诉你具体哪个元素不同 assert my_list == [10, 20, 30, 40] def test_string_properties(): text = "Pytest is awesome!" assert "awesome" in text assert text.lower() == "pytest is awesome!" assert text.endswith("!") assert len(text.split()) == 3 运行这些测试: pytest test_assertions.py -v 关键点: 丰富的比较信息: 如果 assert alice["name"] == "Bob" 失败了 (因为实际上是 “Alice”),pytest 会告诉你 assert "Alice" == "Bob",让你清楚地看到实际值和期望值的差异。 测试异常 (pytest.raises): 当你期望某段代码抛出特定类型的异常时,使用 pytest.raises。它会捕获预期的异常,如果代码没有抛出该异常,或者抛出了不同类型的异常,测试就会失败。excinfo 对象包含了关于捕获到的异常的详细信息。 涵盖多种数据类型: 你可以用 assert 来检查数字、字符串、列表、字典、布尔值等几乎所有 Python 对象。 参数化测试 (@pytest.mark.parametrize) 当你需要用不同的输入和期望输出来测试同一个函数逻辑时,参数化测试非常有用。它可以避免你编写大量结构相似的测试函数。 你已经在你的 test_single_and_batch 测试中使用了它,这是一个很好的实践! 让我们创建一个 test_parametrize_examples.py 文件: # test_parametrize_examples.py import pytest # 要测试的函数 defis_palindrome(text): if not isinstance(text, str): raise TypeError("Input must be a string") return text.lower() == text.lower()[::-1] # 使用 parametrize @pytest.mark.parametrize("test_input, expected_output", [ ("madam", True), ("racecar", True), ("hello", False), ("Aibohphobia", True), # 测试大小写不敏感 ("", True), # 测试空字符串 (" ", True), # 测试单个空格 ("No lemon, no melon.", False) # 包含标点和空格,按当前函数逻辑会失败 ]) def test_is_palindrome_various_inputs(test_input, expected_output): assertis_palindrome(test_input) == expected_output # 另一个例子:测试数据类型检查 @pytest.mark.parametrize("invalid_input", [ 123, ["list"], None, {"a": 1} ]) def test_is_palindrome_invalid_type(invalid_input): with pytest.raises(TypeError) as excinfo: is_palindrome(invalid_input) assert "Input must be a string" in str(excinfo.value) # 你也可以给每个参数组合起一个ID,方便在报告中识别 @pytest.mark.parametrize( "a, b, expected_sum", [ pytest.param(1, 2, 3, id="positive_nums"), pytest.param(-1, -2, -3, id="negative_nums"), pytest.param(-1, 1, 0, id="mixed_nums"), pytest.param(0, 0, 0, id="zeros") ] ) def test_addition(a, b, expected_sum): assert a + b == expected_sum 运行: pytest test_parametrize_examples.py -v 你会看到 test_is_palindrome_various_inputs 为每一组参数都运行了一次。如果其中一组失败,报告会明确指出是哪一组参数导致了失败。test_addition 的输出会使用你提供的 id 来标识每个测试用例。 参数化的好处: 代码简洁: 避免了为每个场景编写单独的测试函数。 可读性高: 测试数据和预期结果清晰地组织在一起。 易于扩展: 添加新的测试场景只需要在参数列表中增加一行。 覆盖更全: 方便测试各种边界条件和特殊情况。 Fixtures (测试固件/夹具) - 优雅的测试准备与清理 Fixtures 是 pytest 中一个非常强大和核心的概念。它们用于: 提供测试所需的上下文或数据: 比如一个数据库连接、一个临时文件、一个已登录的用户对象等。 管理测试的准备 (setup) 和清理 (teardown) 过程: 确保测试在一致的环境中运行,并在测试结束后释放资源。 你可以把 fixture 想象成戏剧表演中的“道具”或“场景布置”。每个需要特定道具的“场景”(测试函数)都可以声明它需要哪些道具,pytest 会在场景开始前准备好这些道具,并在场景结束后清理它们。 定义 Fixture: Fixture 本身也是一个 Python 函数,使用 @pytest.fixture 装饰器来标记。 使用 Fixture: 测试函数如果需要某个 fixture,只需将其名称作为参数声明即可。pytest 会自动查找并执行对应的 fixture 函数,并将其返回值(如果有的话)传递给测试函数。 1. 基础 Fixture 示例 让我们创建一个 test_fixtures_basic.py 文件: # test_fixtures_basic.py import pytest import tempfile # 用于创建临时文件/目录 import os import shutil # 用于删除目录 # 定义一个 fixture,它会创建一个简单的字典数据 @pytest.fixture def sample_user_data(): print("\n(Fixture: Creating sample_user_data...)") # 方便观察fixture何时执行 data = {"username": "testuser", "email": "test@example.com", "is_active": True} return data # 测试函数使用这个 fixture def test_user_username(sample_user_data): print("\n(Test: Running test_user_username...)") assert sample_user_data["username"] == "testuser" def test_user_is_active(sample_user_data): print("\n(Test: Running test_user_is_active...)") assert sample_user_data["is_active"] is True # 另一个 fixture,演示 setup 和 teardown (使用 yield) @pytest.fixture def managed_tmp_dir(): dir_name = tempfile.mkdtemp(prefix="pytest_managed_") # Setup: 创建临时目录 print(f"\n(Fixture: Created temp directory: {dir_name})") yield dir_name # fixture 的值在这里提供给测试函数 # Teardown: 测试函数执行完毕后,这里的代码会执行 print(f"\n(Fixture: Cleaning up temp directory: {dir_name})") shutil.rmtree(dir_name) # 清理临时目录 def test_create_file_in_managed_dir(managed_tmp_dir): print(f"\n(Test: Running test_create_file_in_managed_dir with {managed_tmp_dir})") file_path = os.path.join(managed_tmp_dir, "test_file.txt") with open(file_path, "w") as f: f.write("Hello from fixture test!") assert os.path.exists(file_path) 运行 pytest -v -s test_fixtures_basic.py ( -s 选项可以让你看到 print 语句的输出,方便观察 fixture 的执行流程)。 你会注意到: sample_user_data fixture 在每个需要它的测试函数(test_user_username 和 test_user_is_active)运行之前都会被调用一次。 managed_tmp_dir fixture 在 test_create_file_in_managed_dir 运行前创建了目录,测试结束后该目录被清理。yield 语句是实现这种 setup/teardown 模式的关键。在 yield 之前是 setup 代码,之后是 teardown 代码。 2. Fixture 作用域 (Scope) Fixture 可以有不同的作用域,决定了 fixture 函数执行的频率以及其返回值的生命周期: function (默认): 每个测试函数执行一次。这是最常见的,确保每个测试都有一个干净、独立的 fixture 实例。 class: 每个测试类执行一次。该类中所有测试方法共享同一个 fixture 实例。 module: 每个模块(测试文件)执行一次。该模块中所有测试函数/方法共享同一个 fixture 实例。 session: 整个测试会话(即一次 pytest 运行)执行一次。所有测试共享同一个 fixture 实例。这对于昂贵的 setup 操作(如启动一个外部服务)非常有用。 通过在 @pytest.fixture 装饰器中指定 scope 参数来设置作用域: # test_fixture_scopes.py import pytest # Session-scoped fixture: 在整个测试会话中只执行一次 @pytest.fixture(scope="session") def db_connection(): print("\n(SESSION Fixture: Connecting to database...)") connection = "fake_db_connection_string" # 模拟数据库连接 yield connection print("\n(SESSION Fixture: Closing database connection...)") # Module-scoped fixture: 在这个模块中只执行一次 @pytest.fixture(scope="module") def module_resource(db_connection): # Fixtures 可以依赖其他 fixtures print(f"\n(MODULE Fixture: Setting up module resource using {db_connection}...)") resource = {"id": "module_res_123", "db": db_connection} yield resource print("\n(MODULE Fixture: Tearing down module resource...)") class TestUserOperations: # Class-scoped fixture: 对这个类只执行一次 @pytest.fixture(scope="class") def user_service(self, module_resource): # 注意类方法中的 fixture 需要 self print(f"\n(CLASS Fixture: Initializing UserSerice with {module_resource['id']}...)") service = f"UserService_instance_for_{module_resource['id']}" yield service print("\n(CLASS Fixture: Shutting down UserService...)") # Function-scoped fixture (默认) @pytest.fixture def new_user_payload(self): print("\n(FUNCTION Fixture: Creating new_user_payload...)") return {"username": "temp_user", "role": "guest"} def test_get_user(self, user_service, db_connection): # 使用 class 和 session fixture print(f"\n(Test: test_get_user using {user_service} and {db_connection})") assert user_service is not None assert "fake_db" in db_connection def test_create_user(self, user_service, new_user_payload, module_resource): # 使用 class, function, module fixture print(f"\n(Test: test_create_user using {user_service}, payload: {new_user_payload}, module_res: {module_resource['id']})") assert new_user_payload["username"] == "temp_user" assert module_resource is not None def test_another_module_level_test(module_resource, db_connection): print(f"\n(Test: test_another_module_level_test using {module_resource['id']} and {db_connection})") assert "module_res" in module_resource["id"] 运行 pytest -v -s test_fixture_scopes.py。仔细观察 print 语句的输出顺序和次数,你就能理解不同作用域的 fixture 是如何工作的。 选择合适的作用域很重要: 如果 fixture 的创建和销毁成本很高,或者你希望在多个测试之间共享状态(要小心!),可以使用更广的作用域(class, module, session)。 为了测试的独立性和避免副作用,function 作用域通常是首选。 3. 内置 Fixtures pytest 提供了一些非常有用的内置 fixtures,例如: tmp_path (function scope): 提供一个临时的目录路径 (pathlib.Path 对象),测试结束后会自动清理。 tmp_path_factory (session scope): 一个工厂 fixture,可以用来创建多个临时目录。 capsys, capfd: 用于捕获测试期间打印到 stdout/stderr 的内容。 monkeypatch: 用于安全地修改或替换模块、类或对象的属性,测试结束后自动恢复。 request: 一个特殊的 fixture,提供了关于当前正在执行的测试请求的信息。 你在之前的教程中已经用到了 tmp_path: # test_fixture.py (部分回顾) @pytest.fixture def tmp_file(tmp_path): # tmp_path 是内置 fixture file_path = tmp_path / "my_temp_file.txt" file_path.write_text("test content") return file_path 4. conftest.py: 共享 Fixtures 如果你的多个测试文件都需要使用相同的 fixtures,你可以将它们定义在一个名为 conftest.py 的文件中。pytest 会自动发现并加载 conftest.py 文件中的 fixtures,使其在同一目录及其子目录下的所有测试文件中可用,无需显式导入。 项目结构示例: my_project/ ├── conftest.py # 共享的 fixtures 在这里定义 ├── package_a/ │ └── test_module_a.py └── package_b/ └── test_module_b.py ```conftest.py` 中的内容: ```python # my_project/conftest.py import pytest @pytest.fixture(scope="session") def global_config(): print("\n(CONFTEST: Loading global config...)") return {"api_url": "http://example.com/api", "timeout": 30} 在 test_module_a.py 中可以直接使用 global_config: # my_project/package_a/test_module_a.py def test_api_url(global_config): # 无需导入,可以直接使用 assert "example.com" in global_config["api_url"] ```conftest.py` 是组织和共享 fixtures 的标准方式,能让你的测试代码更整洁。 ## 使用标记 (Markers) 管理测试 `pytest` 允许你使用“标记 (markers)”来给测试函数或类添加元数据。这些标记可以用于: * 跳过某些测试。 * 在特定条件下跳过测试。 * 将测试标记为预期失败 (xfail)。 * 对测试进行分类,方便选择性地运行。 ### 1. 内置标记 * **`@pytest.mark.skip(reason="...")`**: 无条件跳过该测试。 * **`@pytest.mark.skipif(condition, reason="...")`**: 当 `condition` 为真时跳过该测试。 * **`@pytest.mark.xfail(condition, reason="...", strict=False)`**: 标记测试为“预期失败”。如果测试实际通过了(而你标记为 xfail),默认情况下会报告为 `XPASS`。如果测试如预期般失败了,会报告为 `XFAIL`。如果设置 `strict=True`,那么 `XPASS` 会被视为测试失败。这对于标记那些已知有 bug 但暂时不修复的测试很有用。 * **`@pytest.mark.parametrize(...)`**: 我们已经学习过了,用于参数化测试。 ```python # test_markers.py import pytest import sys def get_python_version(): return sys.version_info @pytest.mark.skip(reason="这个功能尚未实现") def test_new_feature(): assert False IS_WINDOWS = sys.platform == "win32" @pytest.mark.skipif(IS_WINDOWS, reason="此测试仅在非 Windows 系统上运行") def test_linux_specific_path(): path = "/usr/local/bin" assert path.startswith("/") @pytest.mark.skipif(get_python_version() < (3, 8), reason="需要 Python 3.8 或更高版本") def test_feature_for_python38_plus(): # 一些只在 Python 3.8+ 中可用的特性 assert True @pytest.mark.xfail(reason="已知bug #123,除数为零") def test_division_bug(): assert 1 / 0 == 1 # 这会抛出 ZeroDivisionError @pytest.mark.xfail(get_python_version() < (3, 10), reason="此功能在旧版Python中可能表现不同") def test_potentially_flaky_on_old_python(): # 假设这个测试在 Python < 3.10 时可能通过也可能失败 if get_python_version() < (3, 10): assert 1 == 1 # 在旧版 Python 中,我们预期它可能失败 (xfail) else: assert 1 == 1 # 在新版 Python 中,我们预期它通过 2. 自定义标记与运行特定标记的测试 你可以定义自己的标记,以便对测试进行逻辑分组。在 pytest.ini 或 pyproject.toml 文件中注册自定义标记是个好习惯,以避免拼写错误和警告。 pytest.ini 示例: [pytest] markers = slow: 标记运行缓慢的测试 smoke: 标记为冒烟测试,用于快速检查核心功能 integration: 标记为集成测试 在测试中使用自定义标记: # test_custom_markers.py import pytest import time @pytest.mark.slow def test_very_slow_operation(): time.sleep(2) # 模拟一个耗时操作 assert True @pytest.mark.smoke def test_quick_check(): assert 1 + 1 == 2 @pytest.mark.integration @pytest.mark.smoke # 一个测试可以有多个标记 def test_api_login(): # 模拟 API 登录 assert True 运行特定标记的测试: 使用 -m 命令行选项: pytest -m smoke # 只运行标记为 smoke 的测试 pytest -m "not slow" # 运行所有未标记为 slow 的测试 pytest -m "smoke and integration" # 运行同时标记为 smoke 和 integration 的测试 pytest -m "smoke or slow" # 运行标记为 smoke 或 slow 的测试 组织测试:测试类 虽然 pytest 不需要你把测试写在类里,但对于组织一组相关的测试,使用类是一个不错的选择。 类名必须以 Test 开头。 类中的测试方法名必须以 test_ 开头。 不需要继承任何特定的基类 (如 unittest.TestCase)。 # test_calculator_class.py class Calculator: def add(self, a, b): return a + b def subtract(self, a, b): return a - b def multiply(self, a, b): return a * b def divide(self, a, b): if b == 0: raise ValueError("Cannot divide by zero") return a / b class TestCalculator: # 你可以在类级别使用 fixture,它会对该类的所有测试方法生效 # (如果 fixture scope 是 'class' 或更广) # 例如,可以在这里创建一个 Calculator 实例供所有测试使用 def test_addition(self): # 注意方法需要 self 参数 calc = Calculator() assert calc.add(2, 3) == 5 assert calc.add(-1, 1) == 0 def test_subtraction(self): calc = Calculator() assert calc.subtract(5, 3) == 2 # ... 其他测试方法 ... 配置文件 (pytest.ini 或 pyproject.toml) 你可以通过在项目根目录创建 pytest.ini 文件或在 pyproject.toml 中添加 [tool.pytest.ini_options] 部分,来自定义 pytest 的行为。 pytest.ini 示例: [pytest] # 改变测试文件的发现模式 python_files = test_*.py check_*.py example_*.py # 改变测试函数/方法的发现模式 python_functions = test_* check_* example_* # 改变测试类的发现模式 python_classes = Test* Check* Example* # 默认添加的命令行选项 addopts = -v --cov=. --cov-report=html # 注册自定义标记 (避免警告) markers = slow: marks tests as slow to run serial: marks tests that cannot be run in parallel # 忽略某些目录 norecursedirs = .git venv build *.egg-info 这只是冰山一角,pytest 的配置选项非常丰富。 总结与后续学习 恭喜你!通过这个扩展教程,你已经掌握了 pytest 的许多核心概念和实用技巧: 编写和运行基础测试。 理解不同的输出模式 (-v, -q)。 使用强大的 assert 语句进行断言和异常测试。 通过 @pytest.mark.parametrize 实现参数化测试,提高测试覆盖率和代码复用。 掌握了 Fixture 的核心用法,包括定义、使用、作用域 (function, class, module, session)、带 yield 的 setup/teardown 模式,以及如何通过 conftest.py 共享 fixtures。 了解了如何使用标记 (@pytest.mark.*) 来管理和选择性地运行测试。 知道了如何将测试组织在类中。 对 pytest 的配置文件有了初步认识。 接下来你可以探索: 更高级的 Fixture 用法: 如 autouse fixtures,fixture 的参数化,使用 fixture 返回工厂函数等。 插件的使用: pytest-cov: 测试覆盖率。 pytest-xdist: 并行测试。 pytest-mock: 方便地使用 mocking。 针对你使用的框架(如 Django, Flask, FastAPI)的 pytest 插件。 生成 HTML 测试报告: 使用 pytest-html 插件。 pytest 官方文档: 这是最权威和最全面的学习资源 (https://docs.pytest.org/)。 编写测试是保证代码质量、提升开发信心的关键环节。pytest 以其简洁和强大,让编写测试不再是一件苦差事,反而可以成为一种乐趣。希望这篇教程能帮助你轻松入门并爱上 pytest!
Techniques
· 2025-05-28
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
Martini 3 Bead Types and Naming Conventions: A Comprehensive Guide
主要参考资料: https://doi.org/10.1038/s41592-021-01098-3 Supporting information for: Martini 3: A General Purpose Force Field for Coarse-Grained Molecular Dynamics https://github.com/ricalessandri/Martini3-small-molecules/blob/main/tutorials/building_block_table.pdf https://advanced.onlinelibrary.wiley.com/doi/full/10.1002/adts.202100391 https://cgmartini.nl/docs/tutorials/Martini3/Small_Molecule_Parametrization/ 1. 引言 (Introduction) Martini 力场是一种广泛应用于生物分子模拟的粗粒化 (Coarse-Grained, CG) 模型 (1)。近年来,经过大幅改进和重新参数化的 Martini 3 版本正式发布 (1)。Martini 3 旨在提供一个通用性更强的 CG 力场,不仅适用于脂质、蛋白质、核酸和糖类等生物大分子体系 (4),也拓展到了对多种小分子、碳纳米材料以及聚合物的研究 (7)。 相较于早期版本,Martini 3 的核心改进包括更优化的非键相互作用平衡、引入了新的珠子 (bead) 类型(包括不同尺寸和化学特性的珠子)、并增强了对特定相互作用(如氢键和电子极化效应)的描述能力 (1)。这些改进使得 Martini 3 能够更准确地预测分子的堆积模式和相互作用,从而在更广泛的应用领域中提供可靠的模拟结果 (1)。Martini 模型通常采用“四对一”的映射方案,即平均四个重原子及其相连的氢原子被粗粒化为一个相互作用中心(珠子),但对于环状结构等特殊化学基团,也支持更高分辨率的映射 (2)。 本报告旨在详细阐述 Martini 3 力场中珠子的类型、命名方式的传统和原则,并深入探讨其参数化策略和分子映射方法。最后,将通过一个具体的聚合物——聚[2-(N-氧化-N,N-二乙基氨基)甲基丙烯酸乙酯] (poly[2-(N-oxide-N,N-diethylamino)ethyl methacrylate])——的映射实例,展示如何将这些理论知识应用于实践。 2. Martini 3 核心珠子 (Bead) 类型与命名传统 (Martini 3 Core Bead Types and Naming Conventions) Martini 3 模型的基石在于其多样化的珠子类型,这些珠子代表了不同化学性质的分子片段。理解这些珠子的分类、尺寸和命名规则对于正确构建和解读 CG 模型至关重要。 2.1 主要珠子类型 (Main Bead Types) 与早期版本类似,Martini 3 保留了基于极性的四种主要珠子类型 (8): P (Polar): 极性珠子,代表强极性基团。 N (Non-polar/Intermediate polarity): 中等极性或非极性珠子,代表具有一定极性或非极性的基团。 C (Apolar/Carbon-like): 非极性珠子,通常代表疏水性的烷烃链等。 Q (Charged): 带电荷珠子,代表离子化的基团。 在 Martini 3 中,这些主要类型得到了扩展和细化,引入了新的专用珠子类型 (8): W (Water): 特定的水珠子,与 Martini 2 中的极性 P4 珠子不同,W 珠子经过独立优化,避免了旧模型中水在室温下结冰等问题。 D (Divalent ions): 二价离子珠子。 X (Halo-compounds): 用于描述含卤素原子的基团。 这些主要类型(P, N, C, Q, X)进一步划分为多个亚型,通过数字后缀(通常为1-6)表示其相对极性程度或相互作用强度,数字越大通常表示极性越强或相互作用越强 (10)。Martini 3 将可能的相互作用能级从 Martini 2 的10个扩展到了22个,从而可以更精细地描述不同化学基团间的相互作用差异 (8)。此外,还引入了字母后缀来表征特定的化学特性,如氢键给体/受体能力和电子极化效应 (8)。 2.2 珠子尺寸 (Bead Sizes) Martini 3 引入了三种不同尺寸的珠子,以适应不同分辨率的粗粒化需求,这对于精确描述分子形状和堆积至关重要 (8): Regular (R): 常规尺寸珠子,其 Lennard-Jones (LJ) 参数中的$\sigma$值约为 0.47 nm。设计用于标准的“4对1”映射,即代表4个重原子及其相连的氢原子。 Small (S): 小尺寸珠子,$\sigma$值约为 0.41 nm。设计用于“3对1”的映射,即代表3个重原子。 Tiny (T): 微小尺寸珠子,$\sigma$值约为 0.34 nm。设计用于“2对1”的映射,即代表2个重原子。 这三种尺寸的珠子之间的交叉相互作用 (R-S, R-T, S-T) 都经过了专门的参数化,以确保整个力场的平衡性 (8)。小尺寸 (S) 和微小尺寸 (T) 珠子特别适用于描述环状结构(如芳香环和脂肪环)以及其他需要更高分辨率的线性或支链化学基团 (4)。对于完全支化的片段(如季碳原子或叔胺基团),如果片段包含四个非氢原子,通常会使用较小的珠子(如 S 型珠子),因为中心原子的环境暴露程度降低,其对整体相互作用的影响也相应减小 (8)。 2.3 命名约定 (Naming Conventions) Martini 3 珠子的命名遵循一套系统的规则,通常结合了其尺寸、基本化学类型、极性水平以及特殊功能: 尺寸前缀: R: 代表常规尺寸 (Regular),但在很多情况下,如果珠子名称没有明确的尺寸前缀,则默认为常规尺寸。 S: 代表小尺寸 (Small)。 T: 代表微小尺寸 (Tiny)。 基本类型字母: P, N, C, Q, X, W, D,如上所述。 极性/相互作用能级: 通常是一个数字(1到6,对于P, N, C, Q, X 类型),表示相对极性或相互作用强度。例如,P1 表示低极性极性珠子,P6 表示高极性极性珠子 (10)。 氢键后缀: 用于描述珠子的氢键能力 (10)。 d (donor): 表示氢键给体。 a (acceptor): 表示氢键受体。 da: 表示同时具有氢键给体和受体能力。 0 (zero): 对于Q类型珠子 (如 Q0),表示不具有特定的氢键给体或受体能力。对于P和N类型珠子,若无 ‘d’ 或 ‘a’ 后缀,通常意味着其氢键能力不是其主要特征,或作为一般极性珠子处理。 电子极化效应后缀: 主要用于 C 和 X 类型珠子,以模拟邻近化学基团的诱导/共轭效应对分子片段相互作用的影响,并能捕捉优先取向和卤键能力 (8)。 e (electron-donor/enriched): 表示富电子特性。 v (electron-acceptor/vacancy): 表示缺电子特性。 例如,萘中心的珠子类型为 TC5e,表示这是一个富电子的微小尺寸非极性珠子。 其他特殊后缀: h: 在某些特定珠子类型中使用,例如在脂质尾链中,C5h 和 C4h 用来区分包含不同数量双键的片段 (12)。 r: 在某些溶剂模型中出现,如甲醇 (MEOH) 用 SP2r 表示 (13)。 一个典型的 Martini 3 珠子名称组合了这些元素,例如:SP1d (小尺寸、极性类型、1级极性、氢键给体),TC5e (微小尺寸、非极性类型、5级相互作用、富电子)。 2.4 Martini 3 珠子类型汇总表 (Comprehensive Table of Martini 3 Bead Types) 为了更清晰地展示 Martini 3 中常用珠子的特性,下表总结了部分代表性珠子类型及其关键属性和通常代表的化学片段。此表并非详尽无遗,更完整的列表和特定分子的参数化可以在 Martini 官方网站和相关出版物中找到 (10)。构建新分子模型时,应参考最新的官方 martini_v3.0.0.itp 文件和相关文献中的构建模块表 (8)。 珠子名称 (Bead Name) 主要类型 (Main Type) 尺寸 (Size) 极性水平 (Polarity Level) 氢键 (H-bond) 其他后缀 (Other Suffix) 典型化学基团/片段 (Typical Chemical Group/Fragment) W W R N/A N/A 水 (代表4个水分子) TW W T N/A N/A 微小水 (代表2个水分子),用于受限空间 C1 C R 1 None 饱和烷烃片段 (-CH2-CH2-CH2-CH2-) SC3 C S 3 None 脂肪环片段 (如环己烷中的 -CH2-CH2-CH2- 单元),支链烷烃 TC5 C T 5 None 芳香环中的 -CH=CH- 片段 (如苯),共轭体系 TC5e C T 5 None e 富电子芳香片段 (如萘的中心) P1 P R 1 Donor/Acceptor 弱极性基团,如醚 (-O-) SP2d P S 2 Donor 中等极性氢键给体,如伯醇 (-CH2OH 中的 OH 部分,若映射为S珠) TP4a P T 4 Acceptor 强极性氢键受体,如羰基 (C=O,若映射为T珠) N0 N R 0 (特殊) None 中性非极性基团,但归类于N,如某些胺的非极性部分 SN1a N S 1 Acceptor 弱中等极性氢键受体,如叔胺 (-N(CH3)-) TN4a N T 4 Acceptor 中等极性氢键受体,如醚氧 (-CH2†-O-CH2†-) Q0 Q R 0 (特殊) None 带形式电荷但无特定氢键能力的基团,或用于描述电荷离域的离子 SQd Q S (level varies) Donor 带电荷的氢键给体,如质子化的胺基 (-NH3+) TQa Q T (level varies) Acceptor 带电荷的氢键受体,如羧酸根 (-COO-) X3h X (R/S/T) 3 None h 含卤素化合物,如二氯乙烷中的 -CHCl-CH2Cl (X3h 代表一个氯原子和部分碳链) 注:上表仅为示例,具体的珠子类型选择和参数化应参考最新的 Martini 文档和相关研究。极性水平和氢键能力可能因具体的化学环境和参数化目标而有所调整。“N/A”表示不适用。 3. Martini 3 珠子参数化策略 (Martini 3 Bead Parametrization Strategy) Martini 3 珠子的参数化遵循系统性的方法,结合了“自上而下”(top-down,基于实验热力学数据)和“自下而上”(bottom-up,基于全原子模拟数据)的策略,旨在准确再现分子的物理化学性质 (2)。 3.1 非键相互作用 (Non-bonded Interactions) 非键相互作用的参数化主要目标是再现小分子在不同溶剂对之间的分配自由能 ($\Delta G_{\text{transfer}}$) (8)。常用的溶剂对包括正十六烷/水、正辛醇/水和氯仿/水等。通过拟合这些分配自由能,可以有效地校准溶质-溶剂以及溶剂-溶剂之间的交叉相互作用强度 (8)。 第二个核心参数化目标是溶剂的互溶性数据,可以通过定性观察或计算混合过剩自由能来进行检验 (8)。互溶性数据同样能够反映不同种类分子间的交叉相互作用以及它们各自的自相互作用的相对强度。 非键相互作用通常采用 Lennard-Jones (LJ) 势来描述: \(V_{LJ}(r_{ij}) = 4 \varepsilon_{ij} \left[ \left( \frac{\sigma_{ij}}{r_{ij}} \right)^{12} - \left( \frac{\sigma_{ij}}{r_{ij}} \right)^{6} \right]\) 其中 rij 是珠子 i 和 j 之间的距离,$\sigma_{ij}$定义了珠子间的有效直径(相互作用为零的点),$\varepsilon_{ij}$定义了势阱深度,代表相互作用强度。对于带电荷的 Q 型和 D 型珠子,除了 LJ 相互作用外,还包含库仑相互作用: \(V_C\left(r_{i j}\right)=\frac{1}{4 \pi \varepsilon_0 \varepsilon_r} \frac{q_i q_j}{r_{i j}}\) 其中$q_i$和$q_j$是珠子的电荷,$ε_0$是真空介电常数,$ε_r$是相对介电常数(在 Martini 中通常设为15,用于隐式地考虑水的屏蔽效应,但具体值可能因模拟体系而异)。 3.2 键合相互作用与几何中心映射 (Bonded Interactions and Center-of-Geometry (COG) Mapping) 与主要依赖实验数据的非键参数化不同,键合相互作用(键长、键角、二面角)的参数主要通过“自下而上”的方法获得,即参考全原子 (All-Atom, AA) 模拟得到的结构分布 (16)。 Martini 3 的一个重要改进是采用了基于“几何中心”(Center-of-Geometry, COG) 的映射规则来定义 CG 模型的键合参数,取代了 Martini 2 中常用的“质量中心”(Center of Mass, COM) 映射 (8)。COG 映射在计算分子片段中心时考虑了氢原子的位置,这使得 CG 模型能更好地保持其对应全原子参考结构的体积和形状 (8)。COM 映射有时会导致不满意的键长和过高的堆积密度,而 COG 映射则能产生更接近实际的分子性质(如溶剂可及表面积)和本体性质(如质量密度)(8)。 对于接近全原子分辨率的映射(例如使用 T 型珠子),COG 映射尤为关键。例如,对于4对1映射的烷烃链,COM 和 COG 的差异不大;但对于2对1映射的苯环,两者差异显著 (8)。基于 COG 的键长可以直接从全原子模型中提取,这使得参数化过程更易于自动化。这些初始参数在需要更高精度时可以被进一步优化 (8)。 常用的键合势函数包括: 键长 (Bonds): 简谐势$V_b(l) = \frac{1}{2} K_b (l - l_0)^2$ 键角 (Angles): 简谐势$V_a(\theta) = \frac{1}{2} K_{\theta} (\theta - \theta_0)^2$ 二面角 (Dihedrals): 周期性势$V_d(\phi) = K_{\phi} [1 + \cos(n\phi - \phi_0)]$在某些情况下,特别是对于需要保持刚性平面结构或特定构象的分子,也会使用约束 (constraints) 或特殊势函数(如improper二面角)(8)。 4. Martini 3 映射方法学 (Martini 3 Mapping Methodology) 将全原子结构映射到粗粒化表示是构建 Martini 模型的首要步骤。Martini 3 提供了一套更一致的规则和指导原则,旨在优化 CG 模型的体积和形状表示。 4.1 基本原则 (Basic Principles) 进行原子到珠子的映射时,应遵循以下基本原则 (5): 原子分组: 通常将2-4个非氢重原子(及其相连的氢原子)映射为一个 CG 珠子。R、S、T 型珠子分别对应约4、3、2个重原子的映射。 化学基团完整性: 尽量避免将特定的化学官能团(如酰胺基、羧基、完整的芳香环单元)分割到不同的珠子中,以保持其化学特性。 对称性保留: 映射方案应尽可能尊重原始分子的对称性。 体积与形状保持: CG 模型应能较好地再现全原子结构的体积和形状。COG 映射对此有重要贡献。 珠子数量优化: 珠子的总数应被优化,目标是使每个珠子代表的重原子数与理想映射(如4:1, 3:1, 2:1)的最大偏差控制在每10个重原子中±1个非氢原子的范围内。 原子共享: 在某些情况下,为了保持底层原子结构的对称性(例如在苯酚、四氢呋喃、甲苯等分子中),一个或多个原子可能被相邻的珠子共享(在一些文献的表格中用 † 标出)(8)。在从 COG 映射的全原子模拟中提取键合参数时,必须考虑到这种共享。 4.2 环状结构映射 (Mapping Ring Structures) 环状结构因其特殊的几何形状和电子特性,在 Martini 3 中有特定的映射策略,通常使用 S 型或 T 型珠子 (8): 芳香环 (Aromatic Rings): 芳香环(如苯环、萘环等)通常使用 T 型珠子进行描述,以更好地再现其平面性和堆叠行为。 苯 (Benzene): 作为典型的芳香化合物,苯被模型化为三个 TC5 类型的 T 型珠子,每个珠子代表两个连续的碳原子及其相连的氢原子。TC5 是非取代芳香环中 -C=C- 基团的首选珠子类型。使用基于 COG 的键长(约 0.29 nm),可以很好地再现苯的液体密度。芳香环模型通常使用约束来连接珠子,因为其键长分布非常窄,需要非常刚性的势函数,这反过来又可能需要较短的模拟时间步长。对于更延展的刚性结构,可以考虑使用虚拟位点。 脂肪环 (Aliphatic Rings): 脂肪环(如环己烷)通常使用 S 型珠子进行描述,以捕捉其相对于芳香环更大的体积感。 环己烷 (Cyclohexane): 作为典型的脂肪环化合物,环己烷通常被描述为一个双 S 珠模型 (SC3-SC3)。SC3 珠子的选择基于分配数据。脂肪环模型通常使用键合相互作用(而非约束)连接,因为它们的键长分布相对较宽。使用约 0.378 nm 的键长,可以很好地再现环己烷的液体密度。 4.3 取代基与支链映射 (Mapping Substituents and Branched Chains) 对于带有取代基的环状结构或具有支链的分子,映射时需遵循以下两个主要原则 (8): 用最少数量的珠子映射所有非氢原子。 尽可能保持分子的对称性、体积和形状,其中芳香环最好用 T 型珠子描述,脂肪环最好用 S 型珠子描述。 例如: 甲苯 (Toluene): 在苯环上增加一个甲基时,苯环原有的三个 T 型珠子中的一个会变成一个更大的 S 型珠子,以容纳额外的碳原子 (8)。 乙苯 (Ethyl-benzene): 如果是乙基取代,则会为乙基额外增加一个 T 型珠子(代表乙基的两个碳原子),而苯环部分则可以保持其精确的三个 T 型珠子模型 (8)。 支链烷烃/完全支化基团: 对于如新戊烷(包含5个非氢原子)这样的完全支化基团,通常会使用尺寸较小的珠子。例如,尽管有5个重原子,但由于中心碳原子被包埋,其对环境的暴露减少,因此可以使用一个 S 型珠子来代表整个新戊烷基团,或者根据具体情况进行更细致的划分 (8)。 4.4 高级模型设计策略 (Advanced Model Design Strategies) 对于具有多个芳香/脂肪环结构或复杂连接方式的小分子,Martini 3 提供了一些高级模型设计策略,常利用虚拟(相互作用)位点 (virtual sites) 来提高模型的数值稳定性和计算性能 (8): “铰链”模型 (Hinge Model): 适用于刚性的稠合多环化合物,如萘 (Naphthalene)。一个简单的由5个 TC5 珠子通过约束连接的萘模型在凝聚相中可能导致数值不稳定。 “铰链”结构使用4个外部珠子,并将中心的一个或多个珠子描述为虚拟相互作用位点(其位置由构建粒子定义,受力会分配给构建粒子,质量均匀分配给构建粒子)。这种方法减少了约束数量,提高了数值稳定性和模拟速度。通常还会施加一个不当二面角来保持铰链模型的平面性。 “分而治之”模型 (Divide and Conquer): 适用于由刚性平面片段组成的任意长链,且需要控制片段间的相对二面角,这在小分子和共轭聚合物(如2,2’-联噻吩)中很常见。例如,两个噻吩环各用三个 T 型珠子描述。为了连接它们并控制二面角,可以在每个噻吩环的几何中心使用两个虚拟的非相互作用的哑位点 (dummy sites),并通过简谐键连接这两个哑位点。然后可以在这些哑位点和每个噻吩环上的两个粒子(如硫原子)之间施加二面角势。 “分子转角”模型 (Molecular Turn): 用于处理通过 sp2 杂化碳连接的环系统,这种连接方式会产生一个“分子转角”(如某些具有特定扭转行为的分子)。为了保持扭转运动的正确旋转轴,需要特别注意。通常会使用虚拟哑位点:每个环体系的 COG 处各一个,第三个位于连接的 sp2 杂化碳上。通过在这些虚拟位点之间施加简谐键和角势,并辅以适当的二面角势和不当二面角势来维持正确的几何构型和旋转自由度。 这些高级策略体现了 Martini 3 在处理复杂分子结构方面的灵活性和精确性。 5. 总结与拓展资源 (Conclusion and Further Resources) 5.1 总结 (Summary) Martini 3 力场通过引入新的珠子类型、更精细的尺寸划分 (R, S, T)、系统的命名规则(包含极性、氢键能力、电子特性等后缀)以及改进的参数化策略(特别是基于几何中心 COG 的映射),显著提升了粗粒化模拟的准确性和适用范围 (1)。其核心优势在于能够在保持较高计算效率的同时,捕捉到关键的化学物理特性,从而能够模拟更大尺度和更长时间尺度的分子过程。 在对新分子(尤其是如本教程中所示的复杂聚合物)进行 Martini 3 映射时,关键步骤包括: 仔细分析全原子化学结构,识别关键官能团。 遵循原子分组(2-4个重原子/珠子)、化学基团完整性、对称性和体积/形状保持等基本映射原则。 参考 Martini 3 珠子类型表和命名规则,为每个分子片段选择最合适的珠子类型和尺寸。 对于缺乏直接预参数化珠子的特殊基团(如本例中的N-氧化物),需基于其化学物理特性(极性、氢键、分配行为等)类比选择最接近的现有珠子,或进行审慎的重新参数化。 定义珠子间的键合连接。 通过这些步骤,可以为目标分子构建合理的 Martini 3 粗粒化模型,为后续的分子动力学模拟打下坚实基础。 5.2 拓展资源 (Further Resources) 为了更深入地学习和应用 Martini 3 力场,以下资源非常宝贵: Martini 官方网站: http://cgmartini.nl (2)。这里可以找到最新的力场文件、教程、FAQ 以及已参数化的分子拓扑数据库(包括脂质、蛋白质、糖类、溶剂和小分子等 (8))。 主要出版物: Souza, P.C.T., Alessandri, R., Barnoud, J. et al. Martini 3: a general purpose force field for coarse-grained molecular dynamics. Nat Methods 18, 382–388 (2021). (1) (Martini 3 的奠基性论文)。 Alessandri, R., Souza, P.C.T., Thallmair, S. et al. A coarse-grained force field for small molecules: Martini 3. ChemRxiv (2021). (8) (针对小分子参数化的重要参考,包含大量构建模块信息)。 模拟软件包: Martini 力场广泛应用于 GROMACS (4)。NAMD 等其他软件包也有相应的支持或转换工具 (26)。 辅助工具: Martinize (或 Martinize2): 用于将全原子蛋白质(以及其他分子)结构转换为 Martini CG 模型的常用脚本 (5)。 Insane.py: 用于快速搭建复杂膜体系的脚本 (24)。 Polyply: 用于生成聚合物拓扑的工具 (29)。 MartiniGlass: 用于 VMD 中可视化 Martini 模型的 Python 包 (23)。 力场参数下载: Martini 3 核心参数文件 (martini_v300.zip 或类似名称) 可从官方网站下载,其中包含了珠子定义 (.itp 文件)、相互作用矩阵以及多种已参数化分子的拓扑文件 (14)。 小分子数据库通常托管在 GitHub 等代码仓库中,如 ricalessandri/Martini3-small-molecules (8)。 Marrink实验室的 GitHub 仓库 (marrink-lab/martini-forcefields) 也是获取最新参数和分子拓扑的重要来源 (29)。 利用这些资源,研究者可以有效地将 Martini 3 应用于广泛的化学和生物物理问题研究中,探索复杂体系的结构、动态和热力学性质。
Molecular Dynamics
· 2025-05-27
Deploy PostgreSQL Database and MinIO Object Storage: Complete Server Setup Guide
Ubuntu 22.04 服务器部署 PostgreSQL 数据库、MinIO 对象存储以及一个通过 Nginx 反向代理访问的 Docker化 Django 后端应用完整教程 目标: 部署 PostgreSQL 数据库、MinIO 对象存储以及一个通过 Nginx 反向代理访问的 Docker化 Django 后端应用。 服务器 IP 定义 (请在脚本和配置中替换为您真实的服务器 IP): SERVER_IP="123.45.6.78" (示例 IP,请务必修改) 第 1 步:系统初始化与基础依赖安装 首先,更新您的服务器并安装一些必要的工具。 # 更新系统包列表并升级现有包 sudo apt update && sudo apt upgrade -y # 安装基础工具:ca-certificates, curl, gnupg, lsb-release 用于添加 Docker源,nginx 用于反向代理,git 用于拉取代码 sudo apt install -y ca-certificates curl gnupg lsb-release nginx git 第 2 步:安装 Docker CE 和 Docker Compose 我们将使用 Docker 来容器化 MinIO 和 Django 应用。 # 1. 添加 Docker 官方 GPG 密钥 sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg # 2. 设置 Docker APT 软件源 echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 3. 安装 Docker CE (社区版), CLI, Containerd, 和 Docker Compose 插件 sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # 4. (可选)配置国内 Docker 镜像加速器,以提高拉取镜像的速度 # 请根据您选择的云服务商或镜像源替换下面的地址 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<EOF { "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com", "https://registry.docker-cn.com" ] } EOF sudo systemctl daemon-reload sudo systemctl restart docker # 5. 将当前用户添加到 docker 组,这样执行 docker 命令时无需 sudo(需要重新登录或执行 newgrp docker 生效) sudo usermod -aG docker $USER echo "请重新登录或执行 'newgrp docker' 使 docker 组权限生效。" # 6. 验证 Docker 是否安装成功 docker --version docker compose version 第 3 步:安装 PostgreSQL 并配置远程访问 Django 应用将使用 PostgreSQL作为数据库。 # 1. 安装 PostgreSQL 和相关工具 sudo apt install -y postgresql postgresql-contrib # 2. 修改 PostgreSQL 配置以允许远程连接 # 编辑 postgresql.conf 文件,将 listen_addresses 从 'localhost' 改为 '*' # 注意:您的 PostgreSQL 版本可能不同,请相应调整路径(例如 /etc/postgresql/16/main/) # 您可以通过 `pg_lsclusters` 查看版本和路径 sudo sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/g" /etc/postgresql/$(pg_lsclusters | awk 'NR==2 {print $1}')/main/postgresql.conf # 3. 修改 pg_hba.conf 文件以允许来自任何 IP 地址的 md5 密码认证连接 # 同样,注意 PostgreSQL 版本路径 echo "host all all 0.0.0.0/0 md5" | sudo tee -a /etc/postgresql/$(pg_lsclusters | awk 'NR==2 {print $1}')/main/pg_hba.conf # 4. 重启 PostgreSQL 服务使配置生效 sudo systemctl restart postgresql # 5. 设置 PostgreSQL 的 postgres 用户密码(重要!) # 将 'YourSecurePostgresPassword!' 替换为您自己的强密码 sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD 'YourSecurePostgresPassword!';" 可视化操作与安全组说明 (PostgreSQL) 云服务器安全组: 在您的云服务提供商(如阿里云、腾讯云、AWS)的控制台中,找到您的服务器实例对应的安全组(或防火墙规则)。 添加入站规则,允许来自您需要访问数据库的 IP 地址(或者为了开发方便暂时允许 0.0.0.0/0,但生产环境不推荐)访问 PostgreSQL 的默认端口 5432/TCP。 数据库客户端连接: 您可以使用图形化数据库管理工具(如 pgAdmin, DBeaver, Navicat 等)从您的本地计算机连接到服务器上的 PostgreSQL。 连接信息: 主机/服务器地址: YOUR_SERVER_IP (例如 123.45.6.78) 端口: 5432 数据库: 默认可以是 postgres 用户名: postgres 密码: 您在上面第 5 步设置的 YourSecurePostgresPassword! 创建专用数据库和用户 (推荐): 虽然您可以使用 postgres 超级用户,但更安全的做法是为您的 Django 应用创建一个专用的数据库和用户。登录后,在 SQL 工具中执行: CREATE DATABASE myproject_db; CREATE USER myproject_user WITH PASSWORD 'MyProjectSecurePassword!'; GRANT ALL PRIVILEGES ON DATABASE myproject_db TO myproject_user; ALTER ROLE myproject_user CREATEDB; -- 可选,如果需要用户创建数据库 之后在 Django 的 settings.py 中使用这些新的凭据。 第 4 步:部署 MinIO 对象存储 (使用 Docker) MinIO 将用于存储 Django 应用的媒体文件和静态文件。 wget https://dl.min.io/client/mc/release/linux-amd64/mc chmod +x mc sudo mv mc /usr/local/bin/ # 1. 创建 MinIO 数据存储目录 sudo mkdir -p /minio/data sudo chmod -R 777 /minio/data # 临时给予宽松权限,生产环境应更精细控制 # 2. 使用 Docker 启动 MinIO 容器 # 将 'YourMinioAdminUser' 和 'YourMinioAdminPassword!' 替换为您自己的凭据 # 确保密码足够复杂(至少8位,包含大小写、数字、特殊字符) docker run -d \ --name minio \ -p 9000:9000 \ -p 9001:9001 \ -v /minio/data:/data \ -e "MINIO_ROOT_USER=admin" \ -e "MINIO_ROOT_PASSWORD=YourSecureMinioPassword!" \ quay.io/minio/minio:latest \ server /data --console-address ":9001" # 2. 设置别名(注意用单引号包裹密码) mc alias set myminio http://123.45.6.78:9000 admin 'YourSecureMinioPassword!' # 2. 修改密码 mc admin user password myminio admin 'NewSecurePass123!' 可视化操作与安全组说明 (MinIO) 云服务器安全组: 开放 MinIO API 端口: 9000/TCP 开放 MinIO 控制台端口: 9001/TCP 访问 MinIO 控制台: 在浏览器中打开 http://YOUR_SERVER_IP:9001 (例如 http://123.45.6.78:9001)。 使用您在 docker run 命令中设置的 MINIO_ROOT_USER (例如 admin) 和 MINIO_ROOT_PASSWORD (例如 YourSecureMinioPassword!) 登录。 创建存储桶 (Buckets): 登录 MinIO 控制台后,点击 “Buckets” -> “Create Bucket”。 创建两个存储桶: media (用于存储用户上传的文件) static (用于存储 Django 的静态文件) 重要: 为这两个存储桶设置访问策略 (Access Policy)。对于公开访问的静态文件和媒体文件,您可能需要将策略设置为 public 或 readonly (根据需求)。点击存储桶旁边的 “Manage” -> “Access Policy”,选择 “Add Policy”,然后选择 readonly 或 download (对于 public,可以直接在创建时设置)。更精细的权限控制请参考 MinIO 文档。 第 5 步:部署 Django 后端应用 (使用 Docker) 5.1 准备 Django 项目代码 # 1. 克隆您的 Django 项目代码 (替换为您的仓库地址) # git clone https://github.com/your-username/your-backend-repo.git # cd your-backend-repo # 假设您已将代码上传到服务器的某个目录,例如 /srv/django-app # cd /srv/django-app # 2. 配置 Django settings.py (或通过环境变量传递) # 确保您的 settings.py 文件中数据库和 MinIO 配置正确。 # 数据库示例 (使用您在 PostgreSQL 步骤中创建的用户和数据库): # DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.postgresql', # 'NAME': 'myproject_db', # 'USER': 'myproject_user', # 'PASSWORD': 'MyProjectSecurePassword!', # 'HOST': 'YOUR_SERVER_IP', # Django 容器需要能访问到宿主机的 PostgreSQL # 'PORT': '5432', # } # } # # MinIO (django-storages) 示例: # DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' # STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' # AWS_ACCESS_KEY_ID = 'admin' # MinIO Root User # AWS_SECRET_ACCESS_KEY = 'YourSecureMinioPassword!' # MinIO Root Password # AWS_STORAGE_BUCKET_NAME = 'media' # 默认文件存储桶 # AWS_S3_ENDPOINT_URL = 'http://YOUR_SERVER_IP:9000' # MinIO API 地址 # AWS_S3_OBJECT_PARAMETERS = { 'CacheControl': 'max-age=86400', } # AWS_DEFAULT_ACL = None # 或 'public-read' 根据需求 # AWS_S3_USE_SSL = False # 如果 MinIO 没有配置 SSL # AWS_S3_VERIFY = True # 如果 MinIO 使用自签名证书,可能需要设为 False 或提供证书路径 # AWS_S3_REGION_NAME = 'us-east-1' # MinIO 不需要区域,但 boto3 可能需要 # AWS_S3_SIGNATURE_VERSION = 's3v4' # STATIC_URL = f'{AWS_S3_ENDPOINT_URL}/static/' # 如果使用 MinIO 存储静态文件 # MEDIA_URL = f'{AWS_S3_ENDPOINT_URL}/media/' # # **重要**: 确保 Django 容器可以访问到 PostgreSQL 和 MinIO。 # 如果 PostgreSQL 和 MinIO 也在 Docker 中运行,并且在同一个 Docker 网络中, # 可以使用容器名作为 HOST (例如 'minio' 而不是 'YOUR_SERVER_IP')。 # 如果 PostgreSQL 在宿主机上运行,Django 容器可以使用宿主机的 IP 或 `host.docker.internal` (某些 Docker 版本)。 5.2 创建 Dockerfile 在您的 Django 项目根目录下创建一个名为 Dockerfile 的文件: # Dockerfile FROM python:3.10-slim # 设置工作目录 WORKDIR /app # 设置 pip 国内镜像源 (可选, 加快构建速度) RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple # 复制依赖文件并安装 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 复制项目代码到工作目录 COPY . . # 暴露 Django 应用运行的端口 EXPOSE 8000 # 运行 Django 开发服务器 (生产环境推荐使用 Gunicorn 或 uWSGI) # CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"] # 使用 Gunicorn (确保 gunicorn 在 requirements.txt 中) CMD ["gunicorn", "your_project_name.wsgi:application", "--bind", "0.0.0.0:8000"] # 将 your_project_name 替换为您的 Django 项目的实际名称 (wsgi.py 所在的目录名) 5.3 构建并运行 Django Docker 镜像 在包含 Dockerfile 的 Django 项目根目录下执行: # 构建 Docker 镜像 (将 django-backend 替换为您的镜像名) docker build -t django-backend . # 运行 Django 容器 # 确保旧的同名容器已停止并移除: # docker stop django-app && docker rm django-app docker run -d \ -p 8000:8000 \ -e DJANGO_SETTINGS_MODULE=your_project_name.settings \ --name django-app \ django-backend # 将 your_project_name.settings 替换为您的 Django settings 文件路径 第 6 步:配置 Nginx 反向代理 Nginx 将作为前端服务器,接收外部请求并将其转发到 Django 应用。 # 1. 创建 Nginx 配置文件 # 将 YOUR_SERVER_IP 替换为您的服务器公网 IP 或域名 sudo bash -c "cat <<EOF > /etc/nginx/sites-available/django_proxy server { listen 80; server_name YOUR_SERVER_IP; # 例如 123.45.6.78 或 example.com location / { proxy_pass http://127.0.0.1:8000; # Django 应用运行的地址和端口 proxy_set_header Host \$host; proxy_set_header X-Real-IP \$remote_addr; proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto \$scheme; } location /static/ { # 如果 Django 自己处理静态文件 (DEBUG=True) alias /srv/django-app/staticfiles/; # 替换为你的 Django 项目静态文件收集目录 } location /media/ { # 如果 Django 自己处理媒体文件 (DEBUG=True) alias /srv/django-app/media/; # 替换为你的 Django 项目媒体文件目录 } } EOF" # 2. 创建符号链接以启用该配置 # 先删除可能存在的默认配置的符号链接(如果它占用了 default_server) # sudo rm /etc/nginx/sites-enabled/default sudo ln -s /etc/nginx/sites-available/django_proxy /etc/nginx/sites-enabled/django_proxy # 3. 测试 Nginx 配置 sudo nginx -t # 4. 重启 Nginx 服务 sudo systemctl restart nginx 可视化操作与安全组说明 (Nginx & Django) 云服务器安全组: 确保 HTTP 端口 80/TCP 已对公网开放。 如果未来配置 HTTPS,也需要开放 443/TCP。 访问您的应用: 在浏览器中输入 http://YOUR_SERVER_IP (例如 http://123.45.6.78)。 如果一切配置正确,您应该能看到您的 Django 应用首页。 如果部署了 Swagger,可以尝试访问 http://YOUR_SERVER_IP:8000/api/swagger/ (路径取决于您的 Django URL 配置)。 第 7 步:自动化部署脚本 将以下脚本保存为 deploy_django_stack.sh,赋予执行权限 (chmod +x deploy_django_stack.sh),然后运行它。 请务必在使用前仔细阅读脚本内容,并根据您的实际情况修改占位符和配置! #!/bin/bash # --- 配置变量 (请务必根据您的实际情况修改!) --- SERVER_IP="123.45.6.78" # 您的服务器公网 IP POSTGRES_PASSWORD="YourSecurePostgresPassword!" MINIO_ROOT_USER="admin" MINIO_ROOT_PASSWORD="YourSecureMinioPassword!" DJANGO_PROJECT_NAME="backend" # 您 Django 项目中包含 wsgi.py 的目录名 # DJANGO_REPO_URL="https://github.com/your-username/your-backend-repo.git" # 您的 Django 代码仓库地址 # DJANGO_PROJECT_DIR="/srv/django-app" # Django 项目将被克隆/放置到的目录 echo "--- 服务器部署脚本 ---" echo "服务器 IP 将被设置为: $SERVER_IP" echo "PostgreSQL 'postgres' 用户密码将设置为: $POSTGRES_PASSWORD" echo "MinIO 管理员用户: $MINIO_ROOT_USER" echo "MinIO 管理员密码: $MINIO_ROOT_PASSWORD" echo "Django 项目名 (用于 Gunicorn): $DJANGO_PROJECT_NAME" # echo "Django 代码仓库: $DJANGO_REPO_URL" # echo "Django 项目目录: $DJANGO_PROJECT_DIR" read -p "确认以上信息正确并开始部署吗?(yes/no): " confirmation if [ "$confirmation" != "yes" ]; then echo "部署已取消。" exit 1 fi echo "--- 1. 系统初始化与依赖安装 ---" sudo apt update && sudo apt upgrade -y sudo apt install -y ca-certificates curl gnupg lsb-release nginx git echo "--- 2. 安装 Docker CE 和 Docker Compose ---" sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<EOF { "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com", "https://registry.docker-cn.com" ] } EOF sudo systemctl daemon-reload sudo systemctl restart docker sudo usermod -aG docker $USER echo "Docker 安装完成。请重新登录或执行 'newgrp docker' 以应用 docker 组权限。" echo "按 Enter 继续..." read echo "--- 3. 安装 PostgreSQL 并配置 ---" sudo apt install -y postgresql postgresql-contrib PG_VERSION=$(pg_lsclusters | awk 'NR==2 {print $1}') if [ -z "$PG_VERSION" ]; then echo "错误:无法检测到 PostgreSQL 版本。请手动配置。" exit 1 fi echo "检测到 PostgreSQL 版本: $PG_VERSION" sudo sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/g" /etc/postgresql/$PG_VERSION/main/postgresql.conf sudo sh -c "echo 'host all all 0.0.0.0/0 md5' >> /etc/postgresql/$PG_VERSION/main/pg_hba.conf" sudo systemctl restart postgresql sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '$POSTGRES_PASSWORD';" echo "PostgreSQL 安装和配置完成。" echo "--- 4. 部署 MinIO 对象存储 ---" sudo mkdir -p /minio/data sudo chmod -R 777 /minio/data # 确保 Docker 有权限写入 docker stop minio || true && docker rm minio || true # 确保旧容器被移除 docker run -d \ --name minio \ -p 9000:9000 \ -p 9001:9001 \ -v /minio/data:/data \ -e "MINIO_ROOT_USER=${MINIO_ROOT_USER}" \ -e "MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}" \ quay.io/minio/minio:latest \ server /data --console-address ":9001" echo "MinIO 部署完成。请访问 http://$SERVER_IP:9001 并使用以下凭据登录:" echo "用户名: $MINIO_ROOT_USER" echo "密码: $MINIO_ROOT_PASSWORD" echo "登录后,请手动创建 'media' 和 'static' 存储桶,并根据需要设置其访问策略为公开可读。" echo "按 Enter 继续..." read echo "--- 5. 部署 Django 后端应用 ---" # echo "克隆 Django 项目代码从 $DJANGO_REPO_URL 到 $DJANGO_PROJECT_DIR..." # sudo mkdir -p $DJANGO_PROJECT_DIR # sudo chown $USER:$USER $DJANGO_PROJECT_DIR # 确保当前用户有权限 # git clone $DJANGO_REPO_URL $DJANGO_PROJECT_DIR # cd $DJANGO_PROJECT_DIR echo "假设 Django 项目代码已位于当前目录或指定目录。" echo "请确保您的 Django 项目 (例如: ./backend/settings.py) 已配置好数据库和 MinIO 连接。" echo "数据库主机应指向 '$SERVER_IP' (如果 PostgreSQL 在宿主机上运行)。" echo "MinIO Endpoint URL 应指向 'http://$SERVER_IP:9000'。" echo "按 Enter 继续以创建 Dockerfile 并构建镜像..." read # 创建 Dockerfile cat <<EOF > Dockerfile FROM python:3.10-slim ENV PYTHONUNBUFFERED 1 WORKDIR /app RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . EXPOSE 8000 # 将 your_project_name 替换为您的 Django 项目名 (wsgi.py 所在的目录名) CMD ["gunicorn", "${DJANGO_PROJECT_NAME}.wsgi:application", "--bind", "0.0.0.0:8000"] EOF echo "Dockerfile 已创建。" echo "构建 Django Docker 镜像 (django-backend)..." docker build -t django-backend . echo "运行 Django Docker 容器 (django-app)..." docker stop django-app || true && docker rm django-app || true # 确保旧容器被移除 docker run -d \ -p 8000:8000 \ -e DJANGO_SETTINGS_MODULE=${DJANGO_PROJECT_NAME}.settings \ --name django-app \ django-backend echo "Django 应用容器已启动。" echo "按 Enter 继续配置 Nginx..." read echo "--- 6. 配置 Nginx 反向代理 ---" # Nginx 已在步骤1安装 sudo bash -c "cat <<EOF > /etc/nginx/sites-available/django_proxy server { listen 80; server_name $SERVER_IP; client_max_body_size 100M; # 允许上传大文件 location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host \$host; proxy_set_header X-Real-IP \$remote_addr; proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto \$scheme; } # 如果您希望 Nginx 直接处理静态文件和媒体文件 (生产环境推荐) # 请确保 Django 的 collectstatic 已将文件收集到 Nginx 可访问的路径 # location /static/ { # alias /path/to/your/django_project/staticfiles/; # 替换为实际路径 # } # location /media/ { # alias /path/to/your/django_project/mediafiles/; # 替换为实际路径 # } } EOF" # 确保旧的 default 站点(如果存在且冲突)被禁用 if [ -L /etc/nginx/sites-enabled/default ]; then sudo rm /etc/nginx/sites-enabled/default fi # 强制创建或更新符号链接 sudo ln -sf /etc/nginx/sites-available/django_proxy /etc/nginx/sites-enabled/django_proxy echo "测试 Nginx 配置..." sudo nginx -t if [ \$? -ne 0 ]; then echo "Nginx 配置测试失败!请检查 /etc/nginx/sites-available/django_proxy 文件。" exit 1 fi echo "重启 Nginx 服务..." sudo systemctl restart nginx echo "Nginx 配置完成。" echo "--- 部署完成!---" echo "请确保您的云服务器安全组已开放以下端口:" echo " - PostgreSQL: 5432/TCP (如果需要远程访问数据库)" echo " - MinIO API: 9000/TCP" echo " - MinIO 控制台: 9001/TCP" echo " - HTTP (Nginx): 80/TCP" echo "" echo "您现在应该可以通过 http://$SERVER_IP 访问您的 Django 应用。" echo "MinIO 控制台: http://$SERVER_IP:9001" echo "如果 Django 应用需要数据库迁移,请在容器内执行:" echo " docker exec -it django-app python manage.py makemigrations your_app_name" echo " docker exec -it django-app python manage.py migrate" echo "如果需要创建超级用户:" echo " docker exec -it django-app python manage.py createsuperuser" 8. 用户数据迁移策略 (可选) 当系统用户量增长,或者需要从旧系统迁移数据时,需要考虑数据迁移策略。 新用户注册与数据处理: Django Auth: Django 自带的 django.contrib.auth 系统能很好地处理新用户注册、密码哈希存储、登录认证等。当新用户通过您的 API (例如 /api/register/) 注册时,会在 auth_user 表(或您自定义的用户模型表)中创建一条记录。 关联用户信息 (UserInfo): 如果您有一个单独的 UserInfo 模型通过 OneToOneField 或 ForeignKey 关联到主用户模型,确保在用户注册成功后,或用户首次编辑个人资料时,创建或更新对应的 UserInfo 记录。user_id 将作为关联两个表的键。 从旧系统迁移数据 (如果适用): 数据导出: 从旧系统导出用户数据,通常为 CSV、JSON 或 SQL dump 格式。 数据清洗与转换: 清洗数据,使其符合新系统的数据模型。特别注意密码的处理,如果旧系统密码哈希算法与 Django 不兼容,用户可能需要在首次登录新系统时重置密码。 数据导入: Django 管理命令: 编写自定义的 Django management command (python manage.py your_custom_command),使用 Django ORM 来创建用户和关联信息。这是推荐的方式,因为它会处理所有模型逻辑和信号。 直接 SQL: 对于非常大的数据集,直接使用 SQL 导入到 PostgreSQL 可能更快,但需要非常小心,确保数据完整性和关联正确,并且后续可能需要手动处理 Django 的 contenttypes 等。 第三方库: 例如 django-import-export 库可以帮助处理复杂的数据导入导出。 数据完整性与验证: 在导入过程中,使用 Django 模型的 full_clean() 方法或表单验证来确保数据符合新模型的约束。 利用数据库的约束(如 UNIQUE, NOT NULL)来保证数据质量。 处理静态文件和媒体文件 (如头像): 如果旧系统有用户上传的文件,需要将这些文件迁移到新的存储位置(例如 MinIO)。 更新数据库中指向这些文件的路径或 URL。 如果文件名或路径结构发生变化,需要编写脚本来批量更新。 扩展性考虑: 数据库: PostgreSQL 本身具有良好的扩展性。对于非常大的负载,可以考虑读写分离、分区等策略。 Django 应用: 使用 Gunicorn 或 uWSGI 配合多个 worker 进程可以处理更多并发请求。Nginx 作为反向代理可以进行负载均衡。 缓存: 对常用数据和计算结果使用缓存(如 Redis、Memcached)可以显著提高性能。 备份与恢复: 数据库: 定期使用 pg_dump 备份 PostgreSQL 数据库。制定恢复计划。 MinIO: 定期备份 MinIO 的数据卷 (/minio/data)。MinIO 也支持自身的复制和纠删码功能来提高数据可靠性。 应用代码和配置: 使用版本控制 (如 Git) 管理代码,并备份 Docker 镜像和相关配置文件。 9. MinIO 和 Django (Docker) Debug 指南 在部署和运行 MinIO 及 Docker化的 Django 应用时,可能会遇到一些常见问题。以下是一些调试步骤和技巧,结合了您之前遇到的情况: 9.1 MinIO Client (mc) 相关问题 mc: Segmentation fault: 原因: mc 二进制文件损坏、与系统架构不兼容(例如在 ARM 服务器上运行了 AMD64 版本)或下载不完整。 解决方案: 彻底卸载旧/损坏的 mc: sudo rm -f /usr/local/bin/mc which mc # 确认已删除,应无输出 下载正确的官方版本 (假设为 linux-amd64): wget https://dl.min.io/client/mc/release/linux-amd64/mc chmod +x mc sudo mv mc /usr/local/bin/ 验证: mc --version 检查文件类型: file /usr/local/bin/mc (应显示 ELF 64-bit LSB executable, x86-64,...) mc alias set ...: The request signature we calculated does not match…: 原因: Access Key / Secret Key 错误: 您提供的 admin 和 SecurePassword123! (或您实际使用的密码) 与 MinIO 服务启动时配置的 MINIO_ROOT_USER / MINIO_ROOT_PASSWORD 不匹配。 Endpoint URL 错误: URL 格式不正确 (例如多了斜杠 http://123.45.6.78/:9000) 或地址/端口错误。正确应为 http://YOUR_SERVER_IP:9000。 MinIO 服务未运行或端口 9000 未正确映射/防火墙未开放。 解决方案: 确认 MinIO 容器正在运行且端口 9000 已映射: docker ps | grep minio 仔细核对 mc alias set 命令中的 Access Key (用户名), Secret Key (密码), 和 Endpoint URL。 确保密码中没有特殊字符导致命令行解析问题,或者用单引号包裹密码:mc alias set myminio http://123.45.6.78:9000 admin 'YourSecureMinioPassword!' mc admin user password ...: password is not a recognized command: 原因: mc 版本过旧,不支持该子命令。 命令语法错误。 解决方案: 升级 mc: 确保您使用的是最新版本的 mc (参考上面安装步骤)。 正确语法: mc admin user password ALIAS USERNAME NEW_PASSWORD 例如: mc admin user password myminio admin 'NewSecurePassword123!' (确保 myminio 别名已成功设置)。 9.2 Docker 相关问题 docker run ...: address already in use (e.g., for port 8000): 原因: 您尝试映射到宿主机的端口 (例如 8000) 已经被其他进程占用。 解决方案: 查找并停止占用端口的进程: sudo lsof -i :8000 # 或 sudo netstat -tulnp | grep 8000 # 找到 PID 后,使用 sudo kill <PID> 或 sudo kill -9 <PID> 如果占用者是另一个 Docker 容器,先停止并移除它: docker ps -a # 查看所有容器,找到占用端口的容器 docker stop <container_id_or_name> docker rm <container_id_or_name> 或者,更改您当前要运行的容器的端口映射,例如将 Django 映射到宿主机的 8001 端口: docker run -p 8001:8000 ... (同时需要更新 Nginx 配置中的 proxy_pass 指向 http://127.0.0.1:8001;) docker run ...: Conflict. The container name “/django-app” is already in use…: 原因: 已存在一个同名的 Docker 容器 (即使它已停止)。 解决方案: 删除旧的同名容器: docker rm django-app (如果容器已停止) 或 docker stop django-app && docker rm django-app (如果正在运行)。 或者,为新容器指定一个不同的名称:docker run --name django-app-v2 ... docker run ...: invalid reference format或django-backend: command not found`: 原因: Docker 无法找到您指定的镜像 django-backend。 镜像名称拼写错误或大小写不匹配 (Docker 镜像名通常是小写)。 镜像尚未成功构建,或者构建时使用了不同的标签。 解决方案: 确认镜像是否存在且名称正确: docker images | grep django-backend 如果不存在,请确保在 Django 项目根目录 (包含 Dockerfile) 下重新构建: docker build -t django-backend . 确保 docker run 命令中使用的镜像名称与 docker images 中显示的完全一致。 9.3 Django (Docker 内部) 调试 检查 Django 容器状态和日志: docker ps -a | grep django-app # 查看容器是否正在运行 docker logs django-app # 查看 Django 容器的实时日志(非常重要!) 日志会显示 Gunicorn/Django 的启动信息、任何 Python 错误、数据库连接问题等。 进入 Django 容器内部进行调试: docker exec -it django-app bash # 进入容器的 shell 进入容器后,您可以: 检查文件是否存在,路径是否正确。 手动运行 python manage.py check 查看是否有配置问题。 尝试连接数据库:python manage.py dbshell (如果安装了 psql 客户端)。 查看环境变量是否正确设置。 数据库连接问题: 错误: 日志中可能出现 OperationalError: could not connect to server 或类似错误。 检查: PostgreSQL 服务是否在宿主机或另一容器中运行。 Django settings.py 中的 DATABASES 配置(HOST, PORT, NAME, USER, PASSWORD)是否正确。 如果 PostgreSQL 在宿主机,Django 容器是否能访问到宿主机的 IP 和端口。可能需要在 docker run 时使用 --network="host" (不推荐,除非必要) 或确保 Docker 网络配置允许。更常见的是使用服务器的公网 IP (确保 PostgreSQL 监听 * 且防火墙允许)。 PostgreSQL 的 pg_hba.conf 是否允许来自 Docker 容器 IP 地址范围的连接。 9.4 Nginx 调试 nginx: [emerg] invalid number of arguments in "proxy_set_header" directive...: 原因: proxy_set_header 指令语法错误,通常是参数数量不对或变量名错误。 示例错误: proxy_set_header X-Forwarded-For $remote_addr; 正确示例: proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 解决方案: 仔细检查 Nginx 配置文件 (/etc/nginx/sites-available/django_proxy) 中的所有 proxy_set_header 指令,确保它们都遵循 proxy_set_header <字段名> <值>; 的格式。 注意变量: Nginx 内置变量如 $host, $remote_addr, $proxy_add_x_forwarded_for 不需要额外的转义符。 Nginx 502 Bad Gateway: 原因: Nginx 无法连接到 proxy_pass 指令中指定的后端 Django 应用。 解决方案: 确认 Django 容器运行: docker ps | grep django-app。 检查 Django 容器日志: docker logs django-app,查看是否有启动错误。 确认 Django 监听端口: 确保 Django 应用 (Gunicorn) 在容器内部监听 0.0.0.0:8000。 确认 Nginx proxy_pass 地址: 通常是 http://127.0.0.1:8000; (因为 Django 容器的 8000 端口映射到了宿主机的 8000 端口,Nginx 从宿主机访问此端口)。 网络测试: 在服务器上尝试 curl http://127.0.0.1:8000,看是否能访问到 Django 应用。 Django 404 for /swagger/ (但 /api/swagger/ works): 原因: 访问的 URL 路径与 Django urls.py 中定义的路由不匹配。 解决方案: 确保您在浏览器中访问的是 Django urls.py 中为 Swagger UI 定义的正确路径,例如 http://YOUR_SERVER_IP/api/swagger/。 9.5 通用调试技巧 逐步验证: 从底层服务(PostgreSQL, MinIO)开始,确保它们独立运行时正常,然后再验证 Django 应用,最后是 Nginx。 简化配置: 如果遇到复杂问题,尝试暂时简化配置(例如,移除 Nginx,直接暴露 Django 容器端口进行测试)以缩小问题范围。 查看所有日志: 同时关注 PostgreSQL, MinIO, Django (Gunicorn), Nginx 的日志,它们通常会提供关键的错误信息。 网络工具: 使用 ping, curl, telnet, netstat, ss 等工具检查网络连通性和端口监听情况。 # 检查端口是否被监听 sudo netstat -tulnp | grep 5432 # PostgreSQL sudo netstat -tulnp | grep 9000 # MinIO API sudo netstat -tulnp | grep 9001 # MinIO Console sudo netstat -tulnp | grep 8000 # Django App / Nginx sudo netstat -tulnp | grep 80 # Nginx 通过这些步骤,您应该能够定位并解决部署过程中遇到的大部分问题。
Techniques
· 2025-05-26
QM/MM Study of Enzymatic Reactions: Analysis of Chu et al. (2014) Paper
基本信息 Wen-Ting Chu, Qing-Chuan Zheng* and Hong-Xing Zhang 作者来自吉林大学理论化学研究所 发表于 Phys.Chem.Chem.Phys., 2014, 16, 3946 DOI:https://doi.org/10.1039/C3CP53935K 论文摘要 双磷酸甘油酸变位酶(bisphosphoglycerate mutase, BPGM)是一种多功能酶,其主要功能是合成血红蛋白的变构效应物——2,3-双磷酸甘油酸(2,3-BPG)。该酶亦可催化2,3-BPG水解生成3-磷酸甘油酸(3-PGA)。本研究通过量子力学/分子力学(QM/MM)方法,结合元动力学(metadynamics)和伞形采样(umbrella sampling)模拟,从理论角度揭示了人类双磷酸甘油酸变位酶(hBPGM)磷酸酶与合酶活性的反应机制。模拟结果不仅呈现了两类反应路径的自由能曲线,还阐明了活性位点中关键残基(如His11和Glu89)的作用。此外,反应能量势垒计算表明,hBPGM的合酶活性显著高于磷酸酶活性,且理论估算的势垒值与实验数据高度吻合。本研究为深入解析双磷酸甘油酸变位酶家族的催化机制提供了重要理论依据。 关键词:双磷酸甘油酸变位酶;QM/MM模拟;自由能曲线;能量势垒;变构效应物 Introduction hBPGM是一种红细胞特异性多功能酶,具有合酶(EC 5.4.2.4)、变位酶(EC 5.4.2.1)和磷酸酶(EC 3.1.3.13)三种活性,其核心功能是催化1,3-双磷酸甘油酸(1,3-BPG)转化为2,3-双磷酸甘油酸(2,3-BPG)。作为血红蛋白的关键变构效应物,2,3-BPG通过稳定脱氧血红蛋白构象调控氧运输效率。尽管三种活性共享同一活性位点,实验表明合酶活性显著高于其他两种,而磷酸酶活性则负责水解2,3-BPG生成3-磷酸甘油酸(3-PGA)。Wang等人通过晶体结构研究(PDB: 2H4Z)揭示了活性位点残基His11与Glu89的催化作用,并提出磷酸酶反应遵循S2机制:His11作为亲核攻击位点夺取底物的磷酸基团,Glu89则通过质子转移稳定中间态。然而,hBPGM催化过程中原子尺度动态路径(如过渡态构型、自由能变化)仍缺乏理论解析。 为此,本研究首次采用量子力学/分子力学(QM/MM)方法,结合元动力学(metadynamics)和伞形采样(umbrella sampling)模拟,系统性分析磷酸酶与合酶活性的反应路径与能量势垒,旨在从理论层面揭示hBPGM催化特异性的分子基础,为酶家族功能演化与药物设计提供新见解。 Fig. 1 The proposed mechanisms for the phosphatase and the synthase reactions. Methods 体系初始模型构建 研究基于人源双磷酸甘油酸变位酶(hBPGM)与底物2,3-BPG的复合物晶体结构(PDB: 2H4Z,分辨率1.50 Å),选取单体链A(Ser2-Gln256)作为分子动力学(MD)模拟的初始结构。 所有结晶水分子被保留,活性位点残基的质子化状态通过PROPKA在线工具(http://propka.ki.ku.dk/)确定:Glu89保持质子化,His11在δ位点单质子化,以匹配催化机制的需求。 缺失的氢原子通过AMBER 12软件的LEaP模块添加,蛋白质参数采用ff99SB力场,底物2,3-BPG的参数由通用Amber力场(GAFF)生成。 体系电荷通过添加钠离子中和,并置于TIP3P水分子填充的八面体周期箱中,确保蛋白质外层与水箱壁的最小距离为8.0 Å。 分子动力学模拟 hBPGM/2,3-BPG复合物的经典MD模拟分为能量优化、平衡与生产三阶段: 能量最小化:分两步进行,首先对水分子和离子进行2000步最速下降法+3000步共轭梯度法优化,随后对全体系重复相同流程以消除空间冲突。 升温与平衡:在NVT系综下以1 K/ps速率升温至300 K,随后进行200 ps平衡模拟,期间对蛋白质Cα原子和配体原子施加弱限制(力常数0.5 kcal/mol/Ų)。 production模拟:在NPT系综下进行20 ns自由MD模拟,采用SHAKE算法约束氢键,粒子网格Ewald(PME)方法处理长程静电相互作用(截断值10 Å),时间步长2 fs。体系稳定性通过蛋白质骨架均方根偏差(RMSD≈1.3 Å)和配体构象(RMSD≈1.0 Å)验证,所有结构可视化由PyMOL完成。 QM/MM元动力学模拟 基于平衡后的MD构象,采用AMBER软件结合PLUMED 1.3插件进行量子力学/分子力学(QM/MM)元动力学模拟。 QM区域包含底物2,3-BPG、His11和Glu89,MM区域为体系其余部分,QM/MM边界通过引入四个氢连接原子处理。 每部分模拟运行1 ns,采用PM3半经验方法,高斯势宽度0.35 Å、权重0.1 kcal/mol,并设置±3.0 Å能量墙防止基团逃逸。自由能面(FES)通过累积的高斯势构建,过渡态(TS)通过能量最高点确定。 在QM/MM元动力学模拟中,磷酸酶和合酶活性的反应路径通过原子间距离差作为集体变量(Collective Variables, CVs)进行描述,具体定义如下: 磷酸酶活性 第一步(磷酸基团转移至His11) 反应坐标(ξ₁):定义为底物磷酸基团的O3-P10键长与P10-His11的NE2原子键长之差,即: R(O3−P10)−R(P10−NE2) 物理意义:正值增大时,O3-P10键断裂(距离增大),P10-NE2键形成(距离缩短),反映磷酸基团从底物转移至His11的进程。 第二步(Glu89质子转移) 反应坐标(ξ₂):定义为Glu89的OE2-HE2键长与HE2-O3(底物)键长之差,即: R(OE2−HE2)−R(HE2−O3) 物理意义:负值增大时,Glu89的HE2质子向底物O3转移,促进磷酸基团脱离(图1)。 合酶活性 第一步反应 反应坐标(ξ₃):定义为His11的P10-NE2键长与底物1,3-BPG的P10-O6键长之差,即: R(P10−NE2)−R(P10−O6) 物理意义:正值减小时,P10-O6键断裂(距离增大),P10-NE2键形成(距离缩短),反映磷酸基团从His11转移至底物的逆过程(与磷酸酶第一步相反)。 后两步实际上就是磷酸酶催化的逆反应,不用再模拟一遍了。 伞形采样验证 为验证元动力学结果,对同一体系进行伞形采样分析。 磷酸酶反应的两步及合酶反应的第一步被划分为多个窗口(步长0.1 Å,范围-3.0~3.0 Å),每个窗口进行50 ps采样(力常数200 kcal/mol/Ų)。初始构象从前一窗口末帧延续,采用PM3/ff99SB组合力场。 数据通过加权直方分析法(WHAM)整合,去除谐波势影响后计算平均力势(PMF)。 与元动力学相比,伞形采样在QM/MM边界处调整氢连接原子位置(Cα-Cβ键),以提高计算精度。 Results 普通MD模拟 hBPGM单体具有a/b折叠结构,包含两个域,六个β链和十个α螺旋。 进行了20纳秒的MD模拟以获取该复合物的稳定构象,用于进一步机制研究。 能量及稳定性评估 总能量结果显示,在MD模拟后,复合物达到了平衡状态。 蛋白质和配体相对于晶体结构的均方根偏差(RMSD)值表明,在整个MD运行过程中,蛋白质骨架RMSD稳定在约1.3 Å;而配体2,3-BPG在初始100皮秒后的RMSD保持在大约1.0 Å,没有发生构象变化。 均方根波动(RMSF)分析显示蛋白质中有两个片段(Glu127到Gln151和Glu224到Gln251)存在较大的构象变化,但这些区域都是远离活性位点的柔性环区。 氢键网络:2,3-BPG带五个负电荷并拥有十个氧原子作为氢键供体,与多个hBPGM残基形成了一系列氢键,包括Arg10、His11等。 磷酸基团:2,3-BPG中的两个磷酸基团被不同的口袋包围,分别由特定的精氨酸和其他催化残基稳定,形成了反应中心,对于合成酶和磷酸酶活性至关重要。 综上所述,通过MD模拟证明了hBPGM/2,3-BPG复合物已达到平衡,为后续的量子力学/分子力学(QM/MM)机制计算做好了准备。 磷酸酶活性(Phosphatase Activity)的结果 hBPGM的磷酸酶活性催化2,3-双磷酸甘油酸(2,3-BPG)水解为3-磷酸甘油酸(3-PGA),其反应机制分为两步,通过量子力学/分子力学(QM/MM)结合元动力学(metadynamics)和伞形采样(umbrella sampling)方法进行模拟,具体结果如下: 1. 磷酸酶反应的两步机制与能量势垒 第一步:磷酸基团转移(2,3-BPG → His11) 反应坐标: ξ1监测O3-P10键断裂(距离从1.7 Å增至4.0 Å)和P10-NE2键形成(距离从4.0 Å缩短至1.8 Å)。 能量势垒 元动力学:25.75 kcal/mol(TS1b,对应ξ₁=0.81 Å)。 伞形采样:21.61 kcal/mol(TS1a,ξ₁=-0.59 Å)。 构象变化 His11的咪唑环旋转60°,形成共价键(图3B)。 Mulliken电荷显示O3电荷从-0.688(反应物R)变为-0.852(中间态I),NE2电荷从-0.178变为-0.102,表明电子重排(表1)。 第二步:质子转移(Glu89 → O3) 反应坐标: ξ2 监测Glu89的HE2质子转移至O3(OE2-HE2距离从1.2 Å增至2.3 Å,HE2-O3距离从3.0 Å缩短至1.3 Å)。 能量势垒 元动力学:5.21 kcal/mol(TS2,ξ₂=-0.1 Å)。 伞形采样:6.32 kcal/mol(ξ₂=-0.18 Å)。 Glu89的作用 Glu89羧基旋转90°,与O3形成氢键,稳定中间态(图6)。 O3电荷从-0.930(中间态I)变为-0.434(产物P),OE2电荷从-0.353变为-0.701(表2)。 2. 方法比较 能量势垒差异:伞形采样因更精细的窗口划分(步长0.1 Å)和氢连接原子优化(Cα-Cβ键),其势垒(21.61 kcal/mol)较元动力学(25.75 kcal/mol)更接近实验推算值(20.63 kcal/mol)。 过渡态构象验证: 两种方法的过渡态构型中,P10-NE2距离分别为2.4 Å(元动力学)和2.5 Å(伞形采样),高度一致(图5)。 结论 磷酸酶活性的限速步骤为第一步的高能量势垒(约20 kcal/mol),而Glu89的质子转移显著加速第二步反应。QM/MM模拟结果与Wang等人的实验数据(S2机制)一致,揭示了hBPGM催化中残基协同作用的分子基础,为靶向酶活性调控提供了理论依据。 His11:作为亲核攻击位点,直接参与磷酸基团转移。 Glu89:通过质子转移降低第二步势垒,促进磷酸基团脱离。 Arg10/Arg62:通过氢键稳定磷酸基团,降低反应能量需求(图2E)。 合酶活性(Synthase Activity)的结果 合酶活性催化1,3-双磷酸甘油酸(1,3-BPG)转化为2,3-双磷酸甘油酸(2,3-BPG),包含三个步骤,其中后两步为磷酸酶反应的逆过程。研究通过QM/MM元动力学和伞形采样模拟,揭示了以下关键结果: 1. 反应路径与能量势垒 第一步(磷酸基团转移): 反应坐标定义为P10(磷酸基团磷原子)与His11的NE2原子距离差(ξ₃ = R(P10-NE2) – R(P10-O6))。元动力学模拟显示能量势垒为12.98 kcal/mol(TS1),伞形采样结果为9.47 kcal/mol(图4B)。过渡态(TS1)对应ξ₃ ≈ -0.69 Å,此时P10-NE2距离从4.7 Å缩短至3.4 Å(元动力学)或2.5 Å(伞形采样),P10-O6距离从1.8 Å延长至4.5 Å(表3)。 限速步骤(第三步:3-PGA → 2,3-BPG): 元动力学计算势垒为19.36 kcal/mol,伞形采样势垒为15.24 kcal/mol,与实验推算值16.49 kcal/mol(基于速率常数kcat = 13.63 s⁻¹)高度吻合(图7A)。产物态(2,3-BPG)自由能显著低于反应物态(-6.40 kcal/mol),表明反应热力学有利。 2. 原子相互作用与电荷变化 His11的动态作用 His11位于柔性loop区域,在第一步中向1,3-BPG移动并旋转约30°,捕获磷酸基团(图8)。 Mulliken电荷分析显示,NE2原子电荷从-0.253(反应物R)变为-0.126(中间态I1),O6原子电荷从-0.296变为-0.779,表明磷酸基团转移伴随电子重排(表3)。 Arg10与Arg62的稳定作用: 这两个精氨酸通过氢键稳定磷酸基团,降低反应势垒。 突变实验证实,Cys23和Ser24的突变(如C23T、S24G)显著降低合酶活性,因其破坏底物与蛋白质的氢键网络(图8)。 3. 构象变化与二面角调整 底物构象重排: 反应过程中,1,3-BPG的O5和O6原子向Cys23和Ser24旋转,形成新的氢键(图8)。二面角O5-C11-C1-O3从-27.93°(R态)变为82.07°(I1态),表明羟基(O3)向Glu89方向旋转,为后续质子转移做准备(表3)。 后面就是O3被拔掉质子,夺回磷酸了 4. 方法比较 元动力学 vs. 伞形采样: 伞形采样因更精确的氢连接原子处理(Cα-Cβ键)和窗口划分(步长0.1 Å),其势垒值(9.47 kcal/mol)较元动力学(12.98 kcal/mol)更接近实验数据。 合酶活性优势: 合酶总势垒(15.24 kcal/mol)显著低于磷酸酶(21.61 kcal/mol),与实验测得的速率常数差异(合酶13.63 s⁻¹ vs. 磷酸酶0.0125 s⁻¹)一致,解释了hBPGM以合酶活性为主导的生理功能。 评论:妙就妙在磷酸酶势垒最高的一步是N从O上抢走P,众所周知PO一家亲,而这正好为合酶提供了自由能的降低。人家合酶是拆掉磷酸-羧酸酐,自然势垒不那么高,还不用质子转移。 结论 合酶活性通过His11的定向移动、Arg10/Arg62的静电稳定及底物构象调整,高效催化磷酸基团转移。QM/MM模拟不仅验证了Wang等人提出的S2机制,还量化了残基协同作用对降低能量势垒的贡献,为设计调控2,3-BPG水平的药物提供了原子级理论依据。 活性位点的其他残基 图9展示了在磷酸酶反应的TS1b状态(A)和P状态(B),以及合成酶反应的TS1(C)和R状态(D)下活性区域内的关键相互作用。与反应相关的残基被标记出来,它们之间的氢键以黑色虚线表示。这些信息强调了这些关键残基在催化过程中的重要作用。 能量障碍:通常情况下,断裂一个O-P键需要大约80.06 kcal/mol的能量。然而,在hBPGM反应中,由于催化残基及其他活性位点残基的贡献,这一能量障碍显著降低。 正电荷氨基酸的作用:底物磷酸基团周围存在多个正电荷的氨基酸(如精氨酸),它们与磷酸基团的负电氧原子有强烈的相互作用,有助于稳定过渡态。 具体作用: Arg10 和 Arg62:两个精氨酸残基通过氢键与释放的磷酸基团相互作用,在磷酸酶和合成酶活性过程中帮助稳定过渡态。 His188:在反应开始前,His188通过氢键与His11相互作用,帮助其在hBPGM中达到正确位置并参与底物与蛋白质的结合。His188还形成氢键与磷酸基团及His11的NE2原子相连,减少了反应路径长度(从NE2到P10),使磷酸基团朝向His11的方向移动。 在磷酸基团从底物转移到His11之后,Arg10、Arg62和His188通过氢键与磷酸基团相互作用,有助于保持中间体结构的稳定性。 重要性:这些残基对于磷酸酶活性和合成酶活性反应至关重要,它们不仅降低了反应的能量障碍,而且通过特定的相互作用稳定了过渡态和中间体,从而促进了反应的进行。 论文总结 本文通过对人类bisphosphoglycerate mutase (hBPGM)的量子力学/分子力学 (QM/MM)模拟研究,成功地揭示了该酶在磷酸化和脱磷酸化反应中的催化机制,并提供了关于其动力学特性的定量估计。 研究人员使用了经典分子动力学(MD)结合QM/MM和metadynamics以及umbrella sampling方法,这些方法为研究生物大分子的动力学行为提供了一种准确而有效的方法。 研究结果表明,hBPGM的主要活性是合成酶,而不是磷酸酶或异构酶,这与之前的研究结果一致。 通过本研究,可以更好地理解hBPGM在调节红细胞中2,3-BPG水平方面的作用,这对于深入研究hBPGM在疾病治疗方面的应用具有重要意义。 未来展望 未来可以通过进一步的研究,探索hBPGM在不同生理条件下的功能差异,例如氧气浓度、pH值等,以更好地了解其在调节2,3-BPG水平方面的作用。 可以尝试将其他计算方法(如蒙特卡罗模拟)与QM/MM相结合,以更全面地研究生物大分子的动态性质。 可以探索hBPGM与其他相关酶之间的相互作用,以更好地理解它们在代谢途径中的协同作用。 个人Comments 比较经典的画反应过程的工作,也没有任何额外的东西,可以借鉴其流程。确定一个好的构象,开跑就完了 表明His确实可以亲核进攻磷酸酯,能垒也确实挺高的,20多kcal/mol,看来我得be cautious了 由于是用伞形采样画PMF,得到的是free energy surface;簇模型应该只能得到potential energy surface,看来还是MD好 反正都是距离作为CV,伞形采样就行了,不用metaD了。metaD可能就是可以同时算多个距离,但伞形采样也可以设多个group吧。 只设置距离作为CV,也能把二面角(单键转动)同时模拟出来 部分结构图画得有点丑。。。不能把蛋白残基和底物区分一下颜色嘛 看来画FES就应该是直接用WHAM算出来的结果作图,没想象中这么麻烦 文章内容总结主要由AI完成,如有错误恳请指出!
Molecular Dynamics
· 2025-03-13
Plotting congeneric ligands in rdkit
Plotting congeneric ligands in rdkit Introduction When working with series of similar molecules, quickly identifying differences is crucial. However, default visualization in rdkit gives us a messed molecular orientations. A few lines of code can significantly aid in this by visually aligning molecular scaffolds. Molecules Here’s how you can utilize the RDkit to visualize and compare small molecule structures in 2D from a SMILES file named ligands.smi file: OC(=O)c1ccc(CN2C(=O)C3(CCN(CC3)S(=O)(=O)c4cccs4)c5cc(Br)ccc25)cc1 Brc1ccc2N(Cc3ccc(cc3)c4nnn[nH]4)C(=O)C5(CCN(CC5)S(=O)(=O)c6cccs6)c2c1 OC(=O)c1ccc(CN2C(=O)C3(CCN(CC3)S(=O)(=O)c4ccccc4Cl)c5cc(Br)ccc25)cc1 COC(=O)c1ccc(CN2C(=O)C3(CCN(CC3)S(=O)(=O)c4cccs4)c5cc(Br)ccc25)cc1 COC(=O)c1ccc(CN2C(=O)C3(CCN(CC3)S(=O)(=O)c4ccccc4Cl)c5cc(Br)ccc25)cc1 Oc1ccc(CN2C(=O)C3(CCN(CC3)S(=O)(=O)c4cccs4)c5cc(Br)ccc25)cc1 OC(=O)c1ccc(CN2C(=O)C3(CCN(CC3)S(=O)(=O)c4ccccc4Br)c5cc(Br)ccc25)cc1 Brc1ccc2N(Cc3ccncc3)C(=O)C4(CCN(CC4)S(=O)(=O)c5cccs5)c2c1 OC(=O)c1ccc(CN2C(=O)C3(CCN(CC3)S(=O)(=O)c4ccccc4)c5cc(Br)ccc25)cc1 OC(=O)c1ccc(CN2C(=O)C3(CCN(CC3)S(=O)(=O)c4cccc(Cl)c4Cl)c5cc(Br)ccc25)cc1 OC(=O)c1ccc(CN2C(=O)C3(CCN(CC3)S(=O)(=O)c4c(Cl)cccc4Cl)c5cc(Br)ccc25)cc1 OC(=O)c1cccc(CN2C(=O)C3(CCN(CC3)S(=O)(=O)c4cccs4)c5cc(Br)ccc25)c1 OC(=O)COc1ccc(CN2C(=O)C3(CCN(CC3)S(=O)(=O)c4ccccc4Cl)c5cc(Br)ccc25)cc1 Cc1c(Cl)cccc1S(=O)(=O)N2CCC3(CC2)C(=O)N(Cc4ccc(cc4)C(=O)O)c5ccc(Br)cc35 OC(=O)c1ccc(CN2C(=O)C3(CCN(CC3)S(=O)(=O)c4cccc(Cl)c4F)c5cc(Br)ccc25)cc1 OC(=O)c1ccc(CN2C(=O)C3(CCN(CC3)S(=O)(=O)c4cc(Cl)ccc4Cl)c5cc(Br)ccc25)cc1 OC(=O)c1ccc(CN2C(=O)C3(CCN(CC3)S(=O)(=O)c4ccccc4F)c5cc(Br)ccc25)cc1 Cc1ccccc1S(=O)(=O)N2CCC3(CC2)C(=O)N(Cc4ccc(cc4)C(=O)O)c5ccc(Br)cc35 CS(=O)(=O)c1ccccc1S(=O)(=O)N2CCC3(CC2)C(=O)N(Cc4ccc(cc4)C(=O)O)c5ccc(Br)cc35 OC(=O)COc1ccc(CN2C(=O)C3(CCN(CC3)S(=O)(=O)c4cccs4)c5cc(Br)ccc25)cc1 Visualization Script To visualize these molecules in 2D aligned to their most common substructure, follow the Python script below: # Import necessary modules from RDKit for molecular operations and visualization from rdkit import Chem from rdkit.Chem import Draw, AllChem, rdFMCS # Define a function to align molecules in 2D based on their maximum common substructure def align_mols_2d(mols): # Find the maximum common substructure (MCS) among the molecules mcs = Chem.rdFMCS.FindMCS(mols, atomCompare=rdFMCS.AtomCompare.CompareAny, bondCompare=rdFMCS.BondCompare.CompareAny, ringMatchesRingOnly=True) core = Chem.MolFromSmarts(mcs.smartsString) # Convert MCS to a SMARTS pattern for common core structure _ = AllChem.Compute2DCoords(core) # Compute 2D coordinates for the core structure # Iterate over each molecule in the list for i in range(len(mols)): _ = AllChem.Compute2DCoords(mols[i]) # Compute initial 2D coordinates for molecule # Align each molecule to the common core structure to emphasize structural similarities _ = AllChem.GenerateDepictionMatching2DStructure(mols[i], core) # Normalize the depiction of molecules for uniform appearance _ = AllChem.NormalizeDepiction(mols[i]) # Specify the filename containing SMILES strings file = 'ligands.smi' mols = [] # Initialize an empty list to store molecule objects lines = open(file, 'r').readlines() # Read all lines from the SMILES file # Convert each SMILES string into an RDKit molecule object and append to the list for smi in lines: mols.append(Chem.MolFromSmiles(smi.strip())) # Generate a list of labels for the molecules, simply numbered in the order they appear legends = [str(i + 1) for i in range(len(mols))] # Call the function to align molecules based on their MCS align_mols_2d(mols) # Create a grid image of the aligned molecules using RDKit's drawing module img = Draw.MolsToGridImage(mols, molsPerRow=5, subImgSize=(500, 250), useSVG=True, legends=legends) # Save the image to a file in SVG format for high-quality vector graphics output with open(file + '.svg', 'w') as f: f.write(img) Result: [!TIP] In RDKit, adjusting the figure size of individual images can help control the relative size of the annotations. If the molecules are large, consider increasing the figure size to ensure details are visible. If some molecules do not align well, consider relaxing the MCS criteria. Adjustments like atomCompare=rdFMCS.AtomCompare.CompareAny, bondCompare=rdFMCS.BondCompare.CompareAny, ringMatchesRingOnly=True might help. In extreme cases where alignment is still problematic, removing outliers from the dataset could be necessary. [!WARNING] The resulting figure might not be aesthetically pleasing. Use this script primarily for structural comparison rather than official presentations. Advanced Considerations For users looking to customize this script further or tackle more complex scenarios, understanding the parameters and their effects is crucial. Experiment with different settings to find what best suits your specific set of molecules. This revised article now includes a structured approach to visualizing molecular structures using RDKit, complete with code comments and Markdown styling that enhance the clarity and usability of the information provided. #!/usr/bin/python # python aligned_depiction.py ligands.sdf import warnings warnings.simplefilter(action='ignore', category=Warning) import argparse from rdkit import Chem from rdkit.Chem import Draw, AllChem, rdFMCS from rdkit.Chem import rdGeometry, rdMolAlign, rdmolops from sklearn.cluster import DBSCAN import numpy as np # from FEbuilder.setup.utils import see_mol class CustomMetavarFormatter(argparse.RawTextHelpFormatter): """ Reference: https://devpress.csdn.net/python/62fe2a1dc67703293080479b.html If the optional takes a value, format is: ``-s ARGS, --long ARGS``; Now changed to ``-s, --long ARGS`` """ def _format_action_invocation(self, action): if not action.option_strings: metavar, = self._metavar_formatter(action, action.dest)(1) return metavar else: parts = [] if action.nargs == 0: parts.extend(action.option_strings) else: default = action.dest.upper() args_string = self._format_args(action, default) for option_string in action.option_strings: # parts.append('%s %s' % (option_string, args_string)) parts.append('%s'%option_string) parts[-1] += ' %s'%args_string return ', '.join(parts) def parse_arguments(): des = 'Align molecules and create 2D depictions, for you to view cognate ligands easily.' epilog = 'Welcome to aligned_depiction.py!' parser = argparse.ArgumentParser(description=des, epilog=epilog, formatter_class=CustomMetavarFormatter) parser.add_argument('-f', '--file', type=str, required=True, help='Path to molecule files (sdf).') parser.add_argument('-m', '--molperrows', type=int, default=6, help='Number of molecules per row. Default is 6.') parser.add_argument('-r', '--resolution', type=int, default=300, help='Resolution for each ligand. Default is 300.') parser.add_argument('-pf', '--prefix', type=str, default='', help='Prefix for ligand in the figure. Default is empty.') parser.add_argument('-fa', '--fine-align', default=False, action="store_true", help='Do fine alignment? Default is False.') hyp = parser.add_argument_group('Hyperparameters') hyp.add_argument('-eps', type=float, default=0.2, help='DBSCAN eps, as small as possible. Default is 0.2.') hyp.add_argument('-ms', '--min-samples', type=int, default=3, help='DBSCAN min_samples. Tune eps in prior. Default is 3.') return parser.parse_args() def align_mols_2d(mols): mcs = Chem.rdFMCS.FindMCS(mols, atomCompare=rdFMCS.AtomCompare.CompareAny, bondCompare=rdFMCS.BondCompare.CompareAny, ringMatchesRingOnly=True) core = Chem.MolFromSmarts(mcs.smartsString) # common structure _ = AllChem.Compute2DCoords(core) for i in range(len(mols)): _ = AllChem.Compute2DCoords(mols[i]) # resolve clashes. AllChem.EmbedMolecule is deprecated here _ = AllChem.GenerateDepictionMatching2DStructure(mols[i], core) # all align to core _ = AllChem.NormalizeDepiction(mols[i]) print('If ligands are not well aligned, try fine alignment (-fa).') def align_mols_2d_fine(mols, args): """ Any outlier causes the core to be very small. We try to do clustering to find a group of "truely congnate ligands", find the real core to align to. The false core is aligned to the real one before outliers are aligned to it. So all ligands are well positioned. (Actually we can do multi-level clustering, but usually two levels are enough.) Advice on the hyperparameters: 1. To make the smaller core as aligned as possible? no, some rings are deformed, bacause maybe 5-membrane aligned to 6. A slightly larger eps may help to avoid matching that ring. So do use ringMatchesRingOnly=True. 2. If too many are aligned, everything gets messy. So try to get eps smaller and min_samples moderately large. i.e. only take one central ligand's backbone. Not 100% right. In case an outlier also has three close neighbors...TODO: shp2, two clusters? p.s. It seems GenerateDepictionMatching2DStructure dominates the fine tune even if cores are aligned, resulting in no change. Also, it might be better to add restraints before Compute2DCoords than after. Also, we have to remove: _ = AllChem.NormalizeDepiction(mol) :param mols: Molecules to be aligned """ def cluster_molecules(mols, radius=2, eps=args.eps, min_samples=args.min_samples): # use strict criteria, to find the real common core fingerprints = [AllChem.GetMorganFingerprintAsBitVect(mol, radius) for mol in mols] fp_array = np.array([np.array(fp) for fp in fingerprints]) clustering = DBSCAN(eps=eps, min_samples=min_samples, metric='jaccard').fit(fp_array) core_ligands = [mols[i] for i, label in enumerate(clustering.labels_) if label != -1] outliers = [mols[i] for i, label in enumerate(clustering.labels_) if label == -1] return core_ligands, outliers def get_core(mols): """ Atom/bond types might differ, but size must not. :param mols: :return: """ try: mcs_all = Chem.rdFMCS.FindMCS(mols, atomCompare=rdFMCS.AtomCompare.CompareAny, bondCompare=rdFMCS.BondCompare.CompareAny, ringMatchesRingOnly=True) except RuntimeError as e: exit('Not found enough core ligands. Please try larger eps.') core = Chem.MolFromSmarts(mcs_all.smartsString) # MCS for all molecules including outliers rdmolops.SanitizeMol(core) # otherwise RingInfo not initialized _ = AllChem.Compute2DCoords(core) return core def align_core(cores): cmn_core = get_core(cores) _ = AllChem.Compute2DCoords(cmn_core) for mol in cores: align_with_map(mol, cmn_core) def align_with_map(mol, core): match = mol.GetSubstructMatches(core) coordMap = {} conf = core.GetConformer() for i, atomIdx in enumerate(match[0]): pos = conf.GetAtomPosition(i) pos2D = rdGeometry.Point2D(pos.x, pos.y) coordMap[atomIdx] = pos2D _ = AllChem.Compute2DCoords(mol, coordMap=coordMap) # Resolve clashes core_mols, outliers = cluster_molecules(mols) ccore = get_core(core_mols) core = get_core(mols) align_core([ccore, core]) for mol in mols: if mol in core_mols: align_with_map(mol, ccore) # Align to ccore else: align_with_map(mol, core) # Align to core print('If there are strange bonds crossing the molecule, try smaller eps or larger min_samples.\nIf there are strange rings, do the opposite.\n') def main(args): print('Welcome to aligned_depiction.py!\n') # preparation mols = [Chem.MolFromSmiles(Chem.MolToSmiles(mol)) for mol in Chem.SDMolSupplier(args.file)] if args.prefix != '': args.prefix += '-' legends = [args.prefix+str(i + 1) for i in range(len(mols))] if args.fine_align: align_mols_2d_fine(mols, args) else: align_mols_2d(mols) # draw img = Draw.MolsToGridImage(mols, molsPerRow=args.molperrows, subImgSize=(args.resolution, args.resolution), useSVG=True, legends=legends) ofile = args.file.split('.')[0]+'.svg' with open(ofile, 'w') as f: f.write(img) print('Wrote image to '+ofile) if __name__ == '__main__': args = parse_arguments() main(args) # test # if __name__ == '__main__': # d = { # 'file': 'ligands.sdf', # 'molperrows': 6, # 'resolution': 300, # 'fine_align': True, # 'eps': 0.2, # 'min_samples': 3, # 'prefix': '' # } # args = argparse.Namespace(**d) # main(args)
Software & Tools
· 2024-05-07
File Conversion Among MD Simulation Engines Using ParmEd
File Conversion Among MD Simulation Engines Using ParmEd ParmEd is a versatile Python library that facilitates the interconversion of files between popular molecular dynamics (MD) simulation engines like Gromacs, Amber, and NAMD (CHARMM). This tool is especially useful for researchers and students working in molecular dynamics who need to switch between simulation packages without hassle. For example, you want to avoid setting up a protein-ligand complex in Gromacs (adding ligands to gmx force field files can be troublesome!) but do want to run MD simulations in Gromacs for its speed. You will need to use ParmEd to convert the Amber files to Gromacs format. Note that the MD engine uses different algorithms and settings. You cannot either adopt special settings in another MD engine (e.g. restraints, you should set it up again). You should not even wish to fully replicate a Gromacs simulation in Amber. But for most biological systems (e.g. the solvent is not that important), MD engine usually affects your simulation much less than other options, like the choice of force field. So feel free to switch between MD engines! Jump to the code section if you want a solution only. Installing ParmEd Here’s how you can install ParmEd using Anaconda: conda install -c conda-forge parmed If you have compiled Amber on your system, you might already have ParmEd installed as part of the AmberTools suite. To ensure it is properly integrated, refer to the comprehensive guide on compiling Amber, which is particularly useful if you are setting up everything from scratch. Introduction Knowing the file formats These file formats are what we need in MD simulations: Engine Construction Tool Topology file Coordinate file Parameter file Gromacs pdb2gmx .top/.itp .gro – Amber tleap .prmtop .inpcrd – NAMD VMD psfgen .psf .pdb .prm ParmEd logics ParmEd works simply: read in the topology and coordinate files, and write out two files in the desired format. ParmEd writes the parameters into .inpcrd (as it is) and .top files. Always find .prm files when converting both from and to NAMD. Other You can edit the system in ParmEd, which is out of the scope of this post. The file parsing is very detailed so you can manipulate the system as you like. Consult the ParmEd documentation for more details. Conversion Code The following code shows a framework of file conversion. It implements the basic residue renumbering function: you can set the starting residue number. The command is python xxx.py <system_name> <starting_residue_number> Your topolgy and coordinate files should be named <system_name>.xxx both. Note that we use offset-1 in the code since by default ParmEd residue numbers start from 1. [!WARNING] Always double check after the conversion! [!WARNING] For a very large system (hundreds of thousands of atoms), this process could take some time. From Amber to Gromacs # python amber2gmx_via_parmed.py pro 689 import parmed as pmd import sys prefix = sys.argv[1] offset = int(sys.argv[2]) amber = pmd.load_file(prefix+'.prmtop', prefix+'.inpcrd') # renumbering for residue in amber.residues: _ = residue.idx # Get the original index residue._idx += offset-1 residue.number += offset-1 # Save the modified files in Gromacs format amber.save(prefix+'.top', overwrite=True, combine='all') amber.save(prefix+'.gro', overwrite=True, combine='all') Gromacs sub-topology .itp files can be read, but cannot be written, i.e. ParmEd writes huge topology/coordinate files without subfiles as in Amber/NAMD. From CHARMM to Gromacs # python charmm2gmx_via_parmed.py pro 689 import parmed as pmd from parmed.charmm import CharmmParameterSet import sys prefix = sys.argv[1] offset = int(sys.argv[2]) structure = pmd.load_file(prefix+'.psf') # renumbering for residue in structure.residues: _ = residue.idx residue._idx += offset-1 residue.number += offset-1 parameter = CharmmParameterSet('par_all36m_prot.prm', 'toppar_water_ions_namd.str') # add more if necessary # edit the sign of epsilon for atomname, atomtype in parameter.atom_types.items(): atomtype.epsilon *= -1 atomtype.epsilon_14 *= -1 structure.load_parameters(parameter) # Save the modified files in Gromacs format structure.save(prefix+'.top', overwrite=True, combine='all') structure = pmd.load_file(prefix+'.pdb') structure.save(prefix+'.gro', overwrite=True, combine='all') [!TIP] ParmEd does not realize that for epsilon gmx adopts the absolute value while charmm files store the real value (negative!) [!NOTE] In parameter files like par_all36m_prot.prm downloaded from CHARMM website, officially all atom type definitions are commented, but we should uncomment them for parmed, or it cannot find atomtypes. Or read .rtf files too. Double check your files! From Gromacs to Amber # python gmx2amber.py system import parmed as pmd import sys prefix = sys.argv[1] parm = pmd.load_file(prefix+'.top', prefix+'.gro') # Save the modified files parm.write(prefix+'.prmtop') parm.write(prefix+'.inpcrd') I actually have not tried this (see problems). You may need to add residue renumbering mechanisms. Practice yourself! And I guess from CHARMM to Gromacs works similarly. Renumber gmx files This adopts the similar process. The original files are overwritten. # python gmx_renumber_via_parmed.py pro 689 import parmed as pmd import sys prefix = sys.argv[1] offset = int(sys.argv[2]) gmx = pmd.load_file(prefix+'.top', prefix+'.gro') # renumbering for residue in gmx.residues: _ = residue.idx residue._idx += offset-1 residue.number += offset-1 # regenerate and revalidate the internal parameters, usually do this after modifying the structure gmx.remake_parm() # Save the modified files gmx.save(prefix+'.top', overwrite=True) gmx.save(prefix+'.gro', overwrite=True) From CHARMM to Amber To convert CHARMM files to Amber format, use chamber: chamber -top topol.rtf -param params.par -str stream.str -psf structure.psf -crd structure.crd -outparm amber.prmtop -outcrd amber.inpcrd Topology files (-top, -str) are only necessary if the parameter files do not define the atom types Parameters (-str, -param) are applied to your structure -crd option accepts file formats like PDB, CHARMM CRD, Amber restart, etc. Issues Residue renumbering Problem None of these file formats are perfect. Gromacs files do not have chain identifiers. By default chains are separated into a few .itp files, so it’s hard to locate an atom in a specific chain in a .gro file. Amber files always start with residue numbers 1, which causes trouble when aligning with the “biological” residue nubmers. VMD files have full identifiers. However, we have to manually separate the chains when modeling. You cannot change the file formats unless your write your own MD engine. So just put up with it… With ParmEd, you can try to edit the residue numbers to match the “biological” residue numbers. Sadly, if you have multiple chains and they are overlapping, you still have to use that sequential residue numbers. But if you have only one chain, this won’t bother you. Edit in VMD During visualization in VMD, you can edit the residue numbers like this: mol new system.prmtop type parm7 first 0 last -1 step 1 filebonds 1 autobonds 1 waitfor all mol addfile md.nc type netcdf first 0 last -1 step 1 filebonds 1 autobonds 1 waitfor all # select whatever you are interested, but too many water many slow down the process set all [atomselect top "protein or resname LIG or resid 1 to 1500"] foreach idx [$all get index] { set atom [atomselect top "index $idx"] $atom set resid [expr [$atom get resid] + 688] } Edit in ParmEd In ParmEd, every Residue object in a Structure has an idx attribute. This attribute indicates the residue’s index within the structure, and it is managed internally by ParmEd. It is crucial not to modify this attribute directly, as it could lead to inconsistent state within the structure. Some other attributes are also private and cannot be modified. Anyway, I’ve figured out the code to edit residue numbers. I don’t really know why I have to manipulate _idx, but it works. Feel free to inspect the attributes when debugging in your IDE, and create your own workflow! Parameters and atomtypes GROMACS: Independent Parameter Specification In GROMACS, topology files (typically .top) allow for each bond term to be specified independently. This means that different bond parameters can be assigned to the same pair of atom types, provided they occur in different contexts within the molecule. Example of a GROMACS bond specification: ; Bond parameters ; i j func length force_const 1 2 1 0.123 456.7 ; Asymmetric bond A 2 3 1 0.123 456.7 ; Asymmetric bond B CHARMM: Type-Based Parameter Definition Conversely, CHARMM typically defines parameters between different atom types based on a consistent set of parameters across all bonds involving those atom types. This approach assumes that identical pairs of atom types will always exhibit the same bonding characteristics, regardless of their molecular environment. BONDS CA CB 340.0 1.529 ; Standard peptide bond CA CG 317.0 1.510 ; Standard alkane bond Resolving Parameter Inconsistencies When converting from GROMACS to CHARMM formats using tools like ParmEd, discrepancies in how bond parameters are specified can lead to errors. For instance, ParmEd might encounter a ParameterError if it detects different bond parameters for the same atom types, which is permissible in GROMACS but not in CHARMM. This issue is particularly evident with complex ions or molecules optimized asymmetrically through QM methods, such as $\ce{Al(OH)(H2O)5^2+}$. To address these conversion challenges, users have two main options: Assign Different Atom Types: Modify the topology to assign unique atom types for bonds that require different parameters. Uniform Bond Parameters: Standardize bond parameters for each pair of atom types, ensuring consistency across the entire molecule. For more details on handling these conversions and the underlying code structure of ParmEd, consider exploring the following resources: ParmEd GitHub repository Issue related to parameter mismatches Discussion on handling different parameters End We welcome your feedback and contributions! If you have developed new workflows or if you encounter any issues, please don’t hesitate to reach out. For reporting problems, consider opening an issue on the ParmEd GitHub repository. Your insights and experiences are invaluable in enhancing the tools and community resources.
Molecular Dynamics
<
>
Touch background to close