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 ビルド

OSStatus
Ubuntu
Windows
GitHub ActionsCI

ユースケース

  • C++ による ML モデル向けテキスト前処理
  • デバイス内 NLP (Python のオーバーヘッドなし)
  • 高性能 CLI ツール
  • ランタイムに依存しない組み込みシステム

今すぐ試す

Modern Text Tokenizer がリリースされました。プロジェクトにすぐにご利用いただけます。

クローン、コンパイル、トークン化は数秒で完了します: Modern Text Tokenizer