BLAST概述与基本原理

咱们做生信分析的,几乎每天都得跟序列比对打交道。BLAST这玩意儿,说它是"镇宅之宝"也不为过。我刚入行那会儿,导师扔给我一条未知序列,第一句话就是"先BLAST一下看看"。

今天这第一章,咱们就把BLAST的底细摸清楚。从它怎么来的,到它凭什么跑得那么快,再到大家拿它干什么。

BLAST发展历程

90年代初,分子生物学开始爆发。每天都有人测出新序列,大家最想知道的就是:"我这新玩意跟已知的像不像?"

那时候有个工具叫FASTA,跑一趟得等半天。我最初做硕士课题时,用FASTA比一条1kb的序列,等结果出来我泡的咖啡都凉了。后来NCBI搞出了BLAST,我第一次用它的时候,说实话,被速度惊到了——同样一条序列,它只需要几十秒。

BLAST的版本迭代,我列了个简表:

时间 版本/事件 关键改进
1990 原版BLAST 提出种子-延伸思想,速度碾压FASTA
1997 Gapped BLAST 允许空位(gap),灵敏度大幅提升
1999 PSI-BLAST 用profile迭代搜索,能找远缘同源
2009 BLAST+ 重构命令行接口,模块化,性能再优化
至今 持续升级 支持更长读长、更快索引、云端部署

这里有个常见误解——很多人以为BLAST只有NCBI那一套。其实现在BLAST+已经是独立的一套工具集了,它的blastn、blastp这些核心工具,比老版本的blastall稳定得多。我个人强烈建议:还用老版本接口的,赶紧切过来。

核心算法思想

BLAST为什么快?说白了,它用了一个"先找草稿,再画细节"的思路。

完整的动态规划比对(比如Smith-Waterman算法)就像把每一块砖都对齐,虽然准但慢得要命。BLAST做了个聪明的事——它先找那些"长得特别像"的短片段(种子词),有了这些锚点,再在周围做精确对齐。

核心流程就三步:

  1. 构建词表:把查询序列切成很多k-mer短片段,比如设定word size为3,那就切出所有长度为3的短词。
  2. 扫描数据库:用这些短词快速匹配数据库的索引,找到所有命中的位置。这一步会建立一个"热区"列表。
  3. 延伸与评估:在每个热区附近,进行banded延伸,然后打出一个有gap或没有gap的比对结果。最后用统计显著性(E-value)给出报告。

这种"先粗筛、再精对"的策略,为什么能省时间?你想想看:数据库里99.9%的位置其实根本不用仔细比对。我先用几个字母的小标签把它们排除掉,只对那小部分候选区下功夫,速度自然就上来了。

我曾经遇到过一个坑:用默认参数跑一个高度重复的基因组序列,结果全是假阳性。后来加了个complexity filter(-F T),才把那些低复杂区的无效匹配过滤掉。嗯,这个细节到参数配置那章再细聊。

BLAST 核心搜索流程 查询序列输入 切分为 k-mer 词表 扫描数据库种子命中 Band 延伸 + 空位比对评估 输出 E-value 报告 说明: Word size 默认值: blastn → 11 bp blastp → 3 aa 关键参数影响: Word size ↑ → 速度↑ 灵敏度↓ Word size ↓ → 速度↓ 灵敏度↑ 延伸阈值 T ↑ → 假阳性↓ 灵敏度↓

上图就是BLAST的核心逻辑。我习惯把这个流程叫作"锚点延伸模型"。现在很多生信流程,从短读比对到长读纠错,实际上都在借鉴这个思路。

主要应用场景

BLAST能做的事情比大多数人想象的多。我大致分成三类场景:

  • 同源序列搜索:这是最本分的用法。拿到新序列,去nr库、refseq库或UniProt库里扫一遍,看看有没有已知的同源基因。比如临床诊断中发现了一个新的耐药基因突变体,BLAST一下就知道它跟已知的那种耐药基因亲缘关系最近。
  • 功能注释:基因组注释流程里,BLAST常常扮演"找亲戚"的角色。BLASTP比对能告诉你某个未知蛋白可能是什么酶。我曾帮一个做植物转录组的课题组跑过全转录本的BLASTX注释,一张表下来,11万个转录本的功能立马清晰了。
  • 引物与探针设计:设计出的引物是否有非特异性结合位点?把引物序列拿去做BLASTN,挑那些只唯一匹配目标物种的引物,成功率会高很多。我吃过亏——有一次直接用引物BLAST整个人类基因组,结果发现它跟一条假基因有3个错配,最后扩增产物全是乱的。
  • 宏基因组比较:把宏基因组组装出来的contig去做BLASTX比对整个nr库,这是目前最常用的物种分类和功能代谢通路鉴定方法。速度快,结果直观。

一个小技巧:做大规模宏基因组分析时,不要直接BLAST整个文件。先把序列聚类(比如用CD-HIT去冗余),再去BLAST,能省下75%以上的计算资源。

BLAST的扩展应用还很多。比如,BLASTZ可以用来做整个基因组的对比比对,而TBLASTN可以用蛋白序列搜核酸数据库,反过来找新基因。后来很多新工具都"长在"BLAST的骨架上,像用BLAST比对做变异检测的BLAT、用BLAST做同源映射的SWIPE等。

但需要注意的是,BLAST不是万能药。它依赖数据库的完整性和质量。如果你搜的物种在数据库中根本没有近缘种的信息,BLAST结果会很难看。

我记得有一次演示课,一个学生用一条海洋微生物的16S序列BLAST出来结果全是"Uncultured bacterium"。他问我是不是跑错了。我说不是,那是因为公共数据库里根本没有这条序列近缘种的正式名称。不过,在大多数有参考数据的场景下,BLAST的表现仍然足够稳定、足够快。

在后面的章节里,咱们会逐步深入每个参数的含义,以及怎么根据你手里的数据和想达到的目标,精细化配置BLAST的运行参数。那些坑,我会一个一个带着你们绕过去。