分子描述符概述:定义、分类与历史发展

什么是分子描述符?——先别急着背定义

各位做药物设计的同行,你们有没有遇到过这种情况:拿着一个活性不错的化合物,兴冲冲去做体内实验,结果因为代谢太快、毒性太高,项目直接凉了。我当年在CRO公司就吃过这种亏,一个系列十几个化合物,体外活性都很好,进到大鼠体内全被肝微粒体酶快速清除,白忙活三个月。

所以后来我养成了一个习惯:在设计化合物的早期,就先用分子描述符把ADMET性质(吸收、分布、代谢、排泄、毒性)快速扫一遍。说白了,分子描述符就是把分子的结构、物理化学性质、电子特征等信息,用一组数字或符号表示出来。你想想看,一个分子有几十个原子,几百个电子,怎么用计算机去预测它能不能透过血脑屏障?靠的就是这些描述符。

核心理解:分子描述符是将化学结构转化为数学语言的桥梁,是定量构效关系(QSAR)、虚拟筛选和ADMET预测的基础。

我个人更喜欢把分子描述符比作“分子的身份证”——每个分子都有自己独特的描述符组合,用来和其他分子区分开。有些描述符非常直观,比如分子量(MW)、脂水分配系数(LogP);有些则很抽象,比如拓扑指数、静电势。不管哪种,目的就一个:用定量的方式刻画分子的内在性质。

分类体系——这些描述符到底分几类?

我在项目中经常要挑选合适的描述符做模型,最初也是摸着石头过河。后来发现,只要掌握几大类的特点,选起来就顺手多了。分子描述符按照计算方式和化学信息内涵,大致可以分成下面几类:

  • 组成描述符(0D):最简单的一类,只依赖于分子式和原子计数,比如原子数、键数、环数、分子量。计算速度最快,但信息量很低。
  • 结构描述符(1D):反映分子的官能团、片段或子结构信息。比如氢键供体/受体数目、可旋转键数目、芳香环数目。我就经常用这些做简单的类药性规则(如Lipinski五规则)。
  • 几何/拓扑描述符(2D):基于分子的二维结构图,包括原子连接性、分子形状、分支度。典型的如Wiener指数、Balaban指数。拓扑描述符在表征分子体积和形状方面很有用。
  • 三维描述符(3D):需要分子的三维构象,描述空间性质,如分子体积、表面积、偶极矩、静电势。计算量最大,但能反映分子与受体结合的立体化学特征。
  • 量子化学描述符:通过量子力学计算得到,如HOMO/LUMO能量、电荷分布、极化率。这些描述符对理解反应活性、氧化代谢位点有直接帮助。
  • 指纹描述符:用二进制位串(0/1)表示分子中存在或不存在的子结构。比如Morgan指纹(直径2的圆形指纹)在深度学习模型中越来越流行。
类别示例计算成本信息维度常见用于ADMET
组成/0D分子量、原子数极低极低类药性初筛
结构/1DHBD、HBA、可旋转键低低吸收、透膜
拓扑/2DWiener指数、Kier指数中等中等分布、结合亲和力
三维/3D分子体积、表面积、偶极矩较高高结合能、蛋白相互作用
量子化学HOMO/LUMO、电荷分布高很高反应性、代谢位点
分子指纹摩根指纹、ECFP低-中稀疏高维相似性搜索、分类模型

我的选型建议:做ADMET快速筛查,优先用组成+结构+拓扑的组合(0D~2D),成本低、不失能。等进入先导优化阶段,再引入3D和量子化学描述符,提升预测精度。我曾经因为一上来就跑了全套3D描述符,最后模型过拟合严重,教训深刻。

历史发展脉络——从手算到深度学习

分子描述符不是新鲜事物。早在19世纪末,化学家们就开始用“规则”来总结性质规律。我记得看过一篇文献,1869年俄国化学家Marcellin Berthelot就试着用碳原子数预测烷烃的沸点——这其实就是早期的分子描述符思想。你想想看,那时候连计算机都没有,全靠手算。

