3. 分子图表示与特征体系

在分子图神经网络中,图结构只提供了“谁和谁相连”的拓扑骨架,真正决定模型能否学到化学规律的是附着在节点、边和图上的特征张量。一个分子图通常写成 G = (V, E, u):V 是原子节点集合,E 是化学键边集合,u 是整图级别的全局描述符。本节围绕这四类特征——原子节点特征、化学键边特征、全局分子描述符、官能团与环结构编码——说明它们各自承载什么化学信息、如何构造为数值向量,以及在实际建模中如何取舍。

原子节点特征:把每个原子写成一行向量

节点特征的目标是让模型区分不同元素的原子及其局部化学环境。最基础的做法是元素类型的 one-hot 编码,例如对 C、N、O、S、F、P、Cl、Br、I 等常见元素各占一维,其余元素归入“其他”维。但仅靠元素类型不足以表达化学差异,因此通常拼接以下字段:

  • 原子序数或元素类别:one-hot 或可学习的 embedding 查表,维度常取 32~128。
  • 度(degree):该原子在分子图中的邻居数,取值 0~5 做 one-hot,反映成键数目。
  • 形式电荷(formal charge):整数,通常裁剪到 [-2, 2] 后 one-hot,用于区分铵氮与中性氮等。
  • 杂化类型:SP、SP2、SP3、SP3D、SP3D2 的 one-hot,直接关联键角与共轭性质。
  • 是否在环中、是否在芳香环中:两个布尔位,是区分苯环碳与烷基碳的关键。
  • 手性标签:R、S、未指定三类,对立体化学敏感的活性预测任务必须保留。
  • 隐含氢数:该原子连接的氢原子个数,取值 0~4 做 one-hot。
  • 原子质量、电负性、范德华半径:连续值,做标准化后作为附加维度。

以 RDKit 为例,可用 Chem.GetFormalCharge(atom)、atom.GetHybridization()、atom.GetIsAromatic()、atom.GetTotalNumHs() 等接口逐字段提取。一个典型的节点特征向量长度约为 40~80 维。需要注意:one-hot 维度并非越多越好,稀有类别(如 SP3D2)样本极少,可合并为“其他杂化”,否则会引入大量近零梯度维度。

化学键边特征:描述连接的性质

边特征刻画两个原子之间“怎样相连”。若只把边当作无权连接,模型无法区分单键、双键与芳香键,对共轭体系和反应位点判断会明显退化。常用边特征包括:

  • 键类型:单键、双键、三键、芳香键的 one-hot,四维即可覆盖绝大多数有机分子。
  • 共轭标志:布尔位,标记该键是否处于共轭体系。
  • 是否在环中:布尔位,区分开链键与成环键。
  • 立体化学:E/Z、顺反或“无”的三类编码,用于双键构型敏感任务。
  • 键长与键级:若来自 3D 构象,可加入键长(Å,标准化);键级可作为连续值补充。

在消息传递框架中,边特征通常与两端节点特征一起送入消息函数,例如 m_ij = φ(h_i, h_j, e_ij)。若边特征维度较高而样本有限,可先用一层线性层把边特征投影到与节点隐藏维度一致,再参与聚合,避免边分支参数过多。

全局分子描述符:整图级别的补充信息

节点与边特征擅长表达局部结构,但分子量、脂溶性、拓扑复杂度等整体性质难以从局部消息中高效恢复。全局描述符 u 正是为此设计,常见字段有:

  • 分子量、重原子数、可旋转键数:整数或浮点,标准化后使用。
  • 拓扑极性表面积(TPSA)、LogP:连续值,与吸收、渗透性质强相关。
  • 氢键供体/受体数量:整数,反映分子间相互作用能力。
  • 环总数、芳香环数、最大环尺寸:整数,概括骨架复杂度。
  • QED 类综合评分:可作为先验质量指标。

