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 上加星號 ,將其用於您的項目,或貢獻力量!