跳转至

摘要: CLARK(基于精简k-mer的分类器)是一款面向宏基因组学与基因组学领域的高速、高精度DNA序列分类工具,由加州大学河滨分校计算机科学与植物科学系联合开发。其核心方法是利用判别性k-mer对序列进行有监督分类,并为每次分类结果提供置信度评分。CLARK提供三种分类器模式:标准版CLARK采用精确k-mer匹配,适用于高性能工作站与大型数据库;轻量版CLARK-l在内存受限环境下运行,适合小规模宏基因组分析;CLARK-S则引入间隔k-mer策略,在消耗更多内存的前提下显著提升短读段的分类灵敏度。该系统支持可重现的构建流程、自动化回归测试及模块化脚本,并持续优化对NCBI RefSeq大型数据库的下载与配置能力。CLARK已在《BMC Genomics》及《Bioinformatics》期刊上发表同行评审论文,被广泛应用于细菌、病毒等多类生物的物种水平序列分类任务,是宏基因组数据分析领域兼顾速度与准确性的主流工具之一。


CLARK:基于判别性 K-mer 的快速精准序列分类系统

概述

CLARK(CLAssifier based on Reduced K-mers)是一款面向宏基因组学(Metagenomics)、基因组学(Genomics)和分子生物学(Molecular Biology)的高性能 DNA 序列分类工具。它由加州大学河滨分校计算机科学与工程系及植物学与植物科学系的联合团队开发,于 2014 年首次在第五届 ACM 生物信息学、计算生物学与健康信息学会议(ACM-BCB)上发布。

在宏基因组研究中,对海量测序 reads 进行快速、准确的物种归因是核心挑战之一。传统方法往往在速度、精度与内存占用之间难以兼顾。CLARK 的核心创新在于利用判别性 k-mer(discriminative k-mers)实现有监督序列分类(supervised sequence classification),并为每次分类结果提供置信度分值(confidence score),使研究者能够量化分类可靠性。

该系统提供三种分类器变体,分别针对不同的计算资源条件和灵敏度需求,适用于从资源受限的笔记本电脑到高性能工作站的多种场景。相关工作已发表于 BMC Genomics(2015)和 Bioinformatics(2016)两篇同行评审论文,具有充分的学术背书。


核心原理与功能

判别性 K-mer 方法

CLARK 的分类核心是判别性 k-mer(discriminative k-mers)——即那些在特定目标分类群(target taxon)中出现、而在其他分类群中不出现(或频率极低)的 k-mer 子序列。通过构建这些判别性 k-mer 的数据库,CLARK 可以将待分类序列(object)与参考数据库进行高效匹配,从而完成物种归因。

每次分类结果附带: - 第一分配(first assignment)及其命中 k-mer 数(hit count) - 第二分配(second assignment)及其命中 k-mer 数 - 置信度分值(confidence score):量化分类结果的可信程度 - Gamma 值(Gamma score):用于丰度过滤的辅助指标

三种分类器

分类器适用场景k-mer 类型内存需求
CLARK(默认)高性能工作站、大型数据库精确 k-mer(exact k-mer matching)细菌数据库约 58 GB(加载),156 GB(构建)
CLARK-l内存受限工作站、小型宏基因组精确 k-mer设计目标为 4 GB RAM 笔记本
CLARK-S需要更高灵敏度的场景间隔 k-mer(spaced k-mers)最高约 101 GB RAM

四种运行模式(-m 参数)

  • Full mode(模式 0):输出最详细的分类信息,包括各目标命中计数、Gamma 值、前两个分配及置信度分值,同时支持 --extended 扩展输出。
  • Default mode(模式 1):默认模式,输出对象 ID、序列长度和第一分配结果。
  • Express mode(模式 2):快速模式,输出格式与默认模式相同,速度更快。
  • Spectrum mode(模式 3):k-mer 频谱模式,需要配合 -o(最低 k-mer 频率)和 --kso 参数使用。

