Modern Text Tokenizer のご紹介
BERT、DistilBERT、その他のトランスフォーマーベースのアーキテクチャといった最新の自然言語処理 (NLP) モデルは、効果的なトークン化に大きく依存しています。しかし、C++ 開発者は、肥大化した依存関係、Unicode サポートの不足、語彙ベースのエンコーダーとの互換性の欠如など、選択肢が限られているという問題に直面することがよくあります。
そこで私は、Modern Text Tokenizer を開発しました。これは、UTF-8 対応、ゼロ依存関係、そして ML 対応 という、非常に高速でヘッダーのみの C++ トークナイザーです。
特徴
- ゼロ依存関係 – Boost、ICU、外部ライブラリは不要です。
- UTF-8 対応 – 多言語テキスト、絵文字、マルチバイト文字を正しく処理します。
- ヘッダーのみ – プロジェクトにドロップするだけで使用できます。
- 語彙エンコーディング – HuggingFaceから
vocab.txt
を読み込み、トークンIDを生成します。 - Transformer対応 –
[CLS]
、[SEP]
、[PAD]
、およびシーケンスフォーマットをサポートします。
主な機能
std::string_view
を使用した ASCII と Unicode の高速分岐- 設定用の Fluent API:
1 TextTokenizer tokenizer; 2 tokenizer 3 .set_lowercase(true) 4 .set_split_on_punctuation(true) 5 .set_keep_punctuation(true);
- 語彙を読み込む:
1 tokenizer.load_vocab("vocab.txt");
- エンコード/デコード:
1 auto ids = tokenizer.encode("Hello world!"); 2 std::string decoded = tokenizer.decode(ids);
パフォーマンス
1174,000文字のパフォーマンステスト
2
3結果:
4トークン化:2,159マイクロ秒(22,000トークン)
5エンコード:1,900マイクロ秒
6デコード:430マイクロ秒
7合計時間:4.49ミリ秒
8スループット:36.97MB/秒
リリースモードのRyzen 9 5900X @ -O3でベンチマークを実施しました。
使用方法
ヘッダーファイルを追加します。
1#include "Modern-Text-Tokenizer.hpp"
次にコンパイルします:
1g++ -std=c++17 -O3 -o tokenizer_demo main.cpp
BERT または DistilBERT と一緒に使用したいですか?語彙ファイルをダウンロードするだけです:
1curl -O https://huggingface.co/distilbert/distilbert-base-uncased/raw/main/vocab.txt
クロスプラットフォーム CI ビルド
OS | Status |
---|---|
Ubuntu | ✅ |
Windows | ✅ |
GitHub Actions |
ユースケース
- C++ による ML モデル向けテキスト前処理
- デバイス内 NLP (Python のオーバーヘッドなし)
- 高性能 CLI ツール
- ランタイムに依存しない組み込みシステム
今すぐ試す
Modern Text Tokenizer がリリースされました。プロジェクトにすぐにご利用いただけます。
クローン、コンパイル、トークン化は数秒で完了します: Modern Text Tokenizer
コメント