想象你在欧洲古修道院的档案室里,面前散落着同一部史诗的十几份抄本。每份抄本都经历了数百年的辗转传抄:有的缺了开头,有的多了几段注释,有的把“王”抄成了“玉”。校勘学者要做的事,就是把这些抄本摊开,逐行对齐文字,找出哪些句子在每一本里都惊人地一致——这些“金句”往往就是原典的核心;同时观察哪些地方产生了分支演化,谁跟谁更亲近。这个过程,本质上就是“多序列比对”。 蛋白质的世界里,同一家族的蛋白就像这些抄本:它们从共同的祖先蛋白演化而来,在漫长的进化中不断插入、删除、替换氨基酸。多序列比对(MSA)就是把几十上百条这样的“蛋白抄本”按进化坐标逐列对齐,让研究者一眼看出哪些位置“金句不换”(保守残基),哪些位置充满变化。AlphaFold之所以能惊艳世界地预测蛋白质三维结构,关键一步正是从 MSA 这张“对读表”里读出结构约束与进化信号。

岗位关联

掌握 MSA,是理解 AlphaFold 的第一把钥匙;也是 AI 制药、蛋白设计、生物大模型从业者绕不开的职业技能。

目录
  1. 可视化演示
  2. MSA基本概念
  3. MSA构建方法
  4. MSA特征表示
  5. MSA编码网络
  6. 质量与精度
  7. 局限与优化
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示多序列比对保守性分析、共进化矩阵与残基接触预测、以及MSA张量在AlphaFold Evoformer中的数据流,揭示MSA驱动蛋白质结构预测的核心机制。

本节配有交互动效(进入视口后自动加载,约 3KB)。

多序列比对保守性分析 保守位点:多序列同一位置残基一致,用高亮色标注 变异位点:不同序列在该位置残基不同,反映进化差异 空位插入:序列插入缺失用gap表示,保持比对对齐 Conservation = freq(max_residue) / N_seq 保守性反映该位置在进化中的约束程度

MSA基本概念

古籍校勘的第一步,是确认哪些抄本属于同一部史诗。你不可能把《荷马史诗》和《论语》摊在一起逐行对读——那不是校勘,是胡闹。蛋白序列也一样:只有同源序列(来自共同祖先的序列)才有资格进入同一张比对表。MSA 要回答的问题就是:这些序列在进化坐标系里,哪些位置彼此对应?

所谓多序列比对,就是把 N 条同源序列排列成一个矩阵,行是序列,列是进化上对应的残基位点。插入或删除事件会让某些序列在某列出现空白,于是比对程序引入“——“这样的空位符号来补齐。这个矩阵的价值在于:它把”每条序列各自的长相“转变成了”所有序列共享的坐标系”。AlphaFold 后续所有关于结构约束的推理,都建立在这个坐标系之上。

真正重要的发现藏在列里:如果某个位点在几乎所有序列中都保持同一种氨基酸或性质相近的氨基酸,这个位点就被称为保守位点。回到抄本比喻,这就像“众本皆同”的关键句子——反复被转录而不出错,说明它构成了原典不可动摇的骨架。蛋白质中这类位点往往直接参与催化、结合底物或维持核心折叠,破坏了它,蛋白就会“散架”。

把 MSA 中每一列的保守率连起来,就得到一条“保守性曲线”,也就是序列谱。AlphaFold 可以像老练的校勘者一样,先扫一眼哪些句段“众本皆同”,判断哪些残基对维持蛋白三维形态起决定作用——这正是它从序列走向结构的出发点。

Rj=1N∑i=1NI(aij=Aj)\displaystyle R_j=\frac{1}{N}\sum_{i=1}^{N}\mathbb{I}(a_{ij}=A_j)
其中 \(N\) 是序列条数,\(a_{ij}\) 是第 \(i\) 条序列第 \(j\) 列的残基,\(A_j\) 是第 \(j\) 列出现频次最高的“共识残基”,\(\mathbb{I}\) 是指示函数:条件成立取 1,否则取 0。这个公式计算的就是“共识残基在该列出现的比例”,即该列的保守率。
  1. 固定列并统计频次取第 \(j\) 列,这一列里有 \(N\) 个字符(来自 \(N\) 条序列),统计这 \(N\) 个字符中每种氨基酸出现的次数。
    Aj=arg⁡max⁡a∑i=1NI(aij=a)\displaystyle A_j=\arg\max_a\sum_{i=1}^{N}\mathbb{I}(a_{ij}=a)
  2. 找到共识残基出现次数最多的那个氨基酸 \(A_j\),就是这一列的“多数派”,也是后续比对打分的重要参照。
    I(aij=Aj)\displaystyle \mathbb{I}(a_{ij}=A_j)
  3. 逐条比较并求均值对每条序列检查 \(a_{ij}\) 是否等于 \(A_j\),相等记 1,不等记 0,最后除以总序列数 \(N\)。
    Rj=1N∑i=1NI(aij=Aj)\displaystyle R_j=\frac{1}{N}\sum_{i=1}^{N}\mathbb{I}(a_{ij}=A_j)
  4. 解读数字区间\(R_j=1\) 表示全列一致,是高度保守位点;\(R_j\) 接近 0.2~0.3 则表示这个位置氨基酸花样繁多,通常是暴露在表面的可变区。
    0<Rj≤1\displaystyle 0<R_j\leq 1

