第1章 课程导论:基因组注释与BLAST概述

什么是基因组注释

说白了,基因组注释就是给一条DNA序列贴上“功能标签”。

你拿到一条染色体序列,里面全是ATCG。这些字母串代表什么?哪个区域是基因?哪个区域调控表达?哪个区域是垃圾序列?你的答案就是基因组注释。

我记得在参与第一个基因组项目时,导师丢给我一个FASTA文件,说“把它注释了”。我当时愣了半天——这玩意儿怎么下手?后来才明白,注释不是一次性工作,而是一套完整流程,包括:

  • 重复序列屏蔽——把转座子、简单重复标记出来
  • 基因预测——找编码蛋白质的基因结构(外显子、内含子、UTR)
  • 功能注释——给预测出来的蛋白质打上功能描述标签
  • 非编码RNA注释——找tRNA、rRNA、miRNA等
  • 多组学整合——结合转录组、表观组数据优化注释

每个步骤都离不开比对工具。而BLAST,正是这里面最核心的引擎。

BLAST是什么

BLAST全称是Basic Local Alignment Search Tool。它就是用来回答一个问题的:我的序列在别人的数据库里有没有亲戚?

为什么强调“局部比对”?因为BLAST不要求整条序列都能对齐。它只找那些局部得分高的片段。我见过很多人误以为BLAST是做全局比对的——其实不是。如果你要做全基因组对齐,应该用MUMmer或Minimap2。BLAST的目标是快速找到相似区域,然后评估这个相似性是不是够靠谱。

BLAST的核心搜索策略,我习惯用这个方式理解:

  1. 种子生成:把查询序列拆成小段(通常是三核苷酸或长度k的短串),丢进索引里找匹配
  2. 延伸:找到种子匹配后,向两侧延伸,看能不能形成一个高分段对(HSP)
  3. 打分回溯:用动态规划算法给延伸区域打分,找出最优局部比对
  4. 统计显著性评估:算一个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格式的注释文件

我把这个结构画成了一张流程图。嗯,这张图里你可以看到各个模块是如何串联的:

基因组自动注释Pipeline核心逻辑 原始基因组序列 重复序列屏蔽 BLAST同源搜索 从头基因预测 证据整合与基因模型优化 功能注释 & 非编码RNA标注 结构化注释结果 提示:两个预测路径在证据整合前可以独立运行,最后合并结果。 BLAST提供同源证据,从头预测提供ab initio模型,两者互补可提高注释质量。

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的输出格式。格式统一,后续分析才能串联起来。嗯,从工程角度看,这就是性价比最高的选择。