K-mer 长度选择策略

  • k = 20 或 21:高灵敏度(high sensitivity),适合短 reads 或需要捕捉更多信号的场景。
  • k = 31:速度、精度与内存占用的最佳平衡点(默认值);CLARK-l 默认为 k = 27;CLARK-S 默认 k = 31 且最大错配数(max mismatches)设为 9。

支持的数据类型

  • 单端 FASTQ/FASTA 文件
  • 双端测序文件(Paired-end reads)
  • Gzip 压缩文件(需加 --gzipped 参数)
  • 长读长序列(Long reads,如 Nanopore/PacBio,需加 --long 参数)

参考数据库类别

CLARK 支持通过 set_targets.sh 脚本从 RefSeq 下载并构建以下参考数据库:bacteria(细菌)、viruses(病毒)、human(人类)、fungi(真菌)、plasmid(质粒)、plastid(质体)、protozoa(原生动物)以及自定义(custom)数据库。版本 1.4.4 起,RefSeq 下载支持并行(8 个并行工作进程)、断点续传(resumable downloads)和完整性校验(gzip validation、NCBI URL 验证、部分文件清理)。


安装与使用

系统要求

  • 64 位操作系统(Linux 或 Mac)
  • GNU GCC 4.4 或更高版本
  • OpenMP 库(用于多线程支持)
  • 充足 RAM(视使用的分类器和数据库规模而定,参见上表)

安装步骤

# 步骤 1:从官方网页下载最新版本压缩包
# 下载地址:http://clark.cs.ucr.edu

# 步骤 2:解压 tar.gz 文件(以 v1.3.0 为例)
tar -xvf CLARKV1.3.0.tar.gz

# 步骤 3:进入 CLARK 目录
cd /path/to/CLARK

# 步骤 4:编译所有可执行文件(v1.4.2 起已移除 install.sh,统一使用 make)
make all

# 步骤 5:运行回归测试,验证构建正确性
make test

关键脚本说明

所有脚本均位于 scripts/ 目录下。若当前工作目录不是 CLARK 仓库根目录,需使用绝对路径调用,例如 /path/to/CLARK/scripts/classify_metagenome.sh

脚本功能
scripts/set_targets.sh定义分类目标、下载参考序列、构建数据库
scripts/classify_metagenome.sh对宏基因组样本进行分类
scripts/estimate_abundance.sh计算目标分类群的丰度估计(count/proportion)

主程序参数完整说明

./CLARK \
  -k <kmerSize>        # K-mer 长度(默认 31;CLARK-l 默认 27)\
  -T <fileTargets>     # 目标定义文件路径(必填)\
  -t <minFreqTarget>   # 目标中 k-mer 的最低频率(默认 0)\
  -D <directoryDB>     # 数据库目录(必填)\
  -O <fileObjects>     # 待分类序列文件(单端,必填;与 -P 二选一)\
  -P <file1> <file2>   # 双端 FASTQ 文件(与 -O 二选一)\
  -o <minFreqObject>   # 待分类序列中 k-mer 最低频率(仅 spectrum 模式)\
  -R <fileResults>     # 结果输出文件路径(必填)\
  -m <mode>            # 运行模式:0=full, 1=default, 2=express, 3=spectrum\
  -n <numberofthreads> # 线程数(默认 1)\
  -g <iterations>      # 非重叠 k-mer 的间隔(仅 CLARK-l,默认 4)\
  -s <factor>          # 判别性 k-mer 的采样因子(默认 2)\
  --long               # 启用长序列模式(适合长 contigs、Nanopore/PacBio reads)\
  --ldm                # 使用内存映射文件(memory-mapped file)加载数据库\
  --kso                # 启用预处理 k-mer 频谱分析(仅 spectrum 模式)\
  --extended           # 输出扩展结果(仅 full 模式)\
  --gzipped            # 输入文件为 gzip 压缩格式(通过 classify_metagenome.sh 使用)\
  --light              # 使用 CLARK-l 分类器(通过 classify_metagenome.sh 使用)\
  --spaced             # 使用 CLARK-S 分类器(通过 classify_metagenome.sh 使用)\
  --highconfidence     # 仅统计高置信度分配(通过 estimate_abundance.sh 使用)