真正系统化的发展,大致可以分为三个阶段:

  1. 经验系数时代(1950s-1980s):代表有Hansch的π值(疏水参数)、Taft的σ*值(取代基电子效应)。这些描述符来自大量的实验数据和理论推导。当时做QSAR,只能选几个关键描述符手工计算。我导师那时候还在黑板上手推公式,想想就不容易。
  2. 拓扑指数时代(1980s-2000s):随着计算机出现,拓扑指数开始流行。Wiener(1947)提出了第一个拓扑指数,后来有Balaban、Kier-Hall等。这一阶段的特点是描述符计算可以自动化,但选择还全靠专家经验。我记得早期的DRAGON软件只能算一千多个描述符,但在当时已经是革命性工具了。
  3. 大数据与深度学习时代(2000s至今):算力爆炸,描述符开始百花齐放。分子指纹、自动编码器提取的向量、图神经网络生成的节点特征……甚至出现了自动特征工程方法。现在的描述符库(如RDKit、Mordred、PaDEL-Descriptor)可以计算上万种描述符。但是,描述符并不是越多越好——我见过有人把5000维描述符直接扔进模型,结果训练集跑得很好,测试集一塌糊涂。说白了,这就像给菜放调料,少一味不行,放太多也会坏菜。
# 用RDKit计算几个常见的分子描述符(示例)
from rdkit import Chem
from rdkit.Chem import Descriptors

mol = Chem.MolFromSmiles('CC(C)Cc1ccc(cc1)C(C(=O)O)C')  # 布洛芬
mw = Descriptors.ExactMolWt(mol)
logp = Descriptors.MolLogP(mol)
hbd = Descriptors.NumHDonors(mol)
hba = Descriptors.NumHAcceptors(mol)
rotb = Descriptors.NumRotatableBonds(mol)
tpsa = Descriptors.TPSA(mol)

print(f'MW: {mw:.2f}, LogP: {logp:.2f}')
print(f'HBD: {hbd}, HBA: {hba}')
print(f'RotatableBonds: {rotb}, TPSA: {tpsa:.2f}')

避坑提醒:我曾经遇到一个项目,用摩根指纹做了毒性预测模型,效果很好。后来仔细一看,指纹向量里包含了大量冗余子结构,模型只是记住了熟悉的分子骨架,而非学到了ADMET规律。所以记住:描述符选择一定要结合化学知识的先验信息,不能光靠算法选特征。

分子描述符在ADMET中的角色

为什么我们在ADMET预测中离不开分子描述符?答案很简单:多数ADMET性质都是多个分子特征的综合体现。比如Caco-2细胞渗透性,不仅和LogP有关,还和分子量、可旋转键数、极性表面积(TPSA)有关。没有一个单一描述符能完整预测,所以需要组合多个描述符来建模。

我个人习惯把ADMET相关的分子描述符分成几组:

  • 吸收相关:LogP、LogD、TPSA、HBD/HBA、可旋转键数、分子量、Papp(实验值)
  • 分布相关:血浆蛋白结合率(PPB)与LogP、pKa、极性表面积、分子体积有关
  • 代谢相关:CYP酶底物预测常用拓扑指数、分子极性、HOMO能量、位阻参数
  • 排泄相关:分子量、LogP、电荷状态、胆汁排泄倾向
  • 毒性相关:hERG抑制与分子量、LogP、碱性氮原子数、电荷密度有关;肝毒性常用反应性描述符(如亲电指数)

嗯,这里要注意:同一组描述符在不同数据集上表现可能差别很大。比如用某公司内部数据训练的PPB模型,LogP系数是0.7;但用ChEMBL数据训练时,权重可能变成了0.4。这就是为什么我建议在每个新项目开始时,都重新做一次描述符筛选和模型验证。

一句话总结:分子描述符是ADMET预测模型的骨架。骨架搭对了,模型才能站得起来;骨架搭歪了,再好的算法也是花架子。

分子描述符知识体系结构 分子描述符 定义与本质 分类体系 历史发展 ADMET应用角色 0D:组成描述符 1D:结构描述符 2D:拓扑描述符 3D:几何描述符 量子化学描述符 分子指纹 经验系数时代 拓扑指数时代 深度学习时代 吸收 分布 代谢 排泄 毒性 选择描述符时需平衡 计算成本与信息含量 深度学习时代需注意 过拟合与可解释性