AI・機械学習
中級

tiktoken(ティックトークン)

tiktokenは、OpenAIがRustで実装した高速BPEトークナイザーライブラリで、GPT-4o・GPT-4・GPT-3.5-Turboなど同社の全LLMで使用されている。正規表現による前分割とバイトレベルBPEを組み合わせ、Python/Rust/Nodeバインディングを提供する。Llama 3やQwen 2.5もtiktoken互換形式を採用している。

0 回閲覧
0 いいね

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_base200,019GPT-4o, GPT-4o mini2024多言語最適化、200K語彙
cl100k_base100,256GPT-4 Turbo, GPT-3.5-Turbo2023チャットテンプレート対応
p50k_base50,281Codex, text-davinci-0032022コード最適化
p50k_edit50,281text-davinci-edit-0012022編集API用
r50k_base50,257GPT-3 (davinci)2020初代GPT-3用
gpt250,257GPT-22019BPE初期実装

基本的な使い方

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段階で構成される:

  1. 正規表現前分割(Pre-tokenization): GPT-4oのo200k_baseでは、入力テキストを正規表現パターンで単語・数字・記号のチャンクに分割する
  2. バイトレベルBPE分割: 各チャンクをUTF-8バイト列に変換し、学習済みマージルールを優先度順に適用してサブワードに分割
  3. トークン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コスト計算・プロンプト長管理・バッチ処理の事前見積もりに必須のツール