1、SMILES 基础:什么是 SMILES,表示规则,原子键表示,分支,环,立体化学
各位好。今天我们来聊聊 SMILES。
SMILES,全称 Simplified Molecular Input Line Entry System,翻译过来就是“简化分子线性输入规范”。说白了,它是一种用 一行 ASCII 字符串 来表示分子结构的方法。
你想想看,一个复杂的化学分子,要完整记录它的原子连接关系、键的类型、立体构型,传统做法是画结构式或者记作连接表。SMILES 的出现,让这一切变成了一行代码。我刚开始做化学信息学的时候,面对动辄几百 MB 的化合物库,就是靠 SMILES 做数据交换和检索的。它的简洁性,直接影响了下游模型和工具的效率。
为什么你一定要懂 SMILES?因为它是序列生成模型的 标准语言。我们后面课程要讲的 SMILES 生成和结果图谱解读,本质就是教计算机学会写这门语言,并检查它写得对不对。
什么是 SMILES —— 一行字符串,一幅结构图
SMILES 的本质,是对分子图结构进行 深度优先遍历 后的线性记录。你写出骨架原子,遇到分支就套括号,遇到环就打断并打上数字标签。
举个例子,乙醇的结构式是 CH₃-CH₂-OH。它的 SMILES 怎么写?很简单:
CCO
C、C、O,三个原子按顺序写下来,单键隐式存在。就这么简单。我经常跟团队里新人说:先理解最简单的情况,再处理复杂分支。
SMILES 表示规则 —— 原子、键与省略的艺术
SMILES 的规则不多,但细节都在省略和约定上。记住了这些,你就能看懂大部分分子式。
原子表示
- 有机元素:B、C、N、O、P、S、F、Cl、Br、I,直接写元素符号。氢原子 默认隐含,除非氢原子作为取代基出现。
- 其他元素:方括号包裹,例如 [Na]、[Fe]、[Au]。价态或同位素也写在方括号里,例如 [13C]、[Fe+3]。
- 芳香性原子:小写字母表示。苯环中的碳写为 c,吡啶中的氮写为 n。
键的表示
| 键类型 | SMILES 符号 | 示例 | 说明 |
|---|---|---|---|
| 单键 | (或无) | CC | 相邻原子默认为单键,通常省略 |
| 双键 | = | C=C | 乙烯,必须显式写出等号 |
| 三键 | # | C#C | 乙炔 |
| 芳香键 | : (不推荐) | c1ccccc1 | 小写字母 + 单键,现代工具更常用 |
避坑指南: 我曾经遇到过不少新手喜欢显式写单键,比如 C-C-O。虽然有些解析器能接受,但 标准 SMILES 是不写单键的。混合使用容易造成解析歧义,尤其是在与 RDKit 这样的工具交互时。严格遵守 默认省略单键 的规则,可以减少 80% 的解析问题。
处理分支结构 —— 括号的艺术
分支是 SMILES 里最容易出错的点,但规则其实很简单:
- 分支用 圆括号 () 包裹。
- 分支 写在被连接原子之后。
- 分支 可以嵌套,形成树状结构。
看一个例子。丙氨酸(2-氨基丙酸)的结构式如下:
CC(N)C(=O)O
解读一下:
- 第一个 C(甲基)
- 第二个 C(手性碳),接一个分支 (N) 即氨基
- 然后写 =O(羰基双键)
- 最后写 O(羟基)
你想想看,如果不用括号,上面的分子根本无法用线性字符串表达分支。括号的本质是告诉解析器:写到这里,先去处理旁支,回来再继续写主链。
环的表示 —— 打断与打标签
环是 SMILES 里最巧妙的设计之一。你想,字符串是线性的,如何表示一个环?答案很简单:在环被“打断”的地方,用相同的数字做标签。
比如环己烷:
C1CCCCC1
这里,第一个 C 后面跟了一个数字 1,最后一个 C 后面也跟了一个 1。意思是:第一个 C 和最后一个 C 之间也有一个键,从而形成了一个六元环。
如果分子中有多个环,就用不同的数字区分,比如 1、2、3……
- 数字紧跟原子:数字写在原子符号或键符号之后。
- 芳香环用大写数字或小写原子:苯的 SMILES 可以是 c1ccccc1(小写 c 表示芳香碳,数字表示环闭合)。
- 环的数字可以重复使用吗? 在同一分子中,不能。每个环的标签必须是唯一的。如果分子中有三个环,就用 1、2、3。
我曾经踩过一个坑:写一个稠环化合物时,忘了给第二个环赋予新数字,结果解析出来一个奇怪的螺环结构。从那以后,我每次写环都会先在纸上画一遍,确保数字标签不冲突。
立体化学表示 —— 空间的秘密
SMILES 不仅能记录连接关系,还能记录 立体构型。这是序列生成模型最难掌握的部分,也是我们后期解读图谱时重点关注的内容。
手性中心的表示:@ 和 @@
手性中心给原子标 @ 或 @@ 符号,放在方括号内。
| 符号 | 意义 | 示例 | 说明 |
|---|---|---|---|
| @ | 逆时针排列(相当于 S 型,但不是绝对对应) | C[C@H](N)C(=O)O | L-丙氨酸的常见表示 |
| @@ | 顺时针排列(相当于 R 型) | C[C@@H](N)C(=O)O | D-丙氨酸 |
这里特别提醒:@ 和 @@ 是相对于 SMILES 中原子书写顺序 定义的,并不是绝对与 R/S 构型一一对应。我个人习惯是在解析时先用 RDKit 将 @/@@ 转为 CIP 规则的 R/S 构型,再进行判断。直接靠肉眼从字符串判断构型非常容易出错。
双键的几何构型:/ 和 \
对于顺反异构(E/Z 异构),用斜杠标记双键两侧的连接顺序。
C/C=C/C # 反式(E 型)
C/C=C\C # 顺式(Z 型)
解读规则:
- 斜杠写在与双键相连的原子后面。
- 两个斜杠在双键两侧分别表示:同侧 / 异侧。
- / 和 \ 的方向是 相对 的,取决于书写顺序。
一句话总结立体化学: 手性中心用 @/@@ 表示“打入”和“打出”的方向;双键几何用 /、\ 表示“同侧”还是“异侧”。SMILES 的立体信息是显式的,但 绝对构型需要结合化学规则推导。
好了,到目前,我们已经覆盖了 SMILES 最核心的 5 个要素:原子、键、分支、环、立体化学。这些规则看似琐碎,但组合起来,能描述绝大多数有机小分子。后面的课程中,我们将把这些字符串喂给序列生成模型,看看它能不能写出正确的 SMILES,以及写错了我们如何定位和修复。