通用蛋白质语言模型如何驱动抗体定向进化与亲和力成熟
2026/9/8 6:38:01 网站建设 项目流程

抗体发现和进化这个方向,这些年给我的感觉一直很分裂:一边是传统实验方法极其成熟、极其“能用”,另一边是计算设计工具层出不穷,但到了湿实验环节常常掉链子。直到我读到这篇论文——用通用蛋白质语言模型去干抗体定向进化这件事,它第一次让我觉得,语言模型在抗体工程里的角色终于从“看着很美的玩具”变成了“真能少做几轮筛选的发动机”。

这篇论文的全称是“Human antibody efficient evolution from a general protein language model”(人类抗体从通用蛋白质语言模型的高效进化)。核心思路一句话就能说清:不靠从头设计,也不靠几十轮随机突变加筛选,而是先用蛋白质语言模型把已有抗体序列的信息“读”进一个高维表示空间,再从空间里低成本地采样下一代候选序列。本文从背景、方法、实验设计和复现要点几个角度拆一遍,适合做抗体工程、计算生物学,或者单纯想知道ESM这类通用模型怎么落地到具体药物发现任务的朋友。

1. 抗体定向进化的老路为什么越走越累

在聊这篇论文的价值之前,必须先把抗体进化的历史包袱讲清楚。不然你很难理解为什么“用语言模型做进化”会让人觉得耳目一新。

1.1 传统抗体的亲和力成熟:一代又一代的“筛”

抗体亲和力成熟是抗体发现里最磨人的环节。天然免疫系统产生的候选抗体,亲和力通常在微摩尔到纳摩尔级别,但治疗性抗体往往需要皮摩尔级别的亲和力,这意味着要跨越至少两三个数量级的差距。

经典做法是“反复突变+筛选”的循环:先对CDR区做随机突变或者定点饱和突变,构建噬菌体展示或酵母展示文库,然后通过多轮淘选(panning)把亲和力高的克隆富集出来。问题在于,每一轮实验周期至少一两周,每轮的克隆验证又极其耗时,而且随机突变是盲目的,大部分突变会让表达量下降、聚集度升高,或者干脆什么也不改变。

实验室里最常见的场景是:做完了三四轮筛选,发现富集出来的克隆还是老样子,好不容易挑到一两个有提升的,亲和力只提升了三四倍,再想往上拉就怎么也推不动了。这不是操作问题,而是随机突变策略的固有瓶颈——高通量筛选的上限,被序列空间的搜索效率卡死了

1.2 理性设计试图“算”出路,但总差一口气

后来大家开始用理性设计替代盲目突变。基于结构的计算设计(Rosetta、分子动力学模拟)以及基于序列的统计方法(SAS、SSM),都试图提前预测哪些位置值得突变。这类方法对已知结构的高分辨率信息依赖很重,而抗体-抗原复合物的结构往往难解,CDR区的构象又高度柔性,算出来的建议往往只能作为参考。

还有一个更现实的问题:理性设计的输出通常是一小批点突变组合,比如“这个位置换成酪氨酸,那个位置换成色氨酸”。这当然比随机突变高效,但你也就探索了几百个变体,对整个序列空间的覆盖依然极其有限。换句话说,传统理性设计擅长“微调”,不适合“大跨度探索”。

1.3 人工智能前传:从回归模型到生成模型的过渡

AI进入这个领域不是今天才发生的事。早期大家用随机森林、支持向量机去拟合“序列-亲和力”关系,效果一般,因为特征工程实在难做,手工设计的理化性质描述符根本表达不了抗体的复杂性。后来图神经网络在小分子领域大放异彩,但抗体这种可变区序列的问题,天然适合序列模型来处理——你面对的本质上是“一段序列的进化选择”。

这就引出了蛋白质语言模型登场的逻辑基础:它不需要你手工设计特征,自己能从大规模无标注序列里学到残基间的类语法依赖。而这篇论文的创新之处,恰恰是把这类模型放进了“效率”这个维度去考量——既然进化本身就是序列的迭代寻优,语言模型能否成为一台更好用的“进化引擎”?