实战示例

场景一:快速开始(Quickstart)

# 进入 CLARK 目录
cd /path/to/CLARK

# 编译并测试
make all
make test

# 配置目标数据库:下载细菌和病毒参考序列,按物种级别(species level)分类
scripts/set_targets.sh /path/to/clark-db bacteria viruses --species

# 对样本进行分类:express 模式(-m 2),使用 8 线程(-n 8)
scripts/classify_metagenome.sh -O sample.fastq -R sample.results.csv -m 2 -n 8

场景二:设置不同目标数据库

# 仅使用细菌数据库
scripts/set_targets.sh <DIR_DB/> bacteria

# 同时使用细菌、病毒和人类参考基因组
scripts/set_targets.sh <DIR_DB/> bacteria viruses human

# 细菌加自定义数据库
scripts/set_targets.sh <DIR_DB/> bacteria custom

# 构建较小的细菌数据库(仅包含代表性基因组,适合探索性分析)
scripts/set_targets.sh <DIR_DB/> bacteria --refseq-category representative

场景三:直接调用主程序的多种模式

# 默认模式,使用 31-mers
./CLARK -k 31 -T ./targets_addresses.txt -D ./DBD/ -O ./objects.fa -R ./results

# Full 模式,使用 20-mers(输出最详细的分类信息)
./CLARK -k 20 -T ./targets_addresses.txt -D ./DBD/ -O ./objects.fa -R ./results -m 0

# Express 模式,使用 20-mers,12 线程(速度最快)
./CLARK -k 20 -T ./targets_addresses.txt -D ./DBD/ -O ./objects.fa -R ./results -m 2 -n 12

# 双端测序(Paired-end reads)
./CLARK -k 20 -T ./targets_addresses.txt -D ./DBD/ -P ./sample1.fastq ./sample2.fastq -R paired.results

场景四:通过包装脚本进行宏基因组分类

# 基础分类
scripts/classify_metagenome.sh -O ./sample.fa -R ./result

# 指定 k-mer 长度为 20
scripts/classify_metagenome.sh -O ./sample.fa -R ./result -k 20

# Full 模式分类
scripts/classify_metagenome.sh -O ./sample.fa -R ./result -m 0

# 多样本文件(通过文件列表传入)
scripts/classify_metagenome.sh -O ./samples.txt -R ./samples.txt -m 0

# 双端测序,paired-end reads
scripts/classify_metagenome.sh -O ./samples.R.txt ./samples.L.txt -R ./samples.R.txt -m 0

# 8 线程加速
scripts/classify_metagenome.sh -O ./sample.fa -R ./result -m 2 -n 8

# 处理 gzip 压缩输入文件
scripts/classify_metagenome.sh -O ./sample.fa.gz -R ./result -m 0 -n 8 --gzipped

# 使用 CLARK-l(低内存模式),双端测序
scripts/classify_metagenome.sh -P ./sample1.fastq ./sample2.fastq -R ./result --light

# 使用 CLARK-S(高灵敏度模式),双端测序
scripts/classify_metagenome.sh -P ./sample1.fastq ./sample2.fastq -R ./result --spaced

# CLARK-S full 模式,8 线程
scripts/classify_metagenome.sh -O ./sample.fa -R ./result -m 0 -n 8 --spaced

# CLARK-S express 模式处理 gzip 文件
scripts/classify_metagenome.sh -O ./sample.fa.gz -R ./result -m 2 -n 8 --spaced

# CLARK-S 降低内存使用(调整采样因子 -s)
scripts/classify_metagenome.sh -O ./sample.fa -R ./result --spaced -s 2

场景五:丰度估计

# 基础丰度估计
scripts/estimate_abundance.sh -F ./result.csv -D <DIR_DB/>

# 仅统计高置信度分配
scripts/estimate_abundance.sh -F ./result.csv -D <DIR_DB/> --highconfidence

