1. SMILES简介:从一行字符串读懂分子

我个人觉得,SMILES是化学信息学里最优雅的发明之一。你想想,一个复杂的有机分子,动辄几十个原子,怎么才能让计算机快速理解?SMILES给了答案:一行字符串。

1.1 SMILES的起源

SMILES全称是Simplified Molecular Input Line Entry System。上世纪80年代,David Weininger在USEPA工作时搞出来的。初衷很简单:给分子一个紧凑、可读、能被计算机快速处理的文本表示。

那时候,化学家们还在用连接表记录分子结构。文件又大又丑。SMILES一出来,大家发现——原来写化学式和写单词差不多。

1.2 基本规则

SMILES的规则并不多,但很严谨。我按从简单到复杂来捋一遍。

原子表示

原子直接用元素符号。碳就是C,氧是O,氮是N。有机分子里最常见的几个元素,都不用标数字。

原子 SMILES符号 例子 注意
碳 C C (甲烷) 有机骨架
氧 O O (水) 羟基或醚键
氮 N N (氨) 胺或杂环
氯 Cl CCl (氯甲烷) 双字母,大写开头
溴 Br CBr (溴甲烷) 同上

原子周围默认补足氢。C就是CH₄,O就是H₂O。嗯,这里要注意:写SMILES时不需要写氢,系统会自动补全。

键表示

单键不写符号,直接连原子。双键写=,三键写#。芳香键一般小写原子表示。

# 乙醇
CCO

# 乙烯
C=C

# 乙炔
C#C

# 苯
c1ccccc1

有个坑要记一下:单键虽然不写,但原子排列顺序决定了骨架。我刚开始学的时候总忘记这一点,写出来完全不对。

分支结构

分支用圆括号表示。括号里的原子或基团连在前一个原子上。

# 异丙醇
CC(O)C

# 甲基丙烯酸甲酯
C=C(C)C(=O)OC

括号可以嵌套。复杂分子的SMILES读起来很像Lisp语言的括号堆叠。我曾经有个项目,解析一个天然产物的SMILES,括号嵌套了5层。

环结构

环结构用数字标记开环和闭环的位置。数字本身没有化学意义,只用来配对。

# 环己烷
C1CCCCC1

# 苯
c1ccccc1

# 萘
c1ccc2ccccc2c1

数字可以重复使用,但同一环必须配对。环编号从1开始,原则上不超过9。

避坑指南:我曾经在生成大型稠环分子时,把环编号写错了。结果解析程序直接报错,找了半天才发现是数字重复冲突。记住,同一个数字只能出现两次——开环和闭环。

芳香性

芳香环里的原子用小写字母表示。苯环就是c1ccccc1,而不是C1=CC=CC=C1。后者是Kekulé式,虽然也能解析,但不够规范。

我在做分子指纹项目时发现,使用芳香SMILES生成的指纹比Kekulé式生成的更稳定。主要是因为芳香结构有共振稳定性,小写表示法能捕获这种电子离域特征。

1.3 SMILES的化学意义

SMILES不是随便写的。它背后有一套严格的化学逻辑。

SMILES的图论本质

每个分子本质上是一张图。原子是节点,化学键是边。SMILES就是这张图的深度优先遍历序列。

为什么能这么做?因为有机分子的骨架通常是一棵树(树状结构)加上少量环。遍历起来很自然。

SVG图放在这里,展示一下SMILES如何从分子结构映射到字符串:

SMILES知识框架 SMILES 起源 (1980s) 基本规则 化学意义 分子生成 原子表示 键表示 分支结构 环 + 芳香性 唯一性 / 图同构 深度优先遍历 每个SMILES字符串 = 分子图的深度优先序列 SMILES ≠ 唯一的;但规范SMILES是唯一的

SMILES与分子唯一性

同一个分子可以写出多种SMILES。比如乙醇可以是CCO,也可以是OCC。这取决于你从哪个原子开始遍历。

