Mendelevium
Diary
Drug Design
Field Knowledge
Academia
Yang
Biology
Physics
Free Energy
Machine Learning & AI
Active Learning
Basics
Boltz-2
Data
Generation
Interpretability
QSAR application
Representations
Mol2Image
Workflow & Agent
Molecular Dynamics
FF & Algorithm
Small Molecule
martini
water
Interaction
Modeling & Tools
QM
Sampling & Analysis
Allostery
Fundamental
Other
Specific Sytems
Enzyme Engineering
Fiber & LLPS
Membrane
orientation_penetration
Metal
Nano Polymers
Skin Permeation
Techniques
Linux
Python
Research
Web
about
Home
Contact
Copyright © 2025 Xufan Gao | Academic Research Blog
Home
>
Machine Learning & AI
> Representations
A Bunch of Biophysics is Loading ...
Representations
药物发现中的分子表示:从序列到多模态融合
药物发现中的分子表示:从序列到多模态融合 本文信息 标题:Molecular Representations for Drug Discovery(药物发现的分子表示方法) 作者:Leili Zhang, Alex Golts, Vanessa Lopez Garcia 发表时间:2025年(Springer Handbook of Chem- and Bioinformatics 第48章) 单位:IBM Research(美国、以色列、爱尔兰) 引用格式:Zhang, L., Golts, A., & Lopez Garcia, V. (2025). Molecular Representations for Drug Discovery. In J. Leszczynski (Ed.), Springer Handbook of Chem- and Bioinformatics (pp. 1105-1121). Springer Nature Switzerland AG. https://doi.org/10.1007/978-3-031-81728-1_48 摘要 在机器学习辅助药物发现的任务中,分子和靶点首先需要转换为机器可处理的数据格式,然后才能使用各种机器学习算法进行处理。这些机器可处理的数据被称为分子表示。受蛋白质结构层次,即一级、二级、三级和构象系综结构的启发,本文将典型的分子表示重新定义为四种数据模态:序列模态(一维)、拓扑模态(二维)、空间模态(三维)和时间模态(四维)。每种模态都配有文献中的实例进行说明。此外,本文还讨论了用于表示学习的知识图谱以及旨在利用各模态优势的多模态融合技术。 核心观点 四维模态分类体系:基于蛋白质结构层次,将分子表示分为序列(一维)、拓扑(二维)、空间(三维)和时间(四维)四种模态,每种模态都有其独特的物理含义和应用场景 序列模态的高效性:SMILES和蛋白质序列等一维字符串表示因其紧凑性和高效性,在大规模预训练中占据重要位置,如MolFormer和ESM等基础模型 拓扑模态的实用性:二维指纹和分子图捕获了分子的局部环境和连接模式,是传统QSAR和现代GNN方法的核心表示 空间模态的结构敏感性:三维表示充分利用坐标信息和空间关系,对构象敏感,是基于结构的药物设计的核心,但也面临SE(3)对称性等挑战 时间模态的探索性:四维表示包含时间依赖信息,如MD轨迹和构象系综,目前在机器学习中的应用仍相对较少,但熵估计和结合动力学等任务显示出其独特价值 多模态融合的必要性:单一模态往往无法捕获分子的全部信息,多模态融合(早期融合、中间融合、后期融合)可以结合不同模态的优势,但也面临信息冗余和模态崩溃等挑战 知识图谱的整合作用:知识图谱能够整合异构数据源的结构化知识,为表示学习提供领域知识注入,如PrimeKG和OtterKnowledge等方法展示了知识增强表示学习的潜力 图1:分子表示的四维模态分类体系。该图是本文的核心框架图,展示了基于蛋白质结构层次的数据模态分类方法。图中展示了不同模态的典型表示示例: 序列模态:SMILES字符串(如CC(=O)NCCc1c[nH]c2ccc(OC)cc12)和蛋白质序列(如MATLEKLMKAFESLKSF) 拓扑模态:MACCS、Morgan、ECFP等二维指纹以及骨架结构图 空间模态:距离/接触矩阵(如OnionNet、Distogram)、三维指纹(如PLIF、E3FP)、三维图像(体素网格)和三维图(节点N和边E) 时间模态:随时间采样的MD轨迹(c1、c2、c3表示不同时刻的构象) 知识图谱:整合药物-药物相互作用、基因表达网络、蛋白质-GO等多源信息 多模态融合:右侧展示了多模态融合技术(聚合函数f和学习函数p)的应用 背景 在机器学习辅助药物发现的任务中,分子和靶点首先需要转换为机器可处理的数据格式,然后才能使用各种机器学习算法进行处理。这些机器可处理的数据被称为分子表示。分子表示的选择对模型性能有决定性影响,不同的表示方式会编码分子的不同特征,从而影响模型对分子性质的理解和预测能力。 传统的分子表示分类基于人类阅读习惯,包括文本、图、图像和视频;或基于生物医学概念,包括DNA、RNA、蛋白质、小分子、疾病文本描述、生物网络等。然而,这些分类缺乏物理意义的统一框架。本文受蛋白质结构层次的启发,将分子表示重新定义为基于物理理解的数据模态:蛋白质的一级结构对应序列(一维)模态,二级结构对应拓扑(二维)模态,三级结构对应空间(三维)模态,而构象系综对应时间(四维)模态。 为什么要关注分子表示 分子表示是连接化学世界和机器学习模型的桥梁。一个好的分子表示应该能够: 充分编码分子的关键信息,包括拓扑结构、电子性质、空间构象等 满足机器学习算法的要求,如平移和旋转不变性、可微分性等 适应下游任务的需求,如性质预测、生成模型、虚拟筛选等 平衡表达能力和计算效率,在编码足够信息和保持计算可行性之间取得平衡 近年来,随着深度学习技术的发展,分子表示学习方法也取得了显著进展。从传统的QSAR描述符到现代的图神经网络和预训练语言模型,分子表示已经从人工设计的特征发展到数据驱动的表示学习。这种转变不仅提高了预测性能,也拓展了分子表示的应用范围。 分子表示的演进历程 分子表示的发展可以分为几个阶段: 人工设计阶段:化学家根据经验设计分子描述符,如分子量、LogP、拓扑指数等,这些描述符通常具有明确的物理或化学意义 自动化提取阶段:随着计算化学的发展,出现了自动化的分子指纹生成方法,如MACCS keys、ECFP等,这些方法能够系统地提取分子特征 表示学习阶段:深度学习的兴起带来了数据驱动的表示学习,如自动编码器、图神经网络等,能够从数据中自动学习分子表示 预训练模型阶段:大规模预训练模型的出现,如MolFormer、ESM等,通过自监督学习在海量数据上预训练,然后迁移到下游任务 当前挑战 尽管分子表示研究取得了显著进展,但仍面临多个挑战: 表示选择的主观性:如何为特定任务选择合适的分子表示仍缺乏明确指导原则 多模态融合的有效性:如何有效融合不同模态的信息,避免信息冗余和模态崩溃 知识整合的复杂性:如何将领域知识融入表示学习,提高模型的可解释性和泛化能力 评估标准的不一致性:缺乏统一的评估框架来比较不同表示方法的性能 分子表示的四维模态体系 下面这张思维导图可以先把全文主线抓住:本文不是简单罗列工具,而是在回答一个更根本的问题,即药物发现中的分子信息究竟可以按什么物理层次来组织。 mindmap root(药物发现中的分子表示) 序列模态(一维) 小分子字符串 SMILES SELFIES InChI 蛋白质序列 ESM ProteinBERT 拓扑模态(二维) 二维指纹 MACCS ECFP Morgan 二维图像 Chemception DEEPScreen 二维图 AquaSol Weave 空间模态(三维) 距离或接触矩阵 Distogram OnionNet 三维指纹 ECIF PLIF E3FP 三维图像与三维图 Pafnucy SchNet DimeNet 时间模态(四维) 时间依赖指纹 MD-IFP 时间依赖接触矩阵 CASTELO 时间依赖图 MD-Graph 知识图谱与多模态融合 知识增强 OntoProtein KeAP ProtST 多模态知识图谱 OtterKnowledge BioBridge 融合策略 早期融合 中间融合 后期融合 序列模态(一维) 序列模态通常把分子写成线性字符串,用原子符号及其相关属性来编码分子,相邻原子之间的连接关系往往以隐式方式体现在字符串规则中。这类表示紧凑且高效,能够直接借用自然语言处理领域的技术进展。 小分子字符串表示 SMILES(Simplified Molecular Input Line Entry System)是最流行的小分子字符串表示方法。SMILES通过遍历分子图获得,具有非唯一性(同一化合物可有多个SMILES字符串)但明确性(给定SMILES字符串对应单一化合物)的特点。 SMILES的扩展和变体: SMARTS(SMILES Arbitrary Target Specification):增加了额外的符号来帮助指定子结构模式 SELFIES(Self-Referencing Embedded Strings):专注于提供鲁棒表示,始终代表有效分子 InChI(International Chemical Identifier):开源的唯一标识符,但可能存在歧义 InChIKey:InChI的哈希版本,用于网络和库搜索 MolFormer是一个基于 transformer 的基础模型,在来自 ZINC 和 PubChem 数据集的超过10亿条 SMILES上训练。作为基础模型,MolFormer可以在更小的数据集上微调,用于光谱预测、溶解度预测和毒性预测等任务。 蛋白质序列表示 蛋白质这类大分子通常用核苷酸序列或氨基酸序列来定义。在本文讨论的表示学习语境中,更常见的是氨基酸序列。氨基酸由氨基、羧基和侧链组成,是肽和蛋白质的基本构件,常用单字母符号或三字母缩写表示。已知遗传密码编码22种蛋白源性氨基酸,其中通常包括20种常见氨基酸和2种较少见的氨基酸。 对蛋白质序列进行聚类和划分,已被证明是解析蛋白质序列的重要工具,因为蛋白质之间往往存在源自共同进化起源的同源性。为避免数据泄露和过拟合,聚类时通常希望增大训练集与保留评估集内部的同类相似性,而在划分任务中则往往需要控制甚至降低训练集与评估集之间的相似性。多序列比对(MSA)是一类对齐与聚类方法,可用于评估未知序列的分子系统发育关系,并估计序列之间的进化相似性与分化程度。 蛋白质语言模型: ESM(Evolutionary Scale Modeling):通过掩码重建学习特定氨基酸出现在序列中的概率,从原始序列中捕获共进化和残基间接触信息 ProteinBERT:与 ESM 类似的蛋白质语言模型 除这类纯序列预训练模型外,原文还提到像HPNN这样的表示,会在每个残基上附加一个向量,用来表示其对其他残基的注意力,因此更接近结合序列与结构关系的信息表示,而不只是标准的蛋白质语言模型。 数据划分策略 由于SMILES的非唯一性以及大型数据集中的固有冗余,有意义地划分数据以避免机器学习模型的过拟合非常重要。常用的划分策略包括: 简单划分:确保相同的化合物不会同时出现在训练和测试折中 骨架划分:MoleculeNet实现的基于二维结构框架划分数据的方法 相似性划分:考虑分子相似性的更鲁棒的划分方法 拓扑模态(二维) 拓扑模态利用扩展的成键信息,或直接采用分子图像的形式,来表示分子中的原子及其局部环境。这类表示通常与向量化机器学习模型或基于图像的机器学习模型配套使用。 二维指纹 二维指纹包括扩展连接信息,主要分为两类: 结构密钥是编码不同化学基团存在与否的二进制字符串。MACCS keys(也称为MDL keys)是二维结构密钥的流行例子,包含166个密钥,每个密钥编码分子中的特定结构特征或原子排列。 哈希指纹是从分子图映射的物理化学或结构属性的编码向量,可分为: 基于拓扑或路径的指纹:如Daylight指纹 环形指纹:如ECFP和Morgan指纹 ECFP(Extended Connectivity Fingerprints,扩展连接指纹)考虑每个原子的二维圆形环境,直到给定直径。通过选择圆形原子邻域的最大直径值,可以生成不同类型的ECFP。最常用的是直径为4或6,生成ECFP4和ECFP6指纹。ECFP的变体FCFP编码原子的功能或角色。 如果要更直观地理解,ECFP的构造思路可以概括为: 以每个原子为中心,逐层向外看它在二维拓扑上的邻居 设定一个最大直径,决定“看多远”,这就对应ECFP4、ECFP6这类不同版本 把每个局部原子环境编码后汇总,形成整分子的指纹向量 因此,ECFP本质上是在统计“某类局部结构片段是否出现,以及出现了哪些”,只是这里的片段不是人工手写规则,而是围绕原子自动枚举得到的。 二维图像 分子图像主要用于可视化目的,而一些研究工作将其用作AI模型的输入形式。这主要得益于深度神经网络在计算机视觉应用中展现的令人印象深刻的成功。 作为二维图像,分子通常由其骨架结构表示。分子图像的布局和渲染属性的标准化具有挑战性,无论是出于可视化还是基于AI的计算目的。 基于图像的深度学习方法: Chemception:通过深度卷积神经网络(CNN)预测化学性质,与基于专家特征的模型相当 DEEPScreen:类似方法用于DTI预测,药物候选分子图像输入CNN以预测与给定蛋白靶点的二元活性 ImageMol:在1000万个骨架图上预训练的基础模型,随后在 SARS-CoV-2 数据集上微调用于 DTI 预测 空间模态(三维) 空间模态利用分子的坐标信息(因此对构象和对称性敏感),包括距离/接触矩阵、三维指纹、三维分子图和三维图像。使用空间模态的药物发现工作流通常被称为基于结构的药物发现(SBDD)。 距离/接触矩阵 从已知结构构建坐标矩阵以利用三维信息是很自然的。然而,标量属性预测(如亲和力预测、溶解度预测、毒性预测、可合成性预测、蛋白口袋识别等)要求输入数据是旋转和平移不变的(即满足SE(3)对称性),而原始的三维坐标不满足这一要求。 预处理三维坐标以满足SE(3)对称性的一种方法是将坐标转换为距离,从而得到距离矩阵。使用距离矩阵作为特征以及各种神经网络的经验是,连续距离通常比分箱距离表现更差。这一观察体现在文献中分箱距离矩阵的主导地位。 这几种表示虽然都属于距离或接触矩阵,但构造思路并不完全一样: 方法 主要编码对象 怎么算的 直观理解 Distogram(AlphaFold) 残基间距离分布 不直接保留连续距离,而是把β碳原子之间的距离分到若干区间中;以AlphaFold为例,共使用39个cutoff,因此表示成分箱距离分布矩阵 更像“距离落在哪个范围”的概率表示 RF-Score 蛋白-配体粗粒化接触 先把蛋白和配体中的原子都粗粒化为9种常见原子类型,再统计12 Å以内不同原子类型对之间出现了多少次接触,因此最多形成$9 \times 9 = 81$维特征 用有限类型的接触计数近似三维相互作用 OnionNet 多层接触模式 延续按接触数建模的思路,但不是只用一个cutoff,而是在8种原子类型之间引入60个不同截断值,以描述更细的分层接触模式 像把蛋白-配体接触按距离一层层“切片”统计 这些方法的共同点是:先把原始三维坐标转换为更稳定、更适合学习的距离或接触特征,而不是直接把坐标喂给模型。 三维指纹 三维指纹和二维指纹的区别很明显:三维指纹利用二维指纹经常省略的结构信息,考虑原子在三维空间中的空间排列以及它们如何相对定位。 这几种三维指纹最适合放在一起看,因为它们的关键差别就在于“到底把哪一类三维信息编码成特征”。 方法 主要编码对象 怎么算的 直观理解 NNScore 近距离接触、静电作用和配体整体特征 使用194维特征,包含2 Å内氢键接触、4 Å内其他近距离接触、4 Å内静电相互作用能、原子类型计数以及配体可旋转键数 把“接触强不强、近不近、是否有静电作用”这些信息拼成一个三维指纹 ECIF 蛋白-配体原子对接触 把蛋白端22类原子与配体端70类原子两两配对,统计这些原子对在空间中的接触,因此仅接触特征就有$22 \times 70 = 1540$维,另外再叠加RDKit的170个分子描述符 更细粒度的蛋白-配体原子对接触统计 PLIF 蛋白-配体相互作用类型 不只记录“是否接近”,还记录主链氢键、侧链氢键、溶剂氢键、离子相互作用、金属结合、芳环相互作用等事件 更像一张“相互作用事件清单” E3FP 配体三维局部环境和立体化学 借鉴ECFP,但不是围绕原子看二维圆形邻域,而是看三维球形邻域,并通过把球体划分为八分体来编码立体化学信息 可以看作ECFP的三维版本,重点是显式保留立体信息 三维图像 虽然对人类来说不容易理解,但三维图像可以看作是二维图像对计算机的扩展。注意三维图像不是旋转不变的,因此不满足SE(3)对称性。在实践中,数据通常通过图像的旋转作为初始输入进行增强。 三维图像这几类方法很适合并排看,因为它们的核心差别就在于“体素里到底存了什么信息”。 方法 空间离散方式 通道或特征设计 主要任务 Ragoza et al. 24 × 24 × 24 Å 网格,分辨率 0.5 Å 按 smina 原子类型把蛋白和配体原子画到类RGB通道中 蛋白-配体相互作用预测 DeepSite 16 × 16 × 16 体素网格 8个通道对应化学性质,而不是具体原子类型 蛋白结合位点预测 Pafnucy 体素网格 每个原子附加19类描述特征,再映射到体素表示 蛋白-配体结合亲和力预测 如果进一步看它们“怎么算”: Ragoza et al.:先把蛋白和配体复合物离散到三维网格中,再根据 smina 原子类型把原子投影到不同通道;体素占据程度由结合高斯项和二次项的密度函数决定,并结合原子的空间位置和范德华半径来计算 DeepSite:同样先把空间切成体素,但8个通道不再表示具体原子类型,而是表示疏水性、芳香性、氢键受体、氢键供体、正离子化、负离子化、金属原子以及排斥体积。原文还提到,体素占据值是结合原子范德华半径,通过指数形式计算的 Pafnucy:不是只问“这个体素里有没有原子”,而是进一步给原子附加19类属性特征,例如原子类型、杂化、重原子价、杂价、疏水性、芳香性、氢键供受体、环原子、部分电荷,以及它属于配体还是蛋白。也就是说,Pafnucy的体素表示比普通占据图更“富特征” 三维分子图 分子图与早期图神经网络(GNN)方法密切相关,后者最初面向分子、图像以及部分 Web 结构数据等对象。分子图在节点和边中存储信息,节点存储关于所代表单元(原子或残基)的信息,边存储关于连接关系(相邻单元、键类型和键属性等)的信息。 二维和三维分子图的区别在于是否使用三维坐标信息来构建图(在节点或边中)。无向图在当前分子图应用中占主导地位。 这几种分子图方法同样适合表格化,因为区别主要体现在“节点和边里装了什么,以及几何信息怎样进入模型”。 方法 图的类型 节点和边怎么定义 几何信息怎么进入模型 AquaSol 无向二维分子图 节点只包含配体原子类型,边只包含键类型 基本不显式使用三维几何,更像最简图表示 Weave 无向二维分子图 节点有27个描述符,如原子类型、手性、形式电荷、部分电荷、环大小、杂化、氢键和芳香性;边有12个描述符,如键类型、图距离以及两个原子是否同环 仍以二维拓扑为主,不显式编码三维坐标 SchNet 无向三维分子图 节点包含原子属性和笛卡尔坐标信息 不直接生硬使用原始坐标,而是先转成原子间距离,再用径向基函数展开,从而保留几何信息并更容易满足SE(3)对称性 DimeNet 有向三维分子图 在图消息传递中显式考虑原子三元组 在距离之外进一步加入原子三元组之间的夹角,并配合 Fourier-Bessel 基函数,因此比SchNet更强调局部几何构型 从主线上看,AquaSol / Weave 更接近“二维拓扑图怎么编码”,而 SchNet / DimeNet 更接近“如何把三维几何稳定地注入图网络”。进一步说,SchNet 主要编码“距离信息”,而 DimeNet 在距离之外,还进一步显式编码“角度信息”。 时间模态(四维) 时间模态添加时间依赖信息,包括时间序列中的接触、构象时间序列、构象灵活性和熵项。分子动力学(MD)模拟中的时间在估计构象的熵和配体结合动力学中起着关键作用。 时间依赖指纹 MD-IFP利用PLIF和两个动态特征:(1)配体第一溶剂化壳层中的水分子数;(2)配体与参考(结合)位置的均方根位移(RMSD)。这些四维指纹从数十个短MD模拟(1 ps)收集的数百个快照中计算,然后应用k-means聚类。随后的聚类用于计算不同状态的驻留时间,与实验结果有良好相关性。 它的思路可以理解为:先对每个MD快照计算一个“瞬时相互作用指纹”,再把许多快照串起来看其随时间如何变化。相比静态PLIF,MD-IFP多加了两类动态信息: 配体周围第一溶剂化壳层中的水分子数,反映局部溶剂环境 配体相对参考结合构象的RMSD,反映结合姿态是否稳定 随后再对这些时间序列快照做聚类,并用聚类结果估计不同状态的驻留时间。因此,MD-IFP并不是单帧的三维指纹,而是把相互作用模式和动态稳定性一起编码进四维表示。 时间依赖接触矩阵 代表方法: Ribeiro et al.:使用时间依赖接触特征(从RAVE实现的序参数)与变分自编码器架构来选择蛋白-配体相互作用的关键接触特征的线性组合,这些特征随后通过metadynamics验证,以观察通常具有分钟或更长timescale的罕见蛋白-配体解离 CASTELO:构建“时间接触矩阵”,矩阵的一半是时间依赖配体-残基接触数矩阵,另一半是从t到t + δ的接触数增量矩阵,与无监督卷积变分自编码器(CVAE)和HDBSCAN聚类方法配对,识别分子中被认为不稳定的热点区域 时间依赖图 MD-Graph:提出基于MD轨迹的时间依赖图,其中每一帧由一个连接图表示,该连接图由二维配体图和具有12个截断距离的三维蛋白-配体相互作用图连接而成,预测的softmax值在所有帧上平均以计算损失函数,这些MD-图随后用GCN训练以预测HLA-肽复合物免疫原性 表1:分子表示方法快速参考 数据模态 子类别 代表方法 关键特征 序列模态(一维) 小分子字符串 SMILES, SELFIES, InChI, MolFormer 紧凑高效,利用NLP技术 蛋白质序列 ESM, ProteinBERT 蛋白质语言模型,捕获共进化信息 拓扑模态(二维) 二维指纹 MACCS, ECFP, Morgan 固定长度向量,快速计算 二维图像 Chemception, DEEPScreen 类似CNN处理视觉图像 二维图 AquaSol, Weave 节点和边存储原子和键信息 空间模态(三维) 距离/接触矩阵 AlphaFold (Distogram), RF-Score, OnionNet 分箱距离,粗粒化接触 三维指纹 NNScore, ECIF, PLIF, E3FP 包含空间排列和相互作用信息 三维图像 DeepSite, KDEEP, Pafnucy 体素网格,需要数据增强 三维图 SchNet, DimeNet, GemNet 满足SE(3)对称性,消息传递机制 时间模态(四维) 时间依赖指纹 MD-IFP 驻留时间与实验相关 时间依赖接触矩阵 Ribeiro et al., CASTELO 序参数,识别热点区域 时间依赖图 MD-Graph MD轨迹的图表示 知识图谱 知识增强学习 OntoProtein, KeAP, ProtST 整合GO功能、生物医学文本 多模态知识图谱 OtterKnowledge, BioBridge 跨模态对齐,归纳学习 多模态融合 早期/中期/后期融合 GraphMVP, MDeePred, CPAC 聚合不同模态的嵌入 知识图谱 积累的科学知识是知情决策构建的基础,特别是在生命科学和治疗学领域。科学数据分散在多个来源,本质上是异构的,涵盖多组学数据、公开可用的知识库、实验、药理学测量、临床数据和科学文献。 知识图谱正逐渐成为一种关键工具,它不仅能整合来自异构来源的丰富事实知识,也有助于推动多模态学习。通过利用图拓扑(关系),知识图谱可以帮助对齐不同模态的嵌入空间。 知识图谱的基本概念 知识图谱可以形式化描述为有向标注图$G = (V, E)$,其中顶点或具有唯一标识符的节点代表感兴趣的现实世界实体(如蛋白质、基因、化合物、细胞组分、通路),而边代表实体之间的关系(如结合、关联、类型等)或实体的数据类型属性(如分子功能、分子的质量、蛋白质的描述)。这些关系通常以RDF三元组的形式表达,也就是“主体—谓词—客体”这样的结构化关系句。例如,“药物X—作用于—蛋白Y”就是一个最简单的三元组例子。 知识图谱嵌入 在图表示学习中,研究者利用图的拓扑结构(实体及其关系)学习紧凑的向量嵌入,使具有相似特征的节点在向量空间中彼此靠近。评分函数用于衡量三元组在知识图谱中的合理性,真实三元组得分较高,错误或损坏的三元组得分较低。这些优化后的嵌入随后可用于训练各种下游任务模型。 传统知识图谱嵌入模型(KGE)通常是直推式的,不太适合归纳链接预测。这里的链接预测,指的是预测两个实体之间是否应该有一条关系边。这在药物发现场景中至关重要,因为涉及训练期间未见过的节点的预测。 归纳图神经网络方法非常适合通过几何关系捕获跨模态依赖和异构实体类型之间的多样化相互作用类型。它们能够以归纳方式学习实体(对于该实体,许多边可能作为其他实体的主体和客体存在)、边或子图的表示。 知识增强的表示学习 代表方法: OntoProtein:将基因本体GO(包含基因功能信息)的综合文本数据注入到用于序列的预训练蛋白质语言模型(PLM)中,通过重建掩码氨基酸来微调PLM,同时最小化蛋白质的上下文表示与相关GO功能注释之间的嵌入距离 KeAP:比OntoProtein更细粒度的token级方法,其中非掩码氨基酸迭代查询相关知识token以收集信息(来自GO)以通过交叉注意力恢复掩码氨基酸 ProtST:采用由生物医学文本中的文本属性描述增强的蛋白质序列数据集,联合训练PLM和生物医学语言模型 多模态知识图谱 OtterKnowledge和BioBridge是利用多模态知识图谱整合不同来源、不同模态知识的代表性归纳方法。两种方法都先用预训练的单模态模型计算各模态的初始嵌入,再学习如何在多模态知识图谱中完成不同模态之间的转换或融合,同时保持这些单模态基础模型参数固定。 代表方法: OtterKnowledge:从实体本身及其相邻实体中任意数量、任意组合的已知模态出发,学习图中每个实体的表示。知识图谱仅在训练阶段使用,而在推理阶段,这些知识增强后的预训练模型可直接用于下游机器学习任务,以提高预测准确性 BioBridge:在训练期间基于 PrimeKG 对单模态模型或单模态基础模型的嵌入空间进行跨模态对齐。它使用蛋白质、分子、生物过程、分子功能、细胞组分和疾病等实体类型之间的三元组,并将信息归为三种模态:蛋白质序列、SMILES,以及其他实体类型对应的自然语言描述 多模态融合策略 数据模态的选择 药物发现涉及探索极其庞大的候选物空间。AI可以通过预测和生成模型发挥关键作用,用于在进入昂贵实验之前缩小最有希望的候选物(例如可以与靶蛋白结合的小分子)。利用预测和生成模型进行候选物生成的关键在于学习蛋白质靶点、分子和疾病等实体的有效表示。 目前尚无共识认为哪种数据模态能带来普遍更优越的模型性能。一个假设是任务(如二级结构预测)可能需要分子表示和机器学习算法的特定组合以获得优化性能。要找出哪种组合是最优的,提供公正的基准测试过程以比较数据模态和机器学习算法至关重要。 高维不一定更好: 分子建模启发的三维指纹和代数拓扑启发的三维指纹尚未被时间模态实现 时间作为一个额外维度,尚未系统地证明对预测任务有帮助 即使三维图可以看作是二维指纹(存储在节点中)和三维指纹(存储在边中)的组合,三维图可能并不总是优于其组成的二维/三维指纹 多模态融合方法 如果把前面的单模态表示看成不同的信息入口,那么这里讨论的就是这些入口如何在模型里会合。下图概括了本文讨论最多的几条路径。 graph TB A["单模态输入<br/>序列、拓扑、空间、时间"] --> B["模态编码器<br/>得到各自嵌入"] B --> C["早期融合<br/>先拼接特征再建模"] B --> D["中间融合<br/>先学单模态表示,再学联合表示"] B --> E["后期融合<br/>先独立预测,再组合决策"] B --> F["知识图谱增强<br/>把实体关系和属性一起纳入"] C --> G["下游任务<br/>性质预测、亲和力预测、DTI、生成"] D --> G E --> G F --> H["跨模态对齐<br/>补充结构化知识"] H --> G 非知识图谱方法的多模态融合 Stahlschmidt et al. 将多模态融合策略分为三类: 早期融合:简单连接每个输入数据模态的向量作为输入 中间融合:先学习每个模态各自的表示以捕获模态内相关性,再在潜在空间中融合这些表示以学习联合表示 后期融合:组合每个模态的子模型所做的决策 早期融合示例: Zhang et al.:使用多模态深度信念网络(DBN)结合一维序列、二维指纹(特定二级结构)和三维指纹(三级结构)以预测RNA结合蛋白的结合偏好 GraphMVP:通过对比学习结合二维配体图和三维几何图,从二维图重建三维图,从而连接模态 中间融合示例: MDeePred:在深层潜在空间中结合二维配体指纹(ECFP4)和基于一维蛋白质序列的能量矩阵表示 CPAC:结合基于一维蛋白质序列的表示(HPNN)和三维蛋白质图 Jones et al.的研究比较了不同融合方法,结合三维图像和三维图与各种融合策略,其中早期融合策略在亲和力预测任务上优于其他方法,而后期融合策略平均表现与中间融合策略相当。 挑战与未来方向 重用传统QSAR描述符用于深度学习任务 一维和二维模态(如SMILES和二维指纹)已被QSAR方法广泛使用并已适应深度学习算法。然而,三维或更高维的描述符(如CoMFA、CoMSIA、G-WHIM和VolSurf)在深度学习相关研究中较少使用(显著少于三维图和三维指纹)。 作者怀疑,这是由于传统QSAR领域和新兴深度学习领域之间的“知识壁垒”造成的,其原因可能包括付费软件带来的使用门槛、难以获取或高度领域化的文档,以及两个研究社区之间不够理想的交流。尽管如此,作者也认为这一问题有望随着领域发展而逐步缓解。 MD轨迹在机器学习任务中的最佳实践 4D-QSAR和四维模态的机器学习任务面临类似问题——包含多个分子构象的数据集相对罕见。因此,MD模拟(以及其他模拟)提供了理想替代方案来补充数据稀缺性。 如上所述,目前时间依赖的机器学习主要集中在聚类和MD特征学习上。对于预测任务,CASTELO使用聚类结果之间的比较指标并利用来自MD轨迹的分子灵活性信息预测分子中的热点。MD-Graph在聚合结果以进行免疫原性预测之前用GCN处理每一帧。 这两种方法都可以归类为“后期融合”方法,假设四维模态学习是一个多模态融合问题。因此,探索四维模态的早期融合和中间融合策略将是有趣的。此外,收集MD轨迹相对耗时。构建MD轨迹数据库将有助于四维模态的机器学习的进一步发展。 将知识整合到现有模型中需要更高效和可扩展的框架 挑战在于将从许多来源提取和编码的信息融合到向量表示中,并将大量知识有效注入机器学习和大型语言模型中,这可能反过来帮助探测或提供LLM输出的来源。 这需要实现高效且可扩展的训练与推理框架,能够处理大规模知识,包括规模(即三元组数量)和异构性(即词汇表规模、关系类型和属性类型的复杂性)。知识图谱存储的管理,包括演化和维护,本身也是一个活跃研究方向,其性能在生物医学场景中也已有系统研究。 然而,缺乏原生支持不同模态和/或基于该模态计算嵌入的图存储。大型多模态知识图谱对所有基于嵌入的链接预测技术都具有挑战性;多模态嵌入并不显著更差,因为它们被视为额外的三元组。尽管如此,多模态编码器/解码器的训练成本更高。通常需要批处理、分区和采样等技术进行训练,例如在OtterKnowledge中使用GAS方法扩展训练。 探索超越语言和视觉的多模态研究 虽然多模态知识图谱研究主要集中在语言(文本)和视觉(图像)上,但需要深入研究跨不同模态和领域的多模态研究,特别是对于药物发现。 此外,这可能涉及具有多个目标的多任务训练,如链接预测和数值回归,以及实现多模态补全模型,从更广泛的模态谱中生成缺失的多模态信息,例如文本属性、蛋白质序列或图像。这不仅需要结合编码器来学习用于链接预测的多模态嵌入,还需要神经解码器根据知识图谱中的信息生成缺失的多模态属性。 将学习表示泛化到多个下游任务 将已学习到的表示泛化到多个下游任务,需要开发鲁棒的训练技术,使模型能够对具有未见模态或缺失模态的实体进行预测,这在药物发现中很常见。这既包括把预训练阶段得到的嵌入迁移到多个下游任务,也包括分析训练阶段与后续任务阶段的数据可用性差异会如何影响模型表现。 一个关键方面涉及分析预训练期间可用的数据与后续任务期间可用的数据之间的差异如何影响下游任务。在训练期间,可能与蛋白质或药物相关联许多(多模态)属性,而在下游微调期间,可能需要推断只有氨基酸序列和SMILES可用的蛋白质或配体的属性。 多模态融合问题面临的1 + 1 < 2挑战 如果目标是在多模态融合中实现叠加式的预测增益,那么每个模态最好在其信息空间中彼此正交。但这在现实中几乎不可能做到。一个简单反例就是 AlphaFold,它可以仅凭一维蛋白质序列预测三维蛋白质结构。换句话说,一维蛋白质序列与三维蛋白质结构之间本身就共享了足够多的信息。 然而,这种相关性对大多数机器学习算法并不透明,因此最终常常只带来“轻微增量”的性能提升。若想进一步提高预测能力,一个关键问题是:如何在尽量提供更多信息的同时,减少不同模态之间的冗余。假如描述蛋白-配体复合物的所有可能模态都已被纳入,那么问题就转化为一个更工程化的优化过程,即选择合适的模态组合以及与之兼容的机器学习算法。 模态崩溃是训练数据中的不平衡和标签呈现长尾分布的挑战,即一小部分标签常见,有大量训练样本,而大多数标签不频繁甚至从未出现过。此外,分子的结构模态可能为表示学习提供有价值的见解,但某些模态(如三维图像)的稀疏性可能导致收益相对较小。 一个潜在问题是模态崩溃,即在多模态融合或知识图谱训练过程中,只有一部分最有帮助的模态占据主导地位,导致模型过度依赖这些模态,而忽视其他模态的信息。这种学习过程中的不平衡,或某些模态数据不足,都可能导致次优表示。此外,多模态数据质量不佳,以及来自多个来源的知识图谱本身稀疏且不完整,也都可能引入偏差。 跨未对齐异构数据集的学习表示 当在具有略有不同模式的数据库上依次训练模型时,可能会发生灾难性遗忘;模型在从新数据库学习时可能会忘记它在前一个数据库中学到的所有内容。 源模式之间的对齐不是一个小问题,即使一个数据源中的关系可能与另一个数据源中的关系共享一些相似性;由于它们不完全相同,不可能将它们视为相同类型的关系。这阻碍了模型在没有明确强制机制的情况下有效地传递这两个关系之间的共性。 为了解决这个问题,OtterKnowledge采用集成方法来处理分别在未对齐的知识图谱上训练的预训练模型。然而,集成方法并不实用,因为需要的模型数量随着数据库数量的增长而增长。设计一种动态学习方法,使得模型能够学习跨具有不同模式的数据源进行传递,是一个开放的研究问题。 预训练模型的基准测试和可解释性 这强调了对公开可用的基准和排行榜的需求,以评估使用不同模态的预训练模型的有效性。如果没有标准化的基准,就很难客观地评估跨模态模型与现有单模态模型在各种任务上的性能比较。 尽管MoleculeNet、ChEMBL、DUD-e、DrugBank和BindingDB等数据集已由本章综述的研究用作基准,但已发现数据集偏差导致模型偏差,从而产生误导性结果。持续的数据库维护以及资助持久性竞赛(如CASP、CAPRI、CAFA和D3R)非常重要。 此外,模型输出的可解释性缺乏限制了它们的实际适用性。基于注意力的GNN已被用于增强分子性质预测的可解释性。对于知识图谱,一个有趣的研究方向是探索知识图谱嵌入模型和神经符号方法如何增强模型决策背后的可解释性或理解。 关键结论与未来展望 主要贡献 本文系统性地梳理了药物发现中的分子表示方法,提出了基于蛋白质结构层次的四维模态分类体系,为理解和选择分子表示提供了一个更统一的物理框架。从序列到时间,从单模态到多模态融合,从数据驱动到知识增强,这一领域的表示方法正在持续扩展。 方法学进展 表示学习的演进:从人工设计的QSAR描述符到数据驱动的深度学习表示,再到大规模预训练的基础模型,分子表示的表达能力和泛化能力不断提升 多模态融合的多样化:早期融合、中间融合和后期融合策略各有优势,选择需要考虑具体任务和数据特性 知识增强的前景:知识图谱为整合异构数据源和领域知识提供了有效途径,OtterKnowledge和BioBridge等方法展示了知识增强表示学习的潜力 基础模型的崛起:MolFormer、ESM等基础模型在海量数据上预训练,并在多个下游任务中展现出较强的迁移能力 挑战与局限 模态选择的困境:缺乏明确的指导原则来选择适合特定任务的数据模态,高维表示不一定带来更好的性能 多模态融合的复杂性:信息冗余、模态崩溃、长尾分布等问题限制了多模态融合的有效性 知识整合的难度:高效可扩展的知识增强框架仍在发展中,跨未对齐数据集的学习表示是开放问题 评估标准的不统一:缺乏标准化的基准测试和评估体系,不同研究之间难以公平比较 可解释性的不足:深度学习模型的黑箱特性限制了其在药物发现等高风险领域的应用 未来方向 探索新的表示形式:继续挖掘可能被忽视的重要分子表示,特别是传统QSAR描述符和四维模态 优化多模态融合策略:开发能够有效提取正交信息、避免模态崩溃的融合算法 构建高效知识框架:实现大规模知识图谱与深度学习模型的无缝集成,支持知识的注入和推理 建立统一评估体系:开发标准化基准和评估指标,促进不同方法的公平比较 增强模型可解释性:结合神经符号方法、注意力机制等提高模型透明度,建立可信AI 打破领域壁垒:促进传统计算化学与现代深度学习领域的交流与合作,加速方法创新 药物发现中的分子表示学习是一个快速发展的领域。随着新方法的涌现和旧方法的重新审视,结合合适的领域知识、模态组合和算法设计,机器学习辅助药物发现仍有很大的发展空间。
Machine Learning & AI
· 2026-03-27
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-11-04
图论遇上机器学习:用拓扑指数预测抗病毒药物性质
图论遇上机器学习:用拓扑指数预测抗病毒药物性质 本文信息 标题: A Graph-Based Machine Learning Framework for Predicting Physicochemical Properties of Antiviral Drugs via Topological Indices(基于图的机器学习框架:通过拓扑指数预测抗病毒药物的理化性质) 作者: Irfan Haider, Muhammad Ahsan, Muhammad Kamran Siddiqui, Mazhar Hussain等 发表时间: 2025年 单位: COMSATS大学(巴基斯坦)、印度中央大学、中东技术大学(塞浦路斯)等 引用格式: Haider, I., Ahsan, M., Siddiqui, M. K., Hussain, M., Ali, F., Ahmad, S., & Kanwal, S. (2025). A Graph-Based Machine Learning Framework for Predicting Physicochemical Properties of Antiviral Drugs via Topological Indices. Journal of Chemical Information and Modeling. https://doi.org/10.1021/acs.jcim.5c00117 源代码: https://github.com/IrfanHaider/graph_based_antiviral_drugs.git 摘要 本研究提出了一个创新的两阶段机器学习框架,用于预测抗病毒药物的理化性质。该框架将分子建模为图结构(原子为节点,化学键为边),利用拓扑指数作为桥梁连接分子结构与性质。第一阶段从SMILES字符串预测六种拓扑指数(M1、M2、ABC、Randić、Harmonic、Forgotten),第二阶段利用这些指数预测六种关键理化性质(摩尔折射率、极性表面积、极化率、摩尔体积、分子量、复杂度)。在59种抗病毒化合物数据集上的测试显示,该方法实现了极高的预测精度,分子量预测的$R^2$达到0.9950,极化率预测的$R^2$达到0.9891,显著优于传统QSPR方法,为药物设计提供了高效的计算工具。 核心结论 两阶段框架创新:通过拓扑指数作为中间表征,将分子结构与性质预测解耦,提高了模型的可解释性和准确性 高预测精度:六种理化性质的预测$R^2$均超过0.97,其中分子量、极化率和摩尔折射率的$R^2$接近0.99 拓扑指数优势:揭示了不同拓扑指数与理化性质的相关性,M1和Forgotten指数对多数性质具有强相关性 广泛适用性:覆盖HIV、乙肝、流感、COVID-19等多种抗病毒药物,验证了方法的普适性 计算效率提升:相比传统量子化学计算和实验测定,显著降低了时间和成本 背景 抗病毒药物的开发是全球公共卫生的核心挑战。从HIV到COVID-19,病毒性疾病始终威胁着人类健康。传统的药物发现依赖于实验筛选和化学合成,这是一个耗时、昂贵且试错率高的过程。一个新药从实验室到临床往往需要10-15年,成本高达数十亿美元。近年来,计算化学和机器学习的兴起为药物设计开辟了新路径,通过定量构效关系(QSPR)建模,可以在虚拟空间预测化合物的性质,大幅缩短研发周期。 然而,现有的QSPR方法面临诸多挑战。一方面,分子描述符的选择和计算复杂度是关键瓶颈。传统方法使用数百种分子描述符,导致维度灾难和过拟合风险。另一方面,黑箱模型的可解释性不足限制了其在药物设计中的应用。研究者难以理解模型预测背后的化学机制,无法指导结构优化。此外,数据集规模和质量也制约着模型性能。高质量的实验数据稀缺且昂贵,如何在有限数据下训练可靠模型是普遍难题。 拓扑指数作为一类特殊的分子描述符,提供了一种简洁而强大的分子表征方式。它们基于图论,将分子拓扑结构编码为数值,能够捕捉分子的连接性、分支度、环状特征等关键信息。相比传统描述符,拓扑指数计算简单、物理意义明确,且在QSPR建模中表现出色。本研究正是基于这一优势,探索拓扑指数在抗病毒药物性质预测中的潜力。 关键科学问题 如何建立分子结构与理化性质之间的高精度映射? 传统QSPR模型依赖大量描述符,本研究探索能否通过少量拓扑指数实现同等或更高的预测精度。 拓扑指数能否作为有效的中间表征? 研究验证从SMILES到拓扑指数、再从拓扑指数到性质的两阶段框架是否可行且高效。 不同机器学习算法在该任务中的性能差异如何? 比较线性回归、随机森林、XGBoost、神经网络等模型在两个阶段的表现,识别最优算法组合。 创新点 两阶段机器学习框架:首次将拓扑指数预测与性质预测分离,提高了模型的模块化和可解释性 多拓扑指数集成:选用六种互补的拓扑指数(M1、M2、ABC、Randić、Harmonic、Forgotten),全面表征分子拓扑特征 SMILES直接预测:无需3D结构优化,直接从SMILES字符串预测拓扑指数,大幅提升计算效率 多算法对比:系统比较四种主流机器学习算法,为不同场景提供最优选择 适用域评估:引入Williams图等工具,明确模型的适用范围,避免外推风险 开源工具链:提供完整的GitHub代码库,促进方法的推广和应用 研究内容 核心方法:两阶段机器学习框架 本研究的核心创新在于两阶段预测框架。传统QSPR方法直接从分子结构预测性质,而本研究引入拓扑指数作为中间桥梁,将复杂任务分解为两个子问题: 阶段一:SMILES → 拓扑指数 输入:SMILES字符串(分子的一维文本表示) 输出:六种拓扑指数(M1、M2、ABC、Randić、Harmonic、Forgotten) 方法:使用RDKit解析SMILES,提取分子图,计算拓扑指数 模型:训练四种机器学习模型(线性回归、随机森林、XGBoost、神经网络),预测拓扑指数 阶段二:拓扑指数 → 理化性质 输入:六种拓扑指数 输出:六种理化性质(摩尔折射率MR、极性表面积PSA、极化率P、摩尔体积MV、分子量MW、复杂度C) 方法:基于阶段一预测的拓扑指数,训练预测模型 模型:同样比较四种机器学习算法 这种分解策略的优势在于: 降低复杂度:每个阶段的输入输出维度较低,避免维度灾难 提高可解释性:拓扑指数具有明确的化学意义,便于理解模型决策 模块化设计:两个阶段可独立优化和替换 知识迁移:拓扑指数可用于其他性质预测任务 graph TD subgraph "模型评估" I["交叉验证<br/>R²,MAE,RMSE"] J["Williams图<br/>适用域分析"] I --> J end subgraph "阶段二:拓扑指数到理化性质" E["预测的拓扑指数"] F["特征工程<br/>相关性分析"] G["机器学习模型<br/>LR/RF/XGB/NN"] H["理化性质<br/>MR,PSA,P,MV,MW,C"] E --> F --> G --> H end subgraph "阶段一:SMILES到拓扑指数" A["SMILES字符串<br/>C1=CC=CC=C1"] B["RDKit解析<br/>生成分子图"] C["拓扑指数计算<br/>M1,M2,ABC,Randić,<br/>Harmonic,Forgotten"] D["机器学习模型<br/>LR/RF/XGB/NN"] A --> B --> C --> D end 数据集与分子描述符 数据集构建 规模:59种抗病毒化合物 来源:PubChem数据库 覆盖范围:HIV抑制剂(AZT、Indinavir)、乙肝药物(Entecavir、Tenofovir)、流感药物(Oseltamivir、Zanamivir)、COVID-19药物(Remdesivir、Molnupiravir)等 性质数据:通过PubChem和RDKit计算获得六种理化性质的实验或计算值 拓扑指数定义 研究选用了六种经典拓扑指数,它们从不同角度表征分子拓扑特征: First Zagreb指数(M1): \[M_1(G) = \sum_{v \in V(G)} d_v^2\] 其中 $d_v$ 是顶点 $v$ 的度数。反映分子的整体连接性和分支度。 Second Zagreb指数(M2): \[M_2(G) = \sum_{uv \in E(G)} d_u d_v\] 对所有边求度数乘积。捕捉相邻原子的连接特征。 ABC指数: \[\mathrm{ABC}(G) = \sum_{uv \in E(G)} \sqrt{\frac{d_u + d_v - 2}{d_u d_v}}\] 原子-键连接性指数,与分子稳定性和应变能相关。 Randić指数: \[R(G) = \sum_{uv \in E(G)} \frac{1}{\sqrt{d_u d_v}}\] 反映分子的分支程度,广泛用于沸点、折射率预测。 Harmonic指数: \[H(G) = \sum_{uv \in E(G)} \frac{2}{d_u + d_v}\] 与分子的电子性质相关。 Forgotten指数: \[F(G) = \sum_{v \in V(G)} d_v^3\] 类似M1但对高度顶点赋予更大权重,适用于复杂结构分子。 机器学习模型 研究对比了四种主流算法: 1. 线性回归(LR) 假设输入与输出线性相关 作为基线模型 2. 随机森林(RF) 集成学习方法,构建多棵决策树 超参数:100棵树,最大深度10 3. XGBoost 梯度提升决策树,逐步优化残差 超参数:100棵树,学习率0.1,最大深度5 4. 神经网络(NN) 多层感知机,三个隐藏层(128、64、32神经元) 激活函数:ReLU,优化器:Adam 实验结果与分析 阶段一:SMILES到拓扑指数的预测性能 表1:拓扑指数预测的$R^2$值(阶段一) 拓扑指数 线性回归 随机森林 XGBoost 神经网络 M1 0.9823 0.9891 0.9907 0.9856 M2 0.9765 0.9867 0.9883 0.9821 ABC 0.9712 0.9834 0.9856 0.9789 Randić 0.9689 0.9812 0.9831 0.9763 Harmonic 0.9734 0.9845 0.9867 0.9798 Forgotten 0.9801 0.9878 0.9895 0.9842 关键发现: XGBoost在所有拓扑指数预测中表现最优,$R^2$均超过0.98 M1和Forgotten指数的预测精度最高,这可能是因为它们的定义更简单,受分子图结构直接影响 神经网络性能略低于集成方法,可能是数据集规模(59个样本)不足以充分训练深度模型 阶段二:拓扑指数到理化性质的预测性能 表2:理化性质预测的$R^2$值(阶段二) 性质 线性回归 随机森林 XGBoost 神经网络 摩尔折射率(MR) 0.9876 0.9923 0.9938 0.9901 极性表面积(PSA) 0.9712 0.9801 0.9823 0.9765 极化率(P) 0.9851 0.9912 0.9891 0.9878 摩尔体积(MV) 0.9823 0.9889 0.9907 0.9856 分子量(MW) 0.9901 0.9945 0.9950 0.9923 复杂度(C) 0.9734 0.9823 0.9845 0.9789 图1:六种理化性质的实验值与预测值对比散点图 (包含MR、PSA、P、MV、MW、C六个子图,每个子图展示实验值(x轴)与XGBoost预测值(y轴)的散点,理想情况下点分布在y=x直线附近) 关键发现: 分子量预测精度最高($R^2$=0.9950),这是因为MW与拓扑指数(尤其是M1和Forgotten)高度相关,分子越大,顶点越多,拓扑指数越大 极性表面积预测难度最大($R^2$=0.9823),PSA与分子的极性基团分布相关,拓扑指数对极性特征的表征能力有限 XGBoost和随机森林显著优于线性回归,说明性质与拓扑指数之间存在非线性关系 表3:不同性质的MAE和RMSE(XGBoost模型) 性质 MAE RMSE MR 2.34 3.12 PSA 8.45 11.23 P 0.98 1.34 MV 12.56 16.78 MW 15.67 21.45 C 23.45 31.23 拓扑指数与性质的相关性分析 图2:拓扑指数与理化性质的Pearson相关系数热图 (6x6矩阵,行为拓扑指数,列为性质,颜色深度表示相关性强度) 关键发现: M1和Forgotten与MW、P、MR的相关系数超过0.95,这解释了为何这些性质预测精度高 ABC和Randić与PSA的相关性较弱($r<0.75$),导致PSA预测难度较大 Harmonic指数在所有性质中表现中等,说明其信息与其他指数有重叠 Williams图与适用域分析 图3:摩尔折射率预测的Williams图 Williams图用于评估模型的适用域,横轴为杠杆值(leverage,表示样本在特征空间中的位置),纵轴为标准化残差。理想情况下,所有点应落在 $\pm 3$ 的标准化残差范围内,且杠杆值小于临界值 $h^*$。 关键发现: 59个样本中,57个落在适用域内,仅2个样本(Remdesivir和某HIV抑制剂)的杠杆值略高于临界值 这表明模型对大多数抗病毒药物具有良好的预测能力,但对结构复杂的新型药物(如Remdesivir)需谨慎 与现有方法的对比 表4:与文献中其他QSPR方法的性能对比 方法 描述符类型 $R^2$(MW) $R^2$(P) 数据集规模 本研究(XGBoost) 拓扑指数 0.9950 0.9891 59 Ref [12] 分子指纹 0.9823 0.9756 120 Ref [18] 量子化学描述符 0.9867 0.9801 85 Ref [25] 传统拓扑指数 0.9712 0.9689 50 关键发现: 尽管数据集较小,本研究的$R^2$值超越了所有对比方法 相比量子化学描述符(需要DFT计算),拓扑指数的计算成本极低 相比分子指纹等高维表征,拓扑指数更简洁且可解释 讨论部分 为何拓扑指数如此有效? 拓扑指数的成功源于其对分子拓扑特征的精准捕捉。理化性质本质上由分子的电子结构和空间构型决定,而这些因素又与分子图的拓扑密切相关。例如: 分子量由原子数量决定,M1指数(顶点度数平方和)天然编码了这一信息 极化率与分子的电子云分布有关,Forgotten指数(高度顶点权重大)能反映高配位原子的贡献 复杂度与分子的分支和环状结构相关,ABC和Randić指数擅长表征这些特征 两阶段框架的优势与局限 优势: 模块化:两个阶段可独立优化,例如可以用更强大的图神经网络替代阶段一的RDKit计算 可解释性:拓扑指数作为中间表征,允许研究者分析哪些结构特征主导了性质预测 迁移学习潜力:阶段一的拓扑指数预测模型可迁移到其他分子数据集 局限: 依赖拓扑指数的表达能力:对于某些性质(如PSA),现有拓扑指数可能不足以完全表征 数据集规模限制:59个样本对深度学习模型而言偏小,未来需要扩展数据集 Q&A Q1: 为什么选择这六种拓扑指数,而不是其他? A1: 这六种指数在QSPR文献中被广泛验证,具有互补性。M1和M2是最经典的Zagreb指数,捕捉整体连接性;ABC和Randić反映分支特征;Harmonic与电子性质相关;Forgotten对复杂结构敏感。研究还计算了更多指数,但相关性分析显示这六种已足够覆盖主要信息,增加更多指数会导致冗余和过拟合。 Q2: 两阶段框架相比端到端模型(直接从SMILES预测性质)有何优势? A2: 可解释性:端到端模型(如图神经网络)是黑箱,两阶段框架通过拓扑指数提供了中间可解释层 数据效率:拓扑指数降低了特征维度,使得小样本数据集也能训练出高精度模型 灵活性:可以根据需要替换阶段一或阶段二的模型,例如用GNN替代RDKit计算拓扑指数 迁移学习:拓扑指数是通用的分子表征,阶段一的模型可用于其他性质预测任务 Q3: Williams图中为何Remdesivir的杠杆值较高?这对模型应用有何影响? A3: Remdesivir是一种结构复杂的核苷类似物,含有多个杂环和功能基团,其拓扑特征在训练集中较为罕见,导致杠杆值(特征空间中的距离)较高。这意味着模型对Remdesivir的预测可能不如对训练集内常见结构的药物准确。在实际应用中,对于杠杆值高的新分子,建议结合实验验证或使用集成模型来降低预测不确定性。 Q4: 神经网络在本研究中表现不如XGBoost和随机森林,原因是什么? A4: 主要原因是数据集规模较小(59个样本)。深度神经网络通常需要数千甚至数百万个样本才能充分训练,小样本下容易过拟合。相比之下,XGBoost和随机森林等树模型对小样本更鲁棒,且超参数调优相对简单。未来如果数据集扩展到数百个样本,神经网络的性能可能会超越树模型。 Q5: 该方法能否推广到其他类型的药物(如抗癌药、抗生素)? A5: 可以,但需要重新训练模型。拓扑指数是通用的分子表征,理论上适用于任何有机小分子。然而,不同类型药物的结构特征和性质分布可能存在差异。例如,抗癌药通常包含更多的芳香环和杂原子,拓扑指数的相关性可能不同。因此,推广到其他药物类别时,建议收集相应数据集,重新训练并验证模型。 关键结论与批判性总结 潜在影响 加速药物设计:提供了一种快速、低成本的药物性质预测工具,可用于虚拟筛选和先导化合物优化 促进拓扑指数研究:证明了拓扑指数在现代机器学习框架中的价值,激励开发新型拓扑描述符 推动开源科学:完整的代码库降低了方法的使用门槛,有助于社区验证和改进 为COVID-19等新兴疾病提供工具:快速预测新抗病毒药物候选物的性质,辅助紧急药物研发 存在的局限性 数据集规模较小:59个样本限制了模型的泛化能力,尤其是对结构新颖的药物 拓扑指数的表达瓶颈:某些性质(如极性表面积)与拓扑指数的相关性不高,需要引入额外描述符 缺乏三维结构信息:拓扑指数仅基于二维分子图,忽略了立体化学和构象效应,这可能影响某些性质(如溶解度、渗透性)的预测 适用域有限:对于训练集外的复杂结构(如大环肽、多糖)预测精度未知 未考虑药物动力学性质:仅预测理化性质,而药物的体内活性还受吸收、分布、代谢、排泄(ADME)等因素影响 未来研究方向 扩展数据集:纳入更多抗病毒药物(目标1000+),提高模型的泛化能力和鲁棒性 引入3D拓扑指数:结合分子的三维构象信息,开发新的拓扑描述符 集成多模态特征:融合拓扑指数、分子指纹、量子化学描述符,构建混合模型 图神经网络:用GNN替代阶段一的RDKit计算,实现端到端可微分的拓扑指数预测 药效预测:将框架扩展到抗病毒活性(如IC50、EC50)的预测,直接指导药物设计 主动学习:结合实验反馈,迭代优化模型,逐步减少实验验证的样本量
Machine Learning & AI
· 2025-11-02
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-11-02
基于图像的分子表征:二维分子图像表征详解
基于图像的分子表征:二维(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-10-08
为AI炼丹炉净化原料:SMILES、SELFIES与更可靠的分子生成表示法
为AI炼丹炉“净化”原料:SMILES、SELFIES与更可靠的分子生成表示法 本文信息 标题: 提高用于生成化学的分子字符串表示的可靠性 作者: Etienne Reboul, Zoe Wefers, Harish Prabakaran, Jérôme Waldispühl, and Antoine Taly 发表时间: 2025年8月29日 (Accepted) 单位: 巴黎西岱大学/法国国家科学研究中心 (法国),麦吉尔大学计算机科学学院 (加拿大) 引用格式: Reboul, E., Wefers, Z., Prabakaran, H., Waldispühl, J., & Taly, A. Improving the Reliability of Molecular String Representations for Generative Chemistry. Journal of Chemical Information and Modeling. Published online September 17, 2025. https://doi.org/10.1021/acs.jcim.4c02261 源代码: ClearSMILES: https://github.com/EtienneReboul/ClearSMILES 训练数据、模型和样本: https://doi.org/10.5281/zenodo.14420504 SELFIES稳定性测试: https://colab.research.google.com/drive/1jZwRGyXqUSaQhQ-yRILBoqiM1HMlikK0?usp=sharing 摘要 近年来,用于化学的生成式建模发展迅速,但这一热潮也提出了一个根本性问题:哪种分子表示法最适合现代机器学习模型?尽管SMILES并非为生成任务而设计,但它仍然是最常用的基于字符串的表示法。然而,虽然SMILES遵循严格的语法规则,但语法正确的SMILES字符串并不总能对应于化学上有效的分子。另一种语法SELFIES通过确保每个SELFIES字符串都能表示一个有效分子来解决这一局限。本研究全面评估了SMILES和SELFIES作为生成模型表示法的局限性。我们分析了两个关键标准:有效性(viability),即生成的字符串能表示新颖、独特且化合价正确的分子;以及保真度(fidelity),即生成分子的理化性质分布与训练数据相似。我们发现,使用RDKit默认的规范化SMILES生成的分子中,约有五分之一是无效的,未能通过有效性检验。相比之下,所有由SELFIES生成的分子都是有效的,但它们显著偏离了训练数据的分布,表明保真度较低。为了解决这些问题,我们为这两种表示法开发了数据增强程序。虽然简化SELFIES语法在保真度上仅取得了微不足道的增益,但我们为SMILES开发的随机增强方法——ClearSMILES,显著提高了有效性和保真度。ClearSMILES通过使用Kekulé SMILES显式编码芳香性并减少词汇量来简化语法,使模型更容易处理字符串表示。使用ClearSMILES后,无效样本的比例从20%下降了一个数量级至2.2%,并且对训练数据分布的保真度也得到了中度改善。 背景 传统的计算机辅助药物设计通常涉及对大型化合物库进行虚拟筛选,以识别有潜力的“命中”分子。然而,这个过程成本高昂且耗时。近年来,生成式化学(Generative Chemistry)为分子发现带来了新的范式:它不再是被动地“筛选”,而是让AI模型主动“创造”,直接从学习到的化学知识中生成具有期望性质的新分子,从而大大缩短了药物优化的周期。 要让AI模型学会“创造”分子,首先要教会它如何“阅读”分子。目前主流的分子表示法分为两类:图(Graph)和字符串(String)。分子天然是一种图结构(原子为节点,化学键为边),图表示法虽然直观,但处理起来相对复杂。而字符串表示法,如SMILES,将分子结构线性化为一串文本,可以无缝对接自然语言处理(NLP)领域的强大模型(如Transformer),近年来已展现出与图模型相当的性能。 然而,这一领域的飞速发展背后,一个基础性问题却被长期忽视:我们喂给AI的“原料”——分子字符串,本身可靠吗?最广泛使用的SMILES表示法,虽然有明确的语法(如括号表示支链,数字表示环),但一个语法上无懈可击的SMILES字符串,却完全可能描述一个化学上荒谬的分子(如一个碳原子有五根键)。这导致生成模型在“咿呀学语”时,常常“说出”一些听起来通顺但毫无意义的“句子”。为了解决这个问题,SELFIES应运而生,它通过更严格的语法设计,保证任何生成的字符串都能被确定性地解码为一个化学上有效的分子。但SELFIES的这种“万无一失”是否是以牺牲其他重要性质为代价?这两大主流表示法,究竟谁更适合AI炼丹炉? 关键科学问题 在分子生成任务中,哪种字符串表示法(SMILES还是SELFIES)更可靠?它们各自的“死穴”是什么?我们能否通过数据增强的手段,设计出一种新的表示法,同时解决SMILES的有效性(Viability)问题和SELFIES的保真度(Fidelity)问题? 有效性 (Viability):衡量生成模型“说人话”的能力,要求生成的分子必须是化学上有效(化合价正确)、新颖的(不在训练集中)且独特的(非重复)。 保真度 (Fidelity):衡量生成模型是否“跑偏”,要求生成的分子在整体性质分布上(如类药性、分子量、合成可及性等)与训练集中的真实分子相似。 创新点 系统性基准测试:首次对SMILES和SELFILES作为生成化学模型输入的可靠性进行了全面的、并排的基准测试,明确量化了它们在有效性和保真度两个关键指标上的优缺点。 提出了ClearSMILES:开发了一种新颖的、基于随机化和过滤的SMILES数据增强流程(ClearSMILES),旨在通过显式编码芳香性和最小化长程依赖来简化SMILES语法,使其更易于机器学习模型学习。 验证了ClearSMILES的优越性:实验证明,使用ClearSMILES能将生成模型(VAE)产生的无效分子比例从20%急剧降低到2.2%,下降了一个数量级,同时在一定程度上改善了生成分子的性质分布保真度。 研究内容 核心方法论:模型、指标与增强策略 1. 分子表示法:SMILES vs. SELFIES 图1:γ-丁内酯(GBL)的SMILES和SELFIES表示法示例。 如图所示,对于同一个分子,SMILES使用匹配的括号()和数字1来表示支链和环的闭合,这是一种隐式的、需要前后对应的语法。而SELFIES则使用显式的[Branch]和[Ring]标记,其后的“重载标记”(overloaded tokens)用于定义支链或环的长度,语法更严格。 2. 评估标准:有效性(Viability)与保真度(Fidelity) 有效性指标:包括Validity(RDKit能否解析为有效分子)、Novelty(生成分子不在训练集中的比例)和Uniqueness(生成分子中不重复的比例)。三者结合构成本文的Viability。 保真度指标:通过计算生成分子与训练集分子在四个关键理化性质上的分布相似性来衡量,包括QED(类药性)、SA(合成可及性)、MW(分子量)和TPSA(拓扑极性表面积)。分布的差异用Wasserstein距离来量化。 3. 详解ClearSMILES流程 为了解决SMILES表示法存在的问题,作者提出了一种名为ClearSMILES的数据增强流程,其核心思想是为每个分子找到一种“对AI更友好”的SMILES变体。 图3:ClearSMILES流程图,展示了随机化Kekulé SMILES的生成和过滤步骤。 graph LR subgraph "第一步:生成 (Generation)" A("输入一个分子的<br/>规范SMILES") -- "随机化遍历路径<br/>使用Kekulé式表示芳香环" --> B("生成10万个<br/>随机化的Kekulé SMILES") end subgraph "第二步:过滤 (Filtration)" B --> C("1.去除重复项") C --> D("2.筛选使用<br/>最小环数字的SMILES") D --> E("3.计算并筛选<br/>最低“记忆分数”的SMILES") E --> F("4.字母排序取第一个<br/>(确保唯一性)") end subgraph "最终输出" F --> G("<b>一个确定的<br/>ClearSMILES</b>") end 该流程的关键步骤及其物理意义如下: 使用Kekulé式:标准SMILES用小写字母表示芳香原子(如’c’, ‘n’),这是一种抽象概念,模型需要自行学习其与脂肪族大写字母的复杂关系。ClearSMILES通过将芳香环用显式的单双键交替模式表示,统一使用大写字母。这样做的好处是:1)消除了芳香性这一抽象概念,模型只需学习简单的键模式;2)减少了词汇表大小,降低了输入矩阵的维度。 随机化与过滤:一个分子可以有多种合法的SMILES字符串。ClearSMILES通过随机生成10万个变体,然后进行多步过滤,找到“语法最简单”的一个。 筛选最小环数字:SMILES用数字标记环的开合。例如,一个分子中的两个不相交的环可以表示为C1...C1...C2...C2(解耦),也可以表示为C1...C2...C1...C2(耦合)。ClearSMILES优先选择前者,因为它使用的最大数字更小,语法更简单。 筛选最低“记忆分数”:这是ClearSMILES的核心创新。作者定义了一个“记忆分数”来量化SMILES的语法复杂度,它衡量了在遍历字符串时,平均有多少个“未闭合”的括号或环数字。分数越低,意味着字符串的结构越接近线性,分支和环的跨度越短。这极大地减轻了模型(尤其是RNN)学习长程依赖的负担。 实用性:该流程虽然计算密集,但高度并行化。补充材料(图S9)显示,96%的分子的ClearSMILES生成过程可在12秒内完成,具有很高的实用性。 结果与分析 1. 基线模型的表现:SMILES与SELFIES的“死穴” 表1:基于SMILES的VAE(22维潜空间)生成的30万个样本的有效性指标。 | 增强方法 | 有效性(Validity) | 新颖性(Novelty) | 独特性(Uniqueness) | 综合有效性(Viability) | | :— | :— | :— | :— | :— | | RDKit默认规范SMILES | 80.75% | 99.57% | 99.92% | 80.35% | | 规范Kekulé SMILES | 94.26% | 99.70% | 99.99% | 93.97% | | ClearSMILES | 97.80% | 99.13% | 99.92% | 96.89% | 表2:基于SELFIES的VAE(22维潜空间)生成的30万个样本的有效性指标。 | 增强方法 | 字符串稳定性 | 有效性(Validity) | 新颖性(Novelty) | 独特性(Uniqueness) | 综合有效性(Viability) | | :— | :— | :— | :— | :— | :— | | 常规SELFIES | 45.43% | 100.00% | 99.92% | 99.96% | 99.88% | SMILES的死穴——有效性:如表1所示,使用标准SMILES训练的模型,其生成的分子中有近20%是化学无效的。 SELFIES的死穴——保真度:如表2所示,SELFIES的有效性确实是100%。但补充材料(表S2)的深入分析显示,约92%的不稳定SELFIES字符串在解码过程中发生了信息丢失(即解码再编码后,字符串变短了)。 2. 错误溯源:为什么会失败? 图2:(a) VAE模型和(b) MolGPT模型生成的SMILES样本的错误类型分布。 SMILES的错误根源:如图2a所示,在SMILES生成的无效分子中,绝大多数错误(蓝色条)都与芳香性(aromaticity)有关。这证实了芳香性的抽象表示是模型学习的难点。 SELFIES的保真度问题根源:SELFIES的100%有效性是通过其解码算法强制实现的。当遇到可能导致化合价错误的指令时,算法会主动删除这些指令。补充材料(图S3)的分析表明,删除(deletion)是导致字符串不稳定的最主要原因,其中环和支链相关的标记最常被删除。这种纠错机制导致了生成分子的系统性偏差(如环更少、结构更简单),从而严重损害了对训练集性质分布的保真度。 3. ClearSMILES的性能:有效性与保真度的双重提升 ClearSMILES通过生成语法更简单的字符串来提升模型性能。作者通过图4和图5定量分析了其语法优越性。 图4:MOSES数据库中不同SMILES表示法的(a)支链长度分布直方图, (b)记忆分数和(c)主链token比例的核密度估计图。 更低的记忆分数:如图4b所示,ClearSMILES(橙色)的“记忆分数”分布集中在1.0以下,远低于标准SMILES(蓝色)。这定量地证明了ClearSMILES字符串的语法结构更简单,需要模型记忆的“未闭合”特征更少。 更短的支链:如图4a所示,ClearSMILES中的支链长度(括号对之间的token数)更短,长度超过10个token的支链比标准SMILES少52倍,这减少了长程依赖。 更线性的结构:如图4c所示,ClearSMILES的主链token比例更高,表明其编码的分子图遍历路径更接近线性。 图5:不同SMILES表示法中成对环数字的关联热图。 更简单的环结构:该热图显示了环数字(y轴)和闭环跨度(x轴,即两个相同数字间的token数)的分布。与标准SMILES(a)相比,ClearSMILES(c)极大地减少了长跨度的环闭合(图中右侧几乎为空白),并且使用的环数字更少(主要集中在1和2),表明其成功地将复杂的嵌套环结构“解耦”成了更简单的形式。 图6:所有VAE模型(22维潜空间)生成的有效样本的各项指标评估。 表6:VAE(22维潜空间)生成的样本与MOSES训练集的各项性质指标的Wasserstein距离。 | 模型 | TPSA | 分子量 | QED(类药性) | SA(合成可及性) | | :— | :— | :— | :— | :— | | SELFIES (无十六进制) | 7.798 | 6.805 | 0.115 | 1.316 | | SELFIES (无重载) | 10.094 | 6.693 | 0.141 | 1.315 | | 常规SELFIES | 4.363 | 7.017 | 0.112 | 1.258 | | RDKit默认规范SMILES | 4.716 | 7.149 | 0.041 | 0.430 | | ClearSMILES | 4.304 | 7.344 | 0.022 | 0.345 | 有效性的大幅提升:如表1所示,改用ClearSMILES后,VAE生成的无效分子比例从19.25%骤降至2.2%,综合有效性(Viability)从80.35%提升至96.89%。错误分析(图2a,橙色条)表明,ClearSMILES几乎完全消除了芳香性错误,并大幅减少了与环和括号相关的错误。 保真度的中度改善:如图6和表6所示,SMILES系列表示法在保真度上普遍优于SELFIES系列。特别是,SELFIES在类药性(QED)和合成可及性(SA)两个关键指标上与训练集(MOSES Dataset)的分布差异巨大。而ClearSMILES在标准SMILES的基础上,进一步缩小了与训练集在QED和SA上的差距(Wasserstein距离更小),表明其生成的分子在性质上更接近真实药物分子。 4. 更强模型的表现:MolGPT 图7:所有MolGPT模型(采样温度1.5)生成的有效样本的各项指标评估。 作者还使用了一个更强大的基于Transformer的MolGPT模型进行验证。结果(表3)显示,虽然MolGPT能将标准SMILES的有效性提升到90%以上,但ClearSMILES仍然能将其进一步提升至近95%。这表明,即使对于更强大的模型,一个更优的分子表示法依然能带来性能上的增益。 Q&A Q1: 什么是SMILES的“语法正确”但“化学无效”?可以举个例子吗? A1: 一个典型的例子是 C(C)(C)(C)(C)C。从SMILES的语法来看,它是完全正确的:一个中心碳原子,通过五个独立的括号,连接了五个甲基。所有括号都正确配对。然而,从化学角度看,它描述了一个六价的碳原子,这严重违反了化合价规则,因此是化学无效的。生成模型在学习SMILES时,学会了括号配对的语法规则,但很难同时掌握隐含在其中的、复杂的化合价规则,因此常常生成这类“语法通顺的胡言乱语”。 Q2: SELFIES号称100%有效,为什么论文说它的保真度低,甚至引入了“字符串不稳定性”的问题? A2: SELFIES的100%有效性是一种“程序正义”,是其解码算法强制保证的结果。当生成模型产生一个不合理的SELFIES序列时(例如,指令一个饱和碳原子再形成一个新键),解码器不会报错,而是会默默地忽略掉这个指令,以保证最终输出的分子化合价正确。这种“自作主张”的纠错机制,虽然保证了有效性,但也导致了信息丢失。补充材料的分析表明,超过90%的不稳定SELFIES在解码过程中都发生了token丢失,其中最常被删除的就是环和支链。模型本想生成一个复杂的分子,但最终可能被解码成一个简单的链状分子,这就是其保真度低的根本原因。 Q3: ClearSMILES的核心思想是“最小化长程依赖”,这对机器学习模型为什么如此重要? A3: “长程依赖”是指字符串中相互关联但位置相距很远的符号,在SMILES中典型的例子就是匹配的括号和环数字。例如 C1(...长长的链...)1,模型在处理到第二个1时,必须“记住”很久之前遇到的第一个1的上下文信息。对于RNN这类序列模型,存在“梯度消失”问题,很难学习到这种远距离的依赖关系。即使是基于注意力机制的Transformer,处理过多的、嵌套的长程依赖也会增加学习的负担。ClearSMILES通过筛选,找到那些环和支链的跨度尽可能短、嵌套尽可能少的SMILES变体,相当于把一篇“长难句”改写成了“简单句”,大大降低了模型的学习难度,从而减少了语法错误的产生。 Q4: 论文使用了相对简单的VAE模型,而不是最先进的Transformer。这是出于什么考虑?这个结论对更强大的模型也适用吗? A4: 作者特意选择了一个简单的RNNAttn-VAE模型,主要有三个原因: 轻量且快速,便于进行大量的对比实验; 可解释性强,简单的注意力机制更容易分析模型在学习什么; 凸显问题,一个简单的模型更能暴露分子表示法本身的内在缺陷。如果一个表示法在简单模型上表现很差,说明其本身就“难学”。 论文也用更强大的MolGPT(一种Transformer模型)进行了验证,结果表明,虽然强力模型能部分弥补表示法的缺陷(例如,将SMILES的有效性从80%提升到90%),但ClearSMILES依然能在其基础上带来进一步的提升(从90%到95%)。这说明,选择一个更优的分子表示法,对于任何水平的生成模型都是有益的,它能让强大的模型变得更强。 关键结论与批判性总结 核心结论 标准的SMILES表示法在用于生成模型时存在严重的有效性问题,约有20%的产出是化学无效分子,其中芳香性相关的错误是主因。 SELFIES表示法虽然通过其解码算法保证了100%的有效性,但代价是严重的保真度损失,生成的分子在性质上与训练集有显著偏差,且存在“字符串不稳定性”问题。 本文提出的ClearSMILES数据增强策略,通过使用Kekulé式表示芳香环和最小化长程依赖,显著提升了SMILES的可靠性,将无效分子率降低至2.2%,并中度改善了保真度。 即使对于更强大的Transformer模型,使用更优的分子表示法(如ClearSMILES)依然能带来性能上的提升。 潜在影响 为生成化学领域的研究者在选择和预处理分子表示法时提供了重要的基准和指导。 ClearSMILES作为一种简单有效的数据增强方法,可以被广泛集成到现有的基于SMILES的生成模型工作流中,直接提升模型的可靠性和产出质量。 存在的局限性 ClearSMILES的预处理过程需要额外的计算成本(尽管作者指出这是可并行的CPU密集型任务,成本可接受)。 研究主要在一个相对简单的VAE模型上凸显问题,虽然也在MolGPT上进行了验证,但在更大、更前沿的生成模型上的效果有待进一步探索。 Fidelity的评估主要基于几个理化性质,更复杂的生物活性或三维构象的保真度未被涉及。 未来研究方向 探索能够兼顾SELFIES的100%有效性和SMILES的更高保真度的新型分子表示法。 将ClearSMILES策略应用于更大型、更多样化的化学数据集,并与最前沿的生成模型(如扩散模型)相结合进行测试。
Machine Learning & AI
· 2025-10-08
分子表示语言模型全览:从蛋白质到小分子的语言模型
分子表示学习模型全览:从蛋白质到小分子的语言模型 分子表示学习已成为计算化学和生物信息学的核心技术。随着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-10-08
针对ADMET预测的分子描述符优化集:一项基于文献的元分析与设计方案
针对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-10-08
✨ 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
<
>
Touch background to close