2024-03-11
基于reinvent2.0(基于RNN框架)進(jìn)行小分子從頭設(shè)計
總的來說是基于ChEMBL數(shù)據(jù)集對RNN模型進(jìn)行預(yù)訓(xùn)練棵帽,之后從文獻(xiàn)中收集的數(shù)據(jù)應(yīng)用于預(yù)訓(xùn)練的模型(即進(jìn)行遷移學(xué)習(xí)微調(diào)模型),之后再使用自定義打分函數(shù)通過強化學(xué)習(xí)優(yōu)化模型
Ⅰ、數(shù)據(jù)處理步驟:
對于微調(diào)數(shù)據(jù),以IC50=10 μM 為閾值,IC50≥10 μM 的被認(rèn)為是非apo-IDO1 抑制劑,IC50<10 μM 的被認(rèn)為是apo-IDO1 抑制劑
一岭洲、為了獲得性能良好的生成模型,使用RDKit 等工具包對收集的化合物 (預(yù)訓(xùn)練數(shù)據(jù)和微調(diào)數(shù)據(jù)) 進(jìn)行
預(yù)處理坎匿,具體處理步驟如下:
(1)將所有分子的SMILES 正則化盾剩,刪除無效和重復(fù)的分子
(2)去除無機物、鹽類化合物
(3)去除明顯不類藥的分子替蔬,例如去除那些過大的分子告私、含有反應(yīng)基團(tuán)的分子等
(4)去除一些含有稀有元素的分子,僅保留含有H承桥、C驻粟、N、O凶异、F蜀撑、S、P唠帝、Cl屯掖、Br 元素的分子
(5)預(yù)訓(xùn)練集還要去除與微調(diào)數(shù)據(jù)重復(fù)的分子
二玄柏、將所有SMILES 字符串中出現(xiàn)的字符全部標(biāo)記化(Tokenization)襟衰,根據(jù)詞匯表使用獨熱編碼(One-Hot Encoding)將SMILES 字符串轉(zhuǎn)化為稀疏矩陣
Ⅱ、模型框架
分子生成模型是使用阿斯利康公司開發(fā)的REINVENT2.0 自定義搭建的粪摘,主要分為三部分瀑晒。
第一部分是基于RNN 架構(gòu)訓(xùn)練可以生成各種不同化合物的普通先驗
(General Prior)模型绍坝;
第二部分是基于普通先驗?zāi)P鸵隺po-IDO1 抑制劑數(shù)據(jù)微調(diào)模型,形成聚焦先驗(Focused Prior)模型苔悦;
第三部分是在聚焦先驗?zāi)P偷幕A(chǔ)上轩褐,引入強化學(xué)習(xí)優(yōu)化策略,通過自定義的打分函數(shù)訓(xùn)練模型生成具有良好類藥性的潛在apo-IDO1抑制劑玖详。
Ⅲ把介、生成模型評估
一個簡化的代碼示例
展示如何用Python和假定的庫(這里我們使用偽代碼表示)構(gòu)建分子生成模型,具體到REINVENT 2.0 和特定的庫細(xì)節(jié)可能會有所不同蟋座,但基本思路應(yīng)該是相似的拗踢。我們將按照您描述的三部分來構(gòu)建示例。
第一部分:訓(xùn)練通用先驗?zāi)P?/strong>
from reinvent_models import RNNModel
# 初始化并訓(xùn)練一個基于RNN的模型向臀,生成通用化合物
general_prior_model = RNNModel()
general_prior_model.train(data='general_chemicals_dataset', epochs=50)
第二部分:訓(xùn)練聚焦先驗?zāi)P?/strong>
# 加載apo-IDO1抑制劑的數(shù)據(jù)集進(jìn)行微調(diào)
focused_prior_model = general_prior_model # 基于通用先驗?zāi)P烷_始
focused_prior_model.finetune(data='apo_IDO1_inhibitors_dataset', epochs=20)
第三部分:應(yīng)用強化學(xué)習(xí)優(yōu)化策略
from reinvent_reinforcement import ReinforcementLearning
# 定義一個自定義的打分函數(shù)巢墅,這個函數(shù)基于某些化合物屬性(比如:類藥性、選擇性等)給化合物打分
def custom_scoring_function(molecule):
# 這里只是一個示例函數(shù)券膀,實際的打分邏輯會更復(fù)雜
score = compute_drug_like_properties(molecule)
return score
# 使用強化學(xué)習(xí)和自定義的打分函數(shù)優(yōu)化聚焦先驗?zāi)P?rl = ReinforcementLearning(model=focused_prior_model, scoring_function=custom_scoring_function)
rl.train(epochs=30)
請注意君纫,這些代碼段僅為示例,使用了假設(shè)的函數(shù)和庫名稱芹彬。