2024-03-11
基于reinvent2.0(基于RNN框架)进行小分子从头设计
总的来说是基于ChEMBL数据集对RNN模型进行预训练,之后从文献中收集的数据应用于预训练的模型(即进行迁移学习微调模型),之后再使用自定义打分函数通过强化学习优化模型
Ⅰ、数据处理步骤:
对于微调数据,以IC50=10 μM 为阈值,IC50≥10 μM 的被认为是非apo-IDO1 抑制剂,IC50<10 μM 的被认为是apo-IDO1 抑制剂
一、为了获得性能良好的生成模型,使用RDKit 等工具包对收集的化合物 (预训练数据和微调数据) 进行
预处理,具体处理步骤如下:
(1)将所有分子的SMILES 正则化,删除无效和重复的分子
(2)去除无机物、盐类化合物
(3)去除明显不类药的分子,例如去除那些过大的分子、含有反应基团的分子等
(4)去除一些含有稀有元素的分子,仅保留含有H、C、N、O、F、S、P、Cl、Br 元素的分子
(5)预训练集还要去除与微调数据重复的分子
二、将所有SMILES 字符串中出现的字符全部标记化(Tokenization),根据词汇表使用独热编码(One-Hot Encoding)将SMILES 字符串转化为稀疏矩阵
Ⅱ、模型框架
分子生成模型是使用阿斯利康公司开发的REINVENT2.0 自定义搭建的,主要分为三部分。
第一部分是基于RNN 架构训练可以生成各种不同化合物的普通先验
(General Prior)模型;
第二部分是基于普通先验模型引入apo-IDO1 抑制剂数据微调模型,形成聚焦先验(Focused Prior)模型;
第三部分是在聚焦先验模型的基础上,引入强化学习优化策略,通过自定义的打分函数训练模型生成具有良好类药性的潜在apo-IDO1抑制剂。
Ⅲ、生成模型评估
一个简化的代码示例
展示如何用Python和假定的库(这里我们使用伪代码表示)构建分子生成模型,具体到REINVENT 2.0 和特定的库细节可能会有所不同,但基本思路应该是相似的。我们将按照您描述的三部分来构建示例。
第一部分:训练通用先验模型
from reinvent_models import RNNModel
# 初始化并训练一个基于RNN的模型,生成通用化合物
general_prior_model = RNNModel()
general_prior_model.train(data='general_chemicals_dataset', epochs=50)
第二部分:训练聚焦先验模型
# 加载apo-IDO1抑制剂的数据集进行微调
focused_prior_model = general_prior_model # 基于通用先验模型开始
focused_prior_model.finetune(data='apo_IDO1_inhibitors_dataset', epochs=20)
第三部分:应用强化学习优化策略
from reinvent_reinforcement import ReinforcementLearning
# 定义一个自定义的打分函数,这个函数基于某些化合物属性(比如:类药性、选择性等)给化合物打分
def custom_scoring_function(molecule):
# 这里只是一个示例函数,实际的打分逻辑会更复杂
score = compute_drug_like_properties(molecule)
return score
# 使用强化学习和自定义的打分函数优化聚焦先验模型
rl = ReinforcementLearning(model=focused_prior_model, scoring_function=custom_scoring_function)
rl.train(epochs=30)
请注意,这些代码段仅为示例,使用了假设的函数和库名称。