但实际应用中,我们需要标准化的SMILES。也就是规范SMILES。规则很简单:按照一套固定的遍历顺序(如原子序号、连接优先级),保证同一个分子只输出一个SMILES。

个人建议:做数据库存储或分子去重时,一定要用规范SMILES。我在高通量筛选项目中吃过亏——同一个分子存了两条记录,就是因为SMILES不规范。后来统一用RDKit的MolToSmiles函数的规范模式,才彻底解决。

SMILES的拓扑等价性

SMILES能区分不同分子,也能识别等同结构。为什么?因为SMILES的生成过程中隐含了原子和键的拓扑关系。

举个例子:

# 这两个SMILES都表示丙烷,但写法不同
CCC      # 正确写法
C(C)C    # 等价写法

它们虽然不同,但对应的分子结构完全一样。这就是SMILES的非唯一性,也是它的妥协:为了可读性,牺牲了唯一性。

但规范SMILES会强制选择一种标准写法,比如优先选择原子数更多的直链,或者分支放在较晚的位置。

SMILES在分子生成中的角色

你想想,现在的分子生成模型(像VAE、GAN、Transformer)为什么都用SMILES?说到底,因为SMILES把三维结构压缩成了一维序列。模型做的就是一个序列到序列的映射。

# 药物分子阿司匹林的SMILES
CC(=O)Oc1ccccc1C(=O)O

# 咖啡因的SMILES
Cn1cnc2c1c(=O)n(c(=O)n2C)C

我在训练生成模型时发现,SMILES的长度和分子复杂性高度相关。简单分子大概10-20个字符,复杂天然产物能到几百个字符。这给Transformer的自注意力机制带来了不同的挑战。

核心观点:SMILES不是唯一的表示法,但它是目前分子生成领域最成熟的序列表示。它把化学直觉和计算效率结合得很好。很多后来出来的表示法(如SELFIES、DeepSMILES)本质上都是在SMILES基础上的修正。

1.4 实操中的常见陷阱

学SMILES看着简单,一动手就出问题。我把这些年踩过的坑梳理一下。

坑1:忽略氢饱和度

SMILES不写氢,但要清楚每个原子应该有几个连接键。碳默认4键,氧2键,氮3键(或5键,取决于形式电荷)。写错直接导致分子解析失败。

坑2:环编号重复使用

同一个环编号只能在SMILES里出现两次。如果分子有超过9个环,从第10个环开始就要用两位数字(如%10)。别忘了加百分号。

# 正确使用两位数字环编号
C%10CCCCC%10     # 环编号10

坑3:芳香性检测

不是所有有双键的六元环都是芳香环。芳香性必须满足Hückel规则(4n+2个π电子)。如果你写C1=CC=CC=C1,程序会按Kekulé式解析,但不会自动识别为芳香。

避坑指南:我接手过一个项目,同事把所有六元环都写成了小写c。结果脂肪族环己烷也被当成芳环处理。后来我们强行规定:只有明确是芳香环的才用小写,非芳香环一律用大写。

坑4:手性标记

SMILS支持手性标记。@表示顺式,@@表示反式。这两个符号的朝向和原子连接顺序高度相关。写反了,分子对映体就反了。

# 两种L-氨基酸的SMILES(手性中心用@标记)
N[C@@H](C)C(=O)O    # L-丙氨酸
N[C@@H](Cc1ccccc1)C(=O)O   # L-苯丙氨酸

1.5 本章小结

SMILES看起来简单,但内涵丰富。它用最少的字符,表达了最完整的分子结构。你只需要理解:原子、键、分支、环、芳香性、手性。这六个核心概念,掌握了就能写出几乎任何有机分子的SMILES。

我建议你多写几个分子的SMILES练手。随便找个分子结构图,试着写写看。写错了不要紧,解析程序会告诉你哪里出问题。这种反馈是最好的老师。