tiktoken(ティックトークン)
tiktokenは、OpenAIがRustで実装した高速BPEトークナイザーライブラリで、GPT-4o・GPT-4・GPT-3.5-Turboなど同社の全LLMで使用されている。正規表現による前分割とバイトレベルBPEを組み合わせ、Python/Rust/Nodeバインディングを提供する。Llama 3やQwen 2.5もtiktoken互換形式を採用している。
tiktokenとは
tiktokenは、OpenAIが開発・公開したBPEトークナイザーライブラリで、GPT-4o、GPT-4 Turbo、GPT-3.5-Turbo、DALL-E 3、Whisper v3など同社の全AIモデルで使用されるトークン分割エンジンである。コア部分をRustで実装しPythonバインディングを提供することで、HuggingFace Tokenizersと比較して約1.5倍の処理速度を実現している。2026年現在、pip installで3億回以上ダウンロードされた実績を持つ。
概要
tiktokenはOpenAIが2022年12月にオープンソース公開したBPE(Byte Pair Encoding)トークナイザーライブラリである。名前は「token」と「tick」(カウント)を組み合わせた造語で、APIのトークン数課金を事前に計算する用途を想定して設計された。
tiktokenの主な設計目標は以下の3つ:
- 高速性: Rust実装のコアエンジンにより、1MB/s以上のトークン分割速度を達成
- 正確性: OpenAI APIと完全に一致するトークン分割結果を保証
- 簡便性:
pip install tiktokenの1コマンドで導入可能、依存関係が最小限
tiktokenのエンコーディング一覧
| エンコーディング名 | 語彙サイズ | 対応モデル | リリース年 | 特徴 |
|---|---|---|---|---|
| o200k_base | 200,019 | GPT-4o, GPT-4o mini | 2024 | 多言語最適化、200K語彙 |
| cl100k_base | 100,256 | GPT-4 Turbo, GPT-3.5-Turbo | 2023 | チャットテンプレート対応 |
| p50k_base | 50,281 | Codex, text-davinci-003 | 2022 | コード最適化 |
| p50k_edit | 50,281 | text-davinci-edit-001 | 2022 | 編集API用 |
| r50k_base | 50,257 | GPT-3 (davinci) | 2020 | 初代GPT-3用 |
| gpt2 | 50,257 | GPT-2 | 2019 | BPE初期実装 |
基本的な使い方
tiktokenの基本操作は以下の3ステップで完結する:
import tiktoken
# エンコーディングの取得(モデル名から自動選択)
enc = tiktoken.encoding_for_model("gpt-4o")
# テキストをトークンIDリストに変換
tokens = enc.encode("自作PCでGPUを選ぶポイント")
print(f"トークン数: {len(tokens)}") # 例: 12トークン
# トークンIDリストをテキストに復元
text = enc.decode(tokens)
print(text) # "自作PCでGPUを選ぶポイント"
APIコスト事前計算の実用例:
def estimate_cost(text: str, model: str = "gpt-4o") -> dict:
enc = tiktoken.encoding_for_model(model)
tokens = enc.encode(text)
# GPT-4o入力: $2.50/1Mトークン(2026年6月時点)
cost = len(tokens) * 2.50 / 1_000_000
return {"tokens": len(tokens), "cost_usd": round(cost, 6)}
tiktokenの内部アーキテクチャ
tiktokenの処理パイプラインは3段階で構成される:
- 正規表現前分割(Pre-tokenization): GPT-4oのo200k_baseでは、入力テキストを正規表現パターンで単語・数字・記号のチャンクに分割する
- バイトレベルBPE分割: 各チャンクをUTF-8バイト列に変換し、学習済みマージルールを優先度順に適用してサブワードに分割
- トークンID変換: 分割されたバイト列を語彙テーブルで整数IDにマッピング
Rust実装のコアエンジン(_tiktokenモジュール)がステップ2-3を高速に処理し、Pythonレイヤーはステップ1の正規表現処理とAPIインターフェースを担当する。
tiktoken互換トークナイザーの広がり
tiktokenの設計は、OpenAI以外のLLMプロジェクトにも採用されている:
- Llama 3 (Meta): tiktoken互換のBPEトークナイザーを採用し、128,256語彙で多言語性能を強化
- Qwen 2.5 (Alibaba): tiktoken形式のBPEで151,643語彙、中日韓文字の高効率トークン化を実現
- Phi-3 (Microsoft): tiktokenベースの32,064語彙トークナイザーを使用
- Cohere Command R+: tiktoken互換形式で256,000語彙の大規模トークナイザーを構築
よくある質問(FAQ)
Q1: tiktokenとHuggingFace Tokenizersはどちらが速いですか? A: ベンチマーク上、tiktokenはHuggingFace Tokenizersの約1.3〜1.5倍の速度を示します。両者ともRustコアを持ちますが、tiktokenはBPE専用に最適化されているため、BPEに限ればtiktokenが高速です。ただしHuggingFaceはWordPiece・Unigram LMもサポートする汎用性があります。
Q2: tiktokenでトークン数をカウントするだけならAPIキーは必要ですか?
A: 不要です。tiktokenはローカルで完結するライブラリで、APIキーなしで pip install tiktoken → tiktoken.encoding_for_model("gpt-4o").encode(text) でトークン数を計算できます。エンコーディングファイルは初回使用時にOpenAIのCDNからダウンロードされ、ローカルにキャッシュされます。
Q3: 日本語テキストのトークン効率はモデルによって違いますか? A: 大きく異なります。GPT-4oのo200k_baseは日本語1文字あたり約1.2トークン、旧cl100k_baseでは約1.5トークンでした。o200k_baseへの移行で日本語テキストのAPIコストが約20%削減されています。比較として、Llama 3は約1.5トークン/文字、Qwen 2.5は約0.9トークン/文字です。
まとめ
- tiktokenはOpenAIのRust製高速BPEトークナイザーで、GPT-4o・GPT-4 Turboなど全モデルに対応
- o200k_base(200K語彙)が最新エンコーディングで、多言語トークン効率が大幅に改善
pip install tiktokenで導入可能、APIキー不要でローカルトークンカウントが可能- Llama 3・Qwen 2.5・Phi-3など他社モデルもtiktoken互換形式を採用する業界標準化が進行中
- APIコスト計算・プロンプト長管理・バッチ処理の事前見積もりに必須のツール