Tiny BPE Trainer のご紹介

GPT から RoBERTa に至るまで、今日の多くの最新の NLP モデルは、バイトペアエンコーディング (BPE) を用いたサブワードトークン化に依存しています。しかし、純粋な C++ で独自の語彙を学習したい場合はどうすればよいでしょうか?

Tiny BPE Trainer をご紹介します。これは、最新の C++17/20 で記述された、超高速でヘッダーのみを使用する BPE トレーナーです。依存関係なし、完全な 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行のコマンドですべてをテスト

デモ

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 をご覧ください。

Tiny BPE Trainer on GitHub

NLP と C++ コミュニティのために ❤️ を込めて構築しました。

気に入っていただけましたら、GitHub でスターを付ける 、プロジェクトで使用、または貢献してください。