MSA构建方法

确定了要校勘哪部史诗后,下一步是满世界搜集抄本。你不能只在档案室翻出三本就开工,而是要去各大图书馆、私人收藏、地窖遗迹里尽量搜罗。对应到蛋白质层面,就需要在大型序列数据库中搜索目标蛋白的同源序列。常用工具有 BLAST、HMMER、MMseqs2 等,它们以“序列与序列”或“序列与统计模型”的方式快速召回候选。

搜回来的序列鱼龙混杂,有的亲缘很近,有的只是在某一段意外相似。于是 AlphaFold 采用多轮迭代比对:先用已有序列建立位置特异的统计模型(HMM),再用这个模型去数据库里搜更远的同源序列;搜到的新成员又回馈给模型,让模型更灵敏。如此反复三五轮,就像校勘学者不断从引文中发现新抄本,再把新抄本的内容融入校勘记。

随后是去除冗余。设想你从同一修道院抄来了二十本几乎一模一样的副本,它们既不能提供新的校勘线索,还会让后面的统计失真。MSA 构建同样要去掉同一性超过阈值(如 80%)的序列,避免“一家人反复刷票”。但直接删掉又可能丢掉罕见但有价值的变体,因此更精细的做法是序列重加权:不删序列,而是给每条序列一个权重,重复的伙伴越多,权重越小,让那些“孤本”的声音被放大。

手工搜集抄本的时代早已过去,但 MSA 构建的哲学没变:广搜、精校、去重、加权。这一套流程做下来,得到的 MSA 矩阵就像一份经过甄别的校勘本,既有深度也有广度,为后面的 AI 模型提供了干净又丰富的“原料”。

wi=1∣{k:pid(i,k)>θ}∣\displaystyle w_i=\frac{1}{\left|\{k:\mathrm{pid}(i,k)>\theta\}\right|}
这里 \(\mathrm{pid}(i,k)\) 表示序列 \(i\) 与序列 \(k\) 的序列同一性百分比,\(\theta\) 是冗余判定阈值(通常取 0.8)。分母的集合记录了“与序列 \(i\) 相似度超过阈值的序列有多少条”。这个数越大,说明 \(i\) 的重复版本越多,权重 \(w_i\) 就越小。
  1. 设定冗余阈值令 \(\theta=0.8\),意味着两条序列同一性超过 80% 时,视为同一“抄本来源”,在统计上可以合并。
    θ=0.8\displaystyle \theta=0.8
  2. 配对比较计数将序列 \(i\) 与 MSA 中其余每一条序列做双序列比对,统计同一性大于 \(\theta\) 的序列条数,记为 \(K_i\)。
    Ki=∣{k:pid(i,k)>θ}∣\displaystyle K_i=\left|\{k:\mathrm{pid}(i,k)>\theta\}\right|
  3. 取倒数作为权重令 \(w_i=1/K_i\),重复伙伴越多,权重越小;独一份的序列获得最大权重 1。
    wi=1Ki\displaystyle w_i=\frac{1}{K_i}
  4. 在特征统计中的角色后续计算保守率、共进化信号时,每条序列按 \(w_i\) 加权进入统计,从而让罕见变异不被大量冗余序列淹没。
    f^j,a=∑iwi⋅I(aij=a)∑iwi\displaystyle \hat{f}_{j,a}=\frac{\sum_i w_i\cdot\mathbb{I}(a_{ij}=a)}{\sum_i w_i}

MSA特征表示

校勘学者整理好抄本之后,不能直接把羊皮纸塞给排版工人,而是要先制成“逐字对照表”和“异文统计表”。神经网络同样读不懂原生态的 MSA 表格,需要把这些符号转化为数值特征。这是从“生物信息”到“AI 可计算”的桥。

最基本的编码方式是独热编码:20 种标准氨基酸各占一个维度,一个残基就是 20 维的 0/1 向量;空位则单独占一个维度。于是每条序列变成“长度 × 21”的矩阵,整个 MSA 变成“序列数 × 长度 × 21”的张量。但 AlphaFold 并不满足于这种平面表示,它更关心列与列之间的关系:第 3 列和第 15 列是不是常一起变异?

