AI・機械学習
中級

tiktoken(ティックトークン)

OpenAIが開発したBPEベースの高速トークナイザーライブラリ。Rust実装のコアにPythonバインディングを提供し、GPT-3.5/4/4oのトークン数算出に使われる。

0 回閲覧
0 いいね

tiktokenとは

tiktokenは、OpenAIが2022年末にオープンソース公開したBPEトークナイザーライブラリです。Rust実装のコアエンジンにPythonバインディングを被せた構造で、SentencePieceやHugging Face tokenizersと比較して3〜6倍高速なエンコード/デコードを実現します。GPT-3.5、GPT-4、GPT-4oで使用されるトークナイザーのリファレンス実装として広く利用されています。

エンコーディング(語彙セット)

tiktokenは複数のエンコーディング(語彙セット)を提供しています。

エンコーディング語彙サイズ対応モデル
cl100k_base100,277GPT-4, GPT-3.5-turbo, text-embedding-ada-002
o200k_base200,019GPT-4o, GPT-4o-mini
p50k_base50,281text-davinci-003, Codex
r50k_base50,257GPT-2, GPT-3

cl100k_baseからo200k_baseへの進化

GPT-4oで採用されたo200k_baseは語彙を約2倍に拡大し、非英語言語(日本語、中国語、韓国語、アラビア語等)のトークン効率を大幅に改善しました。同じ日本語テキストに対してcl100k_baseの約60〜70%のトークン数で表現できるため、APIコストの削減にも寄与します。

基本的な使い方

import tiktoken

enc = tiktoken.encoding_for_model("gpt-4o")
tokens = enc.encode("自作パソコンの組み立て方")
print(len(tokens))  # トークン数
print(tokens)       # トークンIDのリスト
print(enc.decode(tokens))  # 元テキストに復元

トークン数の確認

OpenAI APIの課金はトークン数ベースのため、リクエスト前にトークン数を確認するのが実用上最も多いユースケースです。

def count_tokens(text, model="gpt-4o"):
    enc = tiktoken.encoding_for_model(model)
    return len(enc.encode(text))

cost_per_1k = 0.0025  # GPT-4o input
tokens = count_tokens(long_prompt)
estimated_cost = (tokens / 1000) * cost_per_1k

性能比較

ライブラリ言語エンコード速度デコード速度
tiktokenRust + Python約3.5M tokens/s約4.0M tokens/s
HF tokenizersRust + Python約2.0M tokens/s約2.5M tokens/s
SentencePieceC++ + Python約1.0M tokens/s約1.2M tokens/s

tiktokenの速度優位はRust実装のコアエンジンと正規表現ベースのpre-tokenization(事前分割)に起因します。テキストを正規表現パターンで大まかに分割してからBPEマージを適用するため、長いテキストでも効率的に処理できます。

他言語への対応

tiktoken自体はPythonライブラリですが、コミュニティによって各言語への移植が進んでいます。

  • JavaScript/TypeScript: js-tiktoken(Deno/Node対応)
  • Go: tiktoken-go
  • Rust: tiktoken-rs(ネイティブ)
  • Java: jtokkit

Webアプリケーションでリアルタイムにトークン数を表示したい場合、js-tiktokenをブラウザ上で動かすことも可能です。

OpenAI API開発での活用

プロンプトの最適化

モデルのコンテキストウィンドウ(GPT-4o: 128K tokens)に収まるようプロンプトを設計する際、tiktokenでトークン数を正確に把握することが不可欠です。

コスト見積もり

大量のAPIリクエストを送信する前に、tiktokenでバッチ全体のトークン数を事前計算し、コストを見積もれます。

チャンク分割

RAGパイプラインでドキュメントをチャンクに分割する際、文字数ではなくトークン数でチャンクサイズを制御することで、APIの入力制限を正確に管理できます。

FAQ

Q1: tiktokenはOpenAI以外のモデルにも使えますか?

tiktokenのエンコーディングはOpenAIモデル専用です。LLaMA系はSentencePiece、Mistral/Gemmaは独自のtokenizer.jsonを使うため、Hugging Face tokenizersの方が汎用的です。ただしトークナイゼーションの概念を理解する学習用としては有用です。

Q2: トークン数と文字数の換算目安は?

英語: 1トークン ≈ 4文字(0.75単語)。日本語: 1トークン ≈ 1〜2文字(o200k_baseの場合)。GPT-4oのo200k_baseでは日本語の効率がcl100k_baseより30〜40%改善されています。

Q3: tiktokenのインストール方法は?

pip install tiktoken で即座にインストールできます。Rustのビルド環境は不要で、事前にコンパイル済みのwheelがPyPIで配布されています。