跳转到内容

重叠检测算法

快速概览

重叠检测是长读长组装的核心步骤:从海量 reads 中高效识别可能拼接的 read 对。其核心挑战是将 O(n²) 的全对全比较降维到近线性复杂度。

  • 全对全比对对于百万级 reads 计算不可行,必须采用降维策略
  • Minimap 的 minimizer 采样通过选取代表性 k-mer 构建索引
  • MHAP 的 MinHash 通过概率估计快速筛选候选
  • 两类方法都基于"共享特征暗示重叠"的核心思想

考虑一个简单的组装场景:

某细菌基因组大小 5 Mb,测序深度 50×,平均读长 10 kb。 需要的 reads 数量:N = (5M × 50) / 10k = 25,000 条

如果进行全对全比对以寻找重叠:

  • 比较次数:N × (N-1) / 2 ≈ 3.12 亿次
  • 每次比对(Smith-Waterman):O(L²),L = 10 kb

这在计算上是不可行的。因此,我们需要一种方法,不进行显式比对也能快速识别可能重叠的 read 对

核心思想:从特征共享到候选筛选

Section titled “核心思想:从特征共享到候选筛选”

重叠检测算法基于一个关键观察:

如果两条 reads 存在显著重叠,它们必然共享大量相同的短序列片段(k-mers)。

因此,我们可以通过以下步骤降维:

  1. 特征提取:从每条 read 中提取代表性特征(如 k-mers)
  2. 索引构建:建立特征到 reads 的倒排索引
  3. 候选生成:共享足够多特征的 read 对进入候选集
  4. 精确验证:仅对候选对进行详细比对确认

这种方法将复杂度从 O(n²) 降低到 O(n × f),其中 f 是特征提取和索引查询的代价。

设 reads 集合为 R={r1,r2,,rn}R = \{r_1, r_2, \ldots, r_n\},每条 read rir_i 是长度为 LiL_i 的字符串。

重叠定义:read rir_irjr_j 存在有效重叠,当满足:

  1. 重叠长度overlap(ri,rj)Lmin|overlap(r_i, r_j)| \geq L_{\min}(如 1 kb)
  2. 序列相似度sim(ri,rj)Sminsim(r_i, r_j) \geq S_{\min}(如 85%)
  3. 方向:同向或反向互补

直接枚举所有 read 对的时间复杂度为 O(n2L2)O(n^2 \cdot L^2)。对于人类基因组规模(~100万条 reads),这完全不可行。

现代算法的核心是将问题分解为:

Overlap Detection=Candidate Generation+Exact Verification\text{Overlap Detection} = \text{Candidate Generation} + \text{Exact Verification}

其中候选生成阶段的目标是高敏感性(不漏掉真实重叠),精确验证阶段的目标是高特异性(过滤假阳性)。

Minimap 的核心洞察是:不需要索引所有 k-mer,只需索引具有代表性的子集(minimizer)。minimizer 是窗口内哈希值最小的 k-mer,相邻窗口往往共享同一个 minimizer,因此序列发生小突变时它相对稳定。minimizer 的形式化定义与性质见 Minimap2 比对算法,此处只关注它如何用于重叠候选筛选:

  1. 索引构建:对每条 read 提取所有 minimizer,构建倒排索引 minimizer → [(read_id, position), ...]
  2. 候选识别:共享足够多 minimizer 的 read 对进入候选
  3. 共线性检查:候选对的 minimizer 位置应呈线性关系(斜率一致),过滤随机共享的 minimizer
  4. 精确验证:对通过检查的候选进行局部动态规划比对,确认重叠长度和相似度满足阈值

MHAP 使用 MinHash 技术,通过概率估计快速比较集合相似度。

对于两个 k-mer 集合 AABBJaccard 相似度定义为:

J(A,B)=ABABJ(A, B) = \frac{|A \cap B|}{|A \cup B|}

该指标度量集合的重叠程度:J=1J = 1 表示完全相同,J=0J = 0 表示无共享元素。

直接计算 Jaccard 相似度需要知道完整的集合交集和并集,代价高昂。MinHash 提供了一种概率估计方法:

  1. 对集合中每个元素计算哈希值
  2. 选择最小的 hh 个哈希值作为集合的签名
  3. 两个签名中共享的最小哈希值比例近似 Jaccard 相似度:
