上一节以漏斗刻画药物发现的昂贵;本节转向更根本的一问:分子究竟以什么身份进入算法。答案有三——字符串、指纹与图——而每一种都对应一次取舍。
1.2.1 表示决定上限:模型见过什么
机器学习模型从未见过分子本身。分子是电子与原子核构成的量子多体系统,连续、高维、无法直接枚举;真正进入模型的,永远是它的一份描述——一串字符、一个向量,或一张图。这份描述称为分子表示(molecular representation)。表示与分子的关系,如同地图与地形:地图省略了什么,看图的人就永远不知道什么。
由此得到一条冷酷的推理。其一,表示在数据抵达模型之前已经定型,其中没有记录的差别,模型无从分辨:若指纹不编码手性,R 构型与 S 构型的一对对映体在输入端就是同一个点,任何下游算法都学不出对映选择性——这不是算法的失败,而是输入里根本没有这份信息。其二,表示引入的错误与畸变同样无法靠模型修复:把不同子结构折叠到同一位的哈希碰撞,会在标签干净的数据里制造系统性噪声,模型只能学着与噪声共存,而无法把它还原成信息。
更微妙的是,同一分子换一种表示喂给同一个模型,结论可能不同。原因不在随机性,而在归纳偏置(inductive bias):模型并非在所有可能的输入—输出函数之间平等搜索,它带着"什么样的函数容易表达"的先验,而这份先验在很大程度上由表示的结构决定。字符串把分子写成可逐步展开的序列,偏置指向"局部组合";分子指纹(molecular fingerprint)把分子写成子结构的集合,偏置指向"局部出现与否";图把分子写成拓扑对象,偏置指向"结构关系本身"。没有免费午餐定理(No Free Lunch theorem)断言,对所有可能问题平均之后任何两个算法一样好;算法在真实世界有效,恰因偏置与问题结构相配。表示,是偏置的第一个、也是最重的一个来源。选择表示,就是替模型选择它能看见的世界。
图 1.2-1 以阿司匹林为例,并排给出这三种面貌。三者指称同一个分子,进入模型之后却是三种截然不同的数学对象。
1.2.2 字符串:把分子写成一维语言
SMILES(simplified molecular input line entry system) 由 Weininger(1988)提出:对分子图做一次深度优先遍历,沿途记下原子与键,分支写进圆括号,环断开处配一对相同数字(环号)。阿司匹林因此浓缩为 21 个字符。序列化换来的是整个工具生态:数据库一个文本字段即可存下结构;更重要的,自然语言处理数十年积累的模型——循环网络、注意力、预训练语言模型——处理对象都是 token 序列,分子一旦写成序列,这套工具几乎原样可用。从头设计新分子的生成模型,也随之自然成为"写字符串"的模型。
但字符串表示有三个结构性缺点,均源于"把二维图摊成一维"这一动作本身。其一,写法不唯一。遍历的起点、走向与分支次序都是任意的,同一分子的合法写法随分子增大呈组合式增长。字符串相等能推出分子相等,反之不成立。数据库去重、重复样本剔除、对比学习里的正样本判定,都必须先做规范化(canonicalization):按确定算法为每个分子生成唯一写法。下面的短程序让三种写法汇合到同一个规范串,也顺带展示第三种缺点的入口——非法字符串直接解析失败。
from rdkit import Chem
# 同一个阿司匹林分子,三种合法写法
for s in ["CC(=O)Oc1ccccc1C(=O)O",
"O=C(O)c1ccccc1OC(C)=O",
"O=C(C)Oc1ccccc1C(O)=O"]:
print(s, "->", Chem.MolToSmiles(Chem.MolFromSmiles(s)))
print(Chem.MolFromSmiles("C1CC")) # 环号未闭合:解析失败,返回 None
其二,长程依赖。环号成对出现,两个数字之间可以隔任意长的片段:c1ccccc1 中相距五个符号的两个"1"必须配对,配错即解析失败或得到另一个分子。序列模型必须把这种远距离配对关系学进权重;甾体、大环内酯等环系丰富的分子环号交错,配对难度更高。这是序列模型处理多环分子时格外吃力的结构性原因之一,即长程依赖(long-range dependency)。
其三,语法有效性。合法分子只占字符串空间的极小一角。随机改动一个符号,多半得到解析失败(环号不闭合、括号不配对)或化学上非法(碳带五键)的串。生成模型若在自由字符串空间采样,产出必须过滤;语法约束解码与事后合法性检查因此成为 SMILES 生成模型的标配,代价是额外的工程与偏差。
语法有效性后来有了更彻底的解法:SELFIES 把合法性前移进符号系统本身,其编码规则保证任意符号串——包括任意扰动后的串——都能解码为合法分子(Krenn et al., 2020)。两相对照,SMILES 的文法是事后审查,SELFIES 是构造性保证;代价是一套更复杂的语义规则,以及与既有 SMILES 生态的兼容问题。表示的缺陷可以被新表示修复,但修复总是引入新的复杂度,这一模式在三节中反复出现。
另一条路线不追求"可读的写法",而追求"唯一的名字"。InChI(International Chemical Identifier)(Heller et al., 2015)对结构先执行一整套规范化——标准化键级与电荷、处理互变异构与立体——再分层输出标识:连接层、电荷层、立体层等。同一分子无论怎么画,InChI 相同。它与 SMILES 互补:数据库主键、专利查重靠 InChI 的唯一性;模型输入与分子生成多用 SMILES 的可分 token 性。规范 SMILES 是两者之间的折中:形式仍是字符串,写法由算法唯一确定。
习题 1.2-1
苯的两种写法 c1ccccc1(芳香式)与 C1=CC=CC=C1(凯库勒式)解析后得到同一个分子。既然"反正一样",数据库与模型为什么仍然必须做规范化?
解析相等只保证"最终分子相同",不保证"字符串相同"。若数据库以字符串做主键或去重依据,同一分子会以多条记录存在;对监督学习而言,同一分子的多种写法是彼此矛盾的序列样本——模型会把遍历路径的差异当作分子差异去拟合,既浪费容量,又注入伪噪声。规范化在入库与入模之前把同义写法折叠成唯一形式,使"字符串相等"与"分子相等"互相蕴含,去重、检索与训练分布的一致性才有保障。
1.2.3 指纹:局部子结构的投票
指纹的思路是:与其描述整体,不如清点局部。它隐含一个假设——分子的性质大体由"含有哪些局部结构"决定。构造上,把分子拆成大量局部子结构,典型的是以每个原子为中心、半径为 r 的圆形邻域;每个子结构向定长向量的某一位"投票",出现即置 1。代表是扩展连接性指纹(extended-connectivity fingerprint, ECFP)(Rogers & Hahn, 2010),在 RDKit 中即 Morgan 指纹:以每个原子为种子逐轮聚合邻居信息,得到原子环境的整数标识,再映射到位。迭代与标识算法的细节留待 2.5 节,此处只需要"局部环境到位"这条主干。
这条主干的优点很实际。定长,意味着任何分子都落进同一个向量空间,逻辑回归、随机森林、梯度提升树即插即用,不必设计网络;二值且稀疏,意味着存储省、按位运算的比较极快,千万级化合物库的相似性检索可以在线完成。在小到中等规模的表格化数据上,ECFP 加随机森林常是难以击败的基线;任何新模型都应该先过这一关。
代价同样明确。其一,有损。位向量只回答"哪些子结构出现过"(计数向量补充"出现几次"),不回答"它们如何连接"。子结构的组合方式、分子的整体拓扑、构象与柔性,都不在指纹里;两套不同的连接方案可以共享几乎相同的子结构清单。其二,位碰撞。子结构标识来自近乎无界的整数空间,位向量只有 n 位(常取 1024 或 2048),必须经折叠(folding)——取模或再哈希——压进固定位数。不同子结构落到同一位即位碰撞(bit collision):看到某位为 1,无法指认它来自哪个子结构(图 1.2-2),两分子的相似度因此获得系统性的正偏差。碰撞概率可以用生日问题估计(习题 1.2-2)。其三,丢弃化合价语境。以连接度为主的原子特征粗粒度地对待元素与电荷环境:同一子结构在不同氧化态、不同电荷语境下可能贡献相同的一位,除非在环境定义里显式加入这些属性。
指纹相似不等于结构相同。Tanimoto 系数衡量的是子结构集合的重叠程度:骨架迥异的分子可因共享大量常见片段(苯环、酰胺)得到偏高的分数,位碰撞进一步抬高它。把指纹相似度当作"结构等价"去做多样性度量或近重复剔除,会引入方向一致的偏差;1.3 节的骨架划分(scaffold split),正是对这类偏差的制度性回应。
习题 1.2-2
某 1024 位指纹。一个分子解析出 60 个互不相同的子结构标识,各标识独立均匀地折叠到位。估计至少发生一次位碰撞的概率;并回答:碰撞对指纹的使用意味着什么?
参考解答标识对共有 C(60,2) = 60×59/2 = 1770 对,每对碰撞概率 1/1024。视各对近似独立,p ≈ 1 − (1 − 1/1024)1770 ≈ 1 − e−1770/1024 = 1 − e−1.73 ≈ 0.82。碰撞几乎必然发生。因此位碰撞不是罕见事故而是常态:其后果是相似度的系统性正偏差——结构无关的分子也可能共享若干"撞出来"的位;把位长增至 2048、4096 可按同一公式压低该概率,但无法根除。
1.2.4 图:最忠实也最挑剔的表示
化学家的结构式本来就是图:原子为节点,化学键为边,即分子图(molecular graph)。节点携带元素、形式电荷、芳香性、手性标签、连接氢数、杂化类型等属性;边携带键级(单、双、三、芳香);还可附全局量(总电荷、自旋多重度)。数据结构上是一对矩阵:节点特征矩阵 X(n×d)与邻接矩阵(adjacency matrix) A(n×n,取值可为键级);氢原子按惯例隐含,由化合价规则还原。
图是三种表示里最忠实于化学直觉的一种:官能团是子图,反应是图的编辑,相似性可以定义在图上。它没有序列化(遍历任意)与折叠(哈希压缩)两道损耗,键级、电荷、手性都能显式携带。忠实是有代价的:图的大小随分子变化,也没有天然的"第几维",现成模型无法直接接受这种输入。这正是图表示直到 2015 年之后才大规模进入分子机器学习的原因——模型结构本身需要重造。
重造的起点是一个反例:为什么不能把 X 与 A 摊平拼接,直接喂给全连接网络?因为这一做法默认"原子编号有物理意义",而编号只是存储顺序。同一分子可以任意重排编号:重排之后 X 的行序、A 的行与列同步变化,摊平后的向量彻底不同;全连接网络的每个权重绑死在输入的固定维度上,"换个编号的同一分子"会被当成毫无关系的两个样本,训练信号相互矛盾。症状是置换方差(permutation variance):输出随编号漂移(图 1.2-3)。
修复的目标因此有明确的数学形状:分子级预测(溶解度、活性)不应依赖编号,输出须对置换不变;原子级预测(原子电荷、三维坐标)应当跟着原子走,输出须对置换等变。形式化如下,其中 x 为图在某套编号下的张量编码,π 为 n 个原子的任意重排。
设分子图在某种原子编号下的编码为 x,π ∈ Sn 为任意重排。若对一切 π 有 f(πx) = f(x),称 f 置换不变;若 f(πx) = πf(x),称 f 置换等变。等变函数之后接一个对称聚合(求和、均值、最大值)即得不变函数;不变是等变在输出退化为标量时的特例。分子性质预测只要求不变,但多数图模型先做若干层等变计算(让每个原子先看懂自己的邻域),最后一步才坍缩为分子级输出。
不变函数如何构造?求和与均值天然与次序无关。Deep Sets 定理(Zaheer et al., 2017)给出一般形式:先对每个原子独立编码,再经对称聚合与读出函数(readout function)得到分子级输出。
图神经网络(graph neural network)把同样的对称性要求加到邻居聚合上:每个节点收集邻居的消息时,也必须与邻居的顺序无关。这一框架即消息传递(message passing)(Gilmer et al., 2017),将在第三、四章展开。此处只需记住:图表示向模型提出的不是工程要求,而是数学要求;满足它的网络在结构上已与全连接网络分道扬镳。下面的程序在乙醇上对账:同一分子的两种写法,摊平的邻接向量不同,圆形指纹却相同——前者是置换方差的实例,后者是不变性设计的实例。
from rdkit import Chem
from rdkit.Chem import AllChem
import numpy as np
def flat_adj(s):
"""原子书写顺序决定邻接矩阵的行、列顺序"""
return Chem.GetAdjacencyMatrix(Chem.MolFromSmiles(s)).flatten()
a = flat_adj("CCO") # 乙醇:C→C→O 依次编号
b = flat_adj("C(O)C") # 同一乙醇:另一种写法给出另一套编号
print(np.array_equal(a, b)) # False:摊平后的向量完全不同
fp1 = AllChem.GetMorganFingerprintAsBitVect(Chem.MolFromSmiles("CCO"), 2, nBits=64)
fp2 = AllChem.GetMorganFingerprintAsBitVect(Chem.MolFromSmiles("C(O)C"), 2, nBits=64)
print(fp1 == fp2) # True:圆形指纹与原子编号无关
习题 1.2-3
推证:(i)证明 (1.2-3) 中的均值池化结构置换不变;(ii)证明"拼接读出" g([x1; …; xn]) 一般不不变,并给出线性层上的具体反例;(iii)拼接读出的权重须满足什么约束才能恢复不变性,该约束把结构退化成什么?
参考解答(i)置换 π 只重排 {xi} 的求和次序,有限求和与次序无关,故 (1/n)∑φ(xi) 在重排下不变,ρ 再逐点作用不改变这一点,故 hG 置换不变。(ii)拼接把原子的次序编码进向量维度:交换两个原子得到另一个向量,仅当 xi = xj 时两者重合。反例:取 n = 2、原子特征为标量,线性读出 g = w1x1 + w2x2;令 (x1, x2) = (1, 2)、(w1, w2) = (1, 0),则 g = 1;交换原子后输入 (2, 1),g = 2——同一分子给出两个预测值。(iii)须 w1 = w2 = … = wn(对每个原子维度对称),此时 g 退化为 w·∑xi,恰是求和读出。置换不变性不是可以事后补贴的补丁,它直接决定读出层的结构。
1.2.5 三种表示与三类模型
表示的数学对象与模型可消化的数据形状一一对应:字符串是 token 序列,配序列模型(LSTM、Transformer);指纹是定长向量,配表格模型(随机森林、支持向量机、线性模型);图是变大小的拓扑,配图神经网络(GCN、MPNN)。这不是巧合——模型家族本来就是按输入结构划分的,对应关系见表 1.2-1。
| 表示 | 数学对象 | 相配的模型族 | 代表工作 | 偏置强弱 |
|---|---|---|---|---|
| 字符串(SMILES) | token 序列 | 循环网络 / Transformer | SMILES-LSTM、SMILES-Transformer(Weininger, 1988 定义的符号系) | 中:局部组合、可逐步展开 |
| 指纹(ECFP) | 定长 0/1 向量 | 随机森林 / SVM / 线性模型 | ECFP + RF(Rogers & Hahn, 2010) | 强:子结构集合大体决定性质 |
| 分子图 | 变大小的节点—边结构 | 图神经网络 | 神经指纹(Duvenaud et al., 2015)、MPNN(Gilmer et al., 2017) | 弱而灵活:拓扑留给模型学 |
历史上三条路线先后成熟。2015 年之前,指纹加浅层模型几乎是全部;Duvenaud 等(2015)把 ECFP 的迭代聚合改造成可微分的神经网络,特征可以随任务端到端学习;Gilmer 等(2017)把十余种图模型统一进消息传递框架,图表示的工程门槛大幅下降;同一时期,SMILES 上的序列到序列模型与预训练语言模型把自然语言处理的进展直接搬进化学。路线之间没有绝对优劣,规律更像偏置与数据的匹配:样本以千计时,指纹的强先验常胜过端到端模型的灵活性;样本上十万时,图的弱先验让模型得以学到指纹里没有的关系;生成任务天然偏向序列或图,因为指纹不可逆。
为新任务选表示,可按五条检查:① 样本量级——千级以下先信任强先验(指纹 + 树模型),十万级以上再考虑端到端图模型;② 任务形态——相似检索宜用指纹,从头生成宜用序列或图,性质预测三者皆可入模;③ 信息需求——立体化学、三维构象是否影响标签?普通 SMILES 与默认指纹都需另行处理;④ 预算与时延——指纹推理近乎免费,图模型的训练与推理成本高一个量级;⑤ 基线先行——无论最终选择为何,先立 ECFP + 随机森林基线,任何新表示的增益都必须相对基线度量。
1.2.6 表示间的转换与信息损失
三种表示可以互相转换,但转换有方向:图是母体,字符串与指纹都是从图导出的视图。图到字符串,须选一个起点、一套走向把图摊开——遍历约定不同,产物不同,约定本身不增加信息,规范化只是把任意性收走。字符串到图,交给解析器按语法与化合价规则重建,这一步在合法输入下基本无损(立体化学的书写约定除外),非法串则无法通过。图到指纹,是多对一的折叠,数学上不可逆;指纹到图,不存在——连接信息已被销毁。字符串到指纹,先解析成图、再折叠,两步之中只有折叠有损(表 1.2-2)。
| 转换方向 | 机制 | 损失与风险 |
|---|---|---|
| 图 → 字符串 | 深度优先遍历:起点、走向、分支次序皆可选 | 生成不唯一,须规范化;立体化学依赖书写约定 |
| 字符串 → 图 | 解析器按语法与化合价规则重建 | 非法串被拒;同一分子多种写法导致样本冗余 |
| 图 → 指纹 | 子结构标识哈希后取模折叠到 n 位 | 多对一、不可逆;位碰撞抬高相似度 |
| 指纹 → 图 | 不存在可行机制 | 折叠已销毁连接信息,无法还原 |
可逆方向:图与字符串互转
解析成功的字符串可以无损还原为图,图也可以重新序列化成串。损失只发生在"约定"层面:同一个图有许多字符串,规范化选定其一;除此之外没有任何信息被压缩掉。往返转换 图 → 串 → 图 得到原来的分子。
不可逆方向:图折叠成指纹
折叠把无界的子结构标识压进 n 位,多个来源合并为同一个位。这一步是真正的信息销毁:指纹可以统计、比较、入模,却不能从它重建出任何分子。任何以指纹为起点的分析,都被限定在"子结构集合"这个世界里。
表示的边界:二维拓扑之外
三种面貌共享同一条边界:它们都是二维拓扑表示。拓扑图只记录谁与谁相连、以何种键级相连,不记录键长、键角与构象,而溶解度、膜渗透、靶点结合常直接依赖三维形状。三维信息可以作为图的补充属性——每条边携带距离、每个节点携带坐标——由此派生三维表示;代价是同一分子不再对应单一输入,表示问题与构象采样问题从此纠缠在一起。第四章会回到这一延伸。
表示可互转,信息只减不增。图到字符串丢"唯一性"(多个字符串对应一个图),图到指纹丢"可逆性"(多个子结构对应一位)。由此得到一条有损链:任何下游视图的忠实度不可能超过上游;指纹还原不出结构,字符串也无法自我证明唯一。工程含义随之明确——把规范化后的字符串或解析后的图当作存档格式,指纹按需现算,而不是把指纹当底稿。
本节的三个面貌在后续章节各归其位:第二章以 RDKit 逐条实现这些转换,第三章以 DeepChem 把指纹与图喂进各类模型,第四章以 TorchDrug 围绕图与序列搭建端到端流程。表示决定上限,评估决定可信度——下一节转向第二个问题:数据从哪里来,结论凭什么可信。
关键术语
- 分子表示 (molecular representation)
- 分子进入算法所依据的描述形式(字符串、向量或图),决定模型可感知信息的范围。
- 归纳偏置 (inductive bias)
- 模型对"何种函数容易学"的先验假设,很大程度来自表示结构,是泛化的来源。
- SMILES (simplified molecular input line entry system)
- 分子图的线性记法:深度优先遍历的轨迹,括号记分支、成对数字记环。
- InChI (International Chemical Identifier)
- 经规范化算法生成的分层唯一化学标识,与 SMILES 互补,主打唯一性。
- 规范化 (canonicalization)
- 按确定算法为每个分子生成唯一写法,使字符串相等与分子相等互相蕴含。
- 长程依赖 (long-range dependency)
- 序列中远距离符号(如成对环号)必须配对才能正确解析的现象。
- 扩展连接性指纹 (extended-connectivity fingerprint, ECFP)
- 以原子为中心逐轮聚合邻居得到的圆形子结构位向量,即 Morgan 指纹。
- 位碰撞 (bit collision)
- 不同子结构经哈希折叠落到同一位,使指纹相似度产生系统性正偏差。
- 分子图 (molecular graph)
- 以原子为节点、化学键为边的图结构,最忠实于化学直觉的表示。
- 邻接矩阵 (adjacency matrix)
- n×n 矩阵,元素标记原子对之间是否成键(及键级),行、列顺序随编号变化。
- 置换不变性 (permutation invariance)
- 对任意原子重排 π 有 f(πx) = f(x);分子级预测必须满足的性质。
- 置换等变性 (permutation equivariance)
- 对任意重排 π 有 f(πx) = πf(x);原子级预测须跟随原子同步重排。
参考文献与延伸阅读
- Weininger D. 1988. SMILES, a chemical language and information system. 1. Introduction to methodology and encoding rules. Journal of Chemical Information and Computer Sciences 28:31–36.
- Rogers D, Hahn M. 2010. Extended-connectivity fingerprints. Journal of Chemical Information and Modeling 50:742–754.
- Heller SR, McNaught A, Pletnev I, Stein S, Tchekhovskoi D. 2015. InChI, the IUPAC International Chemical Identifier. Journal of Cheminformatics 7:23.
- Duvenaud D, Maclaurin J, Aguilera-Iparraguirre J, Gómez-Bombarelli R, Hirzel T, Aspuru-Guzik A, Adams RP. 2015. Convolutional networks on graphs for learning molecular fingerprints. Advances in Neural Information Processing Systems 28.
- Gilmer J, Schoenholz SS, Riley PF, Vinyals O, Dahl GE. 2017. Neural message passing for quantum chemistry. Proceedings of the 34th International Conference on Machine Learning, PMLR 70.
- Zaheer M, Kottur S, Ravanbakhsh S, Póczos B, Salakhutdinov R, Smola AJ. 2017. Deep sets. Advances in Neural Information Processing Systems 30.
- Krenn M, Häse F, Nigam A, Friederich P, Aspuru-Guzik A. 2020. Self-referencing embedded strings (SELFIES): A 100% robust molecular string representation. Machine Learning: Science and Technology 1:045024.