这种“一起变异”就是进化协方差。想象抄本里有两处文字:一处写“国王”,另一处写“战车”。你发现只要某本抄本在第一处写成“王”,第二处准写成“战车”;写成“玉”的抄本,第二处则变成“战车倾覆”。这种成对出现的变异模式,对校勘学者来说是重要的线索——两处可能共同构成一个典故。对蛋白质而言,两个残基若在三维空间中物理接触,它们就必须协同突变来保持结构稳定,因此共进化信号是推断空间距离的强证据。

二维配对概率、进化协方差这些特征,本质上都在做同一件事:把 MSA 中隐含的“空间接触猜想”翻译成数字。AlphaFold 的输入端,正是由这些特征组成的多维表示,就像校勘学者把抄本中的每一个异文都登记造册,供后续运筹帷幄。

ϕij(a,b)=log⁡pij(a,b)pi(a) pj(b)\displaystyle \phi_{ij}(a,b)=\log\frac{p_{ij}(a,b)}{p_i(a)\,p_j(b)}
\(p_i(a)\) 表示第 \(i\) 列出现氨基酸 \(a\) 的频率,\(p_j(b)\) 是第 \(j\) 列出现 \(b\) 的频率,\(p_{ij}(a,b)\) 是同一行上两列同时出现 \((a,b)\) 的联合频率。如果两列独立随机,联合频率应约等于两个单点频率的乘积;实际偏高则说明存在协同进化。
  1. 计算单点背景频率分别统计第 \(i\) 列和第 \(j\) 列中各氨基酸的出现比例,作为独立假设下的基准概率。
    pi(a)=1N∑k=1NI(aki=a)\displaystyle p_i(a)=\frac{1}{N}\sum_{k=1}^{N}\mathbb{I}(a_{ki}=a)
  2. 计算联合频率统计所有序列中第 \(i\) 列氨基酸为 \(a\)、第 \(j\) 列同时为 \(b\) 的行数占比。
    pij(a,b)=1N∑k=1NI(aki=a)⋅I(akj=b)\displaystyle p_{ij}(a,b)=\frac{1}{N}\sum_{k=1}^{N}\mathbb{I}(a_{ki}=a)\cdot\mathbb{I}(a_{kj}=b)
  3. 取对数比值把联合频率除以两个背景频率的乘积再取对数,得到该残基对的共进化得分。
    ϕij(a,b)=log⁡pij(a,b)pi(a) pj(b)\displaystyle \phi_{ij}(a,b)=\log\frac{p_{ij}(a,b)}{p_i(a)\,p_j(b)}
  4. 判读极性\(\phi>0\) 说明该残基对偏好共同出现,可能在空间上邻近;\(\phi<0\) 说明相互排斥,可能不能同时存在于稳定结构中。
    ϕij(a,b)≷0\displaystyle \phi_{ij}(a,b)\gtrless 0

MSA编码网络

校勘资料备齐后,最见功力的环节是“对读”。老练的校勘者会左眼看甲本、右眼看乙本,先顺着某一行读通上下文,再跳列对比不同抄本在同一位置的分歧。AlphaFold 的编码器架构——MSA Transformer,干的就是这件事。

注意力机制的本质是“按需聚焦”。Transformer 一开始用于自然语言时,只处理一条句子内部的词与词关系。到了 MSA 场景,数据是二维的:一个方向是“序列维度”(行),另一个方向是“位置维度”(列)。于是研究者设计了两种注意力:行注意力和列注意力。

行注意力沿每条序列内部流动:对于第 \(i\) 条序列,它让该序列第 \(j\) 个位置的表示去“关注”同一条序列里其他位置的表示。这就像校勘者先完整读通一本抄本,理解其内部文气,判断哪些字词因上下文而容易被误抄。列注意力则沿固定列跨序列流动:它让第 \(j\) 列里来自不同序列的残基互相交流,捕捉哪些位点在不同序列中反复协同变化,也就是前面说的共进化信号。这种“先读行、再比列”的交替机制,正是 MSA Transformer 能高效抽取进化信息的关键。

在 AlphaFold 的 Evoformer 中,MSA 表示和残基对特征不是各管各的,而是通过注意力层反复交换信息:列注意力把“哪些位点会协同变异”告诉成对特征模块,成对特征模块又把“这两个残基可能靠得很近”的几何提示传回序列表示。这种信息融合让 MSA 的价值被发挥到极致——好比校勘者既比对了文字异同,又考证了典故背景,最终能复原出抄本背后的历史现场。