J^(A,B)signature(A)signature(B)h\hat{J}(A, B) \approx \frac{|\text{signature}(A) \cap \text{signature}(B)|}{h}

数学保证J^\hat{J}JJ 的无偏估计,方差随 hh 增大而减小。

  1. 签名生成:每条 read 的所有 k-mers 计算哈希,保留最小的 hh
  2. 候选筛选:签名相似度超过阈值的 read 对进入候选集
  3. 精确验证:对候选进行局部比对确认重叠
维度 Minimap MHAP
核心方法 空间采样(minimizer) 概率估计(MinHash)
索引大小 较小(~2N/w) 中等(N×h)
敏感性 高(保留局部结构) 可调(通过 h 控制)
速度 极快
适用场景 一般组装 极高错误率数据

时间复杂度

  • Minimizer 提取:O(NL)O(N \cdot L),N 为 read 数,L 为平均长度
  • 索引构建:O(NL/w)O(N \cdot L/w)ww 为窗口大小
  • 候选识别:O(Md)O(M \cdot d)MM 为 minimizer 数,dd 为平均倒排列表长度
  • 精确验证:O(CL)O(C \cdot L)CC 为候选对数

总时间复杂度:O(NL+CL)O(N \cdot L + C \cdot L)。在实际情况中,CN2C \ll N^2,因此接近线性。

空间复杂度

  • 存储 minimizers:O(NL/w)O(N \cdot L/w)
  • 倒排索引:O(NL/w)O(N \cdot L/w)

总空间复杂度:O(NL/w)O(N \cdot L/w),约为序列总大小的 1/w1/w

时间复杂度

  • 签名生成:O(NLk)O(N \cdot L \cdot k)kk 为 k-mer 大小
  • 候选筛选:O(NhlogN)O(N \cdot h \cdot \log N)hh 为签名大小
  • 精确验证:O(CL)O(C \cdot L)

总时间复杂度:O(NLk+CL)O(N \cdot L \cdot k + C \cdot L)

空间复杂度

  • 存储签名:O(Nh)O(N \cdot h)

总空间复杂度:O(Nh)O(N \cdot h)

Minimap 风格的 minimizer 提取与命中定位的完整数值示例见 Minimap2 比对算法 · 示例。重叠检测复用同一套 seeding 逻辑,差异仅在于:比对是把 read 定位到参考基因组,而重叠检测是在 read 集合内部做全对全候选筛选,并额外依赖上文的共线性检查确认两条 read 的 minimizer 位置呈一致斜率。

Minimap2 是当前最流行的长读长比对工具,它扩展了原始 Minimap:

  • 多种模式:mapping、overlap、assembly
  • 种子策略:支持 minimizer 和其他索引
  • 链式比对:高效的 seed-chain-align 流程
  • 适配性:自动调整参数适应不同数据类型
  • Canu 组装器:使用 Minimap 进行重叠检测
  • Flye 组装器:使用 Minimap 进行 read 比对
  • 纠错工具:Racon、Medaka 等依赖 Minimap 的重叠信息
  • SV 检测:Sniffles2 等使用 Minimap2 进行 read 比对
  • 分布式索引:将 reads 分片,并行构建索引
  • GPU 加速:利用 GPU 并行计算 minimizer 哈希
  • 多线程验证:并行进行候选对的精确比对
  • 压缩索引:使用压缩编码存储 minimizer
  • 分批处理:将大数据集分批处理
  • 磁盘溢出:当内存不足时使用磁盘存储部分索引
  • 自适应窗口:根据 GC 含量调整窗口大小
  • 质量过滤:先过滤低质量 reads 减少计算量
  • 层级筛选:多级阈值逐步筛选候选
  • Li, H. (2018). Minimap2: pairwise alignment for nucleotide sequences. Bioinformatics, 34(18), 3094-3100.
  • Berlin, K., et al. (2015). Assembling large genomes with single-molecule sequencing and locality-sensitive hashing. Nature biotechnology, 33(6), 623-630.
  • Roberts, M., et al. (2004). Reducing storage requirements for biological sequence comparison. Bioinformatics, 20(18), 3363-3369.