第1章 分子基础概念与化学空间

做ADMET预测,得先跟分子混个脸熟。我见过不少同学一上来就调模型,结果连输入的分子长什么样都说不清——说白了,特征工程如果连基础概念都含糊,后面跑出来的结果只能靠运气。这一章咱们把地基夯实:从原子、化学键,一直聊到化学空间,中间穿插SMILES和分子指纹这些“分子身份证”。你听完就能明白,为什么深度学习里的分子表征都是从这些东西演化而来的。

1.1 原子与化学键——分子的积木

分子由原子组成,这个不用多讲。但做ADMET时,哪些原子需要特别关注?

  • 碳、氢、氧、氮、硫——有机物里的常客,几乎所有药物分子都绕不开。
  • 卤素(F、Cl、Br、I)——改代谢、透膜率的时候特别有用。我记得有次做CYP450抑制预测,不加卤素特征,模型死活学不准。
  • 金属原子(如Fe、Zn)——某些配合物药物要用,不过比例很小。

化学键决定了分子的刚性、可旋转程度,直接影响ADMET性质。比如,芳香键通常比较平面,容易堆叠,可能导致水溶性差;单键可以旋转,分子柔性大,渗透性可能更好。

一个小习惯:我建特征的时候,会把原子类型、杂化状态、形式电荷都编码成独热向量。你想想,同样一个碳原子,在羰基里和在甲基里,化学行为差太多了。不分开处理,模型会犯错。

1.2 分子式与SMILES表达

分子式是最直接的表示,比如C₆H₆(苯)。但你给模型一个字符串“C6H6”,它根本不知道环在哪里。所以实际工作中,我们用SMILES(Simplified Molecular Input Line Entry System)。

SMILES用ASCII字符描述分子结构,简单例子:

乙醇: CCO
苯: c1ccccc1
对乙酰氨基酚: CC(=O)Nc1ccc(O)cc1

规则不复杂:原子用元素符号;键用-、=、#表示单/双/三键;环用数字标开环闭环。我刚开始学的时候,被“c1ccccc1”绕晕过——其实就是把苯环的6个碳顺次连起来,c表示芳香碳,1表示环编号。

避坑指南:SMILES不唯一。同一个分子可能有多个合法SMILES字符串。比如“CCO”和“OCC”都表示乙醇。如果你拿SMILES当字符串直接扔进NLP模型,必须做规范化(Canonical SMILES),否则同一个分子会被当成两个样本。我曾经因为这个,在毒理分类任务里多了一批“重复数据”,召回率虚高。

除了SMILES,常见的还有InChI(更规范但长)和SELFIES(鲁棒性更高)。实战中SMILES还是最主流,因为RDKit、Open Babel等化学信息学工具都原生支持。

1.3 分子指纹

分子指纹是把分子编码成固定长度的二进制向量,每一位代表一个子结构是否存在。我做ADMET时最常用的是下面几种:

指纹类型长度特点
MACCS (166 bits)166预定义的166个关键子结构,简单暴力
ECFP (Extended Connectivity Fingerprint)通常1024/2048基于摩根算法,捕捉局部环境
FCFP (Feature-based)同ECFP用原子特征替代拓扑号,偏向药效团
RDKit默认指纹可变(默认2048)均衡型,适合快速验证

举个例子,用RDKit生成ECFP:

from rdkit import Chem
from rdkit.Chem import AllChem
mol = Chem.MolFromSmiles('CC(=O)Nc1ccc(O)cc1')
fp = AllChem.GetMorganFingerprintAsBitVect(mol, radius=2, nBits=1024)
print(fp.ToBitString()[:16])  # 打印前16位

输出类似:0001101110010000...

我个人的经验是:ECFP对ADMET分类任务效果通常最好,但MACCS胜在解释性强——你可以直接说“这个分子没有芳香环,所以毒性特征缺失”。后来做多任务学习,我开始把两类指纹拼接,效果有所提升。

1.4 化学空间

化学空间是“所有可能分子的集合”。听起来很虚,但在ADMET里,它帮我们思考两个问题:

  1. 训练集覆盖了整个空间吗? —— 如果模型只在某块区域训练,预测新分子就危险。
  2. 相似分子有相似的ADMET性质吗? —— 化学空间上的距离与性质相关,这是迁移学习的基础。

我们通常用二维分子描述符(比如分子量、logP、氢键供体/受体数)降维到2D或3D空间,可视化分布。还有一种做法:把ECFP用t-SNE或UMAP投影,看分子聚类情况。

注意:化学空间极其稀疏——估计可能存在的有机分子数在10^60数量级,而人类合成的才1亿左右。你训练的ADMET模型,本质是在一个微小且偏置的采样上学习。所以做主动学习或迁移学习时,一定要评估目标分子离训练集有多远。我踩过坑:用FDA已上市药物训练的模型,去预测天然产物,结果全线翻车——因为结构差异太大。

为了更直观地串联整章概念,我画了一张结构图。你看一眼,基本就清楚了:

分子基础概念与化学空间知识体系 原子 (C, H, O, N...) 化学键 (单/双/芳香) 分子式 / SMILES / InChI ASCII编码结构 分子指纹 (ECFP, MACCS) 二进制向量 化学空间 (10^60分子) 距离 → 性质相似性 从离散的原子→化学键组合成分子,再通过SMILES/指纹编码成机器可读的向量, 最终映射到高维化学空间 — 这是ADMET智能预测的第一步。

回头总结一下:原子和化学键是底层构件;分子式和SMILES是沟通化学家与计算机的桥梁;分子指纹把分子转成定长向量,供模型直接消费;化学空间则是我们思考泛化能力的大背景。下一层,咱们就要开始聊怎么用这些表示做自监督学习了——不过那得先把这章的底子捂热。

核心建议:如果你刚接触ADMET项目,先自己用RDKit画几个分子,生成SMILES和MACCS指纹,再用t-SNE投影看看它们在化学空间中的分布。这个动手过程,比看一百页理论都有用。我曾经让实习生周末干半天这个,周一回来他就能独立分析数据偏置了。