SMILES 序列基础知识

做化学信息学这几年,我反复跟团队说一句话:SMILES 是分子世界的“通用语言”。你无论是想做分子生成、性质预测,还是构象搜索,第一步一定是把这串字符吃透。

SMILES,全称 Simplified Molecular Input Line Entry System。说白了,就是用一行字符串来表达一个分子结构。别小看这一行字,它背后藏着原子、键、分支、环、芳香性等一系列规则。我个人习惯,每当接手一个新项目,第一件事不是跑模型,而是把手里的 SMILES 数据清洗一遍——你想想看,如果源头数据就有问题,模型再花哨也白搭。

1.1 原子表示:从元素符号开始

SMILES 里,原子直接用它的元素符号来表示。碳是 C,氧是 O,氮是 N。简单吧?但这里有几个坑,我以前踩过,得跟你念叨念叨。

  • 大写字母是默认:C 代表碳,O 代表氧。不能写小写。
  • 特殊原子用方括号:比如同位素、电荷、手性。举个例子,[13C] 表示碳-13 同位素,[NH4+] 表示铵根离子。
  • 隐式氢:SMILES 默认每个原子的价键是饱和的。比如 C 自动认为连着 4 个氢。

经验之谈:在深度学习任务里,如果你用的模型需要显式氢,建议对 SMILES 做标准化处理。我用过 RDKit 的 AddHs 函数,效果不错。

1.2 键类型:单双三的讲究

SMILES 用不同的符号表示键的类型:

键类型符号示例
单键- (可省略)CC 或 C-C
双键=C=C
三键#C#C
芳香键:c1ccccc1

单键在 SMILES 里通常是可省略的。你写 CC 和 C-C 是同一个意思。但双键和三键必须写,不然模型会理解成不同的分子。

我曾经有一段做毒性预测的经历,给模型输入了一批 CC(=O)N 的数据,结果发现部分样本误写成了 CC(O)N——少了一个等号,分子完全变样。从那以后,我团队在数据预处理阶段强制用 RDKit 做 canonical SMILES 标准化。

1.3 分支:用括号“兜住”侧链

SMILES 的分支规则其实很直白:用一对圆括号把侧链包裹起来。

  • 括号内的内容代表一个分支,从当前原子出发。
  • 括号可以嵌套,代表多层分支。
  • 分支可以出现在键的任意一侧。

举几个例子:

# 2-丙醇:主链是三碳,第二个碳上挂一个羟基
CC(O)C

# 异丁烷:主链是三碳,第二个碳上挂一个甲基
CC(C)C

# 更复杂的:甘油
OCC(O)CO

这里有个容易混淆的地方:当你看到 CC(O)C 时,别以为氧是连在第二个碳后面——实际上括号告诉解析器,羟基是作为分支连接在 C 上的。

1.4 环:数字的“配对游戏”

SMILES 处理环,用的是非常巧妙的数字标记。你想想看,一个线性字符串怎么能表达环状结构?答案就是:用数字做“握手”。

  • 环起点的原子后面跟一个数字(1~99)。
  • 环终点的原子后面跟同一个数字。
  • 数字出现两次,就构成一个环。

最经典的例子——苯:

# 凯库勒式苯(单双键交替)
C1=CC=CC=C1

# 芳香式苯(用小写 c)
c1ccccc1

数字 1 出现了两次,分别标记环的起点和终点。

对于多个环,用不同的数字就行。比如萘:

c1ccc2ccccc2c1

这里面数字 1 和 2 各自配对,互不干扰。

避坑指南:同一个数字不能用三次。如果你想表达螺环或桥环,需要用到每个环独立的数字。我曾经见过有人写 C12C3C4C1C2C3C4(金刚烷),如果数字配对逻辑写错了,解析器会直接报错。记住:环数字是成对出现的,每对只能代表一个环。

1.5 芳香性:小写字母的“魔法”

SMILES 里,芳香性用小写字母来表示。c 是芳香碳,n 是芳香氮,o 是芳香氧。

为什么要有大小写区分?因为在很多情况下,芳香性和非芳香性会影响分子的化学反应性和物理性质。你想想,苯环和环己二烯,分子式相同但性质完全不同。

芳香性还有一些规则要记住:

  1. 芳香环内的键:用 : 表示芳香键,但在小写字母原子之间,键符号可以省略。
  2. 芳香原子必须成环:单独的 c 没有意义。
  3. 匹配芳香规则:必须符合 Hückel 规则(4n+2 个 π 电子)。

实用技巧:我建议在数据预处理时,统一用 RDKit 的 Kekulize 或 Sanitize 函数来确定 SMILES 的芳香性表示。不同工具对芳香环的解析可能有细微差异,尤其是含氮杂环。

1.6 知识体系总览

下面这张图是我做课程时设计的 SMILES 基础知识结构。你应该能一眼看出各个概念之间的关系——先原子,再键,然后扩展到分支、环和芳香性。

SMILES 基础知识结构 SMILES 字符串 原子表示 键类型 分支 环 芳香性 元素、电荷、同位素 单键、双键、三键 数字配对标记 小写字母、Hückel 规则

嗯,画完这张图我其实挺满意。你从顶部开始看,SMILES 字符串分解成五个核心概念,然后芳香性又跟环和键类型有紧密关联。这些概念不是孤立的,在实际编码中它们会组合出现。

1.7 一张表说清楚基本规则

为了让你快速查阅,我整理了一个速查表:

概念表示规则例子
原子大写元素符号;特殊原子用 []C、O、[Fe]
键(单键)可省略或用 -CC 或 C-C
键(双键)必须写 =C=C
键(三键)必须写 #C#C
分支用 (...) 包裹侧链CC(O)C
环用数字标记环首尾C1CC1
芳香性小写字母,可选 : 键c1ccccc1

我在实际项目中,尤其是处理化学数据库时,经常用这张表来快速排查 SMILES 格式问题。你把它记在脑子里,至少能避开 80% 的初级错误。

一个小领悟:SMILES 的学习曲线其实不陡,真正难的是理解和处理各种边缘情况——比如大型分子里的环编号冲突、手性标记被忽略、隐式氢导致分子式不对。这些我后面会陆续讲到。嗯,先把基础打扎实,后面才走得稳。