【JCM-2020】SMILES‑based deep generative scafold decorator for de‑novo drug design
SMILES-based deep generative scaffold decorator for de-novo drug design
基于SMILES的利用Fragment的分子生成模型
https://github.com/undeadpixel/reinvent-scaffold-decorator
1.背景
深度生成模型因其可以从有限的数量中生成新数据,目前已成功应用于生成文本、图像、视频等领域。令人关注的是,其在药物发现领域的重要作用,使得许多新方法可用于探索化学空间,例如RNN,VAE,GAN等。在这些模型中,常用两种方式来表示分子数据,一类是利用SMILES字符串,一类是利用分子图。基于SMILES字符串的模型因为SMILES字符串的简单结构可以使得模型更快的进行训练,并且2019年Josep Arús‑Pous等人提出的在分子生成模型中引入Randomized SMILES可以大大改善生成结果,使得模型的收敛效果更好,过拟合较少。但是由于SMILES本身语法的限制,其结构不允许从骨架(scaffold,即具有明确连接点的部分构建的分子,譬如去除一个化合物的所有取代基)中生成分子,当然在之前的研究中有学者利用双向RNN从两侧完善一个SMILES,可是这样使得连接点的个数局限于两个,另外虽然图神经网络可在无限定连接点的情况下装饰骨架,但是由于本身的实验性结构,从而要求在实验中进行大量的训练和采样。
作者提出了一种可以基于SMILES生成模型通过骨架生成分子的架构,该架构可以分两步生成分子,并且可以生成训练集,以帮助模型针对各种骨架进行泛化。此外,骨架和装饰器可以进一步过滤,只允许具有特定属性的骨架和装饰器。作者表明,通过过滤使装饰器模型能够学习有关如何装饰骨架的特定信息。
2.框架概括
整个分子生成过程可分为两个步骤:骨架生成器(scaffold generator)和装饰器(decorator)。生成器是基于Randomized SMILES的RNN,装饰器为编码器-解码器体系结构,其编码器是一个双向RNN,解码器是一个单向RNN。SMILES语法使用标记“[*]”进行了扩展,该标记由部分化学软件库支持,作为部分构建的分子中的连接点。
首先,由骨架生成器生成SMILES对应的fragment或者手动输入fragment生成Randomized SMILES,
之后将骨架输入到装饰器模型中,这里训练了两个装饰器,①、一个装饰器一次仅装饰一个连接点,②、另一个装饰器一次装饰所有连接点。在第一种情况下,模型会装饰骨架的SMILES字符串中的第一个连接点,然后将生成的装饰重新连接到骨架上,并将半构建的分子反馈到装饰器中。重复该过程,直到装饰了所有连接点。半装饰分子的随机SMILES表示在每个步骤都会改变,因此会移动SMILES字符串中连接点的相对位置。这个过程允许在装饰带有n个连接点的分子时考虑所有可能的排序。第二种情况装饰所有连接点时和第一种相似,但仅通过一步,使用“|”字符作为分隔按SMILES字符串中出现的顺序生成所有装饰。
3.训练集生成
装饰器模型需要训练集,其中每个item都包括骨架及其装饰,这里不是选择已经创建的化合物(例如专利数据),而是通过详尽地对分子数据库中的所有分子彻底删除c个非环键进行切片来创建数据集,将产生的碎片分为骨架和装饰。从分子切片中,如果不存在连接点数=c的片段,则将组合丢弃。这些item中的每一个("骨架装饰元组”)都由骨架和与其具有同样连接点的装饰组成。下图为DRD2拮抗剂桂利嗪切片的三种可能组合。
4.实验
(1)在DRD2上生成预测活性分子
骨架装饰器的主要目的是尽可能有意义地装饰任何输入骨架。在第一个实验中,一个小型数据集由4211个多巴胺受体D2(DRD2)活性调节剂组成,用于训练装饰器模型(多步和单步)。然后,这些模型在不同的骨架上进行了测试,这些骨架与训练集数据相似。从每个骨架中获得一系列分子,然后使用活性预测模型(APM)将其与随机装饰的分子进行比较。
首先通过除去具有五个随机选择的骨架的所有元组以及从具有这些骨架的152个分子中的任何一个获得的所有元组,来提取由5532个骨架装饰元组组成的验证集。
使用多步装饰器模型对五个选定的骨架进行多次装饰,从上表可以看出,总共产生14,300个独特的分子,其中包括验证集中存在的63个分子(占41.4%),预测的活性分子的百分比始终低于从装饰的分子中获得的百分比。
从使用训练集中的骨架训练的分子生成模型中采样然后使用多步骨架装饰模型进行多次装饰。结果表明,预测为有活性的生成分子的比例通常很高,从45.4%增至98.9%(表2)。但是最重要的是,装饰分子始终比ChEMBL和训练集诱导剂具有更高的预测活性分子比。
另外,通过单步结构模型装饰骨架结果表明,单步结构模型能够从验证集中生成152个分子中的90个(59.2%)。尽管比多步模型更好,但其实多步模型和单步模型之间的比较必须相对进行,因为多步体系结构采样过程的性质不允许控制要采样的分子数量。
作者在此实验中对生成分子相似性也做了研究,从训练集中的分子样本,两个骨架集和两个诱导剂集产生的分子样本中,分别计算出四个数值:分子质,cLogP, SA得分和QED,得出用装饰模型生成的分子比诱导剂更倾向于遵循训练集分布。
(2)用合成化学感知模型装饰骨架
在第二个实验中,通过使用仅由符合合成化学RECAP规则的键连接的装饰和类药骨架进行训练的装饰器模型,ChEMBL数据库得到使用和过滤。。与之前的实验一样,两组骨架:一组仅存在于验证集中的42个骨架,以及一组由生成模型生成的不在ChEMBL数据集的40个骨架。使用多步装饰器模型对两组骨架进行多次装饰,每个骨架平均总共可产生12294和11504个不同的分子。验证集件骨架上装饰的分子占35.4%,结果略低于DRD2实验中的结果。
上图验证了生成的分子的质量。结果表明装饰模型能够创建分子,这些分子除了在连接点上满足RECAP规则外,还具有类药物性,并且可以在任何骨架下合成。
另外,还使用与多步装饰器相同的超参数和训练集对单步装饰器模型进行了训练,装饰了相同的骨架组,当计算上一节中所述的值时,下表可以看出整体性能稍差。
5.总结
- 作者提出了一种新的基于SMILES的分子生成模型,该模型可以从骨架生成分子。
- 除此之外,还定义了一种算法,通过穷尽地切片分子的无环键并获得所有可能的组合,将任意分子集处理为由骨架装饰元组组成的集合。
- 此外,它是一种数据增强技术,可以很容易地与随机SMILES结合使用小型分子集获得更好的结果,该模型可以直接与各种已提出的技术结合,例如强化学习和迁移学习,以进一步指导分子的产生。
感觉他这种切分方式很重要
J. Cheminform. | 基于SMILES的利用骨架的分子生成模型 - 知乎
方法:
![](https://img-blog.csdnimg.cn/968312a6ca674c9da70e5476549fed8d.png)
用于scaffold 生成器与decorator模型的RNN架构,输入经过一个embedding层、三个512维度的LSTM层、最后,前馈层(feed-forward:linear 层)将输入重新调整为词汇表(vocabulary)的大小。虚线表示在训练过程中添加了一个dropout 层【除了最后一个具有softmax激活功能的层之外,所有层之间都添加了Dropout = 0.2层】。
通过将SMILES字符串tokenizing 为原子tokens (例如,“Cl”、“O”、“[nH]”) 、键 tokens (例如,“=”、“#”,分支branching令牌(例如,“1”、“(“)”和特殊附着点标记“[*]”。Batches 由不同长度的序列组成,因此在training and sampling过程中使用零填充并进行掩码。
![](https://img-blog.csdnimg.cn/6b8a95012da94183bb1470e1bc513fe9.png)
scaffold 生成器一次采样一个 tokens
The decorator 首先用一个bidirectional RNN 将scaffold encoder,对encoder的每个输出状态和隐藏状态进行求和( ⊕ :position-wise sum of all tensors ),encoder的输出隐藏状态直接输入到Decoder,
正方形的RNN是图11,灰色线隐藏了每个采样步骤中的状态,⊕ symbolizes the position-wise sum of all tensors
代码运行
如果在linux可以正常运行,但是却无法debug,看变量什么的
需要在windows上
conda env create -f environment.yml
在本机安装java,并配置run的时候的环境变量,总三个 :
PYTHONPATH D:\ProgramData\Anaconda3\envs\yolo\Lib\site-packages\pyspark\python
SPARK_HOME D:\ProgramData\Anaconda3\envs\yolo\Lib\site-packages\pyspark
JAVA_HOME E:\Javajdk1.8.0_361
虽然可能会报出一些错误,但是却不影响run和debug
相关文章
- [Typescript] Default value for Builder pattern - 04 (keyof {} -> never)
- [Node.js] Mock an API for Local Development in React with Mirage JS
- 【JAVA】foreach语句 -- for(int I : nums){}
- [PWA] Storage information for PWA application
- [Tools] Using mobile device for debugging your mobile web site
- [React Native] Writing Platform-Specific Components for iOS and Android in React Native
- 解决argo workflow报错:MountVolume.SetUp failed for volume “docker-sock“ : hostPath type check failed
- No access for action Display of object type Product (PRODUCT)
- AI:2020年6月24日北京智源大会演讲分享之知识智能专题论坛——11:30-12:00唐杰 教授《CogDL:An Extensive Research Toolkit for Deep Le》
- What is the reason for - java.security.spec.InvalidKeySpecException: Unknown KeySpec type: java.security.spec.ECPublicKeySpec
- for while (list each)的用法
- Educational Codeforces Round 37 (Rated for Div. 2)
- 《论文阅读》BERT-ERC: Fine-tuning BERT is Enough for Emotion Recognition in Conversation
- 虚拟键盘MindFusion.Virtual Keyboard for WinForms 5.0.2
- 【openEuler】解决 Error: Failed to download metadata for repo ‘OS‘: Cannot download repomd.xml
- 论文阅读【ACM_2020】SimSwap: An Efficient Framework For High Fidelity Face Swapping