BLAST:先找到亲戚
11.1一条陌生序列先问像谁
搜索框里只躺着一串氨基酸字母。样品来自一管刚测完序的微生物 DNA,自动注释只给了一个含糊名字:hypothetical protein。研究者把这条查询序列,也就是 query,贴进数据库页面,手指停在回车键上。点下去以后,屏幕先空了一瞬,随后跳出一长串命中结果,也就是 hit,物种名、蛋白名、分数 score、E-value、覆盖度 coverage 和一致性 identity 挤在同一张表里。刚才还孤零零的一条链,忽然被一堆远近亲戚围住了。
这个动作看起来像普通搜索,背后却改变了问题的形状。样品管和估算纸已经把折叠难题夹紧:序列有方向,随机穷举走不通。可拿到一条新序列时,第一步往往不会直接画三维图。更常见的动作,是先问它像谁。若它和某个已知家族的蛋白有稳定相似,研究者就能先把盲区缩小:可能属于哪类结构域,哪些位置也许在干活,哪一段可能只是松散尾巴,哪些注释值得暂时放到候选栏里。
BLAST 就是在这里出场的工具。BLAST 的英文全称是 Basic Local Alignment Search Tool,可以朴素地理解成一种快速序列搜索方法:把一条待查序列拿去和数据库里许多序列比较,先找出局部相似得不像巧合的片段,再按相似程度列出命中。它读的不是蛋白立体形状,也不直接判定功能;它先把“这条链可能属于哪个家族”这个问题变得可操作。
这里的“局部”两个字很要紧。BLAST 先抓短的 word hits,再把有希望的片段向两边延伸,直到得到一段高分局部比对,也就是 high-scoring local alignment;局部比对 local alignment 的意思,是只让两条序列中最像的区域先对上。蛋白常常像拼起来的工作器具,一段负责结合,一段负责催化,一段只是把前后连接起来。两条蛋白不必从头到尾都相似,某个结构域相似也足以把研究者带到一个家族门口。BLAST 因此很适合在一条陌生序列上先找入口:哪一段像别人已经见过的结构域,哪一段找不到可靠亲戚,哪一段可能是后来加上的尾巴。
搜索结果背后还有一套很朴素的比较逻辑。两个相同或相近的氨基酸排在一起会得分,差别太大的位置会丢分,中间出现插入或缺口也要付出代价。最后留下来的,是一段段得分高到值得报告的局部匹配。研究者不必在第一次阅读时学完整套算法,却必须明白分数来自字母之间的对齐关系。分数不是结构事实,分数只是说,这些字母在这片区域上相似得值得继续查。
这一步也接住了折叠问题留下的直觉。单条序列里确实藏着通向结构和功能的线索,可单独盯着一串字母,很难知道哪几个位置该先相信。把它放进数据库以后,过去已经测过、注释过、比较过的序列会一起出现。陌生感没有消失,却被拆成了几类可以处理的问题:它像哪个家族,像的是哪一段,哪些名字只是猜测,哪些线索足以改变下一轮实验。
11.2命中表不是答案,是第一张地图
屏幕上的第一列通常最会骗人。排在前面的命中标题写得很满,像已经替人回答了功能;真正拉住判断的,通常是期望值 E-value、覆盖度 coverage 和一致性 identity。E-value 表示在当前数据库大小和搜索条件下,随机就能碰到这样好或更好匹配的大致次数。数越小,巧合解释越困难。一个很短的匹配即使看起来整齐,也可能因为长度太短而拿到并不漂亮的 E-value;数据库越大,这种读法越要带着条件。
coverage 看的是命中覆盖了多大一段查询序列。只摸到一小段,和整条核心结构域都被覆盖,意义完全不同。identity 看的是对齐位置上有多少氨基酸完全一样。identity 高,不等于功能一定相同;identity 低,也不等于亲缘关系不存在。对许多蛋白来说,真正有分量的判断,来自 E-value、coverage、identity 和命中位置一起看。
score 也要回到它自己在表里的位置。分数高,说明这段局部比对里的字母配对更像是家族成员之间会出现的样子;分数低,说明相似性还没有高到值得优先追。可分数本身不告诉人这个对象会不会表达、会不会活、会不会在细胞里待得住。分数只是把“值得继续看”这件事前推了一步。
同源 homolog 这个词也要先放稳。它说的是共同祖先关系,不是“有多少百分之几同源”这种说法。百分比更适合描述 identity 或相似性。两条序列可以长得很像,却在进化上并不真正同源;也可以相似度不高,却仍然保留了同一家族的来源线索。
低复杂度区域尤其容易把人带偏。重复的 Ala、Ser、Lys,或者一段很黏的尾巴,常常会把许多并不真正亲近的序列拉到一起。BLAST 会用过滤或遮蔽把这类区域先降低存在感,SEG 就是常见的做法之一。这样做的目的很简单:让真正像家族核心的片段先出来,而不是让一段黏糊糊的尾巴抢了风头。
如果 query 里有一段低复杂度尾巴,最前面的几个命中就更要小心看。那段尾巴本身也许并不承担家族核心功能,却可能因为重复和偏置,在表里制造出看起来很亮的假亲近。把这段尾巴单独拿出来看,再把核心区域单独看,往往比把整条链混成一团更可靠。
注释名也要回到强弱里看。hypothetical protein 这样的标签只是在说数据库承认它像一条蛋白,却还没有把功能身份说清;putative、predicted、characterized 这类数据库标签,提示的也是证据强弱不同。表格里名字很像答案,实际只是不同程度的线索。真正能让线索变硬的,还是后面的表达、纯化、活性和稳定性读数。
那条未知酶样蛋白的命中表,很快就露出层次。最前面的结果多来自相近细菌,覆盖了中间那段最像家族核心的区域,E-value 低到几乎不用担心随机巧合,identity 却只在三成上下。再往后看,命中来源变得更散,有些来自海洋样本,有些来自土壤宏基因组。注释栏里反复出现“水解酶样”“金属结合样”“未知功能结构域”这些词。它们没有把功能说死,却把调查方向从一片空白推向一个大致家族。
再把鼠标点到对齐区域,表格会露出更多细节。查询序列的前端有一串低复杂度残基,许多命中从这里断开;中间有一段能连续对上远近亲戚,缺口少,分数稳定;靠近末端又出现一段短插入,只在少数物种里保留。这样的画面比单个排名更有用。它让人看见这条链不是平均的一整块:核心、尾巴、插入和可疑小图案各有各的位置。
有些命中还会带着结构线索。若某个远亲已经有公开实验结构,命中区域就能给出一个粗略参照:核心折叠可能是哪类骨架,哪几段更可能埋在内部,哪一段也许暴露在表面。这样的参照仍然不能替代新样品自己的结构和读数,但它足以提醒研究者,第一轮构建体和突变不该平均撒开。
11.3三个数字怎样一起读
读这张表时,顺序很重要。E-value 先帮人排掉明显不靠谱的随机匹配;coverage 再告诉人,这个命中到底覆盖了整条蛋白,还是只摸到一个短片段;identity 最后帮助判断亲缘大概有多近。若 E-value 很小、coverage 很高、identity 适中,这条线索就很值得继续。若 E-value 还行,coverage 却只有一小段,线索就更像一个局部保守小图案,也就是 motif,先别把整条蛋白的身份写满。
数据库越大,E-value 的边界越需要记住。一个小库里很少见的好匹配,放到更大的数据库里,也许会被随机撞到更多次。BLAST 在计算里已经把这部分背景纳入了考虑,研究者读结果时仍然会看数据库版本、搜索范围和过滤条件。今天排第一的命中,换一个更窄或更专门的库,前后顺序可能都会变。
命中标题写得很满,不代表功能已经坐实。名字只是数据库管理员、自动流程或历史注释留下的标签。若条目旁边只有 hypothetical 或 predicted 这样的标签,它能提醒人这里还有位置可查,却不会替实验把结论写完;若条目写着 characterized,也仍然要看它是怎么被证实的、证实到什么程度、证实的是哪一部分。名字能帮人分类,不能直接代替读数。
这也是为什么同一张表里,标题和数字要放在一起看。一个命中标题像已知酶,E-value 却并不特别漂亮,coverage 也只摸到短短一截,那就只能把它先当作局部线索;另一个命中标题很含糊,E-value 却低、coverage 又高,反倒可能更值得追。表格给人的第一印象常常最响,真正起作用的却是那些不那么花哨的字段。
反向核对也很有用。把最靠前的命中再拿去搜一次,看看它会不会把原始序列也拉进同一片相似网络。真正属于同一家族的对象,通常会互相指向对方;如果回搜的结果主要跑到别的家族,那次相似就更像一段短片段、一个常见 motif,或者一段低复杂度区域带来的假近亲。这个动作很朴素,却能挡住很多误判。
采样偏差也会改写这张表的气味。模式生物、热门病原体、常见环境样本被测得多,亲戚就显得密;偏门家族、冷门环境和少有人碰的支系,屏幕上常常很空。空不一定代表自然界里真稀少,也可能只是数据库还没追到那一支。BLAST 给出的,是当前数据库里能看见的亲缘轮廓,不是自然界全景。
对于一条陌生序列来说,最有用的问题不再是“它到底等不等于某个已知蛋白”。更好的问法是:哪些地方像,像到什么程度,像的是整条链还是某一段。这个问题一旦问清楚,后面的实验顺序就有了方向。
可以想象三条命中放在同一张表里。第一条 E-value 极低,coverage 覆盖几乎整个核心域,identity 只有三成多,却来自一个有实验结构的家族;第二条 identity 很高,coverage 只覆盖二十多个残基,刚好落在一个常见 motif 上;第三条标题写着“已预测水解酶”,coverage 也不错,来源却是一批自动注释条目。第一条更像结构域边界线索,第二条只能提示局部图案,第三条必须先看证据来源。三个结果都“像”,可它们改变实验的方式完全不同。
命中表也会提示该删哪些结果。太短的片段、几乎全是低复杂度残基的匹配、只覆盖一个普遍小图案的命中,都不适合直接拿来推整条蛋白身份。把这些结果先降级,剩下的亲戚列表才不会被噪声撑大。这样整理以后,BLAST 表才从长长的搜索结果变成一张能用的地图。
整理后的表还会留下几个小标记。连续覆盖的区域像一条主路,适合拿来画结构域边界;反复断开的区域像岔出去的土路,先放进低信任区;只在少数亲戚里出现的插入段,适合留给第二轮问题。到这一步,搜索框里的字母已经开始变成可操作的实验路线。
11.4亲戚怎样改变第一轮实验
有了这张地图,第一轮实验的排法就会变。若中段命中最稳,N 端却像一段低复杂度尾巴,表达时先做全长,再做一个去掉尾巴的截短版本,往往更省力。截短的目标不是删掉故事;它先把容易干扰表达和纯化的部分拿开,让核心结构域站到台前。
研究者读 BLAST 表时,常常先问哪一段是家族核心,哪一段只是噪声更大的尾巴。核心如果很清楚,构建体就可以围着核心去安排;尾巴如果太长、太乱、太重复,第一轮就先别把它和核心绑在一起。这样做是一种让样品更容易解释的取舍。
保守位点也会跟着排队。某个 Asp、Glu、His 或 Lys 如果在许多亲戚里都不太愿意变,第一轮单点替换就很值得做。突变后如果样品更容易沉淀、更难纯化,或者热稳定性明显下降,说明这个位置更像结构支点;如果样品还挺稳,功能读数却掉得厉害,它更可能贴近化学反应或结合动作。BLAST 先给出候选位点,实验再把这些位点分成“撑结构的”和“干活的”。
候选底物和金属依赖也会因此变得更具体。注释栏说它像水解酶,研究者就会先看可能的底物类别;表里反复出现金属结合样的亲戚,就会把金属离子和相应的活性条件放进第一轮测试;如果家族里常见某种辅因子或膜环境,样品设计也会跟着改。命中表不替实验下结论,但它确实能把资源先放到更像样的地方。
如果全长表达很差,截短核心却很干净,问题多半落在尾巴、插入段或者局部低复杂度区域。如果截短以后活性反而掉了,说明那段被先拿掉的部分可能不只是装饰,也许参与定位、稳定或者调控。如果某个保守位点一换就让样品整个沉下来,那一轮功能读数也要先放慢,因为样品本身已经先坏了。看结果时,先分清是样品出了问题,还是功能真的变了,这比急着写结论更重要。
一张纯化峰图、一块表达板、一条活性曲线、一道热稳定曲线,都会因为前面那张 BLAST 表而被安排得更早或更晚。先测表达还是先测功能、先做单点突变还是先做截短、先看金属依赖还是先看底物,这些顺序都不是抽签出来的。
科学家怎样知道这张表有没有帮上忙,要看线索能不能经得起样品台的回问。表达板上,全长和截短版本的上清、沉淀会先分开;纯化柱上,核心构建体有没有干净峰,会给出第二个判断;热稳定曲线会告诉人样品是否更稳;活性读数、金属加入和去除、候选底物变化,会继续筛掉过强的注释。BLAST 让问题变窄,实验读数让问题变硬。
阴性结果也有用。候选底物没有反应,可能说明注释错了,也可能说明底物选得太窄;金属离子没有影响,可能说明那个“金属结合样”命名来自别的家族分支;突变让样品沉淀,就不能直接说这个位点只管功能。每一个失败读数都会把命中表重新染色:有的线索升高优先级,有的线索退回备选,有的线索暂时不能解释。
有时最关键的反馈来自几条很普通的记录。表达量低,说明构建体边界可能还要调;纯化峰拖尾,提示样品里也许有多种状态;热稳定曲线一换盐浓度就变,说明表格里的家族线索还要和环境条件一起看;活性读数只在某个金属存在时出现,才会让金属结合样注释变得更有分量。BLAST 常常会直接改写实验顺序,因为它给出的起点更省力:哪些地方先动,哪些地方先别碰,哪些地方值得花更多人力和时间。
11.5好亲戚也会带来坏误会
表格里的亲戚越多,误会也越容易出现。自动注释会沿着相似性继续往下传,一个原本只是猜测的名字,几轮之后就可能看起来像真的。若只盯着命中标题,功能注释很容易被越传越硬。读表时最好顺手看看来源、证据类型和是否有实验支持;如果前几条结果只是同一个猜测的重复版本,那就别把它们当成独立证据。
数据库注释里那些词,也要分层看。putative、predicted、hypothetical 这些标签,通常只说明“这东西看上去像”,不说明“这东西已经做过什么”。名字越顺手,越容易让人误以为故事已经讲完。可真正把故事讲完的,还是实验读数、结构读数和样品状态读数。
多结构域蛋白尤其容易让人误判。一个查询序列的前半段可能像一种家族,后半段又像另一种家族,若只看总排名,很容易把一条拼接式的蛋白看成单一身份。把命中位置拉开,先看哪一段对上核心,再看哪一段只是局部 motif,往往更接近事实。短命中适合提示局部图案,长命中更适合拿来推结构域和构建体边界。
如果回头再搜一次最靠前的命中,也会发现一些表面上的亲近其实站不太稳。真正同一家族的序列,常常会在两边都互相搜到;只有一边能搜到、另一边却转去了别的家族,往往说明这次相似只抓住了一个短而常见的片段。这样的检查很朴素,却能挡住不少误判。
还有一种误会来自“同源”和“同功能”之间的距离。共同祖先让两条序列进入同一家族,却不保证它们今天还做同一件事。分家以后,一个分支可能换了底物,一个分支可能只保留结构支架,还有一个分支可能失去活性却保留结合能力。BLAST 能把这些亲戚捞到眼前,后面的工作却要分辨它们到底是近亲、远亲、旁支,还是只在某个短片段上相似。
这份谨慎并不削弱 BLAST 的价值。恰恰相反,只有把误会说清楚,命中表才不会被读成神谕。它最有用的地方,是把一条陌生序列放进家族语境:先看哪些片段有来历,再看哪些名字有证据,再把可疑位置和样品读数连起来。
最后还要把这张表重新收回到开头那串字母上。搜索框里那条孤零零的查询序列 query,经过命中表以后,已经不再只是一个待查对象。它被分成了核心片段、可疑尾巴、可能的结构域边界和几条可以先试的实验路线。亲戚名单一行行排开以后,会变成一张多序列比对表:哪些位置长期不敢变,哪些位置会跟着一起换,都会在横向很长的网格里留下痕迹。