蛋白质结构预测方法概述:从同源建模到深度学习
蛋白质结构预测,说白了就是解决一个核心问题:给定一条氨基酸序列,怎么算出它折叠成什么三维形状?这个问题在计算生物学里已经存在了几十年。我自己的项目经历告诉我,选对方法往往比跑对代码更重要——方向错了,后面全是白费功夫。
这一章我带你捋一遍主流的预测方法,从经典的同源建模到现在的深度学习。你不需要记住每个算法的细节,但要理解它们各自的适用场景和局限性。这才是实战中的判断力。
一、同源建模:最成熟的老方法
同源建模的原理其实很直观:相似的序列折叠成相似的结构。如果你要预测的蛋白(目标)在数据库里找到了一个序列相似度>30%的已知结构(模板),那直接把模板结构“修修补补”就能得到一个不错的模型。
我最早做的一个项目,就是一个细菌激酶的结构预测。当时序列相似度有45%,我用了SWISS-MODEL,跑了不到十分钟,结果和后来别人解出的晶体结构RMSD只有1.2Å。那感觉挺爽的,但你想想看,如果相似度掉到20%以下,结果就完全不可靠了。
同源建模的标准流程大概是这样的:
- 模板搜索:用BLAST或HMMER在PDB里找已知结构
- 序列比对:把目标和模板的序列对齐,这一步最关键,错位会导致整个模型崩掉
- 模型构建:基于比对信息,复制模板的主链坐标,再补上侧链
- 优化与评估:用能量最小化修整不合理的原子接触,用拉氏图或DOPE评分判断质量
常用的工具有SWISS-MODEL、MODELLER、I-TASSER(虽然它混合了其他方法)。我个人习惯用MODELLER,因为它可以在Python里调,方便做批量自动化。
# MODELLER 示例:基于模板构建单个模型
from modeller import *
from modeller.automodel import *
env = Environ()
aln = Alignment(env)
aln.append(file='target.ali', align_codes='target')
aln.append(file='template.pdb', align_codes='template', atom_files='template.pdb')
aln.align2d()
a = AutoModel(env, aln, knowns='template', sequence='target')
a.starting_model = 1
a.ending_model = 5 # 生成5个模型,选评分最好的
a.make()
二、折叠识别:当序列相似度不够时
同源建模遇到一个坎:序列相似度低于25%-30%时,比对就不那么靠谱了。这时候要用到折叠识别(Threading)。
折叠识别的思路不太一样:它不直接比序列,而是先把目标序列“穿”到每个已知结构模板上,然后看这个“假模型”的能量是否合理。说白了,就是找一个最适合你的序列去穿的外衣。
为什么这么做?因为蛋白质的折叠模式其实远少于序列种类。你想想看,自然界里可能有几亿种蛋白,但它们的折叠拓扑类型也就一两千种。所以就算序列不像,你的序列可能也能适配某个已知的折叠框架。
折叠识别的关键要素:
| 要素 | 说明 | 常见工具 |
|---|---|---|
| 序列谱(Profile) | 用多序列比对构建每个位置的概率矩阵,比单一序列更敏感 | PSI-BLAST, HHblits |
| 打分函数 | 衡量序列-结构配体程度的函数,包括成对势能、溶剂可及性等 | THREADER, GenTHREADER |
| 比对算法 | 需要处理序列与3D结构模板之间的对齐,比普通序列比对更复杂 | HMM-HMM比较 |
说实话,同源建模和折叠识别之间的界限有时候挺模糊的。很多现代工具(比如I-TASSER)把两者揉在一起用。在CASP比赛里,这类方法很长时间都霸占着榜首。但它们的共同短板是:完全依赖已知结构数据库。如果目标蛋白的折叠方式从未被解出过,那就真的没辙了。
三、从头预测:不依赖模板的硬功夫
从头预测(Ab Initio / De Novo)想干的是:不依赖任何已知结构,只从物理化学原理出发去折叠蛋白。说白了,就是模拟蛋白在真实环境中如何通过能量最小化找到稳定构象。
这个想法很美好,但现实很残酷。你算一下:一个有100个残基的蛋白,每个残基的phi/psi角各有几种可能,构象空间差不多是天文数字。用分子动力学去全空间搜索,算到宇宙毁灭也算不完。
所以从头预测做了两个重要妥协:
- 简化模型:把氨基酸骨架用粗粒化模型替代,降低自由度
- 片段组装:从已知结构中剪取短片段(如9肽),用能量函数挑选最合理的组合
Rosetta就是这种思路的代表。它的流程大概是这样:
# Rosetta从头预测流程(简化)
1. 片段库生成:
- 用局部序列相似性获取3残基/9残基片段
- 每个位置保存200个候选片段
2. 初始结构生成:
- 随机从片段库中取样片段
- 组装成延展链构象
3. 蒙特卡洛优化:
- 每次替换一个片段的构象
- 用Rosetta能量函数打分
- 接受能量降低的移动,以一定概率接受能量升高的移动(防止陷入局部最优)
4. 聚类与挑选:
- 生成数千个独立模型
- 聚类分析,选出能量最低且cluster最大的代表模型
四、深度学习:颠覆性的新范式
2018年之前,蛋白结构预测的格局差不多就上面这些了。但DeepMind在2018年CASP13上推出的AlphaFold,用深度学习彻底改变了这个领域。
为什么以前的方法效果受限?我举个简单的例子:早期打分函数里,一个残基对的接触势能通常只考虑它们之间的距离,但真实蛋白里,两个残基是否形成接触还受到它们所处的二级结构、溶剂环境、以及整个网络拓扑的影响。这些高阶关联特征,传统方法很难建模。
深度学习做的核心事情,就是从数据中自动学习这些特征的表示。它不需要人工设计哪个成对势能参数该设成0.8还是1.2,而是通过大量已知结构直接“学”出规律。
关键的技术突破包括:
- 残基间距离预测:用深度残差网络预测每对残基的Cβ距离分布,再做距离约束
- 注意力机制:在Evoformer模块里,利用轴向注意力捕捉序列谱中的全局和局部关联
- 端到端训练:直接从多序列比对(MSA)和模板特征预测最终结构坐标
下面是几种主流深度学习方法的演进关系:
方法名称 发布年份 核心特点 CASP排名
AlphaFold 2018 远距离接触图预测 CASP13第一
AlphaFold2 2020 端到端可微结构生成 CASP14第一 (GDT_TS 90+)
RoseTTAFold 2021 三轨架构(MSA+pair+seq) 接近AlphaFold2水平
OmegaFold 2022 单序列预测,不依赖MSA 中等同源场景表现好
嗯,这里要注意一个容易被忽略的点。深度学习方法对输入质量非常敏感。我曾经踩过一个坑:同样的序列,用不同版本的同源搜索工具建出来的MSA,AlphaFold2预测出来的结构局部区域能差好几个Å。后来我发现,MSA的深度和多样性比原始序列对齐的精确度更重要。所以在实战中,我建议你要额外花时间调好MSA构建的参数。
方法选择:一张图看懂怎么选
我把四种方法的核心差异和适用场景汇成了一张路线图。看完这个,你应该能快速判断自己该用哪种方法。
方法的演进:从手工特征到端到端学习
下面这个表格,我把四种方法的关键差异列在一起,你可以快速对比。
| 维度 | 同源建模 | 折叠识别 | 从头预测 | 深度学习 |
|---|---|---|---|---|
| 依赖模板 | 强依赖 | 依赖 | 不依赖 | 可选强化(端到端也可不要) |
| 计算成本 | 低 | 中等 | 极高 | 中等(需GPU) |
| 适用场景 | 序列相似度高 | 序列相似度低但折叠已知 | 全新折叠 | 全覆盖(尤其是同源场景) |
| 典型GDT | 70-95% | 40-70% | 30-50% | 70-95%(同源);50-70%(新折叠) |
| 典型工具 | MODELLER, SWISS-MODEL | I-TASSER, HHpred | Rosetta, QUARK | AlphaFold2, RoseTTAFold |
回顾这一章,我其实想表达一个核心点:方法的选择本质上是一个在精度、成本和可靠性之间做权衡的问题。同源建模最快,但吃模板;从头预测最灵活,但吃算力;深度学习在很多场景下是最佳折中,但也不是万能的——比如对于大型复合物、或者高度无序的蛋白,它到现在也表现一般。