写在前面:蛋白质是生命活动的基石,其功能和序列之间的复杂关系长期以来吸引着科学家们的关注。尽管深度突变扫描等实验方法可以解析蛋白质突变的功能影响,但这些技术的应用范围局限于序列空间的一小部分。近年来,基于蛋白质语言模型(PLM)的计算方法如ESM2模型取得了一些突破。然而,这些模型在零样本预测中往往无法显著提高蛋白质活性。为了解决这一问题,作者提出了EVOLVEpro,一个结合PLM和回归模型的少样本主动学习框架,用于蛋白质的快速优化。
主要研究思路:
1、蛋白质语言模型(PLM):使用大规模蛋白质序列数据库(例如ESM2)进行训练,理解蛋白质序列的内在规律;
2、顶层回归模型:在实验数据的支持下,学习蛋白质突变与功能的关系,预测最佳的突变方向;
3、主动学习策略:每一轮筛选最可能成功的突变,验证实验结果后更新模型,逐步优化蛋白质功能;
整个流程通过“少量实验数据”+“AI预测”实现快速进化,极大减少了实验的复杂性和时间成本。
一、Google Colab 使用教程
使用 EVOLVEpro 改善蛋白质活性的分步指南(作者用 DMS 工作一部分的小型数据集上进行模拟),参考教程见下述连接;
https://colab.research.google.com/drive/1YCWvR73ItSsJn3P89yk_GY1g5GEJUlgy?usp=sharing
二、本地服务器安装教程
1、克隆项目代码
先把代码下载到本地:
git clone https://github.com/mat10d/EvolvePro.git
cd EvolvePro
2、创建并激活 EVOLVEpro 的核心环境
EVOLVEpro 需要一些依赖库,官方提供了一个环境配置文件来一次性安装它们。执行下面两步:
conda env create -f environment.yml # 创建环境,自动安装所有必需的依赖
conda activate evolvepro # 激活刚刚创建好的环境
这个环境包含了 EVOLVEpro 本身运行需要的核心库。
3、创建并激活蛋白语言模型(Protein Language Models)环境
EVOLVEpro 使用了多种蛋白质语言模型(PLM),这些模型依赖和核心程序不完全相同,官方建议把它们放到一个单独的环境中。这样可以避免库版本冲突,保证两部分能正常运行。
运行下面命令安装并配置这些模型:
sh setup_plm.sh # 执行安装蛋白语言模型的脚本
conda activate plm # 激活专门的蛋白语言模型环境
激活plm的环境检查是否安装的是GPU版本的pytorch,如果默认安装的是CPU版的话,可以重新安装:
import torch
print(torch.cuda.is_available())
# Flase, 如果输出为False,则执行一下两部安装GPU版本的pytorch
conda remove pytorch libtorch # 卸载当前的 CPU 版本 PyTorch
conda install pytorch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 pytorch-cuda=12.1 -c pytorch -c nvidia # 安装PyTorch 2.5.1(支持 CUDA 12.1)
这个环境里包括:
-
深度学习框架(如 PyTorch)
-
通过 pip 安装的蛋白语言模型(例如 ESM、ProtT5、UniRep、ankh、unirep)
-
只能通过 GitHub 克隆源码安装的模型(例如 proteinbert、efficient-evolution)
为什么要分两个环境?
将 EVOLVEpro 核心功能和蛋白语言模型放在不同的环境里,可以:
保持依赖整洁,不会相互干扰
避免包版本冲突,减少安装错误
方便针对不同部分独立升级或维护
三、本地服务器使用示例
该模块包含了用于生成和处理突变体数据的函数。在使用该模块前,请确保激活 evolvepro
环境:
conda activate evolvepro
✅ 1、实验突变(Experimental Mutation)处理流程
这是针对已知野生型序列进行系统性突变(如单点突变、组合突变)处理的工具。
📌 目标输出:
输出为一个 FASTA 文件,包含了与野生型(WT)序列相比的所有单点氨基酸突变。
步骤(1):定义一些关键变量
# 定义一些关键变量
wt_seq = "MNTINIAKNDFS"
output_path = "test"
步骤(2):生成野生型和单点突变体的 FASTA 文件
# 生成野生型 fasta 文件并创建单个氨基酸突变体 fasta 文件
from evolvepro.src.process import generate_wt, generate_single_aa_mutants
generate_wt(wt_seq, f'{output_path}/dataset_WT.fasta')
generate_single_aa_mutants(f'{output_path}/dataset_WT.fasta', f'{output_path}/dataset.fasta')
📖 说明:
-
'MNTINIAKNDFS'
:输入的野生型蛋白质序列(可根据自己蛋白进行修改) -
f'{output_path}/dataset_WT.fasta'
:指定保存的 FASTA 文件路径 -
generate_single_aa_mutants函数:输入为上一步生成的野生型 FASTA 文件 ,输出为包含所有单点突变体(每个位点替换为19种其他氨基酸)的 FASTA 文件
例如:
-
WT:MNTINIAKNDFS
-
单点突变:ANTINIAKNDFS(M1A)、TNTINIAKNDFS(M1T)……
注意:执行完上述函数之后会创建一个仅包含WT序列的 FASTA 文件dataset_WT.fasta 以及包含WT序列和单点饱和突变序列的FASTA文件dataset.fasta。
步骤(3):推荐一组随机初始突变体
# 随机推荐一组突变体进行检测
from evolvepro.src.process import suggest_initial_mutants
suggest_initial_mutants(f'{output_path}/dataset.fasta', 12, random_seed=1)
📖 说明:
-
f'{output_path}/dataset.fasta'
:输入为之前生成的所有单点突变体的 FASTA 文件 -
12
:随机选择推荐的突变体数量(可根据实际需求调整) -
random_seed:设置随机种子为 1
此函数适用于筛选出首轮需要实验验证的突变体(如用于训练初始机器学习模型)。
步骤(4):生成 n-突变组合(N-mutant combinations)
# 基于一个野生型蛋白序列和一个包含单点突变信息(和活性指标)的Excel文件,自动根据设定的活性阈值组合多个突变(如双突变、三突变等),生成对应的突变体序列,并保存为FASTA格式文件
from evolvepro.src.process import generate_n_mutant_combinations
generate_n_mutant_combinations(f'{output_path}/dataset_WT.fasta', f'{output_path}/beneficial_mutations.xlsx', 2, f'{output_path}/dataset_2rd.fasta', threshold=1.15)
📖 说明:
-
f'{output_path}/dataset_WT.fasta'
:WT序列的FASTA文件 -
'beneficial_mutations.xlsx'
:包含实验测得的有益突变位点和氨基酸变体的 Excel 文件 -
2:组合突变数,例如生成双突变组合
-
f'{output_path}/dataset_2rd.fasta'
:输出的 FASTA 文件 -
threshold=1.15
:突变位点得分阈值,低于该值的突变不予组合(可选)
该函数适用于从已有的有益突变中,组合出潜在更优的多突变体。
beneficial_mutations.xlsx
示例结构:
Variant | activity |
T12V | 1.086 |
N157K | 0.577 |
P26S | 1.024 |
R111Y | 0.782 |
... | ... |
✅ 2、使用适合的 PLM 模型提取所有变体的蛋白质语言模型嵌入
在使用该模块前,请确保激活 plm
环境:
conda activate plm
该脚本的一般运行方式如下:
python evolvepro/plm/[model_name]/extract.py [model_location] [fasta_file] [output_dir] [additional_options]
用途:
-
从输入的 FASTA 文件中读取蛋白质序列(如所有单点突变体)
-
使用指定的蛋白语言模型生成嵌入向量(embeddings)
-
输出为 CSV 格式(每一行为一个序列的 embedding)
适用于:
-
使用 GPU 的高性能计算环境(支持 SLURM 作业调度系统)
-
或本地命令行执行(适当修改参数即可)
示例如下:
python evolvepro/plm/esm/extract.py esm2_t48_15B_UR50D \output/dms/brenan.fasta \output/plm/esm/brenan \--toks_per_batch 512 \--include mean \--concatenate_dir output/plm/esm/
参数解释:
参数 | 说明 |
---|---|
esm2_t48_15B_UR50D | 使用的蛋白质语言模型名称(Facebook ESM2的15B模型) |
output/dms/brenan.fasta | 输入的 FASTA 文件,包含所有待分析的单点突变体 |
output/plm/esm/brenan | 每个突变体的嵌入结果将保存至该目录 |
--toks_per_batch 512 | 每个 batch 的 token 数(建议根据 GPU 显存调小以防 OOM) |
--include mean | 表示导出 "mean pooling" 的序列嵌入(常用于下游预测任务) |
--concatenate_dir output/plm/esm/ | 将所有单个突变体的嵌入合并为一个 CSV 文件保存在该目录 |
📁 输出说明
-
output/plm/esm/brenan/
:包含每条序列对应的嵌入.csv
文件 -
output/plm/esm/
中会汇总一个合并的embeddings.csv
文件,适用于后续训练/可视化
每个 CSV 文件内容(示例):
ID | emb_0 | emb_1 | ... | emb_1279 |
---|---|---|---|---|
M1A_mut_1 | 0.123 | -0.12 | ... | 0.061 |
✅ 3、应用 EVOLVEpro 模型优化蛋白质活性
(1)核心源文件位置:
evolvepro/src/evolve.py
主函数接口:
-
evolve_experimental
(用于单点突变优化) -
evolve_experimental_multi
(用于组合突变优化)
(2)在使用该模块前,请确保激活 evolvepro
环境:
conda activate evolvepro
(3)支持的突变类型:
类型 | 简介 |
---|---|
Single Mutant Evolution | 每一轮只考虑单个氨基酸替代突变的活性优化 |
Multi-Mutant Evolution | 在已有有益突变的基础上组合生成多突变体进行进一步优化 |
(4)📂 所需输入文件说明:
文件类型 | 用途说明 |
---|---|
FASTA 文件 | 包含野生型蛋白序列。用于确定突变相对于 WT 的参考序列 |
PLM 嵌入(.csv) | 蛋白语言模型生成的突变体嵌入特征文件,每个序列一行,维度一致 |
演化实验数据(.xlsx) | 每一轮突变体的测定活性数据,需包含序列与其对应的实验值(如表达量、活性等) |
(5)🔧 核心参数说明:
参数名 | 类型 | 说明 |
---|---|---|
protein_name | str | 蛋白名称,用于标识任务 |
round_name | str | 当前演化轮次名称,例如 Round3 |
embeddings_base_path | str | 嵌入文件存储路径 |
embeddings_file_name | str 或 list | 单轮使用一个 CSV,多轮组合突变可传入多个文件名(列表) |
round_base_path | str | 所有实验数据所在文件夹路径 |
round_file_names | list | 实验数据文件名列表,如 ['Round1.xlsx', 'Round2.xlsx'] |
rename_WT | bool | 是否在输出文件中将 WT 命名为统一格式 |
number_of_variants | int | 模型预测后选择的 top N 个突变体用于下一轮实验 |
output_dir | str | 输出目录,包含模型预测结果、可视化文件、推荐突变体等 |
(6)示例一:单突变优化
from evolvepro.src.evolve import evolve_experimentalprotein_name = 't7_pol'
embeddings_base_path = '/path/to/embeddings'
embeddings_file_name = 'embeddings_file.csv'
round_base_path = '/path/to/round/data'
wt_fasta_path = "/path/to/wildtype/fasta"
number_of_variants = 12
output_dir = '/path/to/output/'round_name = 'Round2'
round_file_names = ['T7_pol_Round1.xlsx', 'T7_pol_Round2.xlsx']
rename_WT = Trueevolve_experimental(protein_name,round_name,embeddings_base_path,embeddings_file_name,round_base_path,round_file_names,wt_fasta_path,rename_WT,number_of_variants,output_dir
)
📌 用途:
-
输入前两轮的实验数据
-
模型预测下一轮中最值得尝试的
12
个单点突变体 -
结果写入
output_dir
,用于实际实验
参考链接:
https://github.com/mat10d/EvolvePro
https://www.science.org/doi/10.1126/science.adr6006
AI蛋白质大模型代码实践:3万字长文读懂EvolvePro蛋白质进化框架与本地部署全流程