2. 分子表示与特征工程

在多目标药物分子优化中,模型能否同时兼顾活性、选择性、成药性与安全性,很大程度上取决于分子被“翻译”成什么样的数值形式。同一个分子,用 SMILES 表示是一串字符,用分子图表示是节点与边,用指纹表示是稀疏位向量,用描述符表示是若干连续实数,用 3D 构象表示则是一组原子坐标。表示方法不同,模型能捕捉到的信息、可解释性和计算代价也完全不同。本节围绕“表示—特征—选择—嵌入”这条主线,说明如何为多目标优化构建一套可用的分子特征体系。

一、五类主流分子表示及其适用边界

SMILES 是最紧凑的线性表示,例如 CC(=O)Oc1ccccc1C(=O)O 表示阿司匹林。它把原子、键、环、分支编码为字符串,便于存储和作为序列模型输入。但 SMILES 存在同一分子多种合法写法的“非唯一性”,直接作为字符序列输入会让模型把不同写法误判为不同分子。工程上通常先做规范化(canonical SMILES),或改用 SELFIES 等更稳健的字符串表示。SMILES 适合序列到序列的生成任务,但对拓扑关系的表达是隐式的。

分子图把分子显式建模为图 G=(V,E):原子是节点,化学键是边,节点和边各自带特征。节点特征常包括元素类型、度、形式电荷、杂化方式、是否在环上、手性标签;边特征包括键级、是否共轭、是否在环上、立体化学。分子图天然保留拓扑与局部化学环境,是图神经网络(GNN)的标准输入,也是当前多目标性质预测与生成的主力表示。其代价是计算量随原子数增长,且对长程相互作用需要额外机制(如注意力、全局读出)来补足。

分子指纹把结构片段映射为固定长度的位向量或计数向量。常见的有 Morgan/ECFP(圆形片段)、MACCS(预定义子结构键)、RDKit 拓扑指纹等。以 ECFP4 为例,半径设为 2,输出 2048 位,每一位代表某类局部子结构是否出现。指纹计算快、维度固定、便于相似性检索和传统机器学习模型使用,但它是“哈希折叠”的结果,位与位之间没有连续语义,且默认丢失立体与构象信息。

分子描述符是连续或离散的理化量,如分子量、LogP、TPSA、氢键供体/受体数、可旋转键数、芳香环数、QED、SAscore 等。它们直接对应成药性规则(如 Lipinski 五规则),可解释性强,适合作为多目标优化中的显式约束项。缺点是描述符数量有限、彼此相关,且难以表达精细的局部结构差异。

3D 构象在二维拓扑之外补充空间信息,包括原子坐标、二面角、分子形状、静电势、药效团距离等。对受体结合、立体选择性和构象依赖性质,3D 表示往往不可替代。但构象生成本身有不确定性,同一分子可能对应多个低能构象,需要做构象集成或选择代表性构象,计算成本也显著高于前几类。

分子表示 → 特征 → 选择/嵌入 → 多目标模型 表示层(同一分子的五种“翻译”) SMILES CC(=O)Oc1ccccc1 C(=O)O 序列·紧凑·需规范化 分子图 节点=原子 边=键 含杂化/电荷/手性 GNN 标准输入 指纹 ECFP4 / MACCS 2048 位稀疏向量 快·可检索·无立体 描述符 MW / LogP / TPSA HBD / QED / SAscore 连续·可解释 3D 构象 原子坐标/二面角 形状/静电势 构象集成·代价高 特征层(拼接与对齐) 结构特征 指纹位 + 图节点/边 理化特征 描述符 + 成药性规则 空间特征 构象/药效团距离 任务特征 靶点/ADMET 相关子结构 特征选择 • 方差过滤 / 相关性剔除 • 多目标重要性排序(RF/GBDT) • 按目标分组保留,避免单目标偏置 • 输出:每目标 200–800 维候选特征 嵌入策略 • 图嵌入:GIN/GAT 读出向量 • 序列嵌入:SMILES Transformer • 多视图融合:拼接 / 注意力加权 • 输出:共享 128–512 维隐向量

二、面向多目标的特征选择:不能只看单目标重要性

多目标优化的特征选择与单目标有本质区别:一个特征对活性预测很重要,却可能对毒性预测毫无贡献,甚至引入噪声。如果只按“活性重要性”排序,模型会在其他目标上退化。实践中可采用“按目标分组 + 组内排序 + 组间合并”的策略:先对每个目标单独训练一个轻量模型(如随机森林或梯度提升树),得到该目标下的特征重要性;再对每个目标保留前 k 个特征(例如 k=200),最后取并集。这样既保证每个目标都有足够的判别信息,又避免特征维度爆炸。