全局描述符的接入方式有两种:一是作为独立向量,在读出阶段与图池化向量拼接后送入全连接层;二是在每层消息传递后广播到所有节点,参与节点更新。前者实现简单、不易过拟合,后者能让局部更新感知全局上下文,但会显著增加参数量。实践中建议先采用拼接方式,若验证集指标停滞再尝试广播。

官能团与环结构编码:从子结构到可学习表示

官能团和环是化学语义的天然单元,直接以原子级特征表达它们需要多层消息传递才能聚合出等价信息。更高效的做法是显式编码子结构。常见策略有三类:

  1. 子结构计数向量:用 SMARTS 模式匹配羟基、羧基、酰胺、硝基、磺酸基等官能团,统计出现次数,形成定长计数向量,作为全局描述符的一部分。
  2. 环指纹:对每个环记录尺寸、是否芳香、杂原子种类与数量,编码为环级特征,再通过注意力或求和聚合到分子表示。
  3. 子图节点标记:为属于特定官能团的原子增加一个“官能团类型”one-hot 维度,使消息传递在原子层面即可感知官能团归属。

以苯甲酸为例,SMARTS [CX3](=O)[OX2H1] 可匹配羧基,匹配到的碳、双键氧、羟基氧三个原子会被标记为“羧基”类别;苯环的六个碳则通过环感知接口标记为芳香环成员。这样,模型无需从零学习“羧基”这一概念,收敛更快,且在训练样本较少时更稳健。

特征构造的通用原则:先保证化学语义正确,再考虑维度规模。一个字段若无法在化学上明确解释其含义,通常不会带来稳定增益,反而增加调参负担。

下面用一张结构图汇总四类特征在分子图中的位置与流向,便于对照理解。

分子图特征体系:节点 · 边 · 全局 · 子结构 分子图 G = (V, E, u) C C O O 单键 单键 双键 全局描述符 u ① 原子节点特征 h_v 元素one-hot · 度 · 形式电荷 · 杂化 · 芳香性 手性 · 隐含氢数 · 质量 · 电负性 · 范德华半径 维度约 40~80,稀有类别合并 ② 化学键边特征 e_uv 键类型one-hot · 共轭 · 是否在环 · 立体化学 键长 · 键级;投影到节点隐藏维度后参与消息传递 消息函数 m_uv = φ(h_u, h_v, e_uv) ③ 全局分子描述符 u 分子量 · 重原子数 · 可旋转键 · TPSA · LogP 氢键供体/受体 · 环总数 · 芳香环数 · QED 读出阶段拼接,或逐层广播到节点 ④ 官能团与环结构编码 SMARTS 子结构计数向量(羟基、羧基、酰胺…) 环指纹:尺寸 · 芳香性 · 杂原子种类与数量 子图节点标记:为官能团原子增加类型 one-hot 拼接 → 分子表示向量 送入 GNN 消息传递与读出

构造特征时还需注意几个工程细节。第一,维度对齐:节点、边、全局三类特征最终要进入同一套网络,若隐藏维度设为 128,则各类特征先经独立线性层投影到 128 维再融合。第二,缺失值处理:3D 构象未生成时键长字段缺失,应置零并附加一个“是否有 3D 信息”的标志位,而不是用均值填充,否则会引入虚假的几何信号。第三,特征缓存:对大规模数据集,逐次调用 RDKit 提取特征耗时明显,建议预处理阶段一次性生成特征张量并序列化存储,训练时直接读取。

判断特征体系是否合理,可以做一个简单对照实验:固定 GNN 结构与超参数,仅改变输入特征组合,观察验证集指标。若加入边类型后 ESOL 类溶解度预测的 RMSE 明显下降,说明键级信息确实被模型利用;若加入全局描述符后指标无变化,则可能是读出层已从节点聚合中恢复了等价信息,此时可精简全局字段以降低维度。特征工程不是一次性工作,而应结合任务指标反复验证,保留真正被模型使用的字段。