第1章 课程导论:基因组注释与BLAST概述
什么是基因组注释
说白了,基因组注释就是给一条DNA序列贴上“功能标签”。
你拿到一条染色体序列,里面全是ATCG。这些字母串代表什么?哪个区域是基因?哪个区域调控表达?哪个区域是垃圾序列?你的答案就是基因组注释。
我记得在参与第一个基因组项目时,导师丢给我一个FASTA文件,说“把它注释了”。我当时愣了半天——这玩意儿怎么下手?后来才明白,注释不是一次性工作,而是一套完整流程,包括:
- 重复序列屏蔽——把转座子、简单重复标记出来
- 基因预测——找编码蛋白质的基因结构(外显子、内含子、UTR)
- 功能注释——给预测出来的蛋白质打上功能描述标签
- 非编码RNA注释——找tRNA、rRNA、miRNA等
- 多组学整合——结合转录组、表观组数据优化注释
每个步骤都离不开比对工具。而BLAST,正是这里面最核心的引擎。
BLAST是什么
BLAST全称是Basic Local Alignment Search Tool。它就是用来回答一个问题的:我的序列在别人的数据库里有没有亲戚?
为什么强调“局部比对”?因为BLAST不要求整条序列都能对齐。它只找那些局部得分高的片段。我见过很多人误以为BLAST是做全局比对的——其实不是。如果你要做全基因组对齐,应该用MUMmer或Minimap2。BLAST的目标是快速找到相似区域,然后评估这个相似性是不是够靠谱。
BLAST的核心搜索策略,我习惯用这个方式理解:
- 种子生成:把查询序列拆成小段(通常是三核苷酸或长度k的短串),丢进索引里找匹配
- 延伸:找到种子匹配后,向两侧延伸,看能不能形成一个高分段对(HSP)
- 打分回溯:用动态规划算法给延伸区域打分,找出最优局部比对
- 统计显著性评估:算一个E-value,告诉你这个比对结果是不是可信
一点个人经验:我建议你至少记住这个搜索策略的四个步骤。因为后面调试Pipeline时,95%的性能问题都出在“种子生成”这个环节——你的种子太大,灵敏度不够;种子太小,跑得慢。
BLAST的同源搜索与功能预测
你想想看,一个未知基因怎么猜功能?最直接的方法就是去已知数据库里找同源序列。BLAST干的就是这件事。
我举个例子。假设你从某个菌的基因组里预测出一个蛋白质序列,你不知道它是干啥的。把它拿去做BLASTP比对,发现和已知的“ATP结合盒转运蛋白”有80%的相似性、E-value是1e-150。那么有很大把握说:这个基因也负责转运功能。
这里面有几个关键概念你要弄明白:
| 概念 | 含义 | 我的理解 |
|---|---|---|
| 序列相似性 | 两条序列在残基水平上相同的比例 | 数值层面的直接比较 |
| 同源性 | 两条序列来源于共同祖先 | 这是推断,不是算出来的 |
| E-value | 预期随机出现相同比对结果的次数 | 越小越可信,E-value=0不存在的(数值极小但不会为0) |
| 位元分数 | 标准化后的比对得分 | 用于跨数据库比较,比原始得分稳定 |
我曾经因为E-value设得太宽松(设成10),结果跑出来一堆假阳性——全是基于几个残基的微弱相似性。后来养成的习惯是:先设1e-5跑一遍,再根据结果调整。
基因组注释Pipeline的模块组成
一个完整的BLAST注释Pipeline,说白了就是把上面那些步骤串起来。我见过很多Pipeline,骨干结构都差不多:
- 输入模块:读基因组,做质量控制(低复杂度、载体污染)
- 重复序列模块:用RepeatMasker、RepeatModeler或BLAST自建重复库
- 同源预测模块:用BLASTX/BLASTP比对到已知蛋白库
- 从头预测模块:用Augustus、Glimmer、GeneMark做ab initio预测
- 整合优化模块:将证据融合成最终基因模型
- 功能注释模块:最终验证并给出功能描述
- 输出模块:生成GFF、GBK、TAB格式的注释文件
我把这个结构画成了一张流程图。嗯,这张图里你可以看到各个模块是如何串联的:
BLAST在Pipeline中的核心地位
很多人问我:现在有这么多新工具,为什么还要学BLAST?我的回答是:BLASt 仍然是基因组注释 Pipeline 的“地基”。
具体来说,BLAST在这几个环节里无可替代:
- 同源预测:BLASTX把转录本比对到蛋白库,BLASTP把预测蛋 白比对到已知库——这是最直接的功能确认手段
- 数据库构建:用makeblastdb为自定义库建索引,是整合私有数据的标准方式
- 多库整合:UniProt、NR、PFAM、Rfam……这些公共库的比对结果,最后都要通过BLAST的输出格式归到一个统一的证据模型里
- 假基因检测:用BLAST找到完整基因的同源片段,靠移码突变和提前终止判断是否失活——我经常这么干
我建议你把这个框架印在脑子里:Pipeline = 数据流 + 比对引擎 + 规则引擎。BLAST就是那个比对引擎。
BLAST与其他比对工具的关系
不是所有比对场景都用BLAST。我整理了一张对比表:
| 工具 | 适用场景 | 速度 | 敏感度 |
|---|---|---|---|
| BLAST | 同源搜索、功能注释、小规模比对 | 中等 | 高 |
| DIAMOND | 大规模宏基因组、蛋白库比对 | 快 | 高 |
| MMseqs2 | 极致大库聚类、搜索 | 最快 | 较高 |
| Minimap2 | 长读长比对、全基因组比对 | 快 | 中等 |
| HMMER | 蛋白家族识别、结构域搜索 | 慢 | 更高 |
实战建议:如果你的Pipeline需要每天跑几十万条序列,我建议你用DIAMOND。如果你要构建一个自动化注释流程,先拿BLAST搭原型,再逐步替换——BLAST的输出格式最规整,脚本好写。
为什么选择BLAST构建Pipeline
你可能会问:这么多工具,选BLAST的理由是什么?
我说三点:
- 生态成熟:BLAST用了几十年,周边工具、库、文档、社区支持都最完善。你踩过坑别人基本都踩过了。
- 输出规范:-outfmt 6/7有严格的列定义,解析脚本写起来很简单。其他工具的输出格式经常改。
- 可控性强:BLAST的参数体系非常精细。你想调敏感度、调打分矩阵、调缺口罚分,都能精确控制。
我刚开始做Pipeline时,也图新鲜用过一些新工具。后来发现,团队协作里大家最认的还是BLAST的输出格式。格式统一,后续分析才能串联起来。嗯,从工程角度看,这就是性价比最高的选择。