其他分享
首页 > 其他分享> > Chemical-Reaction-Aware Molecule Representation Learning 阅读笔记

Chemical-Reaction-Aware Molecule Representation Learning 阅读笔记

作者:互联网

Chemical-Reaction-Aware Molecule Representation Learning阅读笔记

问题一:使用pysmiles对Smiles格式数据的具体处理过程

1. SMILES格式

1.1 在SMILES表达式中,往往会去掉H元素,比如甲烷CH4用SMILES表达式来表达的话就是C;

1.2 双键用=来表示,比如C(=O)=O表示一个二氧化碳;

1.3 三键用#来表示,用法与双键一样;

1.4 主干线不加标记,分支加圆括号,比如上面提到的二氧化碳,第一个O原子不在主分支上,因此加了括号;

1.5 不成键的分子之间用.隔开,比如O.C(=O)=O表示一个水分子和一个二氧化碳分子;

1.6 成环的要打开来写,并在开头和结尾加上断键标记,比如C1CCCCC1表示一个环己烷C6H12,这里的两个1前所对应的碳是相互连接的。

2. SMILES在REACTION中的写法

在这里插入图片描述
说明其中每个‘.’分隔两个不同的分子,>>代表化学反应方程式中的等号,上图酯化反应中>>左边代表的是醇分子和酸分子两个分子。

3. 论文中的实际处理


以USPTO-479k中的test.csv中,论文中实际处理的时候,只提取了前三列 标号、prod_smiles、reactant_smiles 的数据。
在这里插入图片描述
​ 上图中是对text.csv的第一行样例进行读取,接下来对smiles格式的数据调用pysmiles.read_smiles() 对样例进行操作,得到的embeddings结果可视化如图所示。
在这里插入图片描述
分析:可以看到,在第一个样例中,反应物有两个分子,共同生成了一个reactant_graph;生成物有三个分子,共同生成了一个product_graph。
​ 针对 pysmiles库对数据的具体处理,可以从逆向的角度,参考当调用 **pysmiles.write_smiles()**的时候,反向手动搭建 SMILES格式数据的过程。
在这里插入图片描述
​ 之后调用networkx_to_dgl()将图从nextworkx格式转换为dgl格式。在dgl图的feature表示中,每一个结点拥有 element, charge, aromatic, hcount四个属性。形状为;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GP5Mk6Tl-1639789791165)(C:\Users\Supergirl\AppData\Roaming\Typora\typora-user-images\image-20211217181956434.png)]
​ 其中962为随机选取的一个dgl图的结点数,每个dgl图的结点数是不一样的。4为上面提到的属性的维度。

问题二:输入模型时的维度匹配问题

模型的实际输入,分为graphh(每个结点的特征)两部分。只保证同一个反应物(生成物)送入模型时,对应graph的结点个数和h的结点个数匹配即可。
在这里插入图片描述
其中self.feature_len为 四个属性中所有不同类型的个数和。先生成h大小为[962,4,55]的one-hot矩阵,之后通过torch.sum将三维降为二维,和graph一起送入模型中。
每一个epoch,它在前向传播的训练过程中,最后一层SumPooling之前,会得到一个维度为[结点数,dim]的矩阵,经过最后一层SumPooling操作会统一成[batchsize,dim]。这样得到每一对大小为[batchsize,dim]的reactant_embedding和product_embedding,进行loss的计算和反向传播。
虽然每次输入的特征矩阵和邻接矩阵结点对应的维度会发生变化,但是表示特征的维度的长度是固定的。长度恒为feature_len,即element、charge、aromatic、hcount四个属性中所有类别个数的总和55,即输入的特征矩阵大小固定为[结点数,55]

标签:Reaction,结点,SMILES,graph,Molecule,Aware,pysmiles,维度,格式
来源: https://blog.csdn.net/weixin_43856821/article/details/122008404