ESM(Evolutionary Scale Modeling)是 Meta AI 开源的蛋白语言模型系列。它在数亿条蛋白序列上做掩码语言建模训练,学到的表征可以直接迁移到结构、功能、突变效应等多种任务。对不做结构预测、但需要蛋白特征的项目来说,ESM 嵌入几乎是默认起点。
安装与取嵌入
pip install fair-esm # 原版接口
# 或用 HuggingFace 版本(生态更方便)
pip install transformers torch
import torch, esm
model, alphabet = esm.pretrained.esm2_t33_650M_UR50D()
batch_converter = alphabet.get_batch_converter()
model.eval()
data = [("protein1", "MKTVRQERLKSIVRILERSKEPVSGAQLAEELSVSRQVIVQDIAYLRSLGYNIVATPRGYVLAGG")]
_, _, tokens = batch_converter(data)
with torch.no_grad():
out = model(tokens, repr_layers=[33])
emb = out["representations"][33] # [B, L+2, 1280]
per_residue = emb[0, 1:-1] # 去掉首尾特殊 token
per_protein = per_residue.mean(0) # 池化成蛋白级向量
去掉首尾特殊 token 这一步经常被漏掉,会让残基索引整体错位一位,下游分析全错。
模型档位怎么选
| 模型 | 参数量 | 嵌入维度 | 适用 |
|---|---|---|---|
| esm2_t12_35M | 35 M | 480 | 快速原型、大规模筛选 |
| esm2_t30_150M | 150 M | 640 | 折中 |
| esm2_t33_650M | 650 M | 1280 | 多数任务的性价比最优 |
| esm2_t36_3B | 3 B | 2560 | 追精度,显存需求高 |
| esm2_t48_15B | 15 B | 5120 | 研究用途,多数场景不划算 |
经验上从 650M 往上,多数下游任务的收益迅速递减,而显存和推理成本线性上涨。先用 650M 建基线,确认瓶颈真在表示能力上再往上换。
零样本突变效应预测
这是 ESM 一个很实用但常被忽略的能力:不需要任何训练数据,直接用掩码语言模型的对数几率估计突变的影响。
# 掩码目标位点,比较野生型与突变型氨基酸的 log-prob
tokens_masked = tokens.clone()
tokens_masked[0, pos + 1] = alphabet.mask_idx # +1 因为有起始 token
with torch.no_grad():
logits = model(tokens_masked)["logits"]
log_probs = torch.log_softmax(logits[0, pos + 1], dim=-1)
score = log_probs[alphabet.get_idx(mut_aa)] - log_probs[alphabet.get_idx(wt_aa)]
# score < 0 提示该突变可能有害
在 ProteinGym 等突变效应基准上,这种零样本打分与实验数据的相关性相当可观,对抗体工程、酶改造做初步排序很有用。
常见用法与边界
- 当特征提取器:把 per-protein 向量接一个轻量分类/回归头,做溶解度、定位、热稳定性、DTI 等预测——这是最主流的用法。
- 当结构预测的 MSA 替代:ESMFold(见 195《ESMFold》)、Chai-1 的无 MSA 模式都基于此。
- 边界一:不理解真正的三维环境。它学的是序列共现统计,对需要精确几何的问题(如口袋形状)不能替代结构方法。
- 边界二:对人工设计序列外推弱。训练分布是天然蛋白,完全人工的序列落在分布外,打分参考价值下降。
- 边界三:长序列成本高。注意力复杂度随长度平方增长,超长蛋白需分段处理。
上手提示
- 默认从 esm2_t33_650M 起步,往上收益递减很快;
- 取嵌入务必去掉首尾特殊 token,否则残基索引整体错位;
- 零样本突变打分是被低估的能力,不需训练数据即可排序;
- 它替代不了结构方法,几何问题仍要交给结构工具。
延伸资源
- 结构预测版本:195《ESMFold》;对照路线:191《OpenFold》、192《Boltz》;
- 蛋白模型概念见「AI 模型」模块;
- 序列处理基础:210《Biopython》。