Tiny BPE Trainer 介紹
如今,從 GPT 到 RoBERTa,大多數現代 NLP 模型都依賴於使用位元組對編碼 (BPE) 的子詞標記化。但是,如果您想用純 C++ 訓練自己的詞彙表,該怎麼辦?
認識Tiny BPE Trainer——一款速度超快、僅包含頭檔的 BPE 訓練器,採用現代 C++ 17/20 編寫,零依賴,完全支援UTF-8 編碼,並相容於 HuggingFace 的輸出(vocab.txt
、merges.txt
)。
為什麼要再增加一個 BPE Trainer?
因為現有的方案通常:
- 僅支援 Python,運行時依賴性很強(Rust、Protobuf 等)
- 不易嵌入到 C++ 應用程式
- 不注重速度、簡潔性或跨平台使用
Tiny BPE Trainer 具備以下特點:
- 僅支援頭檔
- 跨平台(Linux、Windows、macOS)
- 相容於 HuggingFace
- 而且它與我的另一個專案完美搭配:Modern Text Tokenizer
核心功能
- 支援純文字或 JSONL 資料集的完整 BPE 訓練**
- 支援 CLI 和 C++ API – 非常適合工具化或嵌入
- 與 HuggingFace 相容的輸出(
vocab.txt
、merges.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 文件:
用心打造,面對 NLP 和 C++ 社群。
如果您喜歡它,請在 GitHub 上加星號 ,將其用於您的項目,或貢獻力量!
評論