Attention(Q,K,V)=softmax(QK⊤dk)V\displaystyle \mathrm{Attention}(Q,K,V)=\mathrm{softmax}\left(\frac{QK^{\top}}{\sqrt{d_k}}\right)V
\(Q\) 是查询矩阵,\(K\) 是键矩阵,\(V\) 是值矩阵,\(d_k\) 是键向量的维度。内积 \(QK^{\top}\) 衡量“当前位置应该多关注另一个位置”,除以 \(\sqrt{d_k}\) 做缩放防止数值过大,最后用 softmax 归一化成权重,加权求和 \(V\) 得到输出表示。
  1. 构造三份投影对输入表示分别乘上三个不同的权重矩阵,得到查询 \(Q\)、键 \(K\)、值 \(V\)。
    Q=XWQ,K=XWK,V=XWV\displaystyle Q=XW_Q,\quad K=XW_K,\quad V=XW_V
  2. 计算关联分数矩阵用查询与所有键做点积,得到每个位置对其他位置的原始关注分数。
    S=QK⊤\displaystyle S=QK^{\top}
  3. 缩放并归一化除以 \(\sqrt{d_k}\) 后再做 softmax,让所有关注权重非负且总和为 1。
    A=softmax(Sdk)\displaystyle A=\mathrm{softmax}\left(\frac{S}{\sqrt{d_k}}\right)
  4. 加权聚合信息用注意力权重 \(A\) 对 \(V\) 加权求和,得到更新后的表示。
    Output=AV\displaystyle \mathrm{Output}=AV

质量与精度

同样是校勘,手头有 100 本抄本和只有 3 本抄本,结论的底气完全不同。MSA 的质量直接决定 AlphaFold 预测结构的可信度。这里的关键词不是“序列条数”,而是有效深度:真正提供独立进化信息的序列究竟有多少。

深度指 MSA 中序列的多少。序列越多,共进化统计的样本越大,信号越稳定;但前提是序列之间足够多样。如果 1000 条序列全是大肠杆菌里几乎一样的同源蛋白,那它们本质上只是 1 条独立证据重复了 1000 次。这就是多样性的意义——来自不同物种、不同进化距离的序列,才能带来不同的突变组合,撑起残基对的共变统计。

当 MSA 太浅时(比如只有几十条且高度相似的序列),共进化矩阵中大量残基对缺乏观测样本,模型只能更多依赖序列本身和模板信息来“猜”,预测精度显著下降。AlphaFold 在 CASP14 上的惊艳表现,很大程度上得益于它对 MSA 充分程度和充分多样性场景的建模能力。工程实践中,我们可以用有效序列数 \(N_{\mathrm{eff}}\) 来量化 MSA 的“信息含量”。

少数几条高质量的同源结构模板,可以在 MSA 深度不足时提供额外的几何约束,好比校勘时发现一张同时代的残页,虽然内容不完整,却直接给出了原典的版式。但模板依赖存在偏差风险,如果模板选错,反而会误导预测。因此现代工具强调“以 MSA 为主、模板为辅”——毕竟抄本再多,也取代不了对原文本身的判断。

Neff=∑i=1Nwi\displaystyle N_{\mathrm{eff}}=\sum_{i=1}^{N}w_i
\(w_i\) 正是第二节去冗余步骤算出的序列权重。把所有序列的权重相加,就得到这个 MSA 相当于多少条“独立序列”。1000 条几乎一样的序列,\(N_{\mathrm{eff}}\) 可能只有 5;而 100 条来自天南地北不同物种的序列,\(N_{\mathrm{eff}}\) 可能接近 90。
  1. 取出单序列权重回顾第二节的式 \(w_i=1/K_i\),每个 \(w_i\) 已经反映了序列 \(i\) 的独特性。
    wi=1∣{k:pid(i,k)>θ}∣\displaystyle w_i=\frac{1}{\left|\{k:\mathrm{pid}(i,k)>\theta\}\right|}
  2. 对所有序列求和把从 \(i=1\) 到 \(N\) 的权重加总,得到等效独立序列数。
    Neff=∑i=1Nwi\displaystyle N_{\mathrm{eff}}=\sum_{i=1}^{N}w_i
  3. 对比特例若所有序列两两同一性都低于阈值,则每条权重都是 1,\(N_{\mathrm{eff}}=N\);若所有序列完全相同,则每条的 \(K_i=N\),\(N_{\mathrm{eff}}=1\)。
    Neff∈[1,N]\displaystyle N_{\mathrm{eff}}\in[1,N]
  4. 工程经验阈值实践表明 \(N_{\mathrm{eff}}\) 低于 10 的 MSA 预测质量波动大,建议结合结构模板或单序列模型补充信号。
    Neff≥32 ⇒ 预测通常可靠\displaystyle N_{\mathrm{eff}}\geq 32\ \Rightarrow\ \text{预测通常可靠}

局限与优化

再勤奋的校勘学者也有束手无策的时候:如果一部史诗只剩一份孤本,没有任何其他抄本可供对读,那 MSA 就失去了用武之地。这类蛋白被称为孤儿蛋白——在数据库里找不到足够多的同源序列。此时 MSA 矩阵只有一行或几行,共进化信号几乎为零,AlphaFold 的预测精度会明显下滑。

