用少于10行代码训练前沿深度学习新药研发模型
?PaperWeekly?·?作者|黃柯鑫
學校|哈佛大學碩士生
研究方向|圖學習和生物醫療
深度學習正在革新藥研發行業。在本文中,我們將展示如何使用 DeepPurpose,一個基于 PyTorch 的工具包來解鎖 50 多個用于藥物-靶標相互作用(Drug-Target Interaction)預測的模型。
DTI 預測是新藥研發中的一項基本任務。DeepPurpose 的操作模式是像 scikit-learn 一樣。只需幾行代碼,就可以利用最前沿的深度學習和藥物研發模型。DeepPurpose 還有一個簡單的界面來做 DTI 預測的兩個重要應用:虛擬篩選(Virtual Screening)和舊藥新用(Drug Repurposing)。要了解更多信息,請訪問 arxiv 文章和 Github。
論文標題:DeepPurpose: a Deep Learning Library for Drug-Target Interaction Prediction and Applications to Repurposing and Screening
論文鏈接:https://arxiv.org/abs/2004.08919
項目鏈接:https://github.com/kexinhuang12345/DeepPurpose
發現一種新藥要花費 10 年以上的時間,成本要超過 26 億美元 [1]。最近,許多 AI 藥物研發創業公司出現并成功應用了深度學習技術來輔助新藥研發,并大大縮短了時間/節省成本 [2,3]。在國內前兩天在世界人工智能大會,大藥廠 AstraZeneca 的演講和騰訊的云深智藥平臺發布,都預示著人工智能新藥研發將會在未來非常的火。因此,這是一個非常令人興奮和蓬勃發展的領域!
▲ Image by authors.
背景
讓我們從一些生物化學概念開始。疾病通常歸因于疾病途徑中的靶蛋白。藥物可以用來調節這個靶蛋白,以此來治愈疾病。相當于是斷了這個疾病的發生途徑。其中一個主要的藥物作用機制是“鎖與鑰匙”理論 [4]。靶蛋白是“鎖” ,而藥物是那把合適的“鑰匙” 以解鎖這個靶蛋白。鎖和鑰匙的匹配程度也被稱為綁定親和力(binding affinity)。
▲?Image permission granted by Christopher Vakoc.
藥物-靶標相互作用(Drug-Target Interaction, DTI)測量的就是藥物分子與蛋白質靶標的結合親和力。因此,我們可以輕松地想象到,如果一個 DTI 深度學習預測模型能準確預測藥物分子與蛋白質靶標的結合親和,它可以極大地有益于藥物的發現 [5]。
更具體地說,虛擬篩選(Virtual Screening)和舊藥新用(Drug Repurposing)是基于 DTI 的兩個主要應用。虛擬篩選有助于識別可以與目標蛋白質結合的配體候選物,而藥物重新定位則為現有藥物找到新的治療目的。
▲ Image by authors.
DeepPurpose概述
DeepPurpose 將 DTI 模型表述為編碼器-解碼器 (encoder-decoder) 框架, 這個框架包括以前的大部分工作 [6,7,8,9,10],并還包括了很多新的模型。兩個編碼器(encoder)分別為藥物和蛋白質生成 embedding,然后將它們串聯到解碼器(decoder)中,在 decoder 中預測結合親和力(binding affinity score)。DeepPurpose 是用 PyTorch 寫的。
▲ Image by authors.
DeepPurpose 使用最容易的輸入數據格式。輸入是藥物靶標對(drug-target pair),其中藥物使用 SMILES 字符串(藥物分子圖像上的 Depth-First Traversal),而靶蛋白則使用氨基酸序列(amino acid sequence)。輸出是指示藥物-靶對的結合活性的分數。
▲ Image by authors.
對于藥物分子,我們提供了 8 種 encoder:四個經典的化學信息學指紋(Morgan,Pubchem,Daylight 和 RDKit 2D),并在它們之上用深度神經網絡(DNN);1D 卷積神經網絡(CNN),在 SMILES 字符串上;在 CNN 之上加上遞歸神經網絡,以利用序列順序上的信息;子結構分區指紋上的 Transformer [11];分子圖上的圖神經網絡(Message Passing Neural Network)。
▲ Image by authors.
對于靶蛋白,我們提供了 7 種 encoder:在四個經典計算生物學指紋(AAC,PseAAC,Conjoint Triad, Quasi-sequence)之上的 DNN;在上的氨基酸序列上的 1D CNN;在 CNN 加 RNN;和在 substructure fingerprint 上用 transformer。
▲ Image by authors.
DeepPurpose 總共提供了 56 種(8 乘 7)模型!另外,大多數模型都是 novel 的!
DeepPurpose編程框架
現在,在對 DTI 和 DeepPurpose 進行概念性概述之后,我將開始介紹 DeepPurpose 編程框架。該框架由幾個步驟組成,其中每個步驟都由一行代碼組成:
Data loading(數據加載)?
Encoder specification(編碼器規格)
Data encoding and split(數據編碼和分割)
Model configuration generation(模型配置生成)
Model initialization(模型初始化)
Model training(模型訓練)
Repurposing/Screening(舊藥新用/虛擬篩選)
Model saving and loading(模型保存和加載)
為了獲得更好的學習體驗,建議在您自己的 Jupyter Notebook 中或通過這個帖子的筆記本執行以下步驟。
https://github.com/kexinhuang12345/DeepPurpose/blob/master/Tutorial_1_DTI_Prediction.ipynb
要安裝 DeepPurpose,您可以使用 DeepPurpose Binder 云筆記本(只需單擊鏈接!):
https://mybinder.org/v2/gh/kexinhuang12345/DeepPurpose/master
也可以使用本地 DeepPurpose 環境。可以在此處找到安裝說明:
https://github.com/kexinhuang12345/DeepPurpose#install--usage
還可以在其中找到視頻安裝教程:
https://youtu.be/bqinehjnWvE
Data loading(數據加載)
DeepPurpose 接受 1. 一個藥物的 SMILES 字符串的 NumPy array(X_drugs);2. NumPy 陣列的一個靶蛋白的氨基酸序列 NumPy array(X_targets);3. 一個標簽 NumPy array(y)。
這個 y 可以是 binary 的 0/1,表示這個藥物和靶蛋白會不會反應;也可以是表示綁定親和力值的實數。這個 input 藥物和靶蛋白和標簽應成對,即 y [0] 是 X_drugs [0] 和 X_targets [0] 的標簽。DeepPurpose 會根據數據集自動在二分類任務或回歸任務之間切換。?
除了通過自己處理轉換為 NumPy array 外,DeepPurpose 還提供基準數據集(benchmark)加載器(DAVIS / KIBA / BindingDB)以簡化預處理。例如,在本文中,我們將使用 DAVIS 數據集:
from?DeepPurpose?import?utils,?models,?datasetX_drugs,?X_targets,?y?=?dataset.load_process_DAVIS(path?=?'./data',?binary?=?False,?convert_to_log?=?True,?threshold?=?30) print('Drug?1:?'?+?X_drugs[0]) print('Target?1:?'?+?X_targets[0]) print('Score?1:?'?+?str(y[0]))#?------?Output?------ #?Beginning?Processing... #?Beginning?to?extract?zip?file... #?Default?set?to?logspace?(nM?->?p)?for?easier?regression #?Done! #?Drug?1:?CC1=C2C=C(C=CC2=NN1)C3=CC(=CN=C3)OCC(CC4=CC=CC=C4)N #?Target?1:?MKKFFDSRREQGGSGLGSGSSGGGGSTSGLGSGYIGRVFGIGRQQVTVDEVLAEGGFAIVFLVRTSNGMKCALKRMFVNNEHDLQVCKREIQIMRDLSGHKNIVGYIDSSINNVSSGDVWEVLILMDFCRGGQVVNLMNQRLQTGFTENEVLQIFCDTCEAVARLHQCKTPIIHRDLKVENILLHDRGHYVLCDFGSATNKFQNPQTEGVNAVEDEIKKYTTLSYRAPEMVNLYSGKIITTKADIWALGCLLYKLCYFTLPFGESQVAICDGNFTIPDNSRYSQDMHCLIRYMLEPDPDKRPDIYQVSYFSFKLLKKECPIPNVQNSPIPAKLPEPVKASEAAAKKTQPKARLTDPIPTTETSIAPRQRPKAGQTQPNPGILPIQPALTPRKRATVQPPPQAAGSSNQPGLLASVPQPKPQAPPSQPLPQTQAKQPQAPPTPQQTPSTQAQGLPAQAQATPQHQQQLFLKQQQQQQQPPPAQQQPAGTFYQQQQAQTQQFQAVHPATQKPAIAQFPVVSQGGSQQQLMQNFYQQQQQQQQQQQQQQLATALHQQQLMTQQAALQQKPTMAAGQQPQPQPAAAPQPAPAQEPAIQAPVRQQPKVQTTPPPAVQGQKVGSLTPPSSPKTQRAGHRRILSDVTHSAVFGVPASKSTQLLQAAAAEASLNKSKSATTTPSGSPRTSQQNVYNPSEGSTWNPFDDDNFSKLTAEELLNKDFAKLGEGKHPEKLGGSAESLIPGFQSTQGDAFATTSFSAGTAEKRKGGQTVDSGLPLLSVSDPFIPLQVPDAPEKLIEGLKSPDTSLLLPDLLPMTDPFGSTSDAVIEKADVAVESLIPGLEPPVPQRLPSQTESVTSNRTDSLTGEDSLLDCSLLSNPTTDLLEEFAPTAISAPVHKAAEDSNLISGFDVPEGSDKVAEDEFDPIPVLITKNPQGGHSRNSSGSSESSLPNLARSLLLVDQLIDL #?Score?1:?7.3655227298392685 #?--------------------您還可以使用 dataset.read_file_training_dataset_drug_target_pairs 函數從 txt 文件加載自己的數據集,其中每行是藥物 SMILES 字符串,目標氨基酸序列和結合分數。
Encoder specification(編碼器規格)?
獲得所需的數據格式后,我們需要首先指定用于藥物和蛋白質的編碼器 (encoder)。在這里,我們嘗試將 MPNN 用作藥物,將 CNN 用作靶蛋白的 encoder。請注意,您只需更改編碼名稱即可切換編碼器。此處列出了 DeepPurpose 編碼器的完整列表:
https://github.com/kexinhuang12345/DeepPurpose#encodings?
如果使用 CPU 來運行此文章的 code,您會發現 MPNN 和 CNN 有點大,則可以嘗試使用較小的編碼器,例如 Morgan 用于藥物,而 Conjoint_triad 用于靶蛋白。
drug_encoding,?target_encoding?=?'MPNN',?'CNN' #drug_encoding,?target_encoding?=?'Morgan',?'Conjoint_triad'Data encoding and split(數據編碼和分割)
現在,我們需要使用 utils.data_process 函數為不同的編碼器準備數據編碼。在這個函數中,我們可以指定 train/validation/test split,隨機種子以確保可重復性。
它還支持其他數據拆分方法(例如 Cold_drug 和 Cold_protein),該方法可以在藥物/蛋白質上進行 split,這樣子 test set 就測試 train set 不在的的藥物/蛋白質,以此來對模型進行魯棒性評估。這個函數輸出的是訓練,驗證和測試集的 Pandas Dataframe。
train,?val,?test?=?utils.data_process(X_drugs,?X_targets,?y,?drug_encoding,?target_encoding,?split_method='random',frac=[0.7,0.1,0.2],random_seed?=?1)#?------?Output?------? #?in?total:?30056?drug-target?pairs #?encoding?drug... #?unique?drugs:?68 #?drug?encoding?finished... #?encoding?protein... #?unique?target?sequence:?379 #?protein?encoding?finished... #?splitting?dataset... #?Done. #?--------------------Model configuration generation(模型配置生成)
現在,我們要生成一個模型的配置(config)。您可以在此功能中修改幾乎所有超參數(例如 learning rate,epoch size,batch size),模型參數(例如hidden dimension,filter size 等等)。所有支持的配置參數在此鏈接中列出:
https://github.com/kexinhuang12345/DeepPurpose/blob/e169e2f550694145077bb2af95a4031abe400a77/DeepPurpose/utils.py#L486
config?=?utils.generate_config(drug_encoding?=?drug_encoding,?target_encoding?=?target_encoding,?cls_hidden_dims?=?[1024,1024,512],?train_epoch?=?5,?LR?=?0.001,?batch_size?=?128,hidden_dim_drug?=?128,mpnn_hidden_size?=?128,mpnn_depth?=?3,?cnn_target_filters?=?[32,64,96],cnn_target_kernels?=?[4,8,12])?
Model initialization(模型初始化)
接下來,我們使用以上配置初始化模型:
model?=?models.model_initialize(**config)Model training(模型訓練)
現在,只需鍵入 model.train 函數即可進行訓練!
Loss 曲線將自動產生。如果該任務是二分類(binary classification)任務,則還將產生測試集上的 ROC-AUC 和 PR-AUC 曲線。
Repurposing/Screening(舊藥新用/虛擬篩選)
訓練完模型后,我們可以使用 models.repurpose 和 models.virtual_screening 函數簡單地做舊藥新用和虛擬篩選。
接下來我們來舉個例,我們想針對 COVID-19 靶標 3CL 蛋白酶從一組已經上市的抗病毒藥物中選取看看會不會反應。我們只要先 load 這個數據然后直接使用 models.repurpose 函數即可。我們在 DeepPurpose.dataset 中提供了相應的數據。
target,?target_name?=?dataset.load_SARS_CoV2_Protease_3CL() repurpose_drugs,?repurpose_drugs_name,?repurpose_drugs_pubchem_cid?=?dataset.load_antiviral_drugs()y_pred?=?models.repurpose(X_repurpose?=?repurpose_drugs,?target?=?target,?model?=?model,?drug_names?=?repurpose_drugs_name,?target_name?=?target_name,?result_folder?=?"./result/",?convert_y?=?True)#?------?Output?------ #?repurposing... #?in?total:?82?drug-target?pairs #?encoding?drug... #?unique?drugs:?81 #?drug?encoding?finished... #?encoding?protein... #?unique?target?sequence:?1 #?protein?encoding?finished... #?Done. #?predicting... #?--------------------DeepPurpose 會自動生成候選藥物排名列表:
注意因為這個模型只訓練了幾個 Epoch,而且在一個小的數據集上所以這個列表可能不是很準確。但我們發現在大的模型上進行訓練,DeepPurpose 產出了很多在臨床研究的藥物。
DeepPurpose 更加實際的應用場景是做縮小高通量篩選實驗的范圍。在這些列表中,我們可以剔除那些親和力很低的藥物分子,然后把其他的送到高通量篩選實驗中,這樣子可以大量的減少高通量篩選實驗的成本并也不遺漏可能的藥物分子。
接下來,我們展示如何對 BindingDB 數據集中的數據樣本進行虛擬篩選,然后使用 virtual_screening 函數生成具有高結合親和力的藥物-靶標對列表。如果未提供藥物/靶標名稱,則使用藥物/靶標列表的 Index。會生成一個看起來跟上面相似的排名列表。
Model saving and loading(模型保存和加載)?
最后,保存和加載模型也非常容易。加載功能還自動檢測模型是否在多個GPU上訓練。保存和加載我們剛剛訓練的模型的例子:
model.save_model('./tutorial_model') model?=?models.model_pretrained(path_dir?=?'./tutorial_model')我們還提供了很多預訓練模型,您可以在列表下找到所有可用的模型。
https://github.com/kexinhuang12345/DeepPurpose#pretrained-models
例如,要加載在 BindingDB Kd 數據集上預先訓練的 MPNN + CNN 模型:
model?=?models.model_pretrained(model?=?'MPNN_CNN_BindingDB')#?------?Output?------ #?Beginning?Downloading?MPNN_CNN_BindingDB?Model... #?Downloading?finished...?Beginning?to?extract?zip?file... #?pretrained?model?Successfully?Downloaded... #?--------------------That's it!您現在已經可以為藥物-靶標相互作用預測任務訓練出 State-of-the-art 的深度學習模型了!?
DeepPurpose 還支持更多功能,例如,這個鏈接演示了如何使用 Ax 平臺用超參數調整方法,像 Bayesian Optimization 等對 DeepPurpose 進行優化。
https://github.com/kexinhuang12345/DeepPurpose/blob/master/DEMO/Drug_Property_Pred-Ax-Hyperparam-Tune.ipynb
最后,許多現實世界中的藥物開發都涉及 assay,即數據僅由藥物分子和與靶標的結合分數組成。該問題也稱為藥物性質預測(drug property prediction)任務。DeepPurpose 對這類任務也可以用。即只使用藥物編碼器(drug encoder)來預測結合分數。該框架與 DTI 預測非常相似,如下所示:
from?DeepPurpose?import?utils,?models,?dataset,?property_predX_drugs,?X_targets,?y?=?dataset.load_AID1706_SARS_CoV_3CL(path?=?'./data',?binary?=?True,?threshold?=?15,?balanced?=?True)drug_encoding?=?'MPNN'train,?val,?test?=?utils.data_process(X_drug?=?X_drugs,?y?=?y,?drug_encoding?=?drug_encoding,split_method='random',frac=[0.7,0.1,0.2],random_seed?=?1)config?=?utils.generate_config(drug_encoding?=?drug_encoding,?cls_hidden_dims?=?[1024,1024,512],?train_epoch?=?5,?LR?=?0.001,?batch_size?=?128,hidden_dim_drug?=?128,mpnn_hidden_size?=?128,mpnn_depth?=?3)model?=?property_pred.model_initialize(**config)model.train(train,?val,?test)更詳細說明,您可以在此處找到此博客文章的 Jupyter Notebook。
DTI 預測:
https://github.com/kexinhuang12345/DeepPurpose/blob/master/Tutorial_1_DTI_Prediction.ipynb
藥物特性預測:
https://github.com/kexinhuang12345/DeepPurpose/blob/master/Tutorial_2_Drug_Property_Pred_Assay_Data.ipynb
總結
這就是我們有關 DeepPurpose 和 DTI 預測的博客文章,希望您對深度學習新藥研發這個交叉學科開始感興趣。希望有更多的人能夠為這個開源項目做出貢獻!?
要了解更多信息,請訪問 arxiv 文章和 Github,請 star,分享并 contribute!?
這篇文章是由我,Kexin Huang,還有 Tianfan Fu,Lucas Glass,Marinka Zitnik,Cao Xiao 和 Jimeng Sun 共同合作。?
如果您有任何疑問或反饋或文章中有任何不妥的地方,請隨時通過 kexinhuang@hsph.harvard.edu 與我聯系;或者就在 Twitter @ KexinHuang5,知乎上直接私我。?
參考文獻
[1] Mullard, A. New drugs cost US$2.6 billion to develop. Nature Reviews Drug Discovery (2014).?
[2] Fleming, Nic. How artificial intelligence is changing drug discovery. Nature (2018).?
[3] Smalley, E. AI-powered drug discovery captures pharma interest. Nature Biotechnology (2017).?
[4] Gschwend DA, Good AC, Kuntz ID. Molecular docking towards drug discovery. Journal of Molecular Recognition: An Interdisciplinary Journal (1996).?
[5] Mayr, Andreas, et al. Large-scale comparison of machine learning methods for drug target prediction on ChEMBL. Chemical science (2018).?
[6] ?ztürk H, ?zgür A, Ozkirimli E. DeepDTA: deep drug-target binding affinity prediction. Bioinformatics (2018).?
[7] Nguyen, Thin, Hang Le, and Svetha Venkatesh. GraphDTA: prediction of drug–target binding affinity using graph convolutional networks. BioRxiv (2019).?
[8] Tsubaki, Masashi, Kentaro Tomii, and Jun Sese. Compound–protein interaction prediction with end-to-end learning of neural networks for graphs and sequences. Bioinformatics (2019).?
[9] Lee, Ingoo, Jongsoo Keum, and Hojung Nam. DeepConv-DTI: Prediction of drug-target interactions via deep learning with convolution on protein sequences. PLoS computational biology (2019).?
[10] Chen, Xing, et al. Drug–target interaction prediction: databases, web servers and computational models. Briefings in bioinformatics (2016).?
[11] Huang K, Xiao C, Hoang T, Glass L, Sun J. CASTER: Predicting Drug Interactions with Chemical Substructure Representation. AAAI (2020).
?
更多閱讀
?
#投 稿?通 道#
?讓你的論文被更多人看到?
如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。
總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。?
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學習心得或技術干貨。我們的目的只有一個,讓知識真正流動起來。
?????來稿標準:
? 稿件確系個人原創作品,來稿需注明作者個人信息(姓名+學校/工作單位+學歷/職位+研究方向)?
? 如果文章并非首發,請在投稿時提醒并附上所有已發布鏈接?
? PaperWeekly 默認每篇文章都是首發,均會添加“原創”標志
?????投稿郵箱:
? 投稿郵箱:hr@paperweekly.site?
? 所有文章配圖,請單獨在附件中發送?
? 請留下即時聯系方式(微信或手機),以便我們在編輯發布時和作者溝通
????
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
關于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
總結
以上是生活随笔為你收集整理的用少于10行代码训练前沿深度学习新药研发模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: A股燃气股批量涨停 国际天然气价格涨了十
- 下一篇: 每月定投500元有意义吗 投资时需要长