JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

生物信息学与序列比对

测序仪一旦把几十亿个字母交到你手上,没有人能用肉眼去读它们。来认识现代生物学里「代码与数据」的那一半:比对和 BLAST 如何找出相关的序列、像 GenBank 这样的公共数据库如何让每个人都能搜索所有人的数据,以及单单一个统计量如何从海量数据的噪声里分辨出真正的信号。

当生物学变成一门数据科学

在前几篇导览里,你看着一台测序仪把 DNA 变成一大片字母,也看到了把这片洪流重新变回一条连续序列——基因组组装——本身就已经是计算机的活儿,而不是移液器的活儿。这一次「接力棒的交接」正是本篇的全部要点。一个人类基因组大约有 32 亿个字母;一次测序运行吐出几亿条短读长;一个单细胞实验产出动辄上百万个数字的表格。没有人能用肉眼去读这一切。生物信息学正是为了在这种规模上存储、搜索、比较并从统计上理解生物学数据而成长起来的一门学科——它是每一个基因组规模实验都离不开的伙伴。

把改变了什么说清楚很有帮助。分子生物学诞生在实验台上——试管、凝胶、靠手工读出来的几千个碱基。湿实验并没有消失,但这门学科如今有一半完全活在代码里:一个假说常常不是靠一个新实验、而是靠一次对已有数据的查询来检验。一位发现了奇怪突变的病理学家、一位采集池塘水的生态学家、一支在与新病毒赛跑的疫苗团队——他们如今首先伸手去拿的,都是键盘,而不是移液器。*读取* DNA 的本领给了我们字母的洪流;*解读*它的本领,才是当今生物学最忙碌的地方。

比对:把字母排齐,读出意义

生物信息学里最根本的那一项操作,就是序列比对:把两条序列上下排开、来回滑动,直到它们相似的部分对齐,于是你能看出哪里相同、哪里相差一个字母、哪里这条有而那条缺了字母。它之所以这么强大,原因在于生物学。两条看起来相像的序列,通常之所以相像,是因为它们共有一个祖先、都是从它那里复制下来的——字母上的相似,正是共同历史的一块化石。所以如果你那条未知序列能和一个功能已知的基因比对得很好,你就刚刚白白继承了一个关于自己这条序列在干什么的、强有力的假说。下游几乎所有事情——组装、把读长比对到参考序列上、比较物种——底下都是比对。

Two related sequences, aligned:

Query   5'-A C G T A T G C - - A G T C A-3'
           | | |   | | |     | | |   |
Subject 5'-A C G A A T G C T T A G T G A-3'
               ^             ^       ^
            mismatch       a gap    mismatch
            (A vs T)    (insertion/   (C vs G)
                         deletion)

Matches earn points; mismatches and gaps cost points.
The best alignment is the one with the highest total score.
一次比对把两条序列相互滑动,让匹配最大化。竖线标出相同的字母;错配是单个字母的差异;空位(一道短横)标出在一条序列里有、而在另一条里缺的字母。给匹配、错配和空位计分,就把「它们看起来像不像?」变成了一个计算机能去优化的数字。

有一处微妙之处值得记住。两条序列*真正最优*的比对,是可以被精确求出的,办法是用一种有条理的方式去尝试给字母和空位配对的每一种可能——但这种穷举的方法很慢,面对一个有几十亿字母的数据库,它会耗时长到没法用。所以实践中我们拿「完美的保证」去换速度:我们用一些巧妙的捷径,几乎总能找到*非常好*的比对,快到能在几秒钟内搜遍全世界的序列。把这个取舍记在心里——精确但慢,对上快但是启发式的——就是开始像一个生物信息学家那样思考的起点。

BLAST:向全世界发问「你见过这个吗?」

现在让比对派上用场。你手里有一段神秘的 DNA,想知道它是什么。最快的一招,不是苦思冥想,而是去问一座庞大的图书馆:*有没有任何人、在任何地方,见过类似的东西?*BLAST——基本局部比对搜索工具——正是回答这个问题的搜索引擎。你把那条未知序列粘进去,几秒之内,BLAST 就把它和几千万条已知序列做比对,再把最像的那些回给你,最佳匹配排在最前。如果你那条序列在一条鱼或一只果蝇里某个研究得很透的基因上亮了起来,你立刻就对它的身份和功用有了一个强有力的猜测。

  1. BLAST 把你的查询序列切成一些短「词」——每个就几个字母——并先只去寻找数据库里含有这些精确词之一的序列。这就是那条捷径:它不会把你的查询和所有东西都做比对,而是把绝大多数一个词都不共享的统统略过。
  2. 凡是有词命中的地方,BLAST 就把那个点位当作一颗种子,朝两个方向向外延伸比对,添上匹配、容忍少量错配,只要分数还在往上爬,就让这段局部匹配不断生长。
  3. 每一段延伸出来的匹配都得到一个分数,而最关键的,是一个统计量——E 值——它说的是:在一个这么大的数据库里,纯靠运气出现一段这么好的匹配,会有多频繁。BLAST 据此给命中排序,把最好的排在最前。