业界给出了几条优化路线。首先,可以放宽搜索参数,用迭代比对挖掘遥远同源,但这会引入大量假阳性,属于“病急乱投医”。更稳健的方法是引入单序列特征:用蛋白质语言模型(类似 ESM)为单条序列提取进化上隐含的语义特征,再与 MSA 特征拼接输入结构模块。这相当于面对孤本时,从同一时代的其他文献、语言规律、书法风格来反推文本原貌,而不是只盯着孤本本身。

另一个重要工程环节是置信度评估。AlphaFold 会为预测结果输出一个逐残基的置信度分数——pLDDT。这个分数能告诉用户:哪些区域可以放心用于药物设计,哪些区域基本是“乱猜”。它并非事后诸葛,而是模型在训练时就让结构模块“边预测边自我打分”的一部分。

AlphaFold 的新一代模型已经开始在某些场景下弱化甚至用单序列预测替代传统 MSA。这并不意味着 MSA 过时——恰恰相反,正是因为我们对 MSA 的构建、特征、编码和质量有了系统理解,才能设计出在 MSA 充足时发挥其威力、在 MSA 缺失时另辟蹊径的下一代工具。校勘学的终极目标不是复制抄本,而是理解文本;结构预测的目标也不是堆砌序列,而是揭示蛋白质折叠的底层规律。

pLDDTj=∑b=1Bcb pj(b)\displaystyle \mathrm{pLDDT}_j=\sum_{b=1}^{B}c_b\,p_j^{(b)}
模型把 LDDT 分数(预测残基与真实结构的局部距离差)划分成 \(B\) 个区间桶,每个区间有一个代表值 \(c_b\);\(p_j^{(b)}\) 是模型预测的第 \(j\) 个残基落进第 \(b\) 个桶的概率。pLDDT 就是按这些概率对桶代表值做加权平均,得到 0~100 的期望分数。
  1. 定义分数桶将 0~100 的 LDDT 分数切成 \(B\) 个区间,每个区间取中心值 \(c_b\)。
    cb=区间下界+区间上界2\displaystyle c_b=\frac{\text{区间下界}+\text{区间上界}}{2}
  2. 分类头输出概率结构模块的最后一层为每个残基输出它落在每个分数桶上的概率分布。
    pj(b)=exp⁡(zj,b)∑b′=1Bexp⁡(zj,b′)\displaystyle p_j^{(b)}=\frac{\exp(z_{j,b})}{\sum_{b'=1}^{B}\exp(z_{j,b'})}
  3. 加权平均求期望用 softmax 概率作为权重,对代表值 \(c_b\) 做加权求和,得到残基 \(j\) 的置信度。
    pLDDTj=∑b=1Bcb pj(b)\displaystyle \mathrm{pLDDT}_j=\sum_{b=1}^{B}c_b\,p_j^{(b)}
  4. 分数解读pLDDT > 90 通常意味着高置信度的核心结构;70~90 为可信的整体折叠;低于 50 的区域往往是无序区或比对极差的位置。
    pLDDTj∈[0,100]\displaystyle \mathrm{pLDDT}_j\in[0,100]

AI 应用场景

药物靶点的结构预测与可成药性评估

阶段:AI for Science 科学智能中的结构生物学环节

解决的问题:传统新药靶点验证需要冷冻电镜或晶体学解析结构,成本高、周期长;当药物化学家面对一个全新的激酶靶点时,往往等不起数月的实验周期。借助 AlphaFold,团队可以在拿到序列的当天构建 MSA、预测三维结构,并在数天内对潜在的药物口袋进行分析。

具体案例:某药物研发中心发现一个与耐药性相关的新激酶突变体。生物信息工程师先用 MMseqs2 在 UniRef 数据库中召回 2000 余条同源序列,构建 MSA 并计算 N_eff≈180,随后用 AlphaFold 预测结构,发现突变位点位于 ATP 结合口袋边缘,pLDDT=89。这个信息直接指导了后续虚拟筛选的盒子设定,将筛选命中率提升了 3 倍。

宏基因组暗物质蛋白的功能注释

阶段:AI+生物信息学中的数据挖掘与功能预测

解决的问题:土壤、海洋等环境样本中有大量未知功能蛋白,传统比对只能注释约 30%。通过构建包含这些“暗物质”序列的 MSA,共进化特征可以帮助预测其结构和功能类别。

具体案例:研究者从深海热泉宏基因组中拼装出数百条未知蛋白序列。其中一条长 180 残基的序列在公共库中只有 3 条同源序列,N_eff 仅 2.1,属于典型孤儿蛋白。团队用蛋白质语言模型补充单序列特征,预测出它是一种新型金属依赖水解酶,并通过 MSA 保守位点定位出催化三联体,随后实验验证成功。

