蛋白质功能注释与分析🔗
关键词: 蛋白质语言模型, ESM-2, ESM-3, 功能注释, 相互作用预测, 突变效应, Gene Ontology
难度: ⭐⭐⭐
预计阅读时间: 50 分钟
最后更新: 2026-04-08
本章导读🔗
知道蛋白质的结构只是第一步——理解蛋白质做什么、与谁互作以及突变如何影响功能才是生物学研究的核心问题。传统的实验手段(如定点突变 + 酶活测定、酵母双杂交、SPR 等)往往耗时耗力。近年来,以蛋白质语言模型(Protein Language Models, pLMs)为代表的 AI 方法在功能注释、相互作用预测和突变效应评估等领域取得了突破性进展。
读完本章,你将能够:
- 理解蛋白质语言模型(ESM-2, ESM-3, ProtTrans)的基本原理,并能用 Python 提取蛋白质序列表征(embedding)
- 使用 AI 工具对蛋白质进行功能注释(GO 注释、活性位点预测、信号肽/跨膜域预测)
- 选择合适的工具进行蛋白质-蛋白质、蛋白质-配体、蛋白质-核酸的相互作用预测
- 利用 AI 预测突变对蛋白质稳定性和功能的影响,指导定向进化实验
本章内容适合有分子生物学基础的研究生;Python 代码示例需要基本的编程能力,但我们会逐步解释每一步操作。
1. 蛋白质语言模型(Protein Language Models)🔗
1.1 核心思想:把氨基酸序列当"语言"🔗
自然语言处理(NLP)领域的一个核心发现是:通过在大规模文本语料上训练 Transformer 模型(如 GPT、BERT),模型能够学习到语言的深层语法和语义结构。蛋白质语言模型(pLM)将同样的思想迁移到蛋白质领域:
- 字母表:20 种标准氨基酸 → 相当于 NLP 中的"词汇表"
- 句子:一条蛋白质序列 → 相当于一段文本
- 语料库:UniRef/UniProt 中数十亿条蛋白质序列 → 相当于训练 GPT 的互联网文本
- 训练方式:遮蔽语言模型(Masked Language Modeling, MLM)—— 随机遮住序列中的部分氨基酸,让模型预测被遮住的氨基酸是什么
为什么这样有效? 要正确预测被遮住的氨基酸,模型必须理解:
- 局部约束:相邻氨基酸的偏好(如螺旋中的残基模式)
- 长程依赖:序列上远距离但空间上接近的残基共进化关系
- 进化保守性:功能关键位点的氨基酸高度保守
研究表明,经过充分训练后,pLM 学到的内部表征(embedding)中自动编码了蛋白质的结构和功能信息,即使训练过程中从未显式提供这些信息1。
1.2 ESM-2(Meta AI)🔗
ESM-2(Evolutionary Scale Modeling 2)是 Meta AI(原 Facebook AI Research)在 2022 年发布的蛋白质语言模型,目前是使用最广泛的 pLM 之一。
核心特点:
| 特性 | 说明 |
|---|---|
| 发布者 | Meta AI(Lin et al., 2023, Science) |
| 架构 | BERT 风格的 Transformer Encoder |
| 训练数据 | UniRef50(约 6500 万条序列) |
| 模型规模 | 8M / 35M / 150M / 650M / 3B / 15B 参数(多种规格可选) |
| 训练方式 | 遮蔽语言模型(MLM),15% 残基遮蔽率 |
| 输出 | 每个残基的 embedding 向量(维度随模型大小变化) |
模型规格选择指南:
| 模型 | 参数量 | Embedding 维度 | 显存需求 | 适用场景 |
|---|---|---|---|---|
esm2_t6_8M_UR50D | 8M | 320 | <1 GB | 快速原型验证、CPU 可跑 |
esm2_t12_35M_UR50D | 35M | 480 | ~2 GB | 轻量级下游任务 |
esm2_t30_150M_UR50D | 150M | 640 | ~4 GB | 平衡性能和资源 |
esm2_t33_650M_UR50D | 650M | 1280 | ~8 GB | 推荐:性能/资源最佳平衡 |
esm2_t36_3B_UR50D | 3B | 2560 | ~16 GB | 追求最佳效果 |
esm2_t48_15B_UR50D | 15B | 5120 | ~60 GB | 论文级结果,需要大显存 |
推荐: 对于大多数实验室场景,650M 模型是最佳选择——它在各类基准测试上的表现接近 3B 模型,但只需要一张消费级 GPU(如 RTX 3090/4090)。
ESM-2 Embedding 提取(Python 示例):
import torch
import esm
# ---------- 第一步:加载模型和分词器 ----------
# 首次运行会自动下载模型权重(650M 约 2.5 GB)
model, alphabet = esm.pretrained.esm2_t33_650M_UR50D()
batch_converter = alphabet.get_batch_converter()
model.eval() # 设为推理模式
# 如果有 GPU,将模型移到 GPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)
# ---------- 第二步:准备输入序列 ----------
# 格式:[(名称, 序列), ...]
data = [
("protein_1", "MKTVRQERLKSIVRILERSKEPVSGAQLAEELSVSRQVIVQDIAYLRSLGYNIVATPRGYVLAGG"),
("protein_2", "KALTARQQEVFDLIRDHISQTGMPPTRAEIAQRLGFRSPNAAEEHLKALARKGVIEIVSGASRGIRLLQEE"),
]
batch_labels, batch_strs, batch_tokens = batch_converter(data)
batch_tokens = batch_tokens.to(device)
# ---------- 第三步:提取 embedding ----------
with torch.no_grad():
results = model(batch_tokens, repr_layers=[33], return_contacts=True)
# 获取最后一层的 token embedding
# shape: (batch_size, seq_len + 2, 1280) 注意:+2 是因为有 <cls> 和 <eos> 特殊标记
token_embeddings = results["representations"][33]
# ---------- 第四步:生成序列级别的 embedding ----------
# 方法 1:取所有残基 embedding 的平均值(最常用)
# 注意要去掉首尾的特殊标记 <cls> 和 <eos>
sequence_embeddings = []
for i, (_, seq) in enumerate(data):
seq_len = len(seq)
# token_embeddings[i, 0] 是 <cls>,token_embeddings[i, seq_len+1] 是 <eos>
emb = token_embeddings[i, 1:seq_len + 1].mean(0) # shape: (1280,)
sequence_embeddings.append(emb)
print(f"{data[i][0]}: embedding shape = {emb.shape}")
# 方法 2:提取 <cls> token 的表示(类似 BERT 的 [CLS])
cls_embeddings = token_embeddings[:, 0, :] # shape: (batch_size, 1280)
# ---------- 第五步:获取接触图预测(附加功能)----------
# ESM-2 的注意力矩阵可以用来预测残基接触图
contact_map = results["contacts"][0].cpu().numpy() # shape: (seq_len, seq_len)
print(f"Contact map shape: {contact_map.shape}")
安装:
pip install fair-esm或pip install git+https://github.com/facebookresearch/esm.git
Embedding 的下游应用:
提取的 embedding 可以直接输入简单的机器学习模型(如线性分类器、MLP)来完成多种下游预测任务:
ESM-2 Embedding (1280 维向量)
↓
┌────────────────────────────────┐
│ • 亚细胞定位预测 │
│ • 二级结构预测(per-residue) │
│ • 功能注释(GO term 预测) │
│ • 蛋白质家族分类 │
│ • 溶解度预测 │
│ • 热稳定性预测 │
│ • 突变效应评分(zero-shot) │
└────────────────────────────────┘
1.3 ESM-3:多模态生成式蛋白质模型🔗
ESM-3 是 EvolutionaryScale(ESM 团队从 Meta 独立后成立的公司)在 2024 年发布的多模态生成式蛋白质模型,相比 ESM-2 有本质性的飞跃2。
ESM-2 vs ESM-3 核心区别:
| 特性 | ESM-2 | ESM-3 |
|---|---|---|
| 模态 | 仅序列 | 序列 + 结构 + 功能(GO/关键词) |
| 任务 | 编码器(提取表征) | 生成模型(可生成新蛋白质) |
| 架构 | BERT Encoder | 多模态 Transformer(类 GPT) |
| 训入力 | 氨基酸 token | 序列 token + 结构 token(VQ-VAE 编码)+ 功能 token |
| 参数量 | 最大 15B | 1.4B / 7B / 98B |
| 核心能力 | 提取 embedding | 条件生成:给定部分信息生成缺失模态 |
ESM-3 的多模态输入/输出:
输入(可以是任意组合):
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 序列 │ │ 结构 │ │ 功能描述 │
│ MKVLA... │ + │ 3D坐标 │ + │ GO terms │
└──────────┘ └──────────┘ └──────────┘
↓ ↓ ↓
┌──────────────────────────────────────┐
│ ESM-3 Transformer │
│ (多模态注意力机制 + 生成) │
└──────────────────────────────────────┘
↓ ↓ ↓
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 生成序列 │ │ 生成结构 │ │ 预测功能 │
└──────────┘ └──────────┘ └──────────┘
典型使用场景:
- 给定结构 → 生成序列(逆折叠,类似 ProteinMPNN)
- 给定功能描述 → 生成满足功能要求的蛋白质(功能条件设计)
- 给定部分序列 + 结构约束 → 补全设计(scaffold 设计)
- 序列 → 功能预测(功能注释)
ESM-3 API 使用示例(EvolutionaryScale Forge 平台):
# ESM-3 目前通过 EvolutionaryScale 的 Forge API 使用
# 开源版本为 esm3-open-small(1.4B 参数),可本地运行
# 完整版(98B)需要申请 API 访问
from esm.models.esm3 import ESM3
from esm.sdk.api import ESMProtein, GenerationConfig
# 加载开源小模型
model = ESM3.from_pretrained("esm3_sm_open_v1")
# 示例 1:从序列预测结构和功能
protein = ESMProtein(sequence="MKTVRQERLKSIVRILERSKEPVSGAQLAEELSVSRQVIVQDIAYLRSLGYNIVATPRGYVLAGG")
# 生成结构
structure_prediction = model.generate(
protein,
GenerationConfig(track="structure", num_steps=8)
)
# 示例 2:给定功能约束生成蛋白质
# 使用功能关键词作为条件
protein_prompt = ESMProtein(
function_annotations=["ATP binding", "kinase activity"]
)
generated_protein = model.generate(
protein_prompt,
GenerationConfig(track="sequence", num_steps=32)
)
print(f"生成的序列: {generated_protein.sequence}")
注意: ESM-3 的开源版本(1.4B)性能有限,98B 完整版需通过 EvolutionaryScale Forge 平台申请 API 使用(学术用途有免费额度)。访问:https://forge.evolutionaryscale.ai/
1.4 ProtTrans(T5-based 蛋白质语言模型)🔗
ProtTrans 是由德国慕尼黑工业大学 Rost 实验室和 Elnaggar 等人开发的另一系列蛋白质语言模型,基于 NLP 中的 T5(Text-to-Text Transfer Transformer)架构3。
ProtTrans 系列模型:
| 模型 | 基础架构 | 参数量 | 训练数据 |
|---|---|---|---|
| ProtBERT | BERT | 420M | UniRef100(约 2.1 亿序列) |
| ProtAlbert | ALBERT | 224M | UniRef100 |
| ProtXLNet | XLNet | 409M | UniRef100 |
| ProtT5-XL | T5 | 3B | BFD + UniRef50 |
| ProtT5-XXL | T5 | 11B | BFD + UniRef50 |
推荐: ProtT5-XL(3B)是该系列中使用最广泛的模型,在多项基准上表现与 ESM-2 650M 相当,有时在某些任务上互有优劣。
ProtT5 vs ESM-2 选择建议:
| 场景 | 推荐 | 原因 |
|---|---|---|
| 通用 embedding 提取 | ESM-2 650M | 社区更活跃,工具链更完善 |
| 二级结构/亚细胞定位预测 | ProtT5-XL | 在这些 benchmark 上表现略好 |
| 开发自定义下游模型 | 两者均可 | 可以都试试,选效果好的 |
| 显存有限(<8 GB) | ESM-2 650M | 同等显存下 ESM-2 性价比更高 |
| 突变效应评分(zero-shot) | ESM-2 / ESM-1v | ESM 的 MLM 概率更适合评估突变 |
使用 ProtT5 提取 Embedding(Hugging Face Transformers):
from transformers import T5Tokenizer, T5EncoderModel
import torch
# 加载模型(首次运行会下载约 11 GB)
tokenizer = T5Tokenizer.from_pretrained(
"Rostlab/prot_t5_xl_uniref50", do_lower_case=False
)
model = T5EncoderModel.from_pretrained("Rostlab/prot_t5_xl_uniref50")
model.eval()
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)
# 准备序列(注意:ProtT5 要求氨基酸之间用空格分隔)
sequence = "MKTVRQERLKSIVRILERSKEPVSGAQLAEELSVSRQVIVQDIAYLRSLGYNIVATPRGYVLAGG"
sequence_spaced = " ".join(list(sequence))
# Tokenize
inputs = tokenizer(sequence_spaced, return_tensors="pt", add_special_tokens=True)
inputs = {k: v.to(device) for k, v in inputs.items()}
# 提取 embedding
with torch.no_grad():
outputs = model(**inputs)
# outputs.last_hidden_state shape: (1, seq_len, 1024)
embeddings = outputs.last_hidden_state[0, :len(sequence), :] # 去掉 padding
seq_embedding = embeddings.mean(0) # 序列级别 embedding (1024,)
print(f"Per-residue embedding shape: {embeddings.shape}")
print(f"Sequence embedding shape: {seq_embedding.shape}")
1.5 Embedding 驱动的下游任务实战🔗
下面以一个完整示例展示如何利用 ESM-2 embedding 构建简单的蛋白质分类器:
import torch
import torch.nn as nn
import esm
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
# ---------- 步骤 1:批量提取 embedding ----------
def extract_esm2_embeddings(sequences, model_name="esm2_t33_650M_UR50D"):
"""批量提取 ESM-2 sequence-level embedding"""
model, alphabet = esm.pretrained.load_model_and_alphabet(model_name)
batch_converter = alphabet.get_batch_converter()
model.eval()
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)
embeddings = []
# 分批处理以避免显存溢出
batch_size = 8
for i in range(0, len(sequences), batch_size):
batch = [(f"seq_{j}", seq) for j, seq in enumerate(sequences[i:i+batch_size])]
_, _, batch_tokens = batch_converter(batch)
batch_tokens = batch_tokens.to(device)
with torch.no_grad():
results = model(batch_tokens, repr_layers=[33])
for j, (_, seq) in enumerate(batch):
seq_len = len(seq)
emb = results["representations"][33][j, 1:seq_len + 1].mean(0)
embeddings.append(emb.cpu().numpy())
return np.array(embeddings)
# ---------- 步骤 2:准备数据(以溶解度预测为例)----------
# 假设你有一组蛋白质序列和对应的溶解/不溶标签
sequences = ["MKVLA...", "AKTGR...", ...] # 替换为真实数据
labels = [1, 0, ...] # 1=可溶, 0=不溶
embeddings = extract_esm2_embeddings(sequences)
# ---------- 步骤 3:训练分类器 ----------
X_train, X_test, y_train, y_test = train_test_split(
embeddings, labels, test_size=0.2, random_state=42
)
clf = LogisticRegression(max_iter=1000)
clf.fit(X_train, y_train)
# ---------- 步骤 4:评估 ----------
y_pred = clf.predict(X_test)
print(classification_report(y_test, y_pred))
关键点: 蛋白质语言模型的真正威力在于——你不需要从头训练一个庞大的深度学习网络。只需提取 embedding 作为特征,再用简单的传统 ML 方法(逻辑回归、SVM、随机森林)就可以在很多任务上取得不错的效果。这被称为 "transfer learning"(迁移学习)。
2. 功能注释工具🔗
2.1 什么是蛋白质功能注释?🔗
蛋白质功能注释是指从序列和/或结构出发,预测蛋白质的生物学功能,包括:
- 分子功能(Molecular Function, MF):蛋白质在分子层面做什么?如 ATP 结合、激酶活性
- 生物过程(Biological Process, BP):参与哪些生物学过程?如细胞周期调控、信号转导
- 细胞组分(Cellular Component, CC):在细胞的哪个区室?如细胞核、线粒体内膜
- 结构域与家族:属于哪个蛋白质家族?含有什么功能结构域?
- 活性位点:催化残基、结合位点在哪里?
- 翻译后修饰(PTM)位点:磷酸化、糖基化等位点在哪里?
这些功能信息通常用 Gene Ontology(GO) 术语体系进行标准化描述。
2.2 Gene Ontology(GO)基础知识🔗
Gene Ontology 是生物信息学中最重要的受控词汇表之一,用树状(有向无环图, DAG)结构组织生物学概念。
GO 的三大本体:
| 本体 | 缩写 | 描述 | 示例 |
|---|---|---|---|
| 分子功能 | MF | 蛋白质的生化活性 | GO:0005524 (ATP binding) |
| 生物过程 | BP | 参与的生物学过程 | GO:0006468 (protein phosphorylation) |
| 细胞组分 | CC | 发挥功能的亚细胞位置 | GO:0005634 (nucleus) |
每个 GO term 都有唯一的编号(如 GO:0005524),term 之间存在层级关系(is-a, part-of 等),从宽泛到具体形成树状结构。
2.3 InterPro:整合式功能注释平台🔗
InterPro 是 EMBL-EBI 维护的蛋白质功能注释整合平台,将多个数据库的结果统一呈现4。
整合的数据库包括:
| 数据库 | 核心方法 | 擅长注释 |
|---|---|---|
| Pfam | 隐马尔可夫模型(HMM) | 蛋白质家族/结构域 |
| PROSITE | 正则表达式 + Profile | 功能位点/基序 |
| SMART | HMM | 可移动模块结构域 |
| CDD(NCBI) | PSI-BLAST + HMM | 保守结构域 |
| Gene3D | CATH-HMM | 结构域(基于结构分类) |
| PANTHER | 系统发育 HMM | 蛋白质家族 + 功能分类 |
| SUPERFAMILY | SCOP-HMM | 超家族级结构域 |
在线使用(InterProScan):
- 访问:https://www.ebi.ac.uk/interpro/search/sequence/
- 粘贴蛋白质序列(FASTA 格式)
- 点击 "Search" → 等待数分钟
- 查看结果:结构域注释、GO term、功能位点一目了然
命令行批量分析(InterProScan 本地安装):
# 下载 InterProScan(约 13 GB)
wget https://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.71-102.0/interproscan-5.71-102.0-64-bit.tar.gz
tar -xzf interproscan-5.71-102.0-64-bit.tar.gz
cd interproscan-5.71-102.0
# 运行 InterProScan
./interproscan.sh \
-i your_proteins.fasta \ # 输入 FASTA 文件
-o output.tsv \ # 输出文件
-f tsv,gff3 \ # 输出格式(TSV + GFF3)
-goterms \ # 包含 GO 注释
-pa \ # 包含 pathway 注释
-cpu 8 # 使用 8 个 CPU 核心
输出结果解读(TSV 格式):
# 蛋白质ID MD5 序列长度 数据库 匹配ID 描述 起始 终止 E-value 状态 日期 IPR编号 IPR描述 GO注释
P04637 abc123 393 Pfam PF00870 P53 94 293 1.2e-80 T 2024-01-01 IPR011615 p53 DNA-binding domain GO:0003700
2.4 DeepFRI:基于图神经网络的功能预测🔗
DeepFRI(Deep Functional Residue Identification)是一个基于图卷积网络(GCN)和语言模型特征的蛋白质功能预测工具5。它的独特之处在于同时利用序列(语言模型 embedding)和结构(接触图)信息来预测功能。
核心方法:
蛋白质序列 → [LSTM 语言模型] → 残基级 embedding
↓
蛋白质结构 → [接触图: Cα 距离 < 10Å] → 图结构 + 节点特征
↓
[图卷积网络 (GCN)]
↓
GO term 预测 + 置信度
↓
功能关键残基标注(GradCAM)
特色功能:
- 残基级功能归因:使用 GradCAM(梯度加权类激活映射)标注哪些残基对预测的功能最重要
- 仅需序列也能工作:当没有结构时,可以仅使用序列模式(精度稍低)
本地安装和使用:
# 安装
git clone https://github.com/flatironinstitute/DeepFRI.git
cd DeepFRI
pip install .
# 下载预训练模型权重
wget https://users.flatironinstitute.org/~gligorijevic/DeepFRI/trained_models.tar.gz
tar -xzf trained_models.tar.gz
from deepfrier import Predictor
# 初始化预测器(加载预训练模型)
predictor = Predictor.from_pretrained(
gcn_model="trained_models/DeepFRI-MERGED_GraphConv_gcd_512-512-512_fcd_1024_ca_10.0_ext_desc_MF.hdf5"
)
# 方式 1:从 PDB 文件预测(利用结构信息)
predictions = predictor.predict_from_pdb("your_protein.pdb")
for pred in predictions:
print(f"GO:{pred.go_id} {pred.go_name} score={pred.score:.3f}")
# 方式 2:仅从序列预测
predictions = predictor.predict_from_sequence("MKTVRQERLK...")
2.5 ProteInfer:基于深度学习的 GO 注释预测🔗
ProteInfer 是 Google Research 开发的蛋白质功能预测工具,使用扩张卷积神经网络(Dilated CNN) 直接从氨基酸序列预测 GO term 和 EC 编号(酶分类号)6。
优势:
- 不需要 MSA 或结构信息,仅需序列
- 推理速度快(单序列 < 1 秒)
- 同时预测 GO term 和 EC 编号
在线使用: https://google-research.github.io/proteinfer/
2.6 信号肽与跨膜区预测🔗
对于膜蛋白和分泌蛋白研究,准确预测信号肽(Signal Peptide)和跨膜区(Transmembrane Domain)至关重要。
主流工具比较:
| 工具 | 预测内容 | 方法 | 准确率 | 使用方式 |
|---|---|---|---|---|
| SignalP 6.0 | 信号肽(5 种类型) | 蛋白质语言模型 + CRF | ~95%(TP rate) | 在线 / Docker |
| DeepTMHMM | 跨膜拓扑结构 | 蛋白质语言模型 + CRF | ~90% | 在线 / pip |
| TMHMM 2.0 | 跨膜区 | 隐马尔可夫模型 | ~85% | 在线 / 本地 |
| Phobius | 信号肽 + 跨膜区 | 联合 HMM | ~88% | 在线 |
SignalP 6.0 使用示例:
# 在线使用:https://services.healthtech.dtu.dk/services/SignalP-6.0/
# Docker 本地使用(需要先申请 license)
docker run -v $(pwd):/data signalp6 \
--fastafile /data/proteins.fasta \
--output_dir /data/results \
--organism eukarya \
--format txt
DeepTMHMM 命令行使用:
2.7 活性位点预测🔗
活性位点预测(Active Site Prediction)旨在识别蛋白质中直接参与催化反应或底物结合的关键残基。
常用工具:
| 工具 | 方法 | 输入 | 特点 |
|---|---|---|---|
| P2Rank | 机器学习(随机森林) | 结构(PDB) | 预测配体结合口袋,速度快 |
| CavityPlus | 几何 + 能量 | 结构 | 综合多种打分策略 |
| DeepSite | 3D-CNN | 结构 | 深度学习预测结合位点 |
| ConSurf | 进化保守性分析 | 序列 + 结构 | 保守残基往往是功能关键位点 |
P2Rank 使用示例(命令行):
# 下载 P2Rank
wget https://github.com/rdk/p2rank/releases/download/2.4.2/p2rank_2.4.2.tar.gz
tar -xzf p2rank_2.4.2.tar.gz
# 预测单个结构
./p2rank_2.4.2/prank predict -f your_protein.pdb -o output_dir/
# 批量预测
ls *.pdb > pdb_list.txt
./p2rank_2.4.2/prank predict -f pdb_list.txt -o batch_output/
2.8 功能注释工具综合对比🔗
| 工具 | 输入 | 预测内容 | AI 方法 | 适用场景 |
|---|---|---|---|---|
| InterPro | 序列 | 结构域、GO、位点 | HMM ensemble | 全面注释首选 |
| DeepFRI | 序列/结构 | GO term + 关键残基 | GCN + 语言模型 | 需要残基级归因 |
| ProteInfer | 序列 | GO + EC number | Dilated CNN | 快速注释、酶分类 |
| SignalP 6.0 | 序列 | 信号肽 | pLM + CRF | 分泌蛋白研究 |
| DeepTMHMM | 序列 | 跨膜拓扑 | pLM + CRF | 膜蛋白研究 |
| P2Rank | 结构 | 结合口袋 | 随机森林 | 药物设计先导 |
实用建议: 对于一个新的蛋白质,推荐的注释工作流为: 1. 先跑 InterPro → 获得结构域和家族信息 2. 跑 SignalP + DeepTMHMM → 判断是否为膜蛋白/分泌蛋白 3. 跑 DeepFRI / ProteInfer → 获得 GO 功能预测 4. 如果有结构信息,再跑 P2Rank → 预测结合口袋
3. 蛋白质相互作用预测🔗
3.1 概述🔗
蛋白质很少"单打独斗"——它们通过与其他蛋白质、小分子配体、DNA/RNA 的相互作用来行使功能。预测这些相互作用的模式对于理解信号通路、药物设计和合成生物学至关重要。
根据互作对象的不同,可以分为三大类:
| 互作类型 | 核心问题 | 典型应用 |
|---|---|---|
| 蛋白质-蛋白质(PPI) | 复合物结构、界面残基 | 信号通路研究、抗体工程 |
| 蛋白质-小分子(PLI) | 结合位姿、亲和力 | 药物发现、虚拟筛选 |
| 蛋白质-核酸(PNA) | 识别模式、结合位点 | 转录因子研究、CRISPR 工程 |
3.2 蛋白质-蛋白质对接(Protein-Protein Docking)🔗
蛋白质-蛋白质对接旨在预测两个或多个蛋白质形成复合物时的三维结构。
主流工具对比:
| 工具 | 方法类型 | 是否需要结构 | 特点 | 适用场景 |
|---|---|---|---|---|
| AF2-Multimer | AI 端到端预测 | 仅需序列 | 精度最高,整体预测 | 首选方法 |
| HDOCK | 模板 + ab initio 对接 | 需要结构 | 支持蛋白-蛋白/蛋白-核酸 | HDOCK 服务器方便 |
| ClusPro | FFT 刚性对接 + 聚类 | 需要结构 | 历史悠久,benchmark 表现稳定 | 标准对比方法 |
| HADDOCK | 信息驱动柔性对接 | 需要结构 + 实验约束 | 可整合实验数据(NMR, 交联等) | 有界面残基信息时 |
| AlphaFold3 | AI 端到端预测 | 仅需序列 | 支持全类型复合物 | 前沿通用方法 |
AF2-Multimer(推荐首选)🔗
AF2-Multimer 是 AlphaFold2 的多聚体版本,可以直接从多条蛋白质序列预测复合物结构7。
通过 ColabFold 使用 AF2-Multimer:
- 打开 ColabFold Notebook(详见第 1 章)
- 在序列输入框中用
:分隔不同链的序列: - 设置
model_type = "alphafold2_multimer_v3" - 运行预测
解读结果的关键指标:
- ipTM(interface predicted TM-score):界面预测质量
- ipTM > 0.8:界面高度可信
- ipTM 0.6-0.8:可能正确,需实验验证
- ipTM < 0.6:不可靠
- PAE 热图:查看链间区域的 PAE 值,低值说明链间相对位置可靠
⚠️ 重要提醒: AF2-Multimer 并非一个通用的 PPI 预测器——它预测的是如果两个蛋白质互作,复合物结构是什么样的,而不是两个蛋白质是否互作。低 ipTM 可能意味着预测不可靠,也可能意味着这两个蛋白质确实不互作。需要结合其他实验证据判断。
HDOCK🔗
HDOCK 是中国科学技术大学黄胜友课题组开发的蛋白质对接服务器,支持蛋白质-蛋白质和蛋白质-核酸对接。
在线使用: http://hdock.phys.hust.edu.cn/
使用流程:
1. 上传受体结构(PDB 文件或 PDB ID)
2. 上传配体结构(PDB 文件或 PDB ID)
3. (可选)提供界面残基约束信息
4. 提交 → 通常 10-30 分钟出结果
5. 下载对接模型(按打分排序的 Top 10 模型)
ClusPro🔗
ClusPro 是波士顿大学开发的自动化蛋白质对接服务器,使用 FFT 刚性对接后聚类分析。
在线使用: https://cluspro.org/
特点是对接后按照不同能量函数(balanced, electrostatic-favored, hydrophobic-favored, VdW+Elec)分别给出结果,用户可以根据已知的界面性质选择最合理的打分模式。
3.3 蛋白质-配体结合预测(Protein-Ligand Interaction)🔗
蛋白质与小分子配体的结合预测是药物发现最核心的计算问题之一。
主流工具对比:
| 工具 | 方法 | 特点 | 速度 | 适用场景 |
|---|---|---|---|---|
| DiffDock | 扩散生成模型 | 无需指定结合位点 | 中 (~1 min/对) | 盲对接首选 |
| UniMol | Transformer + 3D 表征 | 结合位姿 + 亲和力 | 快 | 大规模虚拟筛选 |
| AutoDock-GPU | 传统遗传算法(GPU 加速) | 经典可靠 | 中 | 标准分子对接 |
| AutoDock Vina | 经验打分函数 | 速度快,易用 | 快 | 最广泛使用的对接工具 |
| Glide(Schrödinger) | 分层过滤 + 打分 | 业界标准 | 中 | 商业药物研发 |
| GNINA | CNN 重打分 | 传统对接 + AI 打分 | 中 | 提高对接准确率 |
DiffDock🔗
DiffDock 是 MIT 开发的基于扩散生成模型(Diffusion Model) 的蛋白质-配体对接工具8。与传统对接工具不同,DiffDock 不需要事先指定结合口袋——它直接在整个蛋白质表面搜索最优结合位置。
核心原理:
蛋白质结构 + 配体分子
↓
[扩散过程] 在蛋白质表面随机放置配体
↓
[逆扩散(去噪)] 逐步将配体移向最优结合位姿
↓
[置信度模型] 对多个结果打分排序
↓
Top-K 预测的结合位姿 + 置信度
使用示例:
# 安装
git clone https://github.com/gcorso/DiffDock.git
cd DiffDock
pip install -e .
# 准备输入
# protein.pdb: 蛋白质结构
# ligand.sdf: 配体分子文件
# 运行对接
python -m inference \
--protein_path protein.pdb \
--ligand ligand.sdf \
--out_dir results/ \
--inference_steps 20 \
--samples_per_complex 40 \
--batch_size 10
UniMol🔗
UniMol 是微软亚洲研究院和深势科技联合开发的 3D 分子表征学习框架,支持蛋白质-配体结合预测和分子性质预测9。
核心优势:
- 统一的 3D 分子表征学习框架
- 预训练模型可以迁移到多种下游任务
- 支持大规模虚拟筛选(秒级推理)
# UniMol 使用示例(通过 uni-mol 包)
from unimol_tools import MolTrain, MolPredict
# 训练亲和力预测模型(需要提供训练数据)
clf = MolTrain(task='regression', data_type='molecule')
clf.fit(data='training_data.csv')
# 预测
pred = MolPredict(load_model='./exp')
result = pred.predict(data='test_data.csv')
AutoDock Vina(经典方法对比)🔗
AutoDock Vina 虽然不是 AI 方法,但仍然是使用最广泛的分子对接工具,适合作为基准比较:
# 安装
pip install vina
# 使用 Python API
from vina import Vina
v = Vina(sf_name='vina')
v.set_receptor('protein.pdbqt')
v.set_ligand_from_file('ligand.pdbqt')
# 设定搜索空间(需要指定结合口袋中心和大小)
v.compute_vina_maps(center=[10.0, 20.0, 30.0], box_size=[25, 25, 25])
# 对接
v.dock(exhaustiveness=32, n_poses=10)
v.write_poses('docking_results.pdbqt', n_poses=5)
print(v.score()) # 打分(kcal/mol,越负越好)
3.4 蛋白质-核酸相互作用预测🔗
蛋白质与 DNA/RNA 的相互作用在基因调控、表观遗传和 RNA 生物学中至关重要。
主流方法:
| 工具/方法 | 预测内容 | 特点 |
|---|---|---|
| AlphaFold3 | 蛋白质-DNA/RNA 复合物结构 | 端到端预测,最全面 |
| HDOCK | 蛋白质-核酸对接 | 模板 + ab initio |
| RNAcomposer + 对接 | RNA 结构建模 + 对接 | 分步流程 |
| DeepBind | DNA/RNA 结合序列偏好 | 预测结合基序 |
| RBPsuite | RNA 结合蛋白预测 | 序列模式识别 |
AlphaFold3 预测蛋白质-核酸复合物🔗
AlphaFold3(AF3)的最大突破之一就是支持蛋白质与 DNA/RNA 的复合物预测10。
使用 AlphaFold Server(AF3 在线版):
- 访问 https://alphafoldserver.com/
- 登录 Google 账号
- 添加链:
- Chain A: Protein → 粘贴蛋白质序列
- Chain B: DNA → 输入 DNA 序列(如
ATCGATCG) - 点击 "Predict" → 等待结果(通常 30 分钟至数小时)
- 下载结构文件和置信度指标
局限性: AlphaFold Server 每天限制 10 次提交,且不支持超过 5000 个残基的输入。对于批量预测,需要本地部署 AF3。
3.5 相互作用预测方法选择指南🔗
你想预测什么?
│
┌─────────────┼─────────────┐
↓ ↓ ↓
蛋白质-蛋白质 蛋白质-小分子 蛋白质-核酸
│ │ │
↓ ↓ ↓
有序列即可? 是否需要盲对接? ──→ AlphaFold3(首选)
│ │ ↓
↓ ↓ 有结构 → HDOCK
是 → AF2-Multimer 是 → DiffDock
│ │
↓ ↓
有结构 → 否 → AutoDock Vina
HDOCK/ClusPro / UniMol
│
有界面约束 →
HADDOCK
实用建议汇总:
| 场景 | 推荐方法 | 注意事项 |
|---|---|---|
| 预测两个蛋白质的复合物结构 | AF2-Multimer(via ColabFold) | 检查 ipTM 和链间 PAE |
| 确认两个蛋白质是否互作 | 实验验证不可替代(Co-IP, PLA 等) | AI 预测可提供候选 |
| 药物-靶点对接(已知口袋) | AutoDock Vina / Glide | 性价比最高 |
| 药物-靶点对接(未知口袋) | DiffDock | 无需指定 binding site |
| 大规模虚拟筛选(>100 万分子) | UniMol | 速度优先 |
| 蛋白-DNA 复合物 | AlphaFold3 | 注意提交限额 |
| 蛋白-RNA 复合物 | AlphaFold3 | 同上 |
4. 突变效应预测🔗
4.1 为什么需要突变效应预测?🔗
在蛋白质工程和医学遗传学中,预测单点突变或多点突变对蛋白质的影响是最常见的需求之一:
- 蛋白质工程:我改了某个氨基酸,蛋白质还稳定吗?活性会变化吗?
- 临床遗传学:患者携带某个错义突变,这个突变是致病的还是良性的?
- 定向进化:我应该让哪些位点突变,才最有可能提升想要的性质?
突变效应预测可以大致分为两大类:
| 预测类型 | 核心问题 | 输出 | 典型工具 |
|---|---|---|---|
| 稳定性预测 | 突变如何影响热力学稳定性? | ΔΔG (kcal/mol) | ThermoMPNN, RaSP, Rosetta |
| 致病性预测 | 突变是否导致疾病? | 致病概率 0-1 | AlphaMissense, EVE, CADD |
| 适应度预测 | 突变如何影响蛋白质功能/适应度? | fitness score | ESM-1v, EVE, ProteinGym |
4.2 稳定性预测(ΔΔG 预测)🔗
蛋白质热力学稳定性通常用ΔΔG(折叠自由能变化 = ΔG_mutant - ΔG_wildtype)来衡量:
- ΔΔG > 0:突变降低稳定性(去稳定化)
- ΔΔG < 0:突变增加稳定性(稳定化)
- |ΔΔG| < 0.5 kcal/mol:影响较小
ThermoMPNN🔗
ThermoMPNN 是基于 ProteinMPNN(蛋白质设计语言模型)微调的稳定性预测工具,由 Dauparas 课题组开发11。
核心优势:
- 利用 ProteinMPNN 的结构化表征能力
- 在 mega-scale 稳定性数据集上训练
- 预测速度快(GPU 上数秒一个突变)
- 相关系数(Spearman ρ)达到 ~0.5-0.6(领域内领先水平)
# ThermoMPNN 使用示例
# 安装: pip install thermompnn (或从 GitHub 克隆)
from thermompnn import ThermoMPNN
model = ThermoMPNN.from_pretrained()
# 预测单点突变的 ΔΔG
result = model.predict(
pdb_path="wild_type.pdb",
chain_id="A",
mutations=["A42G", "L108W", "V55I"] # 格式:原始残基+位置+突变残基
)
for mut, ddg in zip(result.mutations, result.ddg_values):
stability = "稳定化" if ddg < 0 else "去稳定化"
print(f"{mut}: ΔΔG = {ddg:.2f} kcal/mol ({stability})")
RaSP(Rapid Stability Prediction)🔗
RaSP 是哥本哈根大学 Lindorff-Larsen 课题组开发的快速稳定性预测工具,使用 3D CNN 直接从蛋白质结构预测突变的 ΔΔG12。
# RaSP 使用
# GitHub: https://github.com/KULL-Centre/_2022_rasp
from rasp import predict_stability
# 对整个蛋白质的每个位置的所有可能突变进行扫描
results = predict_stability(
pdb_file="protein.pdb",
chain="A"
)
# 输出: DataFrame,每行一个突变,列包含位置、野生型、突变型、预测 ΔΔG
Rosetta ddg_monomer(物理方法基准)🔗
Rosetta 是经典的蛋白质建模软件套件,其 ddg_monomer 协议是稳定性预测的传统基准方法:
# Rosetta ddg_monomer 使用(需要先安装 Rosetta)
# 创建突变文件 (resfile 格式)
echo "total 1
1
A 42 G" > mutations.txt
# 运行 ddg_monomer
ddg_monomer.default.linuxgccrelease \
-in:file:s wild_type.pdb \
-ddg::mut_file mutations.txt \
-ddg:weight_file soft_rep_design \
-ddg::iterations 50 \
-ddg::dump_pdbs false
稳定性预测工具综合对比:
| 工具 | 方法 | 输入 | 速度 | Spearman ρ (近似) | 优缺点 |
|---|---|---|---|---|---|
| ThermoMPNN | GNN(ProteinMPNN 微调) | 结构 | 快 | ~0.55 | 最佳性能/速度平衡 |
| RaSP | 3D-CNN | 结构 | 快 | ~0.50 | 可全蛋白扫描 |
| Rosetta ddg | 物理力场 | 结构 | 慢 | ~0.45 | 可解释、传统基准 |
| FoldX | 经验力场 | 结构 | 中 | ~0.40 | 学术免费,广泛使用 |
| DDGun3D | 结构 + 序列 | 结构/序列 | 快 | ~0.45 | 无需 GPU |
实用建议: 对于稳定性预测,建议同时运行多个工具并取共识结果。如果多个工具都预测某个突变为强去稳定化(ΔΔG > 2 kcal/mol),则结论较为可靠。对于关键突变,实验验证(如差示扫描荧光法 DSF / 圆二色谱 CD)仍然不可替代。
4.3 致病性预测🔗
AlphaMissense(Google DeepMind)🔗
AlphaMissense 是 Google DeepMind 在 2023 年发表于 Science 的突变致病性预测工具,对人类蛋白质组中所有可能的 ~7100 万个错义突变进行了预分类13。
核心方法:
- 基于 AlphaFold2 的结构模块进行微调
- 训练数据包括已知致病/良性变体(ClinVar)和灵长类常见变异
- 输出每个突变的致病性概率(0-1),并分类为:
- Likely pathogenic(可能致病):score > 0.564
- Ambiguous(模糊):0.340-0.564
- Likely benign(可能良性):score < 0.340
使用预计算结果(推荐):
AlphaMissense 已经对人类蛋白质组的所有可能错义突变进行了预计算。对于人源蛋白质,直接查表即可。
import pandas as pd
# 下载预计算数据
# 来源:https://zenodo.org/records/8208688
# 文件: AlphaMissense_aa_substitutions.tsv.gz (~4.2 GB)
# 加载数据
df = pd.read_csv(
"AlphaMissense_aa_substitutions.tsv.gz",
sep='\t',
comment='#',
compression='gzip'
)
# 查找特定蛋白质(以 BRCA1 为例,UniProt: P38398)
brca1 = df[df['uniprot_id'] == 'P38398']
# 查找特定突变
mutation = brca1[
(brca1['protein_variant'] == 'C61G') # BRCA1 的已知致病突变
]
print(mutation[['protein_variant', 'am_pathogenicity', 'am_class']])
# 输出类似: C61G 0.9876 likely_pathogenic
# 统计整个蛋白质的致病突变分布
print(brca1['am_class'].value_counts())
整蛋白质突变景观可视化:
import matplotlib.pyplot as plt
import numpy as np
# 构建突变热图
protein_id = "P38398" # BRCA1
protein_data = df[df['uniprot_id'] == protein_id].copy()
# 解析突变信息
protein_data['position'] = protein_data['protein_variant'].str.extract(r'(\d+)').astype(int)
protein_data['ref_aa'] = protein_data['protein_variant'].str[0]
protein_data['alt_aa'] = protein_data['protein_variant'].str[-1]
# 创建热图矩阵
amino_acids = list("ACDEFGHIKLMNPQRSTVWY")
positions = sorted(protein_data['position'].unique())
heatmap = np.full((len(amino_acids), len(positions)), np.nan)
for _, row in protein_data.iterrows():
if row['alt_aa'] in amino_acids:
aa_idx = amino_acids.index(row['alt_aa'])
pos_idx = positions.index(row['position'])
heatmap[aa_idx, pos_idx] = row['am_pathogenicity']
# 可视化(截取前 100 个位点)
fig, ax = plt.subplots(figsize=(20, 6))
im = ax.imshow(heatmap[:, :100], aspect='auto', cmap='RdYlGn_r', vmin=0, vmax=1)
ax.set_yticks(range(len(amino_acids)))
ax.set_yticklabels(amino_acids)
ax.set_xlabel('Residue Position')
ax.set_ylabel('Mutant Amino Acid')
ax.set_title(f'AlphaMissense Pathogenicity Landscape ({protein_id})')
plt.colorbar(im, label='Pathogenicity Score')
plt.tight_layout()
plt.savefig("alphamissense_landscape.png", dpi=150)
plt.show()
EVE(Evolutionary model of Variant Effect)🔗
EVE 是哈佛大学 Marks 课题组开发的基于进化信息的变体效应预测模型14。
核心方法:
- 使用 VAE(变分自编码器)学习蛋白质家族的进化约束
- 训练数据仅需 MSA(不依赖任何标注数据)
- 通过计算突变的 ELBO(Evidence Lower Bound)分数来评估突变效应
优势: 完全无监督,不需要已知的致病/良性标签,因此不存在标签偏差问题。
预计算结果: https://evemodel.org/
ESM-1v:零样本(Zero-shot)突变效应预测🔗
ESM-1v 是 Meta AI 专门为零样本变体效应预测训练的蛋白质语言模型15。其核心思想极为优雅:
原理: - 蛋白质语言模型在训练时学会了"哪些氨基酸在哪些位置是合理的" - 如果一个突变将某个位置的氨基酸从模型认为"合理"的改成"不合理"的,说明这个突变可能有害 - 具体来说,用 遮蔽边际概率(masked marginal probability) 来评分:
- 其中 \(P(x | \text{context})\) 是模型预测在该位置出现某个氨基酸的概率
- 分数越负,说明突变越"意外",越可能有害
Python 实现(使用 ESM-2 做 zero-shot 预测):
import torch
import esm
import numpy as np
def zero_shot_mutation_scoring(sequence, mutations, model_name="esm2_t33_650M_UR50D"):
"""
使用 ESM-2 的遮蔽边际概率对突变进行零样本评分
参数:
sequence: 野生型序列 (str)
mutations: 突变列表,格式如 ["A42G", "L108W"] (原始残基+位置+突变残基)
model_name: ESM 模型名称
返回:
每个突变的 log-likelihood ratio 分数(越负 = 越有害)
"""
model, alphabet = esm.pretrained.load_model_and_alphabet(model_name)
batch_converter = alphabet.get_batch_converter()
model.eval()
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)
scores = {}
for mut in mutations:
wt_aa = mut[0]
pos = int(mut[1:-1]) - 1 # 转换为 0-indexed
mut_aa = mut[-1]
# 验证野生型氨基酸
assert sequence[pos] == wt_aa, f"位置 {pos+1} 的氨基酸应为 {wt_aa},实际为 {sequence[pos]}"
# 构建遮蔽序列(将目标位置替换为 <mask>)
masked_seq = list(sequence)
masked_seq[pos] = "<mask>"
masked_seq_str = "".join(masked_seq).replace("<mask>", "<mask>")
# 需要用其他方式处理 mask token
# 实际上,ESM 用 token index 来处理
data = [("protein", sequence)]
_, _, batch_tokens = batch_converter(data)
batch_tokens = batch_tokens.to(device)
# 遮蔽目标位置
masked_tokens = batch_tokens.clone()
masked_tokens[0, pos + 1] = alphabet.mask_idx # +1 因为有 <cls>
with torch.no_grad():
logits = model(masked_tokens)["logits"]
# 获取该位置的 log 概率
log_probs = torch.log_softmax(logits[0, pos + 1], dim=-1)
wt_prob = log_probs[alphabet.get_idx(wt_aa)].item()
mut_prob = log_probs[alphabet.get_idx(mut_aa)].item()
score = mut_prob - wt_prob # log-likelihood ratio
scores[mut] = score
effect = "可能有害" if score < -2 else ("可能中性" if score > -1 else "效应不确定")
print(f"{mut}: Δscore = {score:.3f} ({effect})")
return scores
# 使用示例
sequence = "MKTVRQERLKSIVRILERSKEPVSGAQLAEELSVSRQVIVQDIAYLRSLGYNIVATPRGYVLAGG"
mutations = ["K2A", "R7A", "V5D"] # 测试几个突变
scores = zero_shot_mutation_scoring(sequence, mutations)
致病性预测工具综合对比:
| 工具 | 方法 | 输入 | 是否需要标注数据 | 适用物种 | AUC (近似) |
|---|---|---|---|---|---|
| AlphaMissense | AF2 结构模块微调 | 序列 | 是(弱监督) | 人类(预计算) | ~0.94 |
| EVE | VAE + MSA | MSA | 否(无监督) | 任意物种 | ~0.90 |
| ESM-1v | pLM zero-shot | 序列 | 否 | 任意物种 | ~0.86 |
| CADD | 多特征集成 | 基因组坐标 | 是 | 人类 | ~0.88 |
| PolyPhen-2 | 序列 + 结构特征 | 序列 | 是 | 主要人类 | ~0.82 |
| SIFT | 序列保守性 | MSA | 否 | 任意物种 | ~0.78 |
4.4 定向进化中的 AI 指导🔗
定向进化(Directed Evolution)是蛋白质工程的核心策略——通过反复的"突变-筛选"循环来优化蛋白质性质。AI 可以在以下环节提供帮助:
AI 辅助定向进化的工作流:
┌──────────────────────────────────────┐
│ AI 辅助定向进化流程 │
└──────────────────────────────────────┘
│
┌─────────────────┼─────────────────┐
↓ ↓ ↓
[选择突变位点] [评估突变库] [数据驱动优化]
│ │ │
↓ ↓ ↓
• ConSurf 保守性 • ESM-1v 评分 • 用实验数据训练
• pLDDT 柔性区 • EVE 适应度预测 监督模型
• 活性口袋残基 • 稳定性筛选 • 贝叶斯优化选择
下一轮突变
实用策略 1:用 ESM-2 筛选突变库
当你有一个包含数千个突变体的文库时,可以用 ESM-2 的 log-likelihood 对所有突变体进行预筛选,优先实验验证评分最高的突变:
import torch
import esm
import pandas as pd
def score_mutation_library(wt_sequence, mutation_list):
"""用 ESM-2 对突变库打分,返回排序后的突变列表"""
model, alphabet = esm.pretrained.esm2_t33_650M_UR50D()
batch_converter = alphabet.get_batch_converter()
model.eval()
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)
# 先计算野生型各位置的 log 概率
data = [("wt", wt_sequence)]
_, _, tokens = batch_converter(data)
tokens = tokens.to(device)
results_list = []
for mut_str in mutation_list:
# 解析突变 (如 "A42G" 或多点突变 "A42G/L108W")
total_score = 0.0
single_muts = mut_str.split("/")
for single_mut in single_muts:
wt_aa = single_mut[0]
pos = int(single_mut[1:-1])
mut_aa = single_mut[-1]
# 遮蔽该位置
masked = tokens.clone()
masked[0, pos] = alphabet.mask_idx # ESM token 索引 = 序列位置 + 1 for <cls>
with torch.no_grad():
logits = model(masked)["logits"]
log_probs = torch.log_softmax(logits[0, pos], dim=-1)
wt_score = log_probs[alphabet.get_idx(wt_aa)].item()
mut_score = log_probs[alphabet.get_idx(mut_aa)].item()
total_score += (mut_score - wt_score)
results_list.append({
"mutation": mut_str,
"esm2_score": total_score,
"prediction": "有益" if total_score > 0 else "有害"
})
df = pd.DataFrame(results_list).sort_values("esm2_score", ascending=False)
return df
# 使用示例
wt_seq = "MKTVRQERLKSIVRILERSKEPVSGAQLAEELSVSRQVIVQDIAYLRSLGYNIVATPRGYVLAGG"
mutations = ["K2R", "K2A", "K2D", "R7K", "R7A", "R7D", "V5I", "V5D"]
ranking = score_mutation_library(wt_seq, mutations)
print(ranking.to_string(index=False))
实用策略 2:结合稳定性和功能预测进行双重筛选
突变库(N = 10,000)
↓
[ESM-2 zero-shot 评分] → 排除 score < -5 的突变
↓
候选突变(N ≈ 3,000)
↓
[ThermoMPNN 稳定性预测] → 排除 ΔΔG > 2.0 的去稳定化突变
↓
稳定候选(N ≈ 1,000)
↓
[实验验证 Top 100-200]
↓
发现有益突变 → 组合优化
4.5 突变效应预测实战建议🔗
| 场景 | 推荐工具组合 | 注意事项 |
|---|---|---|
| 临床变体致病性判断 | AlphaMissense + EVE + ClinVar 交叉验证 | 不可单一工具定论 |
| 蛋白质工程选位点 | ESM-2 zero-shot + ConSurf 保守性分析 | 关注可变但非随机的位置 |
| 稳定性优化 | ThermoMPNN + FoldX,取共识 | |
| 定向进化文库设计 | ESM-2 预筛选 → 实验小规模验证 → 数据驱动迭代 | AI 是辅助,实验验证不可或缺 |
| 酶活/底物特异性优化 | ESM-2 + 活性口袋分析(P2Rank) | 关注活性口袋附近残基 |
⚠️ 重要提醒: 当前所有突变效应预测工具的绝对准确率仍然有限。在实际蛋白质工程中,AI 预测应当被视为缩小实验搜索空间的辅助手段,而非替代实验验证的最终结论。把 AI 评分作为"优先级排序"的依据,而不是"对/错"的判断。
本章小结🔗
- ✅ 蛋白质语言模型(ESM-2, ESM-3, ProtTrans)通过在海量蛋白质序列上预训练,学习到了丰富的结构和功能信息;提取的 embedding 可以驱动多种下游预测任务
- ✅ 功能注释可以通过 InterPro(综合注释)、DeepFRI(GO 预测 + 残基归因)、SignalP/DeepTMHMM(信号肽/跨膜区)等工具高效完成
- ✅ 相互作用预测中,AF2-Multimer 是蛋白质-蛋白质对接首选,DiffDock 是配体盲对接新选择,AlphaFold3 首次支持蛋白质-核酸复合物预测
- ✅ 突变效应预测中,AlphaMissense 适合人类致病突变判断,ESM-2 zero-shot 评分适合通用突变筛选,ThermoMPNN 用于稳定性预测
- ✅ AI 预测是缩小搜索空间的利器,但实验验证仍然不可替代
延伸阅读🔗
- ESM GitHub 仓库(Meta AI 官方代码和模型)
- EvolutionaryScale Forge(ESM-3 API 平台)
- ProtTrans GitHub(ProtTrans 系列模型)
- AlphaMissense 预计算数据(人类蛋白质组全部错义突变预测)
- ProteinGym 基准(突变效应预测基准测试平台)
- DiffDock GitHub(扩散对接模型)
- 相关章节:蛋白质结构预测 - AlphaFold | 蛋白质设计与工程
参考文献🔗
-
Rives, A. et al. "Biological structure and function emerge from scaling unsupervised learning to 250 million protein sequences." PNAS, 2021. https://doi.org/10.1073/pnas.2016239118 ↩
-
Hayes, T. et al. "Simulating 500 million years of evolution with a language model." Science, 2024. https://doi.org/10.1126/science.adn2442 ↩
-
Elnaggar, A. et al. "ProtTrans: Toward Understanding the Language of Life Through Self-Supervised Learning." IEEE TPAMI, 2022. https://doi.org/10.1109/TPAMI.2021.3095381 ↩
-
Paysan-Lafosse, T. et al. "InterPro in 2022." Nucleic Acids Research, 2023. https://doi.org/10.1093/nar/gkac993 ↩
-
Gligorijević, V. et al. "Structure-based protein function prediction using graph convolutional networks." Nature Communications, 2021. https://doi.org/10.1038/s41467-021-23303-9 ↩
-
Sanderson, T. et al. "ProteInfer, deep neural networks for protein functional inference." eLife, 2023. https://doi.org/10.7554/eLife.80942 ↩
-
Evans, R. et al. "Protein complex prediction with AlphaFold-Multimer." bioRxiv, 2022. https://doi.org/10.1101/2021.10.04.463034 ↩
-
Corso, G. et al. "DiffDock: Diffusion Steps, Twists, and Turns for Molecular Docking." ICLR, 2023. https://arxiv.org/abs/2210.01776 ↩
-
Zhou, G. et al. "Uni-Mol: A Universal 3D Molecular Representation Learning Framework." ICLR, 2023. https://openreview.net/forum?id=6K2RM6wVqKu ↩
-
Abramson, J. et al. "Accurate structure prediction of biomolecular interactions with AlphaFold 3." Nature, 2024. https://doi.org/10.1038/s41586-024-07487-w ↩
-
Dieckhaus, H. et al. "Transfer learning to leverage larger datasets for improved prediction of protein stability changes." PNAS, 2024. https://doi.org/10.1073/pnas.2314853121 ↩
-
Blaabjerg, L.M. et al. "Rapid protein stability prediction using deep learning representations." eLife, 2023. https://doi.org/10.7554/eLife.82593 ↩
-
Cheng, J. et al. "Accurate proteome-wide missense variant effect prediction with AlphaMissense." Science, 2023. https://doi.org/10.1126/science.adg7492 ↩
-
Frazer, J. et al. "Disease variant prediction with deep generative models of evolutionary data." Nature, 2021. https://doi.org/10.1038/s41586-021-04043-8 ↩
-
Meier, J. et al. "Language models enable zero-shot prediction of the effects of mutations on protein function." NeurIPS, 2021. https://proceedings.neurips.cc/paper/2021/hash/f51338d736f95dd42427296047067694-Abstract.html ↩