最后那个统计量,是诚实地做这件事的核心,所以它值得一幅清晰的图景。在一个有几十亿字母的数据库里搜索,*总会*有某条序列纯靠运气与你的相像——干草堆越大,随机噪声能撒进去的、看起来越唬人的「针」就越多。E 值,就是在那么大的数据库里,纯靠运气你会得到的、和你这条一样好的匹配的期望个数。E 值等于 10,意思是「预计大约有十个这么好的偶然命中——你这条多半是噪声」;E 值等于 1e-50,意思是「靠运气你基本上永远见不到这个——这是真正的信号」。光看分数会骗了你;E 值才是把一个真正的亲戚和一次巧合分开的东西,而会不会读它,正是一项发现和一场难堪之间的区别。

GenBank 与 FASTA:所有人的数据,用一种朴素的格式

BLAST 的好坏,全看它搜的那座图书馆,而那座图书馆,正是整个基因组学底下那个静悄悄的奇迹。科学只有在分享时才会复利增长,而在这个领域,分享是通过庞大的公共序列数据库发生的。其中最大的一座,GenBank——由美国国家生物技术信息中心运营,并由欧洲和日本的姊妹库镜像——收藏着人类曾测过序的几乎每一种生物所提交的 DNA 与蛋白质序列,而地球上任何人都能免费搜索并下载它的全部。当你单单一次 BLAST 搜索认出了你那条未知基因,它比对的,是其他所有人几十年来的工作——全都捐进了同一片公地。

要让一片这么大的公地运转起来,数据需要一种简单到任何计算机上的任何程序都能读的格式——而那匹主力马,朴素得令人欣喜。一个 FASTA 文件就是纯文本:一行以「>」开头、给这条序列命名的标题行,后面跟着序列本身、用普通字母一一写出来。整个标准就这些。正因为它是不含任何隐藏机关的纯文本,一个 1995 年在笔记本电脑上写下的 FASTA 文件,今天照样打得开,而同一个文件,能喂给一个比对工具、一次数据库上传,以及一名学生昨晚写的脚本。这种彻底的简单不是偷懒;正是它,让陌生人在相隔几十年间各自造出来的工具,全都能彼此对话。

一整条 FASTA 记录小到能在脑子里想象出来。标题行读起来像 `>gene_X Homo sapiens hypothetical protein`,接下来几行就单纯是序列——`ATGGCATTAGCCGATCAGTTACGG...`——一直往下跑,直到下一个「>」开启一条新记录。一个文件能把成千上万条这样的记录一条接一条地摞起来。再没别的了:没有字体、没有隐藏代码,就只有一个名字和那些字母。正是这种顽固的朴素,才让一个实验室写下的文件,原封不动地,几十年后还能在另一个实验室的软件里打开——也才让同一个小文件,能同样轻松地喂给一次 BLAST 搜索、一次数据库上传,以及一行脚本。

当数据极其庞大时,分辨信号与噪声

E 值是你初尝大数据生物学里那个核心的统计风险,而它可以推而广之。这风险是:当你做上百万次检验,「罕见到靠运气才会出现」就变成了「因为数量大而常见」。掷一枚公平的硬币十次,十次全是正面,令人惊叹;让一万枚硬币各掷一百万次,那么某处某枚,会以无聊的确定性出现十连正。基因组学一次同时检验上百万个位置,所以一个看起来「千里挑一」般唬人的结果,纯靠运气就预计会出现成千上万次。不去校正这一点——这就是多重检验问题——是用一个基因组规模的数据集骗过自己的、最常见的那一种方式。

这正是为什么下一篇要讲的全基因组关联研究,会要求如此凶狠严苛的阈值——也是为什么一个在单独一个小实验里「显著」的命中,一旦它是百万分之一,就会被当作噪声丢掉。这也是为什么一项 GWAS 显示的是*关联,而非因果*:一个与某疾病结伴出现的字母,可能只是紧挨着真正的元凶坐着,或是搭着某个隐藏的混杂因素的便车。这个教训贯穿了整个生物信息学。数据一多,巧合就是必然;而这门手艺的全部,就是去构建统计量——E 值、校正过的阈值、在第二个样本里的重复验证——来守住真正的生物学信号与规模带来的、无可避免的海市蜃楼之间的那条线。

可重复性:代码所要求的那种文化

正因为如今这门工作有那么多是代码和数据,生物信息学不得不长出一种可重复性的文化,而老一辈在实验台上做生物学时对此还可以马虎。一次分析是一长串步骤——修剪读长、比对、判读变异、跑统计——而每一步都用着某个特定的软件、某个特定的版本、某套特定的设置。改动一个版本或一个设置,答案就可能变。所以这门学科坚持:*配方*要和结果一样被仔细地分享出来——确切的代码、参数、软件版本,最好连原始数据也一并提交,好让一个陌生人能重新跑一遍你的流程、得到同样的数字。一个别人无法重现的结果,越来越被视作根本不算结果。

退后一步,现代分子生物学的轮廓就清晰起来了。那同一种在 GenBank 里找出你基因的比对,一旦横跨许多物种一起做,就成了比较基因组学——靠观察每个基因组守住了哪些字母、又让哪些漂移了,来读出演化。把基因目录及它们之间的相互作用接成网络,你就到达了系统生物学,也就是下一篇里从一张零件清单跃向一张接线图的那一跳。而托起这一切的,正是你在这里见到的那套静悄悄的机器:比对、BLAST、共享的数据库、朴素的格式,以及那些在信号与噪声之间守住诚实界线的统计量与可重复的习惯。生物学如今既关乎试管,也同样关乎代码与数据——而两者都懂,才是攀上这一级的真正含义。