新发传染病蛋白的快速结构预警

阶段:科学智能中的应急响应管线

解决的问题:新病毒出现时,其表面蛋白的结构对疫苗和中和抗体设计至关重要,但实验结构解析通常需要数周甚至更久。MSA 构建与结构预测可以将这一周期压缩到数小时。

具体案例:某疫情暴发初期,研究团队在获得新病毒刺突蛋白序列后 6 小时内,完成了同源搜索、MSA 构建与 AlphaFold 预测,发现其受体结合域与已知病毒结构高度相似,从而第一时间推测出潜在宿主受体,为公共卫生决策提供了关键依据。

Python 演示

python66 行
"""MSA conservation, reweighting and N_eff demo."""import randomfrom collections import Counter AAS = "ACDEFGHIKLMNPQRSTVWY"  def make_sequences(count, length):    seqs = []    for _ in range(count):        seq = "".join(random.choice(AAS) for _ in range(length))        seqs.append(seq)    return seqs  def align_sequences(seqs):    # simplified fixed-length alignment    return [list(seq.upper()) for seq in seqs]  def compute_conservation(msa_rows):    scores = []    n_seqs = len(msa_rows)    for col_index in range(len(msa_rows[0])):        col = [row[col_index] for row in msa_rows]        cnt = Counter(col)        majority = cnt.most_common(1)[0][1]        scores.append(majority / n_seqs)    return scores  def sequence_identity(seq_a, seq_b):    same = sum(1 for x, y in zip(seq_a, seq_b) if x == y)    return same / len(seq_a)  def effective_depth(sequences, threshold=0.8):    total_weight = 0.0    for target in sequences:        duplicates = sum(1 for other in sequences                         if sequence_identity(target, other) > threshold)        total_weight += 1.0 / duplicates    return total_weight  def print_msa(rows, limit=8):    for row in rows[:limit]:        print("".join(row))  def main():    random.seed(42)    sequences = make_sequences(60, 35)    msa = align_sequences(sequences)    print("--- aligned MSA (first 8 rows) ---")    print_msa(msa)    cons = compute_conservation(msa)    mean_cons = sum(cons) / len(cons)    print("mean column conservation:", round(mean_cons, 3))    neff = effective_depth(sequences)    print("N_eff:", round(neff, 2))    print("sequence count:", len(sequences))  if __name__ == "__main__":    main()
目的:用随机生成的模拟蛋白序列构建一个固定长度的 MSA,并计算每列保守率与有效序列深度 N_eff,演示 MSA 质量评估的核心操作。
  1. align_sequences(seqs)把字符串序列转成字符列表,模拟多序列比对后的矩阵。
  2. compute_conservation(msa_rows)对每一列统计出现最多的氨基酸,再除以行数得到保守率。
  3. sequence_identity(seq_a, seq_b)计算两条序列在相同位置上一致的残基比例,作为去冗余的判据。
  4. effective_depth(sequences)对每条序列统计相似伙伴数,取倒数后求和,得到等效独立序列数。
  5. 1.0 / duplicates重复伙伴越多,该序列权重越小,体现重加权思想。
  6. Counter(col).most_common(1)快速找出某列占多数的氨基酸,对应共识残基的计算。

常见误区

误区我一开始以为多序列比对就是把几条序列按字母顺序排成一个矩形,然后看每一列的字母是不是一样。那样的话,MSA 不就是个表格整理工具吗?

正解MSA 的核心不是“排整齐”,而是确定进化上对应的位置。两个蛋白可能在序列上差异很大,但在三维结构中占据同一空间位置,这才是比对要发现的对应关系。gap 的引入、远端同源的判定,都需要基于进化模型,而不是简单的字符匹配。就像校勘里判断“王”和“玉”是否同源,需要看上下文和版本传承,不能只看字形是否相近。

为何常见:因为大部分可视化工具会直接展示“已经对齐好的漂亮矩阵”,使用者看不到比对算法在背后反复权衡打分的过程,自然产生“只是排版”的误解。

误区我手上有一个蛋白的 5000 条同源序列,全都加进 MSA 里肯定能提高预测精度,毕竟数据多了信号就强。

正解序列数量的增加不等于信息量的增加。如果这 5000 条序列大部分来自亲缘极近的物种,它们本质上只提供了一个独立进化证据。冗余序列还会稀释罕见变异的统计权重,压低共进化信号。正确做法是先按序列同一性阈值去冗余,再用重加权计算 N_eff 来评估真正的信息含量。

为何常见:人们习惯性地认为“更多数据 = 更好模型”,忽略了生物序列的高度相关性——正如一百本从同一母本抄来的书,并不能提供一百种独立的校勘意见。

