Tiny BPE Trainer 介绍

如今,从 GPT 到 RoBERTa,大多数现代 NLP 模型都依赖于使用字节对编码 (BPE) 的子词标记化。但是,如果您想用纯 C++ 训练自己的词汇表,该怎么办?

认识一下Tiny BPE Trainer——一款速度超快、仅包含头文件的 BPE 训练器,采用现代 C++ 17/20 编写,零依赖,完全支持UTF-8 编码,并兼容 HuggingFace 的输出(vocab.txtmerges.txt)。

为什么要添加另一个 BPE Trainer?

因为现有的方案通常:

  • 仅支持 Python,运行时依赖性很强(Rust、Protobuf 等)
  • 不易嵌入到 C++ 应用程序
  • 不注重速度简洁性跨平台使用

Tiny BPE Trainer 具备以下特点:

  • 仅支持头文件
  • 跨平台(Linux、Windows、macOS)
  • 兼容 HuggingFace
  • 而且它与我的另一个项目完美匹配:Modern Text Tokenizer

核心功能

  • 支持纯文本或 JSONL 数据集的完整 BPE 训练**
  • 支持 CLI 和 C++ API – 非常适合工具化或嵌入
  • 兼容 HuggingFace 的输出vocab.txtmerges.txt
  • UTF-8安全 – 可处理表情符号、多语言脚本和特殊字符
  • 可配置 – 小写字母、标点符号拆分、最小频率等。
  • 演示模式 – 一行命令即可测试所有内容

演示

1./Tiny-BPE-Trainer --demo

该模式可生成合成语料库、训练词汇表、打印统计数据并运行分词——所有操作仅需数秒。非常适合持续集成 (CI) 和冒烟测试。

如何训练 BPE 分词器

构建它

1g++ -std=c++17 -O3 -o Tiny-BPE-Trainer Tiny-BPE-Trainer.cpp

在语料库上训练

1./Tiny-BPE-Trainer -i corpus.txt -v 16000 -o my_tokenizer

或者使用 JSONL 格式:

1./Tiny-BPE-Trainer -i dataset.jsonl --jsonl -v 32000

对文本进行分词

1./Tiny-BPE-Trainer --test "Hello, world! This is a test."

与现代文本分词器无缝协作

训练完成后,您可以直接在我的 现代文本分词器 中使用您的自定义词汇:

1TextTokenizer tokenizer;
2tokenizer.load_vocab("my_tokenizer_vocab.txt");
3auto ids = tokenizer.encode("Hello world!");

这为您提供了一个完全由 C++ 编写的分词器流水线,并且没有任何运行时依赖。

使用真实数据集

您可以使用 HuggingFace 数据集轻松生成语料库:

1from datasets import load_dataset
2
3dataset = load_dataset("imdb", split="train")
4with open("corpus.txt", "w", encoding="utf-8") as f:
5    for x in dataset:
6        f.write(x["text"].strip().replace("\n", " ") + "\n")

然后训练:

1./Tiny-BPE-Trainer -i corpus.txt -v 16000 -o imdb_tokenizer

基准测试

1已处理:3300 万个字符
2唯一词:106000 个
3词汇量:32000
4训练时间:约 30 分钟(Ryzen 9,-O3 处理器)

即使在处理大型语料库文件(IMDB、WikiText)时,Tiny BPE Trainer 也能高效且可预测地运行,并生成与 HuggingFace、SentencePiece 以及您自己的 C++ 分词器兼容的词汇表。

用例

  • 为 LLM 和 Transformer 训练自定义分词器
  • 在 Python 不可用的情况下进行设备端自然语言处理
  • 构建高性能预处理器
  • 训练特定领域词汇表(法律、医疗、代码)

立即试用

1git clone https://github.com/Mecanik/Tiny-BPE-Trainer
2cd Tiny-BPE-Trainer
3g++ -std=c++17 -O3 -o Tiny-BPE-Trainer Tiny-BPE-Trainer.cpp
4./Tiny-BPE-Trainer --demo

欲了解高级选项、CLI 参数和集成技巧,请查看 GitHub 上的完整 README 文件:

Tiny BPE Trainer on GitHub

用心打造,面向 NLP 和 C++ 社区。

如果您喜欢它,请在 GitHub 上加星标 ,将其用于您的项目,或贡献力量!