基于片段的分子生成网络 (FLAG)使用方法及案例测评

本文来源于中国科技大学计算机科学与技术学院刘淇教授课题组于2023年发表在ICLR2023上的文章《MOLECULE GENERATION FOR TARGET PROTEIN BINDING WITH STRUCTURAL MOTIFS

在本文中,作者提出了一个基于片段的分子生成网络,FLAG (Fragment based LigAnd Generation framework)。在FLAG中,从数据集中提取共同的分子片段,构建了motif的词汇库。在每个生成步骤中,首先采用 3D 图神经网络对中间上下文信息(口袋)进行编码。 然后,FLAG模型选择中心motif,预测下一个motif类型,并连接motif。其中,键长/键角通过化学信息学工具快速准确地确定。 最后,根据预测的旋转角度和结构细化进一步调整分子几何形状。

本文是为数不多基于片段的分子生成技术,且能提供分子的3D结合pose。

一、文章主要结果

分子生成过程示例如下图:

motif的提取过程如下图:

作者评估的结果显示,FLAG模型在生成分子的QED,SA,docking score以及分子的真实性,特别是C-O键等二面角分布上,具有明显的优势。

分子性质结果如下图:

生成分子的docking 情况:生成的分子结构正常,且能合理占据口袋,docking score的打分与原始参考分子相近。

生成分子真实性(二面角):

作者提供了开源代码:https://github.com/zaixizhang/FLAG

二、环境安装与数据准备

首先,从GitHub中复制项目:

git clone https://github.com/zaixizhang/FLAG.git

项目目录如下:

然后根据yaml环境文件,安装conda 环境然后进行激活,因为torch和NVCC都是常见的版本,所以安装非常简单:

然后根据yaml环境文件,安装conda 环境然后进行激活,因为torch和NVCC都是常见的版本,所以安装非常简单:

conda env create -f flag_env.yaml
conda activate flag_env