误区我觉得多序列比对是系统发育学的工具,用来画进化树的;AlphaFold 预测结构用的是深度学习,这两者似乎没什么关系。

正解在 AlphaFold 中,MSA 是结构预测的核心输入之一。MSA 提供的保守位点告诉模型哪些残基对折叠至关重要,共进化残基对则直接暗示它们在三维空间中的距离。MSA 在 AlphaFold 中的地位,相当于校勘学者手中的众本对照表——没有它,结构预测就成了凭感觉猜。

为何常见:传统教材先把 MSA 放在“进化分析”章节讲授,而 AI 结构预测是近年才进入视野的新内容,两者在知识体系中被天然割裂了。

误区我的蛋白在整个数据库里都找不到几个同源序列,MSA 几乎是空的,那结构预测这条路是不是走不通了?

正解虽然经典 AlphaFold 依赖 MSA,但现代方案已经发展出多条补救路径:用蛋白质语言模型的单序列特征替代部分进化信息,使用结构模板提供几何约束,甚至直接在训练时就加入“单序列预测”分支。孤儿蛋白的预测精度确实会低于 MSA 充足的情况,但并非完全不可用,pLDDT 会诚实地告诉你哪些区域可信。

为何常见:很多人从 AlphaFold2 的论文中看到“MSA is important“就推出”MSA is necessary”,忽略了深层模型和单序列替代技术的快速演进。

误区既然 MSA 越深越好,那我就在数据库里多迭代几轮搜索,把阈值放宽一点,让更多远缘序列加进来,总能提升质量吧?

正解迭代搜索会显著提升召回远缘同源的能力,但过度放宽阈值会引入大量假阳性——无关序列被强行比对进来,相当于校勘时把另一部主题相近但并非同源的诗集也当成了同一文本。这样的 MSA 会让共进化统计失真,反而拉低预测精度。工程上要用 N_eff、序列覆盖率等指标监控 MSA 质量,而不是盲目迭代。

为何常见:初学者容易把“搜索更多”等同于“更好”,没有意识到比对结果中存在显著性与特异性的权衡,而这正是生物信息学中最常见的陷阱之一。

面试题

Q1. 在多序列比对中,“保守位点”通常指的是什么?

单选题 · mid

  • A.同源序列中性质相似的残基在多序列里占比较大← 正确答案
  • B.仅有少数几个序列里偶然出现的残基列才叫作保守列
  • C.列中空位 gap 数量越多表示保守程度就会变得越高
  • D.每个序列中氨基酸总数相同的列就是保守的位点列

答案:A。保守位点强调“众本皆同”,即同源序列中性质相同或相似的残基在对应列占主导。B 描述的是稀有变异,C 混淆了空位与保守性,D 用“长度相同”偷换了概念——序列长度相同不代表进化上对应,只有通过同源比对确定的列才有资格讨论保守性。

Q2. AlphaFold 的 MSA 构建流程中,负责在大型数据库里召回同源序列的常用工具是?

单选题 · easy

  • A.ESMFold 只需要输入单条序列即可完成结构预测
  • B.PyMOL 在建模时自动做序列比对与同源搜索
  • C.BLAST 与 MMseqs2 搜索数据库并召回同源序列← 正确答案
  • D.Rosetta 通过物理能量函数随机扰动蛋白质骨架

答案:C。BLAST、MMseqs2、HMMER 都是常见的同源序列搜索工具,用户提交一条查询序列,工具在数据库中找出进化相关的序列用于构建 MSA。ESMFold 是结构预测模型而非搜索工具,PyMOL 是可视化工具,Rosetta 主要用于结构设计或精修,它们都不承担 MSA 构建中的同源召回任务。

Q3. 序列重加权公式 \(w_i=1/K_i\) 中,\(K_i\) 的含义是?

单选题 · mid

  • A.冗余阈值正则化为零以避免出现零除错误
  • B.搜索迭代次数越多则所有权重都会按比例放大
  • C.与序列 i 同一性超过阈值的序列参数的个数← 正确答案
  • D.序列 i 中所有氨基酸种类总数的两倍再加一

答案:C。\(K_i\) 统计与序列 \(i\) 高度相似(同一性超过阈值)的序列条数。如果某条序列有 50 个近亲副本,它的权重就变为 1/50,从而在统计中被稀释;如果是孤本,权重则为 1。A、B、D 都对 \(K_i\) 的来源和用途作出了错误的解释。

Q4. 关于 N_eff(有效序列深度),下列描述正确的是?

单选题 · easy

  • A.N_eff 就是 MSA 中序列的总数即使它们全部重复
  • B.N_eff 反映 MSA 中所有空位占全部残基的百分比
  • C.N_eff 是测序深度乘以平均覆盖度的乘积结果
  • D.N_eff 是去冗余后等效的独立同源序列数量← 正确答案

