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 是芳香氧。
为什么要有大小写区分?因为在很多情况下,芳香性和非芳香性会影响分子的化学反应性和物理性质。你想想,苯环和环己二烯,分子式相同但性质完全不同。
芳香性还有一些规则要记住:
- 芳香环内的键:用
:表示芳香键,但在小写字母原子之间,键符号可以省略。 - 芳香原子必须成环:单独的
c没有意义。 - 匹配芳香规则:必须符合 Hückel 规则(4n+2 个 π 电子)。
实用技巧:我建议在数据预处理时,统一用 RDKit 的 Kekulize 或 Sanitize 函数来确定 SMILES 的芳香性表示。不同工具对芳香环的解析可能有细微差异,尤其是含氮杂环。
1.6 知识体系总览
下面这张图是我做课程时设计的 SMILES 基础知识结构。你应该能一眼看出各个概念之间的关系——先原子,再键,然后扩展到分支、环和芳香性。
嗯,画完这张图我其实挺满意。你从顶部开始看,SMILES 字符串分解成五个核心概念,然后芳香性又跟环和键类型有紧密关联。这些概念不是孤立的,在实际编码中它们会组合出现。
1.7 一张表说清楚基本规则
为了让你快速查阅,我整理了一个速查表:
| 概念 | 表示规则 | 例子 |
|---|---|---|
| 原子 | 大写元素符号;特殊原子用 [] | C、O、[Fe] |
| 键(单键) | 可省略或用 - | CC 或 C-C |
| 键(双键) | 必须写 = | C=C |
| 键(三键) | 必须写 # | C#C |
| 分支 | 用 (...) 包裹侧链 | CC(O)C |
| 环 | 用数字标记环首尾 | C1CC1 |
| 芳香性 | 小写字母,可选 : 键 | c1ccccc1 |
我在实际项目中,尤其是处理化学数据库时,经常用这张表来快速排查 SMILES 格式问题。你把它记在脑子里,至少能避开 80% 的初级错误。
一个小领悟:SMILES 的学习曲线其实不陡,真正难的是理解和处理各种边缘情况——比如大型分子里的环编号冲突、手性标记被忽略、隐式氢导致分子式不对。这些我后面会陆续讲到。嗯,先把基础打扎实,后面才走得稳。