# 按置信度分值过滤(仅保留 ≥ 0.8 的结果)
scripts/estimate_abundance.sh -F ./result.csv -D <DIR_DB/> -c 0.80

# 按 Gamma 分值过滤(仅保留 ≥ 0.03 的结果)
scripts/estimate_abundance.sh -F ./result.csv -D <DIR_DB/> -g 0.03

# 输出 MetaPhlAn 兼容格式
scripts/estimate_abundance.sh -F ./result.csv -D <DIR_DB/> -g 0.03 --mpa

# 按丰度过滤(仅保留 > 2% 的分类群)
scripts/estimate_abundance.sh -F ./result.csv -D <DIR_DB/> -a 2

结果文件格式

Full mode 输出字段:

<Object_ID>, <hit count in target 1>, ..., <hit count in target N>,
<Length of object>, <Gamma>, <first assignment>, <hit count of first>,
<second assignment>, <hit count of second>, <confidence score>

Default/Express mode 输出字段:

<Object_ID>, <Length of object>, <1st_assignment>


常见问题

Q1:旧版本构建的数据库能否直接用于新版本?

不能。1.0 版本创建的数据库与 v1.1 及更新版本不兼容。如果从 v1.0 升级,必须使用 v1.1 或更新版本重新构建数据库。v1.1 及之后各版本之间的兼容性 [待验证,建议参阅各版本 Release Notes]。


Q2:内存不足怎么办?能否在普通笔记本上运行 CLARK?

可以。针对内存受限的场景,推荐使用 CLARK-l,该版本专为 4 GB RAM 笔记本设计,适合小型宏基因组分析。此外,对于 CLARK-S,可通过调整采样因子参数降低内存占用:

scripts/classify_metagenome.sh -O ./sample.fa -R ./result --spaced -s 2

若使用默认 CLARK 处理完整细菌数据库,则需要约 58 GB RAM(加载阶段)和 156 GB RAM(构建阶段)。


Q3:如何在速度和分类灵敏度之间取得平衡?

  • 优先速度:使用 Express 模式(-m 2)配合多线程(-n <N>),k-mer 长度选 31。
  • 优先灵敏度:使用 CLARK-S(--spaced)配合较小的 k-mer(k = 20 或 21)。
  • 综合平衡:默认模式(-m 1)配合 k = 31 是官方推荐的平衡点。

Q4:如何处理双端测序数据(Paired-end reads)?

通过主程序使用 -P 参数:

./CLARK -k 20 -T ./targets_addresses.txt -D ./DBD/ -P ./sample1.fastq ./sample2.fastq -R paired.results

通过包装脚本使用 -P-O + 文件列表:

scripts/classify_metagenome.sh -P ./sample1.fastq ./sample2.fastq -R ./result --light
scripts/classify_metagenome.sh -O ./samples.R.txt ./samples.L.txt -R ./samples.R.txt -m 0

Q5:如何缩减数据库规模以加快探索性分析?

从 v1.4.4 起,可以在 set_targets.sh 中使用 --refseq-category 参数限制下载范围:

# 仅下载代表性(representative)基因组,显著减少数据库体积
scripts/set_targets.sh <DIR_DB/> bacteria --refseq-category representative

此外,v1.4.4 还新增了 RefSeq 分类和组装级别过滤器,支持构建更小的探索性数据库,同时下载过程支持断点续传,网络中断后无需重新下载。


总结

CLARK 是一个面向宏基因组序列分类的成熟工具,其核心优势在于:以判别性 k-mer 为基础的高效精确匹配算法;三种分类器变体(标准版、轻量版 CLARK-l、高灵敏度版 CLARK-S)覆盖不同资源条件;四种运行模式满足精度与速度的差异化需求;以及完善的配套脚本体系,支持从数据库构建、序列分类到丰度估计的全流程操作。版本 1.4.x 系列大幅提升了工程可靠性,包括 Makefile 构建系统、回归测试、RefSeq 下载强化和 CI 集成。对于需要在大规模宏基因组数据中快速完成物种归因的研究者,CLARK 是一个具有充分学术验证和持续维护的可靠选择。