Tiny BPE Trainer のご紹介
GPT から RoBERTa に至るまで、今日の多くの最新の NLP モデルは、バイトペアエンコーディング (BPE) を用いたサブワードトークン化に依存しています。しかし、純粋な C++ で独自の語彙を学習したい場合はどうすればよいでしょうか?
Tiny BPE Trainer をご紹介します。これは、最新の C++17/20 で記述された、超高速でヘッダーのみを使用する BPE トレーナーです。依存関係なし、完全な 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行のコマンドですべてをテスト
デモ
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."
Modern Text Tokenizer とシームレスに連携
学習が完了すると、カスタム語彙を Modern Text Tokenizer で直接使用できるようになります。
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処理文字数: 3,300万文字
2ユニーク単語数: 106K
3語彙サイズ: 32,000
4学習時間: 約30分 (Ryzen 9、-O3)
Tiny BPE Trainerは、IMDBやWikiTextといった大規模なコーパスファイルでも、効率的かつ予測通りに動作し、HuggingFace、SentencePiece、そして独自のC++トークナイザーと互換性のある語彙を生成します。
ユースケース
- LLMやTransformer向けのカスタムトークナイザーの学習
- Pythonが利用できない環境でのオンデバイスNLP
- 高性能プリプロセッサの構築
- ドメイン固有の語彙の学習 (法律、医療、コード)
今すぐ試す
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 でスターを付ける 、プロジェクトで使用、または貢献してください。
コメント