蛋白质结构预测实战(AlphaFold2 / ESMFold / ColabFold)¶
一句话概述¶
本教程系统介绍蛋白质结构预测的原理和实战操作,覆盖AlphaFold2本地部署、ESMFold快速预测和ColabFold云端使用的完整流程,从序列输入到结构质量评估。
目录¶
1. 核心知识点¶
| 序号 | 步骤 | 工具 | 目的 | 输入 | 输出 | 关键参数 |
|---|---|---|---|---|---|---|
| 1 | 序列准备 | 文本编辑器 | 获取目标蛋白序列 | UniProt/PDB ID | FASTA文件 | 序列长度限制 |
| 2 | MSA搜索 | JackHMMER/MMseqs2 | 构建多序列比对 | FASTA + 序列数据库 | MSA文件(.a3m) | 数据库选择、迭代次数 |
| 3 | 模板搜索 | HHsearch | 搜索同源模板结构 | MSA + PDB70 | 模板结构列表 | E-value阈值 |
| 4 | AlphaFold2预测 | AlphaFold2 | 端到端结构预测 | FASTA/MSA/模板 | PDB/mmCIF结构 | --model_preset, GPU内存 |
| 5 | ESMFold预测 | ESMFold | 单序列快速预测 | FASTA(单条序列) | PDB结构 | 序列长度≤400最佳 |
| 6 | ColabFold预测 | ColabFold | 云端加速预测 | FASTA | PDB + 质量图 | MSA模式/单序列模式 |
| 7 | 质量评估 | pLDDT/PAE | 评估预测可信度 | 预测结构+置信分数 | 质量评估报告 | pLDDT>70, PAE<5Å |
| 8 | 结构优化 | AMBER/OpenMM | 能量最小化精修 | 预测结构 | 优化后结构 | 力场参数 |
| 9 | 可视化与比较 | PyMOL/ChimeraX | 展示和分析结构 | PDB文件 | 渲染图/叠合分析 | 着色方案 |
| 10 | 多聚体预测 | AlphaFold-Multimer | 预测蛋白复合物结构 | 多条序列FASTA | 复合物结构 | --model_preset=multimer |
2. 各步骤详解¶
步骤1:序列准备¶
白话解释:结构预测的输入是蛋白质的氨基酸序列。你需要确保序列是正确的、完整的,并且格式正确(FASTA格式)。
技术细节:
序列准备的注意事项: - 序列来源:UniProt数据库(推荐规范序列)、NCBI蛋白质数据库、实验测序结果 - 序列长度:AlphaFold2理论上可处理任意长度,但GPU内存限制了实际可预测的长度。单GPU(80GB A100)通常处理≤2500残基。ESMFold在400残基以内效果最佳 - 信号肽和前导肽:通常应去除信号肽,只预测成熟蛋白的结构 - 多结构域蛋白:可以分别预测各结构域,特别是当结构域间连接器很长时 - 内在无序区域(IDR):AlphaFold2会给无序区域很低的pLDDT分数,这是正确的行为(不是错误)
# FASTA格式示例
cat > target_protein.fasta << 'EOF'
>protein_target
MVLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHFDLSH
GSAQVKGHGKKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKLL
SHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR
EOF
# 从UniProt下载序列
curl -s "https://rest.uniprot.org/uniprotkb/P69905.fasta" > P69905.fasta
# 检查序列长度
grep -v "^>" target_protein.fasta | tr -d '\n' | wc -c
步骤2:MSA搜索¶
白话解释:AlphaFold2的关键输入之一是多序列比对(MSA)——即目标蛋白的同源序列集合。通过进化信息(哪些位置共变),模型可以推断空间接触关系。MSA质量直接影响预测准确性。
技术细节:
AlphaFold2使用多个数据库和工具构建MSA: - JackHMMER(搜索UniRef90、Mgnify):迭代式HMM搜索,灵敏度高 - HHblits(搜索BFD/UniClust30):基于HMM-HMM比对的搜索 - MMseqs2(ColabFold使用):速度极快的序列搜索,可将MSA构建时间从小时级降到分钟级
MSA深度(有效序列数Neff)对预测质量至关重要: - Neff > 100:通常能获得高质量预测 - Neff 30-100:可能准确,也可能不够 - Neff < 30:预测质量不确定,ESMFold可能是更好的选择(不依赖MSA)
AlphaFold2的全量数据库约需2.5TB磁盘空间(reduced版约600GB)。
# AlphaFold2默认MSA流程(内部自动调用)
# 数据库路径
DB_DIR="/data/alphafold_databases"
# JackHMMER搜索UniRef90
jackhmmer \
--cpu 8 \
-N 1 \
--noali \
--F1 0.0005 --F2 0.00005 --F3 0.0000005 \
--incdomE 0.0001 \
-A output.sto \
target_protein.fasta \
${DB_DIR}/uniref90/uniref90.fasta
# ColabFold使用MMseqs2(快速模式)
colabfold_search \
--db-load-mode 2 \
--threads 16 \
target_protein.fasta \
${DB_DIR}/colabfold_envdb \
msa_results/
步骤3:模板搜索¶
白话解释:如果PDB数据库中已有与目标蛋白相似的实验结构,这些"模板"可以为AlphaFold2提供额外的空间约束信息,特别是对于MSA深度较浅的目标蛋白。
技术细节:
AlphaFold2使用HHsearch在PDB70数据库中搜索模板: - 根据序列相似性和profile-profile比对找到最相关的已知结构 - 模板信息通过template embedding输入到Evoformer网络 - AlphaFold2对模板的依赖性比传统同源建模低得多,但高质量模板仍能改善预测
在以下情况下模板特别有用: - 目标蛋白的MSA深度低 - 蛋白质存在不常见的折叠 - 预测多构象中的特定状态
# HHsearch模板搜索(AlphaFold2内部流程)
hhsearch \
-i target.a3m \
-d ${DB_DIR}/pdb70/pdb70 \
-o template_hits.hhr \
-maxseq 1000000 \
-p 20 \
-Z 500 \
-z 1 \
-B 500 \
-b 1 \
-loc \
-mact 0.35
步骤4:AlphaFold2本地预测¶
白话解释:这是核心预测步骤。AlphaFold2接收序列、MSA和模板信息,通过深度学习网络(Evoformer + Structure Module)预测蛋白质的三维结构。输出包括预测的原子坐标和置信度分数。
技术细节:
AlphaFold2的架构核心: 1. Input Embedding:将MSA和模板信息编码为初始表示 2. Evoformer(48层):通过行注意力(残基间)和列注意力(序列间)迭代更新MSA表示和pair表示 3. Structure Module(8层):将pair表示转化为3D坐标,使用不变点注意力(IPA) 4. 回收机制(Recycling):将预测结果反馈到Evoformer重新精修(默认3次回收)
模型预设(model_preset): - monomer:单体蛋白预测(默认5个模型) - monomer_casp14:使用全部5个模型的集成 - monomer_ptm:额外预测pTM分数 - multimer:多聚体/复合物预测
GPU需求: - A100 (80GB):可处理~2500残基 - V100 (32GB):可处理~1000残基 - T4 (16GB):可处理~400残基
# AlphaFold2本地运行(Docker方式)
python3 docker/run_docker.py \
--fasta_paths=target_protein.fasta \
--max_template_date=2024-01-01 \
--model_preset=monomer_ptm \
--db_preset=full_dbs \
--data_dir=/data/alphafold_databases \
--output_dir=af2_output/ \
--gpu_devices=0
# 非Docker方式(直接运行)
python3 run_alphafold.py \
--fasta_paths=target_protein.fasta \
--output_dir=af2_output/ \
--data_dir=/data/alphafold_databases \
--uniref90_database_path=${DB_DIR}/uniref90/uniref90.fasta \
--mgnify_database_path=${DB_DIR}/mgnify/mgy_clusters_2022_05.fa \
--template_mmcif_dir=${DB_DIR}/pdb_mmcif/mmcif_files \
--obsolete_pdbs_path=${DB_DIR}/pdb_mmcif/obsolete.dat \
--bfd_database_path=${DB_DIR}/bfd/bfd_metaclust_clu_complete_id30_c90_final_seq.sorted_opt \
--uniref30_database_path=${DB_DIR}/uniref30/UniRef30_2021_03 \
--pdb70_database_path=${DB_DIR}/pdb70/pdb70 \
--max_template_date=2024-01-01 \
--model_preset=monomer_ptm \
--db_preset=full_dbs \
--use_gpu_relax=True
步骤5:ESMFold快速预测¶
白话解释:ESMFold是Meta AI开发的结构预测工具,它不需要MSA搜索(只需要单条序列),因此速度非常快(秒级),适合快速筛选或MSA不可用的情况。代价是对于某些蛋白,准确性不如AlphaFold2。
技术细节:
ESMFold基于ESM-2蛋白质语言模型(150亿参数),通过自监督预训练学习了蛋白质序列中的进化和结构信息。它将预训练语言模型的表示直接转化为3D坐标,无需显式的MSA输入。
ESMFold vs AlphaFold2: - 速度:ESMFold快100-1000倍(无需MSA搜索) - 准确性:AlphaFold2通常更准确,特别是对于MSA丰富的蛋白 - 适用场景:ESMFold适合孤儿蛋白(少同源序列)、快速筛选、大规模预测 - 单序列极限:对于MSA深度高的蛋白,ESMFold质量接近AF2;对于低同源性蛋白,差距可能较大
# ESMFold Python API
import torch
import esm
# 加载模型
model = esm.pretrained.esmfold_v1()
model = model.eval().cuda()
# 可选:减少内存使用
model.set_chunk_size(128)
# 预测
sequence = "MVLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHFDLSH"
with torch.no_grad():
output = model.infer_pdb(sequence)
# 保存PDB文件
with open("esmfold_prediction.pdb", "w") as f:
f.write(output)
# 获取pLDDT分数
with torch.no_grad():
output = model.infer(sequence)
plddt = output["plddt"][0, :, 1] # per-residue pLDDT
mean_plddt = plddt.mean().item()
print(f"Mean pLDDT: {mean_plddt:.2f}")
# 使用ESMFold命令行(通过esm包)
python -c "
import esm
import torch
model = esm.pretrained.esmfold_v1()
model = model.eval().cuda()
with open('target_protein.fasta') as f:
lines = f.readlines()
seq = ''.join(l.strip() for l in lines if not l.startswith('>'))
with torch.no_grad():
pdb_str = model.infer_pdb(seq)
with open('esmfold_output.pdb', 'w') as f:
f.write(pdb_str)
print('ESMFold prediction saved.')
"
步骤6:ColabFold预测¶
白话解释:ColabFold是AlphaFold2的社区优化版本,最大的改进是用MMseqs2替代JackHMMER做MSA搜索,速度快很多。可以在Google Colab上免费运行(使用Google的GPU),也可以本地部署。
技术细节:
ColabFold的优势: - MSA搜索速度快(MMseqs2,分钟级 vs JackHMMER的小时级) - 支持Google Colab免费运行 - 本地版本(LocalColabFold)安装比官方AF2简单 - 支持自定义MSA输入 - 内置amber relaxation
ColabFold本地安装使用colabfold_batch命令,支持批量预测。
关键选项: - --num-recycle:回收次数(默认3,可增加到12提高质量) - --num-models:使用的模型数(1-5) - --amber:是否进行AMBER能量最小化 - --templates:是否使用模板 - --msa-mode:MSA搜索模式(mmseqs2_uniref_env / mmseqs2_uniref / single_sequence)
# LocalColabFold安装
# 前提:已安装conda
wget https://raw.githubusercontent.com/YoshitakaMo/localcolabfold/main/install_colabfold_linux.sh
bash install_colabfold_linux.sh
# 将colabfold加入PATH
export PATH="/path/to/localcolabfold/colabfold-conda/bin:$PATH"
# 运行ColabFold批量预测
colabfold_batch \
target_protein.fasta \
colabfold_output/ \
--num-recycle 3 \
--num-models 5 \
--amber \
--templates \
--num-seeds 1 \
--use-gpu-relax
# 单序列模式(类似ESMFold场景)
colabfold_batch \
target_protein.fasta \
colabfold_output_single/ \
--msa-mode single_sequence \
--num-recycle 6
# 使用自定义MSA
colabfold_batch \
custom_msa.a3m \
colabfold_output_custom/ \
--num-recycle 3 \
--num-models 5
步骤7:质量评估¶
白话解释:预测的结构不一定都是准确的。每个预测都附带置信度分数(pLDDT和PAE),告诉你哪些区域的预测可信、哪些区域可能不准确。正确解读这些分数对于使用结构至关重要。
技术细节:
pLDDT(predicted Local Distance Difference Test): - 范围0-100,越高越好 - >90:非常高置信度,主链和侧链位置准确 - 70-90:高置信度,主链可信 - 50-70:低置信度,结构存在不确定性 - <50:很可能是无序区域或预测错误
PAE(predicted Aligned Error): - 衡量残基对之间相对位置的预测误差 - 低PAE(<5Å)表示两个残基的相对位置关系可信 - PAE图是理解结构域间关系的关键:结构域内PAE低、结构域间PAE高说明各结构域预测准确但相对取向不确定
pTM(predicted Template Modeling score): - 整体结构质量的单一分数(0-1) - >0.5:基本可信 - >0.7:高质量预测
import json
import numpy as np
import matplotlib.pyplot as plt
# 读取AlphaFold2输出的置信度文件
with open("af2_output/ranking_debug.json") as f:
ranking = json.load(f)
print("模型排名:", ranking["order"])
print("pLDDT分数:", {k: f"{v:.1f}" for k,v in ranking["plddts"].items()})
# 读取PAE矩阵
with open("af2_output/result_model_1_ptm.pkl", "rb") as f:
import pickle
result = pickle.load(f)
pae = result["predicted_aligned_error"]
plddt = result["plddt"]
# 绘制pLDDT per-residue图
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
# pLDDT图
axes[0].plot(range(1, len(plddt)+1), plddt, color="steelblue", linewidth=0.8)
axes[0].axhline(y=70, color="orange", linestyle="--", label="pLDDT=70")
axes[0].axhline(y=90, color="green", linestyle="--", label="pLDDT=90")
axes[0].set_xlabel("残基位置")
axes[0].set_ylabel("pLDDT")
axes[0].set_title("Per-residue Confidence (pLDDT)")
axes[0].set_ylim(0, 100)
axes[0].legend()
# PAE图
im = axes[1].imshow(pae, cmap="Greens_r", vmin=0, vmax=30)
axes[1].set_xlabel("Scored residue")
axes[1].set_ylabel("Aligned residue")
axes[1].set_title("Predicted Aligned Error (PAE)")
plt.colorbar(im, ax=axes[1], label="Expected position error (Å)")
plt.tight_layout()
plt.savefig("quality_assessment.png", dpi=300, bbox_inches="tight")
步骤8:结构优化(AMBER Relaxation)¶
白话解释:AlphaFold2直接输出的结构可能存在一些立体化学问题(如键角偏差、原子碰撞),通过分子力场的能量最小化可以消除这些问题,使结构更"物理合理"。
技术细节:
AlphaFold2内置了AMBER力场的relaxation步骤: - 使用amber99sb力场 - 约束Cα原子位置(防止大尺度变形) - 运行L-BFGS能量最小化 - 消除立体化学冲突(clashes)
对于下游应用(如分子对接、分子动力学模拟),可能需要更深入的结构准备: - 添加缺失的氢原子 - 检查并修复不合理的键长/键角 - 评估Ramachandran图 - 必要时进行短时间MD模拟让结构"松弛"
# 使用OpenMM进行能量最小化
from openmm.app import *
from openmm import *
from openmm.unit import *
# 加载PDB
pdb = PDBFile("af2_prediction_unrelaxed.pdb")
forcefield = ForceField('amber14-all.xml', 'amber14/tip3pfb.xml')
# 创建系统
modeller = Modeller(pdb.topology, pdb.positions)
modeller.addHydrogens(forcefield)
system = forcefield.createSystem(modeller.topology,
nonbondedMethod=NoCutoff,
constraints=HBonds)
# 能量最小化
integrator = LangevinMiddleIntegrator(300*kelvin, 1/picosecond, 0.004*picoseconds)
simulation = Simulation(modeller.topology, system, integrator)
simulation.context.setPositions(modeller.positions)
# 运行最小化
simulation.minimizeEnergy(maxIterations=1000)
# 保存
state = simulation.context.getState(getPositions=True)
with open("af2_prediction_relaxed.pdb", "w") as f:
PDBFile.writeFile(simulation.topology, state.getPositions(), f)
步骤9:可视化与比较¶
白话解释:用分子可视化软件查看预测的3D结构,按置信度着色,与实验结构(如有)比较,评估预测结果的生物学合理性。
技术细节:
常用的可视化工具: - PyMOL:功能最强大,出版级图像 - UCSF ChimeraX:界面友好,支持AlphaFold2数据库直接加载 - Mol*(web):浏览器中查看,RCSB PDB使用
结构比较方法: - RMSD(Root Mean Square Deviation):全局叠合后的原子偏差 - TM-score:比RMSD更鲁棒的全局相似度(0-1,>0.5通常表示相同折叠) - GDT-TS:CASP竞赛使用的评估指标 - 局部RMSD:针对感兴趣的区域单独计算
# PyMOL脚本:按pLDDT着色
cat > color_by_plddt.pml << 'EOF'
load af2_prediction.pdb, prediction
# 按B-factor(存储pLDDT)着色
spectrum b, blue_white_red, prediction, minimum=50, maximum=100
# 设置显示
bg_color white
set cartoon_fancy_helices, 1
set cartoon_side_chain_helper, 1
set ray_opaque_background, 1
# 保存图像
ray 2400, 1800
png prediction_colored.png, dpi=300
EOF
pymol -c color_by_plddt.pml
# 使用TM-align比较两个结构
TMalign af2_prediction.pdb experimental_structure.pdb -o alignment.sup
步骤10:多聚体预测¶
白话解释:很多蛋白质在细胞中不是单独工作的,而是形成复合物。AlphaFold-Multimer可以预测两个或多个蛋白质链如何组装在一起形成复合物。
技术细节:
AlphaFold-Multimer与单体预测的主要区别: - 输入为多条链的序列(用:分隔或在FASTA中分别列出) - 使用特殊的MSA配对策略(根据物种信息配对同源序列) - 结构模块经过多聚体特异的训练 - 输出包括链间接触的PAE信息
使用注意事项: - 复合物的总残基数受GPU内存限制更严格 - 同源多聚体(如二聚体)需要在输入中重复序列 - 界面区域的pLDDT和PAE对评估预测的界面质量至关重要 - 对于瞬时/弱相互作用,预测质量可能下降
# AlphaFold-Multimer输入格式(两条链)
cat > complex.fasta << 'EOF'
>chain_A
MVLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHFDLSH
>chain_B
MHSSIVLATVLFVAIASASKTRELCMKSLEHAKVGTSKEAKQDGIDLYKHMFE
EOF
# 运行AlphaFold-Multimer
python3 run_alphafold.py \
--fasta_paths=complex.fasta \
--output_dir=multimer_output/ \
--data_dir=/data/alphafold_databases \
--model_preset=multimer \
--max_template_date=2024-01-01 \
--use_gpu_relax=True
# ColabFold多聚体预测
colabfold_batch \
complex.fasta \
colabfold_multimer_output/ \
--num-recycle 6 \
--num-models 5 \
--amber
3. 实战命令/代码(完整流程)¶
#!/bin/bash
# ==============================================
# 蛋白质结构预测完整流程
# 综合使用AlphaFold2、ESMFold和ColabFold
# ==============================================
set -euo pipefail
TARGET="target_protein"
FASTA="${TARGET}.fasta"
OUTDIR="structure_predictions"
AF2_DB="/data/alphafold_databases"
mkdir -p ${OUTDIR}/{alphafold2,esmfold,colabfold,comparison}
echo "=== 目标蛋白信息 ==="
SEQ_LEN=$(grep -v "^>" ${FASTA} | tr -d '\n' | wc -c)
echo "序列长度: ${SEQ_LEN} 残基"
# ---- 方法1: ColabFold(推荐首选) ----
echo ""
echo "=== ColabFold预测 ==="
colabfold_batch \
${FASTA} \
${OUTDIR}/colabfold/ \
--num-recycle 3 \
--num-models 5 \
--amber \
--templates \
--num-seeds 1 \
--use-gpu-relax
# ---- 方法2: AlphaFold2(最高精度) ----
echo ""
echo "=== AlphaFold2预测 ==="
python3 run_alphafold.py \
--fasta_paths=${FASTA} \
--output_dir=${OUTDIR}/alphafold2/ \
--data_dir=${AF2_DB} \
--model_preset=monomer_ptm \
--db_preset=full_dbs \
--max_template_date=2024-01-01 \
--use_gpu_relax=True
# ---- 方法3: ESMFold(快速) ----
echo ""
echo "=== ESMFold预测 ==="
python3 << 'PYTHON'
import torch
import esm
model = esm.pretrained.esmfold_v1()
model = model.eval().cuda()
model.set_chunk_size(128)
with open("${FASTA}") as f:
lines = f.readlines()
seq = ''.join(l.strip() for l in lines if not l.startswith('>'))
print(f"预测序列长度: {len(seq)}")
with torch.no_grad():
pdb_str = model.infer_pdb(seq)
with open("${OUTDIR}/esmfold/prediction.pdb", "w") as f:
f.write(pdb_str)
# 获取pLDDT
with torch.no_grad():
output = model.infer(seq)
plddt = output["plddt"][0, :, 1].cpu().numpy()
print(f"Mean pLDDT: {plddt.mean():.2f}")
print(f"Median pLDDT: {float(sorted(plddt)[len(plddt)//2]):.2f}")
PYTHON
echo ""
echo "=== 结构比较 ==="
# 使用TM-align比较三种方法的结果
TMalign \
${OUTDIR}/colabfold/*_relaxed_rank_001*.pdb \
${OUTDIR}/alphafold2/${TARGET}/ranked_0.pdb \
-o ${OUTDIR}/comparison/cf_vs_af2
TMalign \
${OUTDIR}/esmfold/prediction.pdb \
${OUTDIR}/alphafold2/${TARGET}/ranked_0.pdb \
-o ${OUTDIR}/comparison/esm_vs_af2
echo "=== 完成 ==="
#!/usr/bin/env python3
"""
蛋白质结构预测质量评估和可视化脚本
"""
import json
import pickle
import numpy as np
import matplotlib.pyplot as plt
from pathlib import Path
from Bio.PDB import PDBParser, DSSP, Superimposer
def load_af2_results(output_dir):
"""加载AlphaFold2预测结果"""
results = {}
output_path = Path(output_dir)
# 读取排名
with open(output_path / "ranking_debug.json") as f:
ranking = json.load(f)
results["ranking"] = ranking
# 读取最佳模型的详细结果
best_model = ranking["order"][0]
pkl_file = output_path / f"result_{best_model}.pkl"
with open(pkl_file, "rb") as f:
model_result = pickle.load(f)
results["plddt"] = model_result["plddt"]
results["pae"] = model_result.get("predicted_aligned_error", None)
results["ptm"] = model_result.get("ptm", None)
return results
def plot_quality(results, output_prefix):
"""绘制质量评估图"""
fig, axes = plt.subplots(1, 3, figsize=(18, 5))
plddt = results["plddt"]
# 1. pLDDT per-residue
residues = np.arange(1, len(plddt)+1)
axes[0].plot(residues, plddt, linewidth=0.8, color="steelblue")
axes[0].fill_between(residues, 0, plddt, alpha=0.3, color="steelblue")
axes[0].axhline(70, color="orange", linestyle="--", alpha=0.7, label="pLDDT=70")
axes[0].axhline(90, color="green", linestyle="--", alpha=0.7, label="pLDDT=90")
axes[0].set_xlabel("Residue Index")
axes[0].set_ylabel("pLDDT")
axes[0].set_title(f"Per-residue Confidence\n(Mean: {np.mean(plddt):.1f})")
axes[0].set_ylim(0, 100)
axes[0].legend()
# 2. pLDDT分布直方图
axes[1].hist(plddt, bins=50, color="steelblue", edgecolor="white")
axes[1].axvline(70, color="orange", linestyle="--")
axes[1].axvline(90, color="green", linestyle="--")
axes[1].set_xlabel("pLDDT")
axes[1].set_ylabel("Count")
axes[1].set_title("pLDDT Distribution")
# 3. PAE热图
if results["pae"] is not None:
im = axes[2].imshow(results["pae"], cmap="Greens_r", vmin=0, vmax=30)
axes[2].set_xlabel("Scored residue")
axes[2].set_ylabel("Aligned residue")
axes[2].set_title("Predicted Aligned Error")
plt.colorbar(im, ax=axes[2], label="Error (Å)")
plt.tight_layout()
plt.savefig(f"{output_prefix}_quality.png", dpi=300, bbox_inches="tight")
plt.close()
# 打印汇总
print(f"Mean pLDDT: {np.mean(plddt):.1f}")
print(f"Residues with pLDDT > 90: {np.sum(plddt > 90)}/{len(plddt)} ({100*np.mean(plddt>90):.1f}%)")
print(f"Residues with pLDDT > 70: {np.sum(plddt > 70)}/{len(plddt)} ({100*np.mean(plddt>70):.1f}%)")
print(f"Residues with pLDDT < 50: {np.sum(plddt < 50)}/{len(plddt)} ({100*np.mean(plddt<50):.1f}%)")
if results["ptm"] is not None:
print(f"pTM score: {results['ptm']:.3f}")
if __name__ == "__main__":
results = load_af2_results("structure_predictions/alphafold2/target_protein/")
plot_quality(results, "structure_predictions/comparison/af2")
4. 面试常问点¶
Q1:AlphaFold2的核心创新是什么?它如何解决蛋白质折叠问题?
AlphaFold2的核心创新包括:(1) Evoformer模块通过注意力机制在MSA表示和pair表示之间进行信息交换,有效提取共进化信号;(2) Structure Module使用不变点注意力(IPA)直接在SE(3)等变空间中操作,保证了旋转/平移不变性;(3) 端到端可微分训练,从序列直接预测坐标;(4) 回收机制(recycling)迭代精修预测。这些使它在CASP14中达到了接近实验精度的水平(GDT-TS中位数92.4)。
Q2:pLDDT和PAE分别代表什么?如何使用它们?
pLDDT(predicted Local Distance Difference Test)衡量每个残基局部结构的预测置信度(0-100),是per-residue的。它反映该残基与邻近原子的相对位置是否被准确预测。PAE(predicted Aligned Error)衡量任意两个残基之间相对位置的预测误差,是per-residue-pair的矩阵。使用方式:pLDDT>70的区域可以信任主链结构;PAE低的残基对之间的相对位置可信。PAE特别有助于判断多结构域蛋白中结构域间的相对取向是否可靠。
Q3:ESMFold与AlphaFold2的本质区别是什么?各自适用什么场景?
本质区别在于ESMFold依赖蛋白质语言模型(PLM)隐式编码的进化信息,不需要显式的MSA搜索;而AlphaFold2依赖显式构建的MSA来提取共进化信号。ESMFold适用场景:(1)需要快速预测(秒级 vs 小时级);(2)序列数据库中同源序列很少的孤儿蛋白;(3)大规模批量预测;(4)实时在线服务。AlphaFold2适用场景:(1)需要最高准确性;(2)MSA丰富的蛋白家族;(3)需要可靠的结构域间相对取向;(4)发表研究论文。
Q4:预测结构的哪些区域通常不可靠?如何判断?
不可靠区域包括:(1)内在无序区域(IDR),pLDDT<50;(2)柔性loop区域,pLDDT 50-70;(3)多结构域蛋白的结构域间相对取向(PAE高的区域);(4)缺乏同源信息的独特插入区域;(5)配体/辅因子结合导致的构象变化区域(AF2预测的是apo状态)。判断方法:查看pLDDT per-residue图和PAE矩阵,结合已知的蛋白质生物学信息。
Q5:AlphaFold2需要什么计算资源?如何优化?
完整流程:(1)MSA搜索:CPU密集,约1-2小时/蛋白(取决于序列长度和数据库大小);(2)模型推理:需要GPU,内存需求与序列长度平方相关。A100(80GB)可处理~2500残基,V100(32GB)~1000残基。优化策略:使用ColabFold的MMseqs2加速MSA搜索;减少模型数(5→1);使用序列分块处理长蛋白;使用reduced数据库。数据库存储需2.5TB(full)或600GB(reduced)。
Q6:如何预测蛋白质-蛋白质复合物的结构?
使用AlphaFold-Multimer(--model_preset=multimer)。输入FASTA中列出所有链的序列。关键步骤:(1)对每条链独立搜索MSA;(2)使用物种信息配对MSA中的序列(paired MSA);(3)使用multimer-specific的模型进行预测。评估复合物质量需要特别关注界面区域的PAE——如果两条链之间的PAE较低(<10Å),说明界面预测较可靠。
5. 易错/易混淆点¶
将pLDDT误解为序列保守性:pLDDT是结构预测置信度,不是序列保守性。无序区域的pLDDT低是因为它们确实没有固定结构,不是因为预测出错。不应该"尝试提高"无序区域的pLDDT。
忽略PAE在多结构域蛋白中的重要性:即使所有残基的pLDDT都很高,如果结构域间的PAE很大,说明各结构域的内部结构可能正确但相对取向不可靠。在下游使用(如对接)时应单独使用各结构域。
GPU内存不足时的错误处理:直接运行大蛋白会导致OOM(Out of Memory)错误。应根据GPU内存预估可处理的最大序列长度,对超长蛋白分段预测或使用更大内存的GPU。
模板日期设置不当:如果设置的
max_template_date包含了目标蛋白本身的实验结构(如用于benchmark),会导致"作弊"式的高准确度。进行公平评估时应将模板日期设在目标结构发表之前。混淆AlphaFold2预测的是哪个状态:AF2通常预测的是单一最稳定构象。如果蛋白质有多个功能状态(如酶的开/闭构象),AF2可能只预测其中一个。MSA中的信息混合了所有状态的共进化信号。
忽略relaxation的重要性:未经relaxation的结构可能有立体化学冲突(原子碰撞、异常键角),直接用于分子对接或MD模拟会产生问题。应始终使用relaxed结构。
对短序列/片段的不当使用:预测非常短的肽段(<30残基)通常不可靠,因为短肽可能没有稳定的独立结构。AlphaFold2更适合预测折叠的结构域(>50残基)。
ColabFold与官方AlphaFold2结果不一致:由于MSA搜索方法不同(MMseqs2 vs JackHMMER/HHblits),ColabFold和官方AF2对同一序列的预测可能略有差异。差异通常在loop区域更明显。
6. 补充知识¶
AlphaFold Protein Structure Database¶
DeepMind与EMBL-EBI合作建立了AlphaFold Protein Structure Database,已预测了超过2亿个蛋白质的结构(覆盖几乎所有已知序列)。在做自己的预测之前,先检查这个数据库中是否已有你感兴趣的蛋白质结构。
访问地址:https://alphafold.ebi.ac.uk/
结构预测的局限性¶
- 构象动态性:AF2预测单一静态结构,无法捕捉蛋白质的动态性和多构象
- 配体效应:不考虑辅因子、金属离子、底物结合对结构的影响
- 翻译后修饰:不考虑磷酸化、糖基化等对结构的影响
- 膜蛋白环境:不模拟脂质双分子层的约束
- 突变效应:预测的是野生型结构,不能直接用于预测突变对结构的影响(需要AlphaMissense等工具)
前沿发展¶
- AlphaFold3:2024年发布,支持DNA/RNA/小分子/离子的复合物预测
- Chai-1:新的开源结构预测模型
- Boltz-1:MIT开源的全原子生物分子结构预测
- RoseTTAFold All-Atom:Baker实验室的全原子预测方法
- 流匹配(Flow Matching)生成模型:用于生成蛋白质构象系综
- AF2用于药物发现:虚拟筛选、靶点发现、抗体设计
推荐资源¶
- AlphaFold2论文:Jumper et al. (2021) Nature
- ESMFold论文:Lin et al. (2023) Science
- ColabFold论文:Mirdita et al. (2022) Nature Methods
- AlphaFold2源码:https://github.com/google-deepmind/alphafold
- ESM GitHub:https://github.com/facebookresearch/esm
- ColabFold GitHub:https://github.com/sokrypton/ColabFold