答案:D。N_eff 通过序列权重求和得到,权重越小的冗余序列对 N_eff 的贡献越小。它回答的是“这批序列中有多少条独立的进化证据”。A 混淆了简单计数与有效深度;B 说的是 gap 比例;C 是测序领域的术语,与 MSA 的进化信息含量无关。

Q5. 在 AlphaFold 的 MSA Transformer 中,行注意力(row attention)的主要作用是?

单选题 · mid

  • A.在同一列的所有残基之间互相传递共进化信息
  • B.只允许序列与结构模板之间进行直接通信
  • C.在同一序列的局部残基上下文之间流动信息← 正确答案
  • D.仅在序列与配对特征之间传递距离约束

答案:C。行注意力沿“序列维度”运行,相当于让某一条序列自身的不同位置互相“阅读”,捕捉序列内部的上下文依赖。列注意力才负责跨序列的同一列残基之间交流共进化信号。A 描述的是列注意力的功能,B 和 D 则把行注意力的路径错误理解为序列与外部信息之间的通道。

Q6. 关于 AlphaFold 输出的 pLDDT 置信度分数,下列理解正确的是?

单选题 · hard

  • A.pLDDT 反映模型对该残基局部坐标的置信程度← 正确答案
  • B.pLDDT 表示整条序列的氨基酸组成成分的熵值
  • C.pLDDT 用来衡量序列搜索同源数据库的时间
  • D.pLDDT 是 AlphaFold 输出中原子坐标的实测值

答案:A。pLDDT 是模型对每个残基预测可靠性的自评分,分数越高说明该残基的局部结构越可信。它由模型内部的分类头输出概率加权平均得到,而不是实验坐标、序列熵或搜索耗时。在实际工程中,pLDDT 常用于筛选可信区域、决定哪些预测片段可用于分子对接或药物设计。

Q7. 对于“孤儿蛋白”(几乎找不到同源序列的蛋白),最合理的做法是?

单选题 · hard

  • A.降低阈值把大量无关序列并入 MSA 强行制造深度
  • B.认为结构预测彻底失败并直接放弃该蛋白的建模
  • C.只依赖传统同源建模方法寻找亲缘关系最近的模板
  • D.引入单序列特征等替代信号以弥补 MSA 缺失的影响← 正确答案

答案:D。孤儿蛋白的 MSA 深度极低,共进化信号几乎不存在。现代方案使用蛋白质语言模型提取单序列的进化语义特征,或使用结构模板提供几何约束,使预测不至于完全失效。A 会引入假阳性序列污染比对;B 过于悲观;C 在缺少近缘模板时也无能为力。工程上还要用 pLDDT 评估哪些区域可信。

Q8. 在 MSA 构建过程中执行“去除冗余”可以带来哪些收益?

多选题 · mid

  • A.去冗余能减少计算资源并增强训练稳定性← 正确答案
  • B.去冗余会强行合并非同源序列增加新变异
  • C.去冗余剔除高度相似序列使特征表达更均衡← 正确答案
  • D.去冗余避免冗余序列在统计中占据主导地位← 正确答案

答案:ACD。去冗余剔除高度相似的重复序列后,MSA 的统计不再被某个“大家族”绑架,计算量下降,共进化信号更均衡,后续训练也更稳定。B 描述的“合并非同源序列”是错误操作,去冗余不仅不引入非同源序列,反而会清理它们。

Q9. 下列哪些因素会导致 MSA 质量下降,从而影响 AlphaFold 的预测精度?

多选题 · hard

  • A.数据库太小缺乏深部同源的远亲序列参与比对← 正确答案
  • B.测序误差导致比对出现错误但不会影响预测质量
  • C.冗余序列过多且未进行去重与序列重加权操作← 正确答案
  • D.高相似度近缘序列比例过高导致多样性不足← 正确答案

答案:ACD。A 导致 MSA 深度不足,D 导致多样性不足,C 导致统计偏置,它们都会削弱 MSA 的信息含量。B 的前半句说测序误差“会导致比对出现错误”,这个前提本身就会降低质量,但后半句声称“不会影响预测质量”是错误的,因此 B 整体不选。

Q10. MSA 中的空位符号"——"通常表示什么含义?

多选题 · easy

  • A.表示该位点在序列间发生过插入或删除事件← 正确答案
  • B.表示该序列在此位置缺少对应的氨基酸残基← 正确答案
  • C.是对齐程序为保持同源列而引入的占位符← 正确答案
  • D.表示该位置两侧结构完全失去预测能力

答案:ABC。gap 是进化上插入/删除事件的痕迹,也是比对算法为了让同源位点对齐而加入的占位符,表示某一序列在此处没有对应的残基。它并不直接决定结构预测能力——某些含 gap 的区域依然可以有较高的 pLDDT。D 把 gap 与结构可预测性强行挂钩,属于过度推断。