4. 分子描述符与分子指纹:基本概念,用于辅助模型评估
大家好,今天我们来讲一个在分子生成模型评估中真正起决定性作用,但又经常被入门者忽略的环节——分子描述符和分子指纹。
你想想看,虽然SMILES是用字符串来表示分子,但深度学习模型本质上是一个数学函数,它只认识数字。所以,把分子结构转化成计算机能理解的特征向量,是训练和评估模型的第一步,也是最关键的一步。
我刚开始做分子生成的时候,只盯着Loss曲线看,觉得Loss降得挺漂亮,结果一测生成分子的化学性质,全都不合格。后来我养成了一个习惯:每次实验必须看三个东西——1)生成分子的QED分布,2)与训练集的平均Tanimoto相似度,3)SA Score的分布。这三个指标组合起来,基本能反映一个生成模型的好坏。
4.1 分子描述符:基于知识的特征工程
说白了,分子描述符就是给分子做体检,量身高、测体重、数一数身上有几个口袋。
描述符是标量值,通常具有明确的物理化学意义。常见的描述符包括:
- 分子量 (MolWt):最基础的描述符,影响药物的吸收和分布。
- 脂水分配系数 (LogP):评估分子的亲脂性,过高或过低都会影响成药性。
- 氢键供体/受体计数 (HBD/HBA):影响分子与靶点的结合能力。
- 可旋转键数 (NumRotatableBonds):评估分子的柔韧性。
- 拓扑极性表面积 (TPSA):预测分子的肠道吸收和血脑屏障穿透能力。
| 描述符名称 | 类别 | 评估中的典型用途 |
|---|---|---|
| MolWt | 物理性质 | 过滤超过500道尔顿的分子 |
| MolLogP | 疏水性 | 评估类药性(Lipinski规则) |
| NumHDonors | 氢键能力 | 与ADME性质相关 |
| TPSA | 极性表面积 | 预测口服生物利用度 |
我个人习惯在训练之前,先用RdKit把所有分子的基础描述符算好,存成npy文件。这样在评估的时候直接加载,不用每次都重新计算,能省下不少时间。
4.2 分子指纹:子结构的局部表示
描述符虽然有用,但它丢掉了分子的局部结构信息。指纹就是为了解决这个问题而生的。指纹通常是一个固定长度的位向量(bit vector),每一位代表分子中是否存在某种特定的化学子结构。
常用的指纹主要有两类:
- MACCS 键:一个包含166个预定义子结构查询的字典。优点是速度快、可解释性强;缺点是覆盖的化学空间有限。
- ECFP (Extended-Connectivity Fingerprints):基于Morgan算法生成,不依赖预定义字典。优点是能捕捉丰富的拓扑结构;缺点是可解释性差。
来看看具体的代码实现,这段代码我在项目中非常常用:
from rdkit import Chem
from rdkit.Chem import Descriptors, MACCSkeys
from rdkit.Chem.AllChem import GetMorganFingerprintAsBitVect
mol = Chem.MolFromSmiles('CC(=O)OC1=CC=CC=C1C(=O)O')
# 计算描述符
mw = Descriptors.MolWt(mol)
logp = Descriptors.MolLogP(mol)
print(f"分子量: {mw:.2f}, LogP: {logp:.2f}")
# 计算 MACCS 指纹
maccs = MACCSkeys.GenMACCSKeys(mol)
print(f"MACCS 指纹长度: {maccs.GetNumBits()}")
# 计算 ECFP4 指纹 (半径2, 2048位)
ecfp4 = GetMorganFingerprintAsBitVect(mol, radius=2, nBits=2048)
print(f"ECFP4 指纹长度: {ecfp4.GetNumBits()}")
嗯,这里有个坑要注意:指纹的位宽(nBits)设置不是越大越好。我见过有人把nBits设成16384,结果算出来的Tanimoto系数普遍很低,因为位宽太大导致大多数位都是0,失去了比较意义。通常ECFP4用1024或2048位就足够了。
4.3 从相似性到分布:指纹在评估中的核心应用
这一节是重点。有了指纹,我们才能科学地评估生成模型的好坏。我不只看Loss,那些数字太抽象了。我更关心生成分子在化学空间里的分布是什么样的。
我利用下面这张图来概括从SMILES到评估指标的数据流。我个人特别喜欢这种抽象方式,它能清晰地展示数据是如何一步步被转化的。
具体来说,指纹在这几个核心指标上非常有用:
- Tanimoto 系数(新颖性):衡量生成分子与训练集分子的相似度。平均相似度过高说明模型在记忆,过低则说明模型在乱生成。
- QED(定量类药物评估):结合多个描述符的加权评分。虽然它不能完全替代专家判断,但作为初筛非常高效。
- SA Score(合成可及性):评估分子是否容易合成。我之前遇到只看性质不管合成的项目,结果生成了一堆理论上完美的分子,但有机合成团队看了直摇头。
- MMD(最大均值差异):在指纹空间里比较两个集合的分布差异,判断生成分布是否逼近训练分布。
4.4 实战建议与避坑
OK,我们总结一下。描述符和指纹是连接化学语言和深度学习模型的桥梁。下面是我的一些实战建议:
起步建议: 对于分子生成模型的评估,我个人建议先从 ECFP4(半径2, 2048位)开始,配合3个核心描述符(MW, LogP, TPSA)。这个组合简单、高效、信息量大。
避坑指南: 我曾经在一个项目中试图把所有能用RdKit算出来的描述符(大概200多个)直接拼成一个向量喂给模型做评估。结果维度灾难立刻显现,相似度矩阵变得非常稀疏,模型评估彻底失效。记住,不是特征越多越好,冗余特征反而会淹没有效信息。
最后想说的是,评估体系不是一成不变的。不同的项目侧重点不同。比如做抗菌肽生成的,可能更关注阳离子性和疏水性;做激酶抑制剂的,可能更关注特定子结构的匹配。描述符和指纹给了你一个标准化的工具,但用好这些工具,还是需要你对具体问题有深入的理解。