tiktoken(ティックトークン)
tiktokenとは、OpenAIが開発したBPE(Byte Pair Encoding)トークナイザの高速実装ライブラリである。Rustコアエンジン+Pythonバインディングの構成で、GPT-4/GPT-4o/o3等のOpenAIモデルで使用されるトークナイザを公開実装として提供する。
tiktokenは2022年12月にOpenAIがオープンソースとして公開したBPEトークナイザライブラリである。GPT-3.5/GPT-4/GPT-4o/o3シリーズで使用されるトークナイザのエンコード・デコード機能を提供し、API利用前のトークン数見積もりやプロンプト長管理に広く活用されている。
概要
tiktokenの最大の特徴は「高速性」と「正確性」である。Rustで実装されたコアエンジンがPythonバインディングを通じて利用可能で、HuggingFace tokenizersと比較して2-5倍、Python実装のSentencePieceと比較して10-50倍高速なエンコードを実現する。
2026年現在のtiktokenエンコーディング:
| エンコーディング | モデル | 語彙サイズ |
|---|---|---|
| cl100k_base | GPT-4, GPT-3.5-turbo | 100,277 |
| o200k_base | GPT-4o, o3, o3-mini | 200,019 |
o200k_baseはcl100k_baseの後継で、語彙サイズを2倍に拡張。非英語テキストの圧縮率が大幅に改善されている。
tiktokenの内部アーキテクチャ
tiktokenの処理フローは以下の3段階である:
1. 正規表現プレトークン化
入力テキストを正規表現パターンで初期チャンクに分割する。cl100k_baseのパターン:
(?i:'s|'t|'re|'ve|'m|'ll|'d)
|[^\r\n\p{L}\p{N}]?\p{L}+
|\p{N}{1,3}
| ?[^\s\p{L}\p{N}]+[\r\n]*
|\s*[\r\n]
|\s+(?!\S)
|\s+
この正規表現により、英語の短縮形('t, 're等)、単語、数字(3桁以内)、句読点、空白がチャンクとして分離される。
2. バイトレベルBPEエンコード
各チャンクに対してBPEマージルールを適用。Rustの最適化されたデータ構造(HashMap + 優先度キュー)で高速にマージを実行。
3. 特殊トークン処理
<|im_start|>, <|im_end|>, <|endoftext|> 等の特殊トークンをBPEの前に検出し、専用IDに変換。
tiktokenの性能ベンチマーク
| ライブラリ | エンコード速度 | メモリ使用量 | 言語 |
|---|---|---|---|
| tiktoken | 2.5M tokens/s | 40MB | Rust+Python |
| HF tokenizers | 1.0M tokens/s | 60MB | Rust+Python |
| SentencePiece | 0.5M tokens/s | 80MB | C++ |
| transformers (slow) | 50K tokens/s | 120MB | Python |
tiktoken は特にバッチエンコード(大量テキストの一括処理)で性能が際立つ。Rustのマルチスレッド処理により、CPUコア数に比例してスループットがスケールする。
主な用途
API トークン数見積もり
OpenAI APIの料金はトークン数ベースで課金されるため、リクエスト前にtiktokenでトークン数を計算してコストを見積もる。
プロンプト長管理
コンテキストウィンドウ(GPT-4o: 128Kトークン)内にプロンプトが収まるかを事前に確認。長すぎる場合はトランケーションやRAGチャンキングの基準に使用。
RAGチャンキング
ドキュメントをRAG(検索拡張生成)用にチャンク分割する際、トークン数ベースでチャンクサイズを制御。
トークン最適化
プロンプトのトークン効率を分析し、同じ意味をより少ないトークンで表現する最適化に利用。
cl100k_base vs o200k_base
| 項目 | cl100k_base | o200k_base |
|---|---|---|
| 語彙サイズ | 100,277 | 200,019 |
| 英語圧縮率 | 基準 | +5-10%改善 |
| 日本語圧縮率 | 基準 | +30-40%改善 |
| コード圧縮率 | 基準 | +15-20%改善 |
| 対応モデル | GPT-4, GPT-3.5 | GPT-4o, o3 |
o200k_baseの語彙拡張により、日本語テキストでのトークン効率が大幅に改善。GPT-4oのAPI料金が実質的にGPT-4より低い理由の1つである。
よくある質問(FAQ)
Q1: tiktokenはOpenAI以外のモデルで使えますか? A: はい、Qwen3シリーズがtiktoken互換のBPEトークナイザを採用しています。また、カスタムBPE語彙を構築してtiktokenで利用することも技術的に可能です。ただし、tiktokenのエンコーディング定義はOpenAIモデルに最適化されているため、他モデルのトークナイザとしてそのまま使うことは推奨されません。
Q2: tiktokenとHuggingFace tokenizersの使い分けは? A: OpenAI APIのトークン数計算にはtiktoken一択です。HuggingFace tokenizersはLlama、Gemma、Mistral等のHuggingFaceモデルのトークナイザとして最適化されています。両者はRust実装で高速ですが、対応するモデルエコシステムが異なります。
Q3: tiktokenはオフラインで使えますか?
A: デフォルトではエンコーディングファイルをネットワーク経由でダウンロードしますが、事前にファイルをローカルにキャッシュすればオフライン利用可能です。環境変数 TIKTOKEN_CACHE_DIR でキャッシュディレクトリを指定できます。エアギャップ環境やCI/CDパイプラインでは事前キャッシュが推奨されます。
まとめ
- tiktokenはOpenAI公式の高速BPEトークナイザ(Rust実装)
- GPT-4/GPT-4o/o3のトークナイザを公開実装として提供
- エンコード速度2.5M tokens/s、HF tokenizersの2.5倍
- o200k_base(200K語彙)で日本語圧縮率が30-40%改善
- API料金見積もり・プロンプト長管理・RAGチャンキングの必須ツール