mcpField
W
waypoint-bio

waypoint-bio

github.com/kalarislabs数据与数据库8441 次安装今天更新
代码仓库

关于 waypoint-bio

Waypoint Bio 提供预训练微生物组语言模型、Atlas 样本语料和 Compass 基准测试,并通过 `waypoint` 命令行使用。研究人员可整理分类学谱系数据、生成嵌入、微调模型、运行基准测试,或用自有语料预训练。

主要功能

  1. 01整理分类学谱系数据集
  2. 02生成样本嵌入
  3. 03微调模型以执行预测任务
  4. 04使用 Compass 进行基准测试
  5. 05基于 Atlas 或自定义数据预训练

适用场景

  1. 01为聚类生成微生物组谱系嵌入
  2. 02根据群落组成预测表型
  3. 03在 Compass 任务上比较模型
  4. 04使用自有微生物组语料预训练

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/kalarislabs/research-agent-skills --skill waypoint-bio

安装后在 Claude Code 中输入/waypoint-bio确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
compass-benchmark.md
python-api.md
data-preparation.md
cli-reference.md
scripts/
vocab_coverage.py
profiler_to_waypoint.py

详细介绍

Waypoint:Outpost Bio 的开放式微生物组基础模型

概述

Outpost Bio 在 Apache 2.0 许可下开源了三项成果,详见 Treloar 等人,bioRxiv 2026.05.02.722381:

成果内容Hugging Face
Waypoint基于分类单元令牌的 GPT-2 风格因果语言模型,参数量为 6M–170Moutpost-bio/Waypoint-6m、-45m、-170m
Atlas从 MGnify 抓取的 539,308 个微生物组样本(485,377 个用于预训练 / 53,931 个用于基准测试)outpost-bio/Atlas
Compass涵盖四项研究的八个下游任务outpost-bio/Compass

核心理念是:微生物组样本就是一个句子。每个分类单元都是一个令牌,令牌按丰度 z 分数从高到低排序,模型通过预测下一个令牌进行训练。预训练检查点随后可提供样本级嵌入,或作为预测任务的微调骨干模型。

所有操作都由一个 CLI waypoint 驱动,包含五个子命令:prepare-dataset、embed、finetune、benchmark、pretrain。

适用场景

  • 将 16S / 宏基因组分类谱编码为固定大小的向量,用于聚类、可视化或下游分类器。
  • 微调 Waypoint 检查点,根据群落组成预测表型、治疗方案或连续读数。
  • 使用 Compass 为自己的微生物组模型评分,使结果可与论文中的数据比较。
  • 在 Atlas 或自己的语料库上预训练分类学语言模型。
  • 将分析工具的输出(MetaPhlAn、Kraken2/Bracken、QIIME 2、MGnify TSV)转换为这些工具所需的输入格式。

如果标注样本少于约 1,000 个,请勿使用此工具——请参阅科学注意事项。此时,相对丰度随机森林是更好的工具,论文也有此建议。

设置

pip install waypoint-bio       # installs the `waypoint` command

Atlas、Compass 和所有 Waypoint 检查点都需要授权访问。访问请求会自动批准,但你必须在每个仓库页面点击一次,然后进行身份验证:

  1. 在需要使用的每个仓库页面申请访问:Waypoint-6m、 Waypoint-45m、 Waypoint-170m、 Atlas、 Compass。

  2. 在本地进行身份验证:

    hf auth login          # or: export HF_TOKEN=hf_...
    

任何子命令返回 401/403,几乎总是因为你尚未在对应的特定仓库申请访问——仅有令牌并不足够。请使用仅具备读取权限的令牌。分词器通过 trust_remote_code=True 加载;如果需要在不同运行中固定远程代码,请指定 revision。

waypoint 数据格式

除 prepare-dataset 外,所有命令都使用 waypoint 格式:.parquet / .csv / .tsv 文件,每行代表一个样本,包含两个对齐的列表列,以及任意所需的标签列。

列类型说明
Taxalist[str]完整谱系字符串,以 ; 分隔:k__Bacteria; p__Firmicutes; ...; g__Lactobacillus
Relative Abundanceslist[float]与 Taxa 长度相同,顺序一致
(任意)标量目标、协变量或 Split 列

建议优先使用 parquet。CSV/TSV 会将列表存储为 repr 字符串,并通过 ast.literal_eval 进行往返转换。

请提供完整谱系,而非单独的名称。 分词器会从每个谱系中提取属级片段(g__);如果缺少属级信息,则会回退到最具体的更高分类等级。单独的名称会完全禁用这种回退机制。

工作流

1. 将数据转换为 waypoint 格式

如果已有带有谱系标签的样本 × 分类单元(或分类单元 × 样本)丰度矩阵:

waypoint prepare-dataset \
    --input abundance_matrix.tsv \
    --metadata sample_labels.csv \
    --output dataset.parquet

