1、SMILES 基础:什么是 SMILES,表示规则,原子键表示,分支,环,立体化学

各位好。今天我们来聊聊 SMILES。

SMILES,全称 Simplified Molecular Input Line Entry System,翻译过来就是“简化分子线性输入规范”。说白了,它是一种用 一行 ASCII 字符串 来表示分子结构的方法。

你想想看,一个复杂的化学分子,要完整记录它的原子连接关系、键的类型、立体构型,传统做法是画结构式或者记作连接表。SMILES 的出现,让这一切变成了一行代码。我刚开始做化学信息学的时候,面对动辄几百 MB 的化合物库,就是靠 SMILES 做数据交换和检索的。它的简洁性,直接影响了下游模型和工具的效率。

为什么你一定要懂 SMILES?因为它是序列生成模型的 标准语言。我们后面课程要讲的 SMILES 生成和结果图谱解读,本质就是教计算机学会写这门语言,并检查它写得对不对。

SMILES 核心结构要素 SMILES 字符串 原子符号 键(单/双/三/芳香) 分支(括号) 环(数字标签) 立体化学(@ / \) 说明:SMILES 规则要点 1. 原子用标准元素符号表示,氢原子通常隐含 2. 单键省略,双键/三键/芳香键必须显式标注 3. 分支用圆括号 () 包裹;括号可嵌套 4. 环在打断处用相同数字标签标记;立体用 @ 或 / \ 表示

什么是 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 时,把常见元素的氢原子手动补全一遍,可以帮助理解隐含规则。比如 CCO 中,中间的 C 上其实连了两个 H,但不写出来。

键的表示

键类型 SMILES 符号 示例 说明
单键 (或无) CC 相邻原子默认为单键,通常省略
双键 = C=C 乙烯,必须显式写出等号
三键 # C#C 乙炔
芳香键 : (不推荐) c1ccccc1 小写字母 + 单键,现代工具更常用

避坑指南: 我曾经遇到过不少新手喜欢显式写单键,比如 C-C-O。虽然有些解析器能接受,但 标准 SMILES 是不写单键的。混合使用容易造成解析歧义,尤其是在与 RDKit 这样的工具交互时。严格遵守 默认省略单键 的规则,可以减少 80% 的解析问题。

处理分支结构 —— 括号的艺术

分支是 SMILES 里最容易出错的点,但规则其实很简单:

  • 分支用 圆括号 () 包裹。
  • 分支 写在被连接原子之后。
  • 分支 可以嵌套,形成树状结构。

看一个例子。丙氨酸(2-氨基丙酸)的结构式如下:

CC(N)C(=O)O

解读一下:

  1. 第一个 C(甲基)
  2. 第二个 C(手性碳),接一个分支 (N) 即氨基
  3. 然后写 =O(羰基双键)
  4. 最后写 O(羟基)

你想想看,如果不用括号,上面的分子根本无法用线性字符串表达分支。括号的本质是告诉解析器:写到这里,先去处理旁支,回来再继续写主链。

注意: 括号前后的原子顺序不能乱。我总是提醒组里的同学:先主链,后分支。写 SMILES 时,心里要有一条主链,遇到分叉就开括号,回来合上括号继续。

环的表示 —— 打断与打标签

环是 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,以及写错了我们如何定位和修复。