【MACCS、Morgan Fingerprint、Neural Molecular Fingerprint分子指纹】

分子指纹、神经分子指纹

一、分子指纹(Molecular Fingerprint)

1.1 前言

分子指纹(此处特指Morgan Fingerprint)用于通过向量表示来描述分子结构,通过邻域聚合策略学习原子的局部环境,通常以环形图示呈现。如图1所示。

图片[1] - 【MACCS、Morgan Fingerprint、Neural Molecular Fingerprint分子指纹】 - 鹿快
图1. 左下角加粗碳原子的领域聚合示意,R为领域大小,示例分子为四甲基-二戊酮

图中每个原子都被单独考虑,其临近原子的信息被聚合并存储于特征向量中,随后通过哈希函数将原子特征向量与其邻域原子的特征向量的拼接结果映射为单一整数标识符。

1.2 分子指纹的编码过程

复杂的理论难以理解,具象化的代码可以帮助我们进一步理解分子指纹的生成过程
使用python语言和rdkit开源工具包演示

1.2.1 分子指纹生成原理


(1)为一个分子生成分子指纹首先要从分子的SMILES序列中生成分子图,这一点可以使用rdkit.


from rdkit import Chem
from rdkit.Chem import Draw

SMILES = 'OCC1=CC=CC=C1'

#使用MolFromSMILES获取mol对象
mol = Chem.MolFromSmiles(SMILES)
mol

#使用rdkit.Chem.Draw的MolToImage绘制分子图
img = Draw.MolToImage(mol)
img

分子图:


(2)从分子图中以原子为中心识别相关特征

相关特征可能包括原子类型,是否有某官能团以及杂化状态


(3)识别特征完成之后要进行分子片段化
图片[2] - 【MACCS、Morgan Fingerprint、Neural Molecular Fingerprint分子指纹】 - 鹿快
识别分子的特征可以小到单个原子,再大点比如分子子结构(官能团)和环结构等等。这里仅仅作为举例,实际上可能将该分子片段化为更小的特征。

当片段化结束之后,分子结构被拆解成一个个特征,这时我们要核对指纹密钥,也就是密码本,这个密码本存放这几乎所有的特征,有这个特征标记为1,反之标记为0。

这是几乎所有现在的指纹编码方式遵循的流程,分子图,片段化特征,特征数值化。

1.3 代码演示——MACCS

MACCS指纹是一种基于子结构的分子指纹,它通过一系列预定义的子结构模式来表征分子,使用二进制编码表示是否存在这些子结构。MACCS 分子指纹的常见版本是 166 位的二进制串,每一位代表一个特定的子结构,如果某个分子中包含了某个子结构,该位就被设置为 1,否则为 0。


from rdkit import Chem 
from rdkit.Chem import rdMolDescriptors

#分子的SMILES序列
smiles = 'OCC1=CC=CC=C1'

#根据smiles序列获取mol对象
mol = Chem.MolFromSmiles(smiles)

#使用GetMACCKeysFingerprint函数获取分子的MACCS指纹
maccs_fingerprint = rdMolDescriptors.GetMACCSKeysFingerprint(mol)

#打印出在MACCS密码本中能够对应上的特征
for bit in maccs_fingerprint.GetOnBits():
  print(bit)

输出:


82
109
139
153
155
157
162
163
164
165

上述数字代表了MACCS定义的166个特征中,该分子匹配了以上几个位点的特征,具体是什么特征可以参照:
MACCS分子指纹密钥

1.4 代码演示——Morgan Fingerprint(circular fingerprint)

MACCS是基于分子子结构的分子指纹编码方式,并没有涉及到邻域原子的信息,没有邻域R的概念,与开头提到的分子指纹并不相同,因此此处介绍环形分子指纹,也称为摩根指纹

为了计算分子的摩根指纹,需要用到AllChem.GetMorganFingerPrintAsBitVect函数,下面进行演示


from rdkit import Chem 
from rdkit.Chem import AllChem
import numpy as np
from rdkit.Chem import Draw
from IPython.display import SVG,display

smiles = 'OCC1=CC=CC=C1'

mol = Chem.MolFromSmiles(smiles)


