DataWhale暑期夏令营——RNN建模SMILES进行反应产率预测

在之前的Task1中,我们利用RDkit工具将SMILES表示的分子转化为Morgan Fingerprint,并使用随机森林进行了建模,取得了第一个成绩。在Task2中,我们将进一步学习AI4Science的相关知识,探索深度学习方法在化学反应预测中的应用,重点是使用RNN建模SMILES进行反应产率预测。

思考引导
如何将化学知识转化为计算机可识别的形式
化学知识包括元素周期表、分子式、化学反应方程、熵、焓、自由能等,主要通过文本和专有符号记录。
 

AI4Science的发展历史
AI4Science的发展大致分为三个阶段:

1.将化学知识以计算机形式存储,并构建数据库**:使用不同方法将化学知识和信息存储为计算机形式,构建数据库。例如,用字符表示分子,保存分子的原子和键的位置信息等。
   
2. 机器学习:对已有数据进行特征工程,使用传统机器学习方法进行预测。例如,使用分子指纹(molecule fingerprint)作为编码方式,并辅以传统机器学习方法进行预测。

3. 深度学习:使用深度神经网络学习特征并进行预测,例如使用seq2seq模型表示序列类型的化学数据,或使用基于diffusion的方法重建分子的三维空间结构。

SMILES
SMILES(Simplified Molecular Input Line Entry System)是一种将化学分子用ASCII字符表示的方法,广泛用于存储化学信息。它将原子、键、电荷等信息用ASCII字符表示,并有特定的书写规范。尽管SMILES有一些局限性,如无法表示空间信息以及同一分子可能有多个SMILES表示,但它在化学信息学领域仍然具有重要作用。

常见化学结构的SMILES表示
表示原子:直接使用化学符号(例如,C表示碳)。
表示键:单键不标注,双键用=表示,三键用#表示。
特殊原子或侧基:用[]表示(例如,[Cu+2]表示带电+2电荷的Cu离子)。
  
SMILES的缺点
无法充分表达空间信息。
同一分子可能有多个不同的SMILES表示(不一一对应)。

分子指纹
分子指纹是用于表示特定分子的位向量,指纹的每个值表示分子是否具有某些子结构。它具有以下特点:
1. 稀疏性:大量的0,少量的1。
2. 不一一对应**:不同的算法和子图匹配规则会生成不同的分子指纹。

RDkit
RDkit是开源的化学信息学工具,功能丰富且高效,包括读写分子、修饰分子、计算分子相似性等。常用功能包括:
读写分子:将分子表示为RDkit的rdkit.Chem.rdchem.Mol对象,并转换为多种表达形式(如SMILES、SMARTS)。
计算分子指纹:生成分子指纹并计算分子之间的相似性。

机器学习
机器学习分为分类任务和回归任务。在本次竞赛中,我们需要预测反应产率,这是一个回归任务。传统的机器学习方法通过特征工程将数据转化为向量形式,使用SVM、随机森林等算法进行预测。

深度学习
深度学习通过神经网络学习数据特征。SMILES作为一种化学语言,可以使用NLP中的方法进行建模。RNN(Recurrent Neural Network)是处理序列数据的有效工具,但存在对长序列记忆能力差、并行能力差、容易出现梯度消失或爆炸等问题。

RNN的架构
RNN每层会输出一个隐向量到下一层,从而通过隐向量传递序列信息。每层的计算公式如下:
隐向量计算:h_n = \sigma(W_{hh}h_{n-1} + W_{hx}x_n + b_n)
输出计算:y_n = Softmax(Vh_n + c)

 实践部分
在实践部分,我们将使用GPU进行训练,并将代码文件置于适当的目录结构中。可以直接调用Pytorch的模块完成RNN模型的构建和训练。赛题数据包括Reactant1, Reactant2, Product, Additive, Solvent等信息,可以组合成一个字符串进行建模。需要注意的是,可以忽略Additive和Solvent对模型的影响,尝试不同的参数设置以提升模型性能。

实践代码示例

from rdkit import Chem
from rdkit.Chem import Draw
from rdkit.Chem import AllChem
from rdkit import DataStructs

# 读取分子并转化为SMILES表示
m = Chem.MolFromSmiles('Cc1ccccc1')
res = Chem.MolToSmarts(m)

# 绘制分子图片
img = Draw.MolToImage(m)
img.show()

# 子结构搜索
m = Chem.MolFromSmiles('c1ccccc1O')
patt = Chem.MolFromSmarts('ccO')
m.HasSubstructMatch(patt)

# 计算分子指纹及相似性
ms = [Chem.MolFromSmiles('CCOC'), Chem.MolFromSmiles('CCO'), Chem.MolFromSmiles('COC')]
fpgen = AllChem.GetRDKitFPGenerator()
fps = [fpgen.GetFingerprint(x) for x in ms]
similarity = DataStructs.TanimotoSimilarity(fps[0],fps[1])

小结
本节中,我们深入了解了AI4Chemistry中的重要概念和方法,学习了机器学习和深度学习在化学反应预测中的应用,并通过具体代码示例完成了用RNN建模SMILES并进行反应产率预测的任务。

  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值