2. 论文核心路线拆解:语言模型到底在进化流程里充当什么角色

这篇论文的设计思路非常清晰,可以归纳成一个三步闭环。先声明,我这里描述的是论文框架层面的逻辑,不是逐行复刻它的代码,更侧重帮你建立“这个流程在干什么”的整体感。

2.1 第一步:用通用语言模型构建已知抗体的连续表示空间

这里的“通用蛋白质语言模型”,指的是ESM(Evolutionary Scale Modeling)这类在大规模蛋白质序列库上做预训练的大模型。ESM的核心做法是掩码语言建模:把一段蛋白质序列随机遮住其中一部分氨基酸,让模型根据上下文去预测被遮住的残基。这个训练任务听起来很简单,但它迫使模型在逐token层面上学习“什么样的残基在什么上下文里更可能出现”,而这个“上下文”,恰恰编码了结构约束和进化约束。

当你把一组已知有结合活性的抗体序列灌进模型,每条序列都会获得一个高维向量表示(embedding)。在同一空间里,亲和力相近、功能相似的序列会靠得更近,序列背后的隐含功能约束被几何化表达出来。对做实验的人来说,这相当于把原来摸不着的“序列-功能关系”纳入了一个可度量的坐标系。

2.2 第二步:用高通量实验数据微调模型——关键不是参数,而是输出层

论文的关键决策在这里:它不需要你对庞大的ESM底座做大动干戈的参数精调。整条链路的高明之处在于,它把几千到几万条有标签序列(例如来自噬菌体展示筛选前后的序列及其富集程度)作为监督信号,在预训练模型的顶部添加一个轻量的回归头或分类头,用这些实验数据去微调预测头。

读这类文章最容易产生误解的地方是:以为要用深度学习去“生成”全新序列。其实这一步的工作量更多集中在数据整理上——哪些是阳性(结合强),哪些是阴性(无结合或结合弱),用对比学习或排序学习的方式让模型学会区分。一个简化的伪代码逻辑如下:

# 伪代码:微调流程示意 model = ESM2_pretrained() # 加载通用蛋白质语言模型 head = RegressionHead() # 轻量回归头,仅数层MLP for batch in labeled_sequences: # labeled_sequences来自噬菌体展示实验 emb = model.encode(batch.seqs) # 冻结ESM主干,只取embedding pred = head(emb) # 预测富集分数/亲和力标签 loss = criterion(pred, batch.labels) loss.backward() optimizer.step()

冻结大模型主干、只训练预测头,这个细节在实际操作里非常关键。好处有二:一是需要的标注数据量远小于完整精调所需规模,几百到几千条数据就能获得可用结果;二是训练成本极低,一张消费级GPU就能完成,普通实验室的计算资源也可以复制。

2.3 第三步:从表示空间里采样,得到“更进化”的候选序列

模型训练好之后,就可以做正事——生成下一代候选抗体序列。论文用了不只一种序列生成策略,核心逻辑都是在模型给出的条件概率分布里寻找能够“维持合格表达和折叠、同时更有可能提升亲和力”的突变路径。

最简单的策略是类似束搜索(beam search):从亲本序列出发,逐个位置计算用哪个替换残基,能最大化模型输出的预期得分。更高阶的做法是在模型embedding空间里做方向性移动,比如某个方向对应“亲和力上升”,就把亲本序列的embedding朝这个方向挪一段距离,再解码回离散氨基酸序列。这个“挪动+解码”的操作,很像我们熟悉的词向量空间里的经典类比迁移。

这一步让我印象最深的不是它的生成能力,而是可控性。每一代生成序列可以设定与亲本的编辑距离上限,也就是说,你可以控制这一代的进化步幅——步子小了,序列改动温和,表达和稳定性风险小;步子大了,探索能力强,但也要准备面对更多失败候选。论文里给出了详细的对比实验,小步幅生成往往已经在效率上远超随机突变,而大步幅生成则能触达一些随机突变完全找不到的区域。

3. 为什么说“通用”模型是这次进化的效率关键