然后进入./data目录,创建FLAG文件夹(该文件夹必须要创建,作者提供的代码使用了该目录,但是开源代码中并未创建),按照README.md说明从谷歌云盘上下载数据,并保存到 ./data/FLAG 中(链接:https://drive.google.com/drive/folders/1CzwxmTpjbrt83z_wBzcQncq84OVDPurM)

然后,进行解压:

tar -xzvf crossdocked_pocket10.tar.gz

数据预处理,motif词汇库的构建:

cd utils
python mol_tree.py

从上图可知,一共提取了517个motif,分子总数为183421个。运行结束以后,会在./data目录中,生成crossdocked_pocket10_processed.lmdb和crossdocked_pocket10_processed.lmdb-lock数据文件,./data目录如下:

同时,./utils目录下会生成语motif的语料库:vocab.txt。

注意,mol_tree.py文件有文件路径修改:

index_path = '/data/FLAG/crossdocked_pocket10/index.pkl' # wufeilwith open(index_path, 'rb') as f:index = pickle.load(f)for i, (pocket_fn, ligand_fn, _, rmsd_str) in enumerate(tqdm(index)):if pocket_fn is None: continuetry:path = '/data/FLAG/crossdocked_pocket10/' + ligand_fn # wufeilmol = Chem.MolFromMolFile(path, sanitize=False)moltree = MolTree(mol)cnt += 1if moltree.num_rotatable_bond > 0:rot += 1except:continue

改为:

index_path = '../data/FLAG/crossdocked_pocket10/index.pkl' # wufeilwith open(index_path, 'rb') as f:index = pickle.load(f)for i, (pocket_fn, ligand_fn, _, rmsd_str) in enumerate(tqdm(index)):if pocket_fn is None: continuetry:path = '../data/FLAG/crossdocked_pocket10/' + ligand_fn # wufeilmol = Chem.MolFromMolFile(path, sanitize=False)moltree = MolTree(mol)cnt += 1if moltree.num_rotatable_bond > 0:rot += 1except:continue

三、训练FLAG模型

python train.py

如果直接运行,上述训练代码,会报:ModuleNotFoundErrons No module naned chemutils错误:

这是因为,代码路径问题,需要做如下修改,增加sys.path.append("./utils"):

import sys
sys.path.append("..")
sys.path.append("./utils") # wufeil

同时,需要修改,训练的参数文件,即 ./configs/train_model.yml,修改内容如下,主要是调整了数据目录:

然后,python train.py可以正常运行,经过漫长时间的数据加载(> 1h),模型开始训练:

非常可惜,由于作者未提供训练好的checkpiont文件,所以需要我们自己先训练出一个模型,才能进行接下来的操作。

四、采样/分子生成

由于作者在GitHub上没有提供训练好的模型ckpt文件,因此只能使用我们自己训练的。在上一部训练结束以后,需要将模型的checkpoint 转移至 ./pretrained/并重命名为model.pt。然后执行如下命令:

python motif_sample.py

脚本会调用./configs/sample_test.yml下的参数配置(如下),FALG模型会加载./test_data/project_1数据集,然后从中抽取第一个体系(代码是这么写的,而结果也是这样子的),进行分子生成。输入的结果保存在:/outputs/sample-0_2023_09_06__07_32_47。其中,sample-0_2023_09_06__07_32_47为采样的时间,生成的分子为sdf格式。从pocket_info.txt中可以查到口袋的信息,为BSD_ASPTE_1_130_0/2z3h_A_rec_1wn6_bst_lig_tt_docked_3_pocket10.pdb。

dataset:name: plpath: ./test_data/project_1model:checkpoint: ./pretrained/model.pthidden_channels: 256random_alpha: Truesample:seed: 2022num_samples: 100 # 每个配体/体系采样数量beam_size: 300logp_thres: -.infnum_retry: 5max_steps: 12batch_size: 10num_workers: 4

在./configs/sample_test.yml配置文件中,设置的每个体系是采样100个,但是生成的sdf文件只有39个,说明不是每一次尝试sampling都是成功的。然后,我们将生成的分子放回到口袋中,几个示例如下:

从上述结果来看,在可以被保存成sdf的分子中,还有很多分子是不合法的。但是比较严重的是,在生成分子中,出现了大量的非常复杂的并环,这些分子的复杂程度根本就不可能合成。

可能是因为,训练不足导致的,这里使用的参数文件是经过了18000次迭代的。所以,模型的真实结果还是需要作者提供原始的ckpt文件才能知道。但是,并环在FLAG模型中,容易生成,可能是真实的,作者给出的几个案例,全部都有并环的存在,如下图:

但,必须指明的是,这不意味着作者的工作存在严重缺陷,作为一种方法的验证,作者开辟了基于分子片段的分子生成技术,是非常有参考意义的。GitHub中的代码,更是具有借鉴意义。

五、为自定义的案例生成分子

在1.2中,作者提供的是批量的是生成分子,利用的是数据预处理完成后的pl数据集中test集,然后对其中的第一个数据进行分子采样,并没有提供一个分子从数据预处理开始。为了使用自己的例子进行分子生成,新编写了一个generate_mols.py脚本。

执行: python generate_mols.py 即可。

脚本会默认使用./utils/vocab.txt片段库,同时将生成的分子保存在./tests。

generate_mols.py 会调用./configs/sample_test.yml配置文件,文件内容如下:

dataset:name: plpath: ./test_data/project_1 model:checkpoint: ./pretrained/model.pthidden_channels: 256random_alpha: Truesample:seed: 2022num_samples: 50 # 每个配体/体系采样数量,至少要大于批次大小beam_size: 300logp_thres: -.infnum_retry: 5max_steps: 12batch_size: 10num_workers: 4

其中,dataset中name必须为pl,因为原文作者设置如果数据集名字不为pl会报错。path为我们需要进行分子生成的体系保存路径,里面包含了两个体系,分别作为一个文件夹,目录如下:

./test_data/project_1
├── 3tym
│   ├── 3tym_ligand.sdf
│   └── 3tym_protein.pdb
├── 5tbo
│   ├── 5tbo_ligand.sdf
│   └── 5tbo_protein.pdb
└── index.pkl

model和sample字段下为模型相关的内容,没有做改变。sample中num_samples可以做调整,但是要大于batch_size。

在示例中,我们进行测试的两个体系是3tym和5tbo,生成的结果目录./test如下:

./tests
└── sample_test-pl_2023_09_13__02_10_37├── 3tym│   ├── 17.sdf│   ├── 27.sdf│   ├── 37.sdf│   ├── 47.sdf│   ├── SMILES.txt│   └── pocket_info.txt├── 5tbo│   ├── 19.sdf│   ├── 39.sdf│   ├── 47.sdf│   ├── 49.sdf│   ├── 9.sdf│   ├── SMILES.txt│   └── pocket_info.txt├── log.txt└── sample_test.yml

虽然设置每个体系采样50个,但是真正生成的有小分子并不多,分别只有

5tbo生成分子的结果示例:

                  

3tym生成分子的结果示例:

            

实在是因为我们训练迭代的次数太低,结果真的没法看。如果要用FLAG真的为靶点进行分子生成,显然需要进行更多次的迭代。可能数据集以及分子的切割方式也要做改进。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/157092.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在虚幻引擎中渲染动画?

大家好,今天我将展示如何在虚幻引擎中渲染动画,以及虚幻引擎渲染动画怎么设置的方法步骤。 需要提前了解: 虚幻引擎本地运行慢、渲染慢、本地配置不够,如何解决? 渲云云渲染支持虚幻引擎离线渲染,可批量…

钢筋智能测径仪 光圆与带肋钢筋均可检测!

在一个大规模、高效、连续的工业生产中,制造业正朝着自动化方向快速优化发展,这种自动化的生产需要快速、准确地分析控制生产工艺中的参数,超差及时提示,为操作工对工厂的运行和自我调节做出快速反应,人工操作越来越不…

SpringBootCMS漏洞复现分析

SpringBootCMS,极速开发,动态添加字段,自定义标签,动态创建数据库表并crud数据,数据库备份、还原,动态添加站点(多站点功能),一键生成模板代码,让您轻松打造自己的独立网站&#xff…

【html】利用生成器函数和video元素,取出指定时间的视频画面

简言 有的时候想截取视频某一秒的视频画面。 手动截取操作麻烦,还得时刻关注视频播放时间。 于是,我搞出来了一个根据视频自动截取特定时间描述的页面。 效果 实现步骤 获取视频对象根据视频时长生成时间选择表单根据表单选择的时间和视频地址&#x…

用手势识别来测试视力?试试用百度AI来实现想法

文章目录 ⭐ 前言⭐ 灵感来源⭐ 项目准备⭐ 项目实现⭐ 不足与展望 ⭐ 前言 10月17日,以“生成未来(PROMPT THE WORLD)”为主题的百度世界2023将在北京首钢园举办。百度创始人、董事长兼首席执行官李彦宏将带来以“手把手教你做AI原生应用”…

校招C#面试题整理—Unity客户端

前言 博客已经1年多没有更新了,这一年主要在实习并准备秋招和春招,目前已经上岸Unity客户端岗位,现将去年校招遇到的一些面试题的事后整理分享出来。答案是笔者自己整理的不一定保证准确,欢迎大家在评论区指出。 Unity客户端岗的…

LabVIEW将视觉生成器AI用作OPC服务器

LabVIEW将视觉生成器AI用作OPC服务器 介绍如何将视觉生成器AI配置为OPC服务器,并使用共享变量共享视觉生成器AI生成的结果。OPC是一系列标准规范,定义了来自不同制造商的控制设备之间的实时数据通信。OPC数据访问通信是基于客户端服务器的通信。 共享系…

设计模式 - 状态模式

目录 一. 前言 二. 实现 一. 前言 状态模式(State Pattern):它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换。当一个对象的内在状态改变时&#x…

数学基础

线性代数 关键词:线性方程组、矩阵、增广矩阵(系数矩阵、常数项矩阵)、阶梯型矩阵、行最简矩阵、最简形矩阵、向量系统、向量加法、向量空间、基本单位向量、线性相关、线性无关、Span张成空间、 向量乘法(点积、内积、外积、叉积…

全流程GMS地下水数值模拟及溶质(包含反应性溶质)运移模拟技术深度应用

地下水数值模拟软件GMS操作为主,在教学中强调模块化教学,分为前期数据收集与处理;三维地质结构建模;地下水流动模型构建;地下水溶质运移模型构建和反应性溶质运移构建5个模块;采用全流程模式将地下水数值模…

【Overload游戏引擎细节分析】从视图投影矩阵提取视锥体及overload对视锥体的封装

overoad代码中包含一段有意思的代码,可以从视图投影矩阵逆推出摄像机的视锥体,本文来分析一下原理 一、平面的方程 视锥体是用平面来表示的,所以先看看平面的数学表达。 平面方程可以由其法线N(A, B, C)和一个点Q(x0,…

开发一个npm组件包(2)

通过vueelement 原来后台 开发npm包的时候 会遇到一下几个问题 入口文件变化为package/index 需要再配置打包方法 package.json下 "scripts": {"package": "vue-cli-service build --target lib ./src/package/index.js --name managerpage --dest…

C# 搭建一个简单的WebApi项目23.10.10

一、创建Web API 1、创建一个新的web API项目 启动VS 2019,并在“开始页”选择“创建新项目”。或从“文件”菜单选择“新建”,然后选择“项目”。 选择ASP.NET Web应用程序(.NET Framework) 2.点击下一步,到这个页面时选择Web API。 3.选中…

智能制造优化,RFID生产线管理系统解决方案

一、背景介绍 随着全球经济的发展,传统制造业面临着越来越高的成本和低利润的挑战,为了提升企业的整体利润率,优化管理流程成为必要的手段之一,在传统的制造企业中,生产线通常采用单件流生产模式,但这种模…

『heqingchun-ubuntu系统下安装nvidia显卡驱动3种方法』

ubuntu系统下安装nvidia显卡驱动3种方法 一、安装依赖 1.更新 sudo apt updatesudo apt upgrade -y2.基础工具 sudo apt install -y build-essential python图形界面相关 sudo apt install -y lightdm注:在弹出对话框选择"lightdm" 二、第一种:使用…

【网络编程】Linux网络编程基础与实战第一弹——网络基础

这里写目录标题 网络基础什么是协议典型协议 分层模型OSI七层模型TCP/IP四层模型 网络应用程序设计模式优缺点具体体现: 网络基础 什么是协议 从应用的角度出发,协议可理解为“一组规则”,是数据传输和数据的解释的规则。 假设,…

如何使用CSS和JavaScript实施暗模式?

近年来,暗模式作为用户界面选项备受追捧。它提供了更暗的背景和更亮的文本,不仅可以减轻眼睛疲劳,还可以节省电池续航时间,尤其是在OLED屏幕上。 不妨了解如何结合使用CSS和JavaScript为网站和Web应用程序添加暗模式选项。 了解暗…

来自小魔推的八大优势应用场景,这些你都了解吗?

进入2023年,大多数在做短视频宣传的实体商家都在考虑新的推广方式,而近期商家宣传工具已经逐渐被小魔推所种草,今天就把小魔推的应用场景与八大优势,统一给大家讲清楚! 1:员工专属推广码,商家可…

3.3 数据定义

思维导图: 前言: **核心概念**: - 关系数据库支持**三级模式结构**:模式、外模式、内模式。 - 这些模式中包括了如:模式、表、视图和索引等基本对象。 - SQL的数据定义功能主要包括了模式定义、表定义、视图和索引的定…

基于深度学习的“语义通信编解码技术”框架分类

目录 基于神经网络的语义提取基于神经网络的语义信源编码基于神经网络的语义信源信道联合编码基于神经网络的语义编码与数字调制联合设计参考文献 基于神经网络的语义提取 在现有的信源编码前端加上一个语义提取神经网络[53] ,如图所示。语义提取神经网络的输入是原…