4. 分子图构建与特征工程

分子图构建的核心任务,是把不同来源的分子文件统一转换为“节点—边—特征”三元结构。SMILES 是二维拓扑的线性编码,SDF 与 MOL2 则携带三维坐标和显式键信息。三者进入图对象后,节点通常对应重原子(有时含氢),边对应化学键;节点特征描述原子自身属性,边特征描述键的局部环境。特征工程的质量,直接决定后续图神经网络能否区分同分异构体、官能团和电子效应。

一、三种输入格式的解析差异

SMILES 解析依赖化学信息学工具包(如 RDKit)完成原子与键的推断。以 CC(=O)Oc1ccccc1C(=O)O(阿司匹林)为例,解析后得到 13 个重原子、13 条键,其中包含 1 个酯键、1 个羧基和 1 个苯环。SMILES 不显式给出氢原子和三维坐标,氢原子数需由价键规则补全,手性信息由 @ 标记表达。

SDF 采用分块结构:头部三行是标题、程序与注释,第四行是原子计数与键计数,随后是原子块(元素符号、三维坐标)和键块(原子索引、键级、立体标记)。MOL2 则使用 @<TRIPOS>ATOM、@<TRIPOS>BOND 等记录段,原子带部分电荷与类型(如 C.ar、O.2),键带 ar、am 等芳香与酰胺标记。解析时需注意:SDF 的键级为 1/2/3/4(4 表示芳香),MOL2 的芳香性写在键类型字符串中,二者不能直接混用。

二、节点特征设计

节点特征应覆盖原子的身份、电子状态与局部环境。常用字段包括:原子类型(C、N、O、S、F、Cl、Br、I、P 等,独热或嵌入)、度(连接重原子数)、形式电荷、杂化方式(SP、SP2、SP3、SP3D、SP3D2)、是否在环内、是否芳香、手性标签、氢原子数、原子质量。对于含金属或特殊价态的体系,还应加入氧化态与配位数。

以 RDKit 为例,可用如下方式提取节点特征:

from rdkit import Chem
from rdkit.Chem import rdchem

mol = Chem.MolFromSmiles('CC(=O)Oc1ccccc1C(=O)O')
for atom in mol.GetAtoms():
    feat = {
        'symbol': atom.GetSymbol(),
        'degree': atom.GetDegree(),
        'charge': atom.GetFormalCharge(),
        'hybrid': atom.GetHybridization().name,
        'aromatic': int(atom.GetIsAromatic()),
        'in_ring': int(atom.IsInRing()),
        'num_H': atom.GetTotalNumHs(),
    }
    print(atom.GetIdx(), feat)

输出中,羧基碳的杂化为 SP2、形式电荷为 0、连接 3 个重原子;酯基氧的度为 2、不在环内;苯环碳全部标记 aromatic=1、in_ring=1。这些离散特征拼接后,通常再做归一化或嵌入查表,形成固定维度的节点向量。

三、边特征设计

边特征描述键的类型与立体环境。基础字段包括:键类型(单键、双键、三键、芳香键)、是否共轭、是否在环内、环大小、立体化学(E/Z、顺反)、键长(若三维坐标可用)。对于 MOL2,还可加入键的 ar/am 标记与部分电荷差。

共轭判断可借助 RDKit 的 GetIsConjugated(),环判断用 IsInRing(),环大小用 GetRingInfo().AtomRings() 统计。以阿司匹林为例,苯环内 6 条键均为芳香键且共轭,酯键的 C—O 为单键但不共轭,羧基 C=O 为双键且与羟基氧共轭。将这些布尔量与键类型独热拼接,可得到边向量。

四、图对象组装与一致性检查

组装图对象时,节点索引必须与原子索引严格对应,边采用无向表示(或双向有向边)。建议在构建后执行三项检查:原子数是否等于节点数、键数是否等于边数、所有原子价键是否满足价态规则。若使用三维格式,还需检查坐标是否缺失或全为零。对于芳香体系,应统一芳香键的表示方式,避免同一分子在不同格式下产生不同的边类型。

分子图构建:从三种格式到节点/边特征 SMILES 线性拓扑编码 隐式氢 / 手性标记 SDF 原子块 + 键块 三维坐标 / 键级 MOL2 原子类型 + 部分电荷 ar / am 键标记 解析与规范化 RDKit / OpenBabel 补氢 / 芳香化 价态校验 索引对齐 图对象 G=(V,E) 节点 V:重原子 边 E:化学键 节点特征矩阵 X 边特征矩阵 E_f 邻接矩阵 A 可选:三维坐标 节点特征 原子类型 / 度 形式电荷 / 杂化 芳香性 / 环内 手性 / 氢数 边特征 键类型 / 键级 共轭 / 环内 环大小 / 立体 键长(三维) 示例:阿司匹林(C9H8O4) 节点:13 个重原子(9C + 4O);边:13 条键(6 芳香键 + 1 酯键 + 1 羧基 C=O + 1 C—O + 4 单键) 关键特征:苯环碳 aromatic=1、in_ring=1;羧基碳 hybrid=SP2;酯基氧 degree=2、charge=0

五、特征工程中的常见陷阱

第一,芳香性表示不一致。同一苯环在 SDF 中可能写作交替单双键,在 MOL2 中写作 ar,若不做统一,模型会学到虚假差异。第二,氢原子处理不一致。SMILES 默认隐式氢,SDF 可能显式列出,需在解析后统一补氢或统一忽略。第三,电荷与质子化状态。MOL2 的部分电荷是力场赋值的,与形式电荷不同,不能混用。第四,三维坐标缺失。若用距离作为边特征,需先确认坐标有效,否则应退化为拓扑特征。

建议在构建图对象后,对每个分子输出一行摘要:原子数、键数、芳香键数、环数、最大环大小、电荷总和。这行摘要可作为数据质量的第一道筛查,快速发现解析失败或异常分子。

六、从图对象到模型输入

最终交付给模型的通常是三个张量:节点特征矩阵 X ∈ R^(N×F)、边索引 edge_index ∈ Z^(2×E)、边特征矩阵 E_f ∈ R^(E×D)。若使用批处理,还需提供 batch 向量标记每个节点所属分子。对于三维构象,可额外提供坐标矩阵 pos ∈ R^(N×3),供 SchNet、DimeNet 等模型使用。

以阿司匹林为例,若节点特征取 9 维(原子类型 6 维独热 + 度 + 电荷 + 芳香性),边特征取 6 维(键类型 4 维独热 + 共轭 + 环内),则 X 为 13×9,E_f 为 13×6。这些维度需在数据预处理阶段固定,避免不同分子产生不同特征长度。

若同一数据集混合 SMILES、SDF、MOL2 三种来源,务必先统一芳香性、氢原子和电荷的表示规则,再执行图构建。否则,同一分子可能因来源不同而生成不同的图结构,导致模型学到格式偏差而非化学规律。

完成图构建与特征工程后,分子被表示为带属性的图对象,后续的图神经网络、图核方法或指纹方法都建立在这一表示之上。特征设计的粒度与一致性,是决定下游任务上限的关键因素之一。