程序会根据第一列的列标题自动检测方向(taxonomy、lineage、taxon、otu、#otu id ⇒ 分类单元为行);也可以使用 --orientation 覆盖。除非传入 --no_normalize,否则会将各行归一化至总和为 1;除非传入 --keep_zeros,否则会丢弃零值。

prepare-dataset 无法直接读取分析器的输出——MetaPhlAn 使用 | 分隔符,Kraken2 报告通过缩进表示层级,而 QIIME 2/SILVA 使用前缀 d__ 表示域,而非 k__(分词器会静默忽略该前缀)。请使用内置转换器处理这些格式:

python scripts/profiler_to_waypoint.py \
    --input merged_metaphlan.tsv --format metaphlan \
    --output dataset.parquet

python scripts/profiler_to_waypoint.py \
    --input reports/*.kreport --format kraken \
    --output dataset.parquet

python scripts/profiler_to_waypoint.py \
    --input feature-table.tsv --format qiime2 \
    --output dataset.parquet

关于所有输入布局、分类等级处理,以及 d__/| 易错点,请参阅 references/data-preparation.md。

2. 首先检查词汇表覆盖率

Waypoint 的词汇表在预训练时根据 Atlas 固定。词汇表中不存在的分类单元会变成 <unk>,并被 waypoint embed 静默丢弃;论文将此称为模型的主要局限。若某个样本的分类单元全部超出词汇表范围,则会产生退化的 [BOS][EOS] 嵌入。

python scripts/vocab_coverage.py --model outpost-bio/Waypoint-6m --data dataset.parquet

该命令会报告各样本的覆盖率和按丰度加权的覆盖率,并标记低于阈值的样本。如果按丰度加权的覆盖率中位数低于约 0.8,应重新检查分类标签,再信任任何下游指标。

3. 嵌入样本
waypoint embed \
    --model outpost-bio/Waypoint-6m \
    --data dataset.parquet \
    --output embeddings.parquet

输出以样本 ID 为索引,列名为 dim_0 … dim_{H-1}(6m 的 H = 256,45m 的 H = 512,170m 的 H = 768)。默认值:--pooling last_token、--batch_size 32、--max_length 512;设备会自动检测(cuda → mps → cpu)。

除非有理由更改,否则请保留 --pooling last_token:它与检查点的预训练方式以及 benchmark 和 finetune 的池化方式一致。对于无监督用途,mean 是合理的替代选项;first_token/cls_token 会返回 BOS 位置,而在因果 LM 中该位置携带的信号很少。

4. 根据标签微调
# classification
waypoint finetune \
    --model outpost-bio/Waypoint-45m \
    --data dataset.parquet \
    --output_dir outputs/ft_disease \
    --task_type classification \
    --target "Disease Status" \
    --config configs/finetune_classification.yaml

# regression, with a categorical covariate one-hot appended to the pooled embedding
waypoint finetune \
    --model outpost-bio/Waypoint-45m \
    --data dataset.parquet \
    --output_dir outputs/ft_degradation \
    --task_type regression \
    --target "Degradation Rate" \
    --covariate_column Drug \
    --config configs/finetune_regression.yaml

配置文件路径相对于内置的 waypoint_bio/configs/ 目录树解析,因此无需克隆仓库,从任意目录都可以使用 configs/...。

小型数据集值得覆盖的默认值:随附配置中的 warmup_steps: 1000(降至约 50,避免预热在提前停止之后才结束);num_epochs: 1(提高该值——实际终止训练的是基于验证损失的提前停止);显存有限时设置 use_lora: true(训练约 1% 的参数;保存前会将适配器合并回模型,因此检查点仍是普通的 AutoModel)。

默认按随机比例 80/10/10 划分。只要样本存在相关性,就将 split_column 设为 Split 列——例如重复测量、对同一供体进行多次采样,或技术重复;否则随机划分会造成数据泄漏,测试分数也就毫无意义。

输出保存到 --output_dir:best_model/(可由 embed/benchmark 加载)、test_metrics.json、training_log.csv + .html,以及 finetune_results.json。

5. 在 Compass 上进行基准测试
waypoint benchmark --model outpost-bio/Waypoint-6m --output_dir outputs/benchmark
waypoint benchmark --model outputs/pretrain/best_model --tasks 1 6 --output_dir outputs/smoke

每项任务都会使用新的分类头进行微调,并写入 benchmark_results.json。分类任务以宏平均 F1 评分;唯一的回归任务以 R² 评分,且限制在 [0, 1] 范围内;final_score 是各任务的非加权平均值。完整任务表、指标键和结果文件架构请参阅 references/compass-benchmark.md。

6. 预训练
waypoint pretrain \
    --model_config configs/models/gpt2-45m.yaml \
    --pretrain_config configs/pretraining.yaml \
    --output_dir outputs/pretrain_45m

下载 Atlas,根据语料库构建分类学分词器,计算每个词元的丰度均值/标准差以进行 z-score 排序,然后使用下一个词元预测和提前停止进行训练。添加 --data my_corpus.parquet,即可改用自有的 waypoint 格式语料库进行预训练;也可添加 --max_samples N 进行冒烟测试。

项目提供 9 种架构,从 gpt2-6m.yaml(8 层,隐藏维度为 256)到 gpt2-170m.yaml(24 层,隐藏维度为 768);所有架构的每头维度均固定为 64。完整表格和所有配置项请参阅 references/cli-reference.md。

科学注意事项

这些注意事项至关重要。忽略它们,得到的数字看起来正常,却毫无意义。

  • **标注样本少于约 1,000 个时,Waypoint 的表现不如基于原始丰度的随机森林。**论文中与 RF 基线的交叉点约为 10,000 个训练样本。请先拟合基线;只有当 Transformer 在你的数据上表现更好时,才采用它。
  • **词表外的分类群会被丢弃,而非标记。**每个 Compass 数据集都包含一些此类分类群。请运行 scripts/vocab_coverage.py,并在报告结果时一并报告覆盖率。
  • **最佳基准模型是 45M,而非 170M。**随着规模扩大,预训练损失会持续下降,但 Compass 下游得分并不会——请从 6m 或 45m 开始,仅在证明确有帮助时再扩大规模。
  • 默认采用属级别分词,因此物种级别的差异会被折叠。更改 taxon_rank 需要重新预训练,而不只是重新分词。
  • **组成型数据。**相对丰度总和受限于 1;一个分类群的差异会引起其他分类群表面上的变化。这会影响对任何逐分类群归因的解读。
  • **批次和研究效应在微生物组数据中占主导地位。**Atlas 涵盖 MGnify 流程 v1.0–v5.0 和四种测序模式。切勿让研究或运行边界与标签边界重合。
  • **不是临床或诊断工具。**模型卡对此有明确说明。

参考资料

  • references/cli-reference.md — 每个子命令的标志、每个配置键,以及模型规模表。
  • references/compass-benchmark.md — 八项任务、筛选条件、指标,以及 benchmark_results.json 架构。
  • references/data-preparation.md — waypoint 格式、Profiler 转换、分类字符串规则。
  • references/python-api.md — 如何在 Python 中使用分词器、数据集、头部和检查点。

脚本

  • scripts/profiler_to_waypoint.py — 将 MetaPhlAn / Kraken2 / QIIME 2 / 通用谱系表转换为 waypoint 格式。
  • scripts/vocab_coverage.py — 为 waypoint 格式文件生成分词器覆盖率报告。

上游项目

代码 github.com/Outpost-Bio/waypoint · 软件包 waypoint-bio · 论文 bioRxiv 2026.05.02.722381 · 社区 Waypoint Slack · 联系邮箱 [email protected]。

引用 Treloar, N. J., Ur-Rehman, S., Yang, J., & Outpost Bio (2026). Learning the Language of the Microbiome with Transformers. bioRxiv。各项成果的 DOI 列于 outpost.bio/citations。

Agent 操作流程

  1. 检查环境。 确认工具版本、参考基因组/注释版本,以及输入格式(FASTQ、BAM、VCF、h5ad)。
  2. 明确输入。 根据数据或用户确认格式、标识符和参数。任何会影响结果的值都应询问,不要猜测。
  3. 先运行小规模版本。 先在小型子集上运行流程(一个样本、一条染色体、几千个细胞)。
  4. 使用以上说明和参考资料执行完整任务。
  5. 验证结果。 解读结果前,检查 QC 指标、样本身份、基因组版本一致性和批次效应。
  6. 报告。 说明运行了什么(版本、命令、参数)、检查了什么,以及仍有哪些不确定之处。
如果发生这种情况请这样做
输入之间的基因组版本或标识符不匹配停止并先统一(liftover、ID 映射),然后再继续。
这些说明中的函数、标志或端点在已安装版本中不存在查阅已安装版本自己的文档(help()、--help、官方文档),调整后告知用户。切勿编造 API。
必需的输入、标识符或参数不明确询问用户,或在运行前明确说明所采用的假设。

完整性规则

  • 切勿捏造结果、参数、标识符、引文或统计数据。如果无法运行或验证某项内容,请如实说明。
  • 不要对统计结果所能支持的范围之外的生物学意义作出解释;报告多重检验校正。
  • 请将此处与版本相关的细节视为可能已过时:对照已安装版本的官方文档予以确认。
  • 对于需要付费、占用共享 GPU 或云配额、涉及个人或患者数据,或无法撤销的操作,须先征得同意。

相关技能

  • scikit-bio:用于生物序列和群落生态学分析的 Python 库 scikit-bio:DNA/RNA/蛋白质序列、pair_align 比对、系统发育……
  • distributed-llm-pretraining-torchtitan:使用 torchtitan 和 4D 并行(FSDP2、TP、PP、CP)进行 PyTorch 原生分布式大模型预训练。

评论

支持 Markdown