需要特别注意的是,指纹位和描述符的尺度差异很大。指纹是 0/1 稀疏位,描述符是连续值,直接拼接会让量纲大的描述符主导距离计算。标准做法是对连续描述符做标准化(z-score 或 min-max),对指纹位保持原样或做 TF-IDF 加权;若使用树模型,可跳过标准化,但若使用线性模型或距离度量,则必须处理。

三、嵌入策略:从高维稀疏到低维稠密

当特征维度达到数千甚至上万时,直接送入多目标模型容易过拟合。嵌入的目标是把分子压缩为低维稠密向量,同时保留对多个目标都有用的信息。常见路线有三条:

  • 图嵌入:用 GIN、GAT 或 MPNN 在分子图上做消息传递,最后通过全局池化得到图级向量。适合拓扑敏感的任务,但需要较多标注数据。
  • 序列嵌入:用字符级或子词级 Transformer 编码 SMILES,配合预训练(如 ChemBERTa 类思路)可缓解数据不足。注意输入前必须做 canonical 化。
  • 多视图融合:把图嵌入、指纹、描述符分别编码后拼接,或用注意力机制动态加权。多目标场景下,可让不同目标关注不同视图,例如活性更依赖图嵌入,成药性更依赖描述符。
实操建议:先用“指纹 + 描述符”作为基线特征,训练多目标模型并记录各目标指标;再逐步加入图嵌入或 3D 特征,观察每个目标是否提升。若某目标无提升甚至下降,说明该视图对该目标贡献有限,应降低其权重或单独建模。

四、一个可复现的特征工程示例

下面给出一个面向“活性 + LogP + hERG 风险”三目标的特征构建片段,使用 RDKit 与 scikit-learn 的常见接口。示例参数为教学设定,实际使用时需根据数据集调整。

from rdkit import Chem
from rdkit.Chem import AllChem, Descriptors, Crippen
from sklearn.preprocessing import StandardScaler
import numpy as np

def featurize(smiles):
    mol = Chem.MolFromSmiles(smiles)
    if mol is None:
        return None
    # 1) Morgan 指纹,半径 2,2048 位
    fp = AllChem.GetMorganFingerprintAsBitVect(mol, 2, nBits=2048)
    fp_arr = np.array(fp, dtype=np.float32)
    # 2) 关键描述符
    desc = np.array([
        Descriptors.MolWt(mol),
        Crippen.MolLogP(mol),
        Descriptors.TPSA(mol),
        Descriptors.NumHDonors(mol),
        Descriptors.NumHAcceptors(mol),
        Descriptors.NumRotatableBonds(mol),
        Descriptors.RingCount(mol),
    ], dtype=np.float32)
    return fp_arr, desc

# 假设 smiles_list 为训练分子
fps, descs = [], []
for smi in smiles_list:
    out = featurize(smi)
    if out is None:
        continue
    fps.append(out[0]); descs.append(out[1])

fps = np.vstack(fps)
descs = np.vstack(descs)
descs = StandardScaler().fit_transform(descs)   # 连续描述符标准化
X = np.hstack([fps, descs])                     # 2055 维基线特征
print("特征矩阵形状:", X.shape)

运行后若输出类似 (1200, 2055),说明 1200 个分子各得到 2048 位指纹加 7 个描述符。接下来可按第二节所述,对三个目标分别训练随机森林,取每个目标重要性前 200 的特征并求并集,得到降维后的候选集。若并集维度仍在 1500 以上,可进一步用 PCA 或自编码器压缩到 256 维,再送入多目标模型。

五、表示选择与多目标权衡的对应关系

表示/特征擅长目标主要局限建议用法
SMILES 序列生成、序列建模非唯一、拓扑隐式规范化后做预训练嵌入
分子图活性、选择性计算量大、需数据GNN 主干,配合全局读出
指纹相似性、快速筛选无立体、位无连续语义基线特征与检索
描述符成药性、ADMET数量少、相关性强显式约束与可解释项
3D 构象结合亲和、立体选择性构象不确定、代价高关键分子精算,非全量
常见误区:把 3D 构象特征直接拼到全量分子上,导致计算时间不可控;或对指纹位做标准化,破坏其稀疏语义。正确做法是先明确每个目标最依赖哪类表示,再按目标分配特征预算,而不是“所有表示全量拼接”。

总结来看,分子表示与特征工程不是一次性选择,而是与多目标优化目标耦合的设计过程。先用指纹和描述符建立可解释基线,再按目标引入图嵌入或 3D 特征,通过分组重要性筛选和低维嵌入控制复杂度,才能在活性、成药性和安全性之间取得可复现的平衡。