"""
使用bi作为容器接受bitInfo,将什么结构片段在哪个bit上为1记录进字典里
bi == {
  389: [(7, 2), (1, 1)], 这里代表bit389处被两个环境触发,分别是第七号原子的R=2,和第一号原子的R=1
  837: [(4, 2)],
  ...
}
"""

bi = {}
"""
radius:代表邻域大小
nBits:指的是Morgan/ECFP指纹的向量长度bit vect size
rdkit会将环状环境哈希折叠到[0,nBits-1]的长度中,nBits越大指纹更稀疏,信息量更高,占用更多内存
"""
morgan_fingerprint = AllChem.GetMorganFingerprintAsBitVect(mol, radius=2, nBits=4096, bitInfo=bi)

#统计激活位点
activate_bit = list[morgan_fingerprint.GetOnBits()]

#利用Draw.DrawMorganBit函数绘制特征位点
for k, bit_id in enumerate(on_bits, 1):
  envs = bi.get(bit_id, [])
  print(f"[{k}/{len(on_bits)}] bit={bit_id},共 {len(envs)} 个环境: {envs}")
  svg_str = Draw.DrawMorganBit(mol, bitId=bit_id, bitInfo=bi, useSVG=True)
  display(SVG(svg_str))

输出:
图片[3] - 【MACCS、Morgan Fingerprint、Neural Molecular Fingerprint分子指纹】 - 鹿快
摩根分子指纹通过哈希函数将与邻位原子的信息编码为二进制编码。
当前常见的环形分子指纹除了上述摩根指纹,还有ECFP(Extended-connectivity fingerprints)

二、扩展

通过上面的代码解释和理论介绍,我们大概可以知道分子指纹都起到了什么作用,但是其具体流程我们仍未清楚,你说环形指纹Morgan Fingerprint是聚合邻域原子和自己原子为特征向量并哈希为离散的ID(整数),那他到底怎么运作的?本小节就整体流程展开介绍

2.1 circular fingerprint

详细工作流程:


[分子图] --> [对每个原子执行操作] --> 
[统计R=0.也就是本原子的特征(可能包括是否芳香,价态,元素等等,哈希为离散ID)] -->
[R=1时,涵盖相邻的一个原子,拼接二者特征向量,哈希为离散ID] -->
[R=2时,涵盖相邻两个原子,将所有涵盖在内的原子特征向量哈希为一个离散的ID] --> 
[R = r时,涵盖整个分子体系,所有特征向量拼接并哈希为离散ID] -->
[把每一步的离散ID折叠至固定长度nBits的位索引,激活位点值为1,其余为0] --> 
[对所有分子这样操作之后,得到一个nBit长度的特征向量,里面仅仅包含数字] -->
[010100000011000010..]

2.2 神经分子指纹——Neural Molecular Fingerprint

与哈希函数不同,神经分子指纹采用平滑的激活函数 σ(类似于神经网络中的激活函数)来更新原子特征向量。具体而言,使用 softmax 函数处理 σ ,使原子特征向量的元素变为实数值,从而形成连续的原子向量表示。此外,通过应用求和运算符而非拼接邻域特征向量,邻域聚合调整为对原子数量不敏感的方式。这些连续的原子特征向量随后被组合成一个实数值的指纹向量,称为神经分子指纹。

具象解释:
A:[1.0, 0.5]
B: [0.2, 0.8]
C: [0.9, 0.1]
A是中心原子,B和C是邻域原子


与拼接三者特征向量再哈希处理不同
神经分子指纹是把邻居向量对本原子的影响作用经过一次变换(线性层/网络)
然后把所有的影响作用加起来得到固定长度的向量之后更新自己


规定一个线性处理网络


把所有领域原子过网络处理
B:[0.2, 0.5]
C: [0.9, 0.5]
邻域消息m: B+C = [1.1, 1.0]


对自己做自变换,也就是在定义一个处理网络
之后对自己进行更新


最终把所有这样更新得到的特征向量经过softmax函数或者其余可微操作后再求和,得到一个连续向量f,这就是神经分子指纹。

三、神经分子指纹意义

研究者在邻域聚合方案中引入了可学习参数,从而使得可微的神经分子指纹能够针对特定的性质预测任务进行训练,开创了直接从分子结构学习的范式。

四、参考文献

图神经网络用于分子结构-性质预测

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
刑法车润海的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容