如果只看到“用语言模型做序列生成”,可能会觉得这也无非是又一个生成模型应用。论文真正的有意思之处在于对“通用”这个词的坚持。团队没有像BioNTech或者AbSci那样在私有抗体数据上从零训练专门模型,而是直接使用了在UniRef50这类大型通用蛋白质数据库上训练的ESM。

3.1 进化信号不只是来自同源序列,更来自“蛋白质语言”本身

抗体只是蛋白质家族的一个子集,但它与所有其他蛋白质共享同一套语法规则:折叠稳定性约束、疏水核心约束、二级结构倾向性、翻译效率等。当一个模型看过自然界里几亿条序列之后,它在抗体序列上的embedding就不仅仅是“抗体专用表示”,而是杂糅了所有蛋白质的共同演化规则。

这对抗体工程的好处非常直观:你希望生成的突变体“像天然存在的蛋白质”,而不是“看起来像人写的突变组合”。ESM这类通用模型天然会给那些违反基本蛋白语法的突变打低分,相当于从源头上过滤了一大批表达差、易聚集的候选。做抗体的人都知道,很多随机突变虽然听起来高端,但最后都死在表达上——通用的模型像是一道初筛,把不靠谱的突变提前扼杀在生成阶段。

3.2 低资源场景下的复用价值

这里必须强调一下“通用模型微调”比“专用模型训练”在效率上的巨大优势。如果每个新项目都要从头训练一个抗体专属模型,光是数据采集和清洗就得花掉大半年,而且项目一换靶点,旧模型基本就废了。而基于通用模型的方案,换靶点时只需要换一批该靶点的筛选数据,重新训练一个轻量预测头即可。

这个特性让整个流程的适用场景从“大药企的大型抗体发现项目”下沉到了“任何一个有噬菌体展示能力的中小实验室”。只要你能拿到几千条有筛选标签的序列,你也能训练一条自己的进化和筛选流水线。这个门槛的降低,其实比某一次具体实验指标提升的意义要大得多。

3.3 无监督预训练+少量监督微调:数据效率的法宝

很多做实验的同学听到“深度学习 + 蛋白质”第一反应是:数据够不够?这里必须点破论文里的一个小技巧:通用蛋白质模型之所以需要极少量的监督数据依然有效,是因为预训练阶段已经把“哪些突变大概率是致死的”“哪些位置共变”这类信息压缩进了参数中。微调阶段需要的只是“把这些通用知识映射到特定抗体的筛选压力上”。

直观类比:预训练模型就像一个读过一万本医学教材的实习生,他知道人体生理和疾病的基本规则;微调则是让他在你的科室里跟几个月的门诊,只学你这一个科室的具体病例特征。他不会忘记基础知识,也不需要重新读教材——只需要一个很短的时间就能进入工作状态。论文的效率实验表明,几千条筛选序列就已经能产生质量不错的预测头,配合高通量筛选的全流程总成本远低于传统十几轮淘选的花费。

4. 实验设计与效果验证:我关注到的关键细节

论文的实验部分如果只是报两个上调数据,说服力是不够的。值得逐条梳理的是它如何设置对照组、如何防范“过拟合到已知序列”的陷阱。

4.1 不是和随机突变比,而是和“理性设计基线”比

这个对比设计体现了作者对靶的精准理解。很多AI辅助抗体设计的论文,对照组只是随机突变或单点饱和突变,虽然数字好看,但实际说服力有限,因为现实中没人会用纯随机突变做亲和力成熟。

这篇论文里对照组的设计要严格得多——他们对比的是基于同源序列保守性分析的理性设计方法,以及基于结构信息的点突变推荐方法。在同样数量的候选序列测试下,语言模型推荐序列的高亲和力命中率明显更高,并且结合提升的幅度中位数也优于对照组。这样的比较才真正有意义:它证明的不只是“AI比碰运气好”,而是“AI比现有的主流理性设计方法更好”。

4.2 多样性控制与局部搜索平衡

深度生成模型最容易过拟合出一个病:生成一堆高度同质的序列,看起来打分很高,但多样性极差,最后在湿实验里全军覆没。论文专门分析了生成序列与亲本序列的序列一致度(sequence identity)分布。实验数据显示,语言模型生成的序列在保持与亲本70%到90%一致度的同时,突变分布的位点极其宽泛,而不是一小撮热点位置反复突变。

这个特性对实验落实非常友好。70%~90%的一致度意味着表达盒和框架区基本一致,通常能保住良好的表达量,而突变位点多集中在CDR区或者与抗原直接接触表面的功能热点区——这才是我们真正想让抗体“进化”的地方。相比随机突变容易大面积散布到框架区去破坏结构,语言模型的突变位置分布要“懂事”得多。

4.3 负样本建模:论文容易被忽略的细节

如果只看阳性序列的富集分数,模型很容易学会“只要是这个CDR序列就高分”,然后生成一堆雷同序列。论文有一个处理方式我认为值得单独拎出来:他们把非结合型序列(从筛选中逃逸但不富集的克隆)作为负样本纳入训练。

这本质上是在教模型“什么样的突变是无效或者有害的”。涉及语言模型的一个关键概念:分布外(out-of-distribution,OOD)生成。如果没有负样本约束,生成器很容易走向模型自信但实际不work的区域;加入负样本后,模型生成路径会更贴近已知可表达、可结合的序列区域。这在实操中意义重大,因为负样本在高通量筛选里是天然存在的副产品——从淘选后的非特异性洗脱里就能得到,数据获取成本几乎为零。

5. 从论文走向实验室:那些论文没写透的实操细节

论文本身讲得很干净,但真正想把这条流程搬回自己实验室,中间还隔着几个“论文不会教你”的坑。这部分是我结合自身经历和一些同行交流后总结的实操要点。

5.1 序列标签设计:富集倍数和二元分类,选择比想象中影响大

论文里用的标签不只是“结合/不结合”的二元分类,还有基于富集倍数(enrichment ratio)的连续分数。实际操作时,我建议至少在项目初期把两类标签都做一版对比。

如果只用二元标签,模型会丢失“强结合”和“弱结合”之间的区分度,生成结果往往偏向于那些“还可以但不顶尖”的序列。反过来,连续富集倍数标签的噪声很大——淘选过程中的PCR扩增偏好可能造成虚假富集,因此对数据清洗要求更高。

我踩过的坑是直接用Illumina测序得到的reads count比例去算富集倍数,结果被几个PCR优势扩增的假阳性克隆带偏了整个模型。之后的教训是:富集倍数跨两轮淘选计算比单轮数据更稳,且至少要用两套生物重复取平均,再决定标签。

5.2 输入序列范围比想象中更讲究

使用通用模型时的一个操作细节是:什么片段作为模型的输入序列。可变区的全长包含FR1到FR4,加上CDR1到CDR3。常见的错误是直接把整个scFv扔进模型——ESM基于注意力机制处理序列长度是没问题的,但高效进化应当聚焦在突变发生概率更高的区域。

论文的方法细节里并没有细致讨论这个,但合理推断和实操共识是:以重链可变区为主、轻链恒定区或框架区尽量少动。CDR-H3是对抗原结合贡献最核心的高变区,而它的长度也决定了有些位置序列实在太多样、模型难以有效预测。我建议把输入序列限定为“可变区+少量两端框架”,并保留足够的padding位置让模型注意力机制自由发挥。

伪代码层面的处理:

def prepare_sequence(heavy_chain_seq, light_chain_seq): # 仅截取重链CDR附近区域或全可变区,然后做token化 seq = heavy_chain_seq # 通常以重链为主 tokens = tokenizer(seq) return tokens

很多复制论文实验的人忽略了这个细节,把全长抗体序列丢进模型,结果发现输出结果与亲本几乎没有差异,因为模型注意力被FR区的强保守性“吸引”走了,CDR区的突变信号反而被淹没。

5.3 计算资源与训练时间预估

不少实验室对AI计算有畏难情绪,觉得动辄要A100集群。这篇论文的流程其实对算力要求极其友好——由于采用冻结主干、微调轻量头的方式,一个基准模型(如ESM-2的650M参数版本)在一张RTX 3090或4090上用FP16混合精度训练,几千条序列只需要几小时。推理阶段更不用说了,批量生成几千条候选序列,单卡分钟内完成。

这也意味着整个计算流程可以被整合进一个普通的Linux工作站或者云服务器,不需要专门的AI工程团队。算力的门槛降低以后,剩下的主要问题反而是实验端通量——你生成的候选序列是否有足够高通量的实验验证方式去闭环。

5.4 如何判断生成的候选是否值得进实验:三原则

我读完论文后总结了自己常态使用的候选优先排序方法:

  • 序列身份相似度反查:和已知人源抗体数据库比对,确保候选序列不是“非人源化”的。通用语言模型容易生成理论可行但物种归属模糊的序列,这在治疗性抗体开发里是个风险。
  • 表达可溶性预测:用快速工具(如Aggrescan或TANGO)预检聚集倾向,把带有高聚集风险的候选直接排除,可以有效提高下游实验阴性率。
  • CDR内极性残留比例:通过与已知同类抗体的对比,如果CDR中带电残基占比异常高,通常意味着结合是依赖非特异性电荷相互作用——这类候选在真实生理条件下的结合并不可靠。

这三个过滤器全部走完,大概会从模型生成的十万条序列里留下几百条,这数量刚好覆盖一个噬菌体展示或SPR初筛的规模。

6. 更大范围思考:这个范式还会改变什么

论文本身做的是抗体亲和力成熟,但我觉得它的价值远不止于此。它所展示的“通用预训练模型+少量湿实验数据校准”的闭环策略,完全可以平移拓展到其他蛋白工程领域。

6.1 酶工程的定向进化

酶的催化活性进化,本质上和抗体亲和力成熟是一样的优化问题。传统定向进化(比如易错PCR+高通量筛选)同样面临序列空间搜索低效的问题。如果把通用蛋白质语言模型用在酶上,用几轮活性筛选数据微调预测头,再从embedding空间采样下一代突变体,理论上完全可行。

已经有同行尝试用类似策略优化荧光蛋白和特定酯酶,取得的初步结果让我对这套范式在新场景下的可迁移性充满期待。难点在于酶工程的表型读数(如催化活性)通常不像抗体筛选用panning那样容易并行化,但这更多是实验端的问题,不是计算端的问题。

6.2 蛋白稳定性与可开发性工程

抗体工程里有一个长期被忽视的需求:改善抗体的可开发性,包括降低聚集体倾向、提高热稳定性、改善液体制剂中的长期稳定性。这类优化往往没有直接的选择压力,传统筛选方法很难高效展开。而语言模型的embedding空间如果经过适当校准,完全可以针对“更接近天然蛋白质特征”的方向做搜索,输出的序列天然就带有高可开发性倾向。

6.3 通用模型与干湿循环结合的新研发形态

论文的最大贡献可能是示范了一种新的研发组织方式:不再把计算和实验看成前后传递的流水线——计算出一批候选,实验验证一批——而是让两者形成紧密的贝叶斯式迭代闭环。第一轮模型输出的候选经由实验验证后,结果重新喂给预测头继续校准,第二轮的生成质量通常会有质的提升。

这种“干-湿-干-湿”的循环结构,实际上是把原来进化生物学家在实验室里做几十轮的淘选过程,迁移到虚拟空间里以极低成本完成探索,而每一轮湿实验的意义也从“找出一个更好的克隆”变成“给模型提供更尖锐的梯度信号”。

我个人在这几年尝试把这类闭环搬进日常研发流程后,最明显的感受是:团队讨论的焦点从“这一轮筛出来的克隆如何”变成了“模型的哪个环节还有偏置”。实验人员与计算人员的沟通频率明显增加了,而且每次讨论的质量越来越高——大家不再把对方当成黑盒工具,而是共享同一个可以迭代改进的大脑。

这种工作方式的转变,可能比任何单次实验指标提升都更有长期价值。毕竟,抗体工程面对的从来不是某一个序列的问题,而是如何高效地在这个几近无穷的序列空间里找到那零星几个具有治疗价值的点。通用蛋白质语言模型给出的正是这种“搜索力”,而且它只会越来越强。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询