Token

トークン

Token を分かりやすく

Token(トークン)は、AI がテキストを処理する際の最小単位です。

例え話をしましょう。あなたが外国語の本を読むとします。

単語として読む場合

  • "I love programming" → 3つの単語
  • それぞれの単語を理解して読む

文字として読む場合

  • "I love programming" → 18文字(スペース含む)
  • 1文字ずつ処理するのは非効率

AI のトークンは、この中間のような存在です。単語よりも細かく、文字よりも大きな単位で、効率的にテキストを処理します。

"I love programming" → AI のトークン分割
["I", " love", " programming"]
→ 3トークン

"プログラミングが好きです" → AI のトークン分割
["プログラミング", "が", "好き", "です"]
→ 4トークン

トークンの仕組み

AI モデルは、テキストをトークンに分割してから処理します。

トークン化のプロセス

1. テキスト入力
"Hello, how are you?"

2. トークン化(Tokenization)
["Hello", ",", " how", " are", " you", "?"]
→ 6トークン

3. AI が処理
各トークンを数値に変換して、内部で計算

4. 出力生成
AI が生成したトークンをテキストに戻す

トークンの分割ルール

トークンは、単語や文字の境界とは必ずしも一致しません。

英語の例:
"unhappiness" → ["un", "happiness"] (2トークン)
"cat" → ["cat"] (1トークン)
"cats" → ["cats"] (1トークン)

日本語の例:
"今日は良い天気ですね" → ["今日", "は", "良い", "天気", "です", "ね"]
(6トークン、モデルによって異なる)

記号:
"!!!" → ["!", "!", "!"] (3トークン)

トークンの種類

トークンには、いくつかの種類があります。

通常のトークン

一般的なテキストを表すトークンです。

単語: "hello", "world"
部分単語: "un", "happiness"
記号: ".", "?", "!"

特殊トークン

特別な意味を持つトークンです。

[START]: 文章の開始を示す
[END]: 文章の終了を示す
[PAD]: 長さを揃えるための埋め込み
[UNKNOWN]: 未知の単語を表す

空白トークン

スペースや改行もトークンとしてカウントされます。

"Hello world" → ["Hello", " world"] (2トークン)
               ↑ 先頭にスペースが含まれる

複数の空白:
"Hello    world" → ["Hello", "    world"] (2トークン)
                   ↑ 複数のスペースも1トークンの一部

言語によるトークン数の違い

言語によって、同じ意味でもトークン数が大きく異なります。

英語は効率的

英語は、AI モデルの訓練データに多く含まれているため、効率的にトークン化されます。

英語: "I love programming"
→ 3トークン

日本語: "プログラミングが好きです"
→ 4〜6トークン(モデルによって異なる)

中国語: "我喜欢编程"
→ 4〜8トークン

日本語は非効率

日本語は、英語に比べて2〜3倍のトークンを消費することがあります。

英語: "Hello, how are you?"
→ 6トークン

日本語: "こんにちは、お元気ですか?"
→ 10〜15トークン(モデルによって異なる)

理由:
- 訓練データに日本語が少ない
- 文字の種類が多い(ひらがな、カタカナ、漢字)
- 複雑な文法構造

実用的な影響

トークン数の違いは、コストと処理能力に直接影響します。

例: OpenAI API で 1,000文字の文章を処理

英語 1,000文字: 約 250トークン
→ コスト: $0.00025($1/1Mトークンの場合)

日本語 1,000文字: 約 600トークン
→ コスト: $0.00060(約2.4倍)

トークンと料金

多くの AI API は、トークン数に応じて料金を課金します。

料金体系の例

OpenAI GPT-4o:
- 入力: $2.50 / 1M トークン
- 出力: $10.00 / 1M トークン

Anthropic Claude 3.5 Sonnet:
- 入力: $3.00 / 1M トークン
- 出力: $15.00 / 1M トークン

Google Gemini 1.5 Pro:
- 入力: $1.25 / 1M トークン(128K以下)
- 出力: $5.00 / 1M トークン

コスト計算の例

タスク: 500文字の日本語を要約(100文字)

入力: 500文字 → 約 300トークン
出力: 100文字 → 約 60トークン

GPT-4o のコスト:
(300 × $2.50 + 60 × $10) / 1,000,000
= $0.00075 + $0.0006
= $0.00135(約0.2円)

トークンとコンテキストウィンドウ

AI モデルには、一度に処理できるトークン数に上限があります。これをコンテキストウィンドウと呼びます。

主要モデルのコンテキストウィンドウ

GPT-4o: 128,000 トークン
Claude 3.5 Sonnet: 200,000 トークン
Gemini 1.5 Pro: 2,000,000 トークン

これを超えると、古い情報が削除されるか、エラーになる

コンテキストウィンドウの管理

トークン数を効率的に管理する方法があります。

方法1: 要約
長い会話履歴を要約して、トークン数を削減

方法2: スライディングウィンドウ
最新の N トークンだけを保持

方法3: 重要度ベース
重要なメッセージだけを残す

トークン数の確認方法

トークン数を事前に確認することで、コストを見積もれます。

OpenAI の tiktoken ライブラリ

OpenAI は、トークン数をカウントするライブラリを提供しています。

import tiktoken

# GPT-4 用のエンコーダーを取得
encoding = tiktoken.encoding_for_model("gpt-4")

# テキストをトークン化
text = "Hello, how are you?"
tokens = encoding.encode(text)

print(f"トークン数: {len(tokens)}")
print(f"トークン: {tokens}")

# 出力:
# トークン数: 6
# トークン: [9906, 11, 1268, 527, 499, 30]

オンラインツール

Web 上でトークン数を確認できるツールもあります。

OpenAI Tokenizer:
https://platform.openai.com/tokenizer

特徴:
- リアルタイムでトークン数を表示
- トークンの分割を視覚化
- 異なるモデルに対応

トークンの最適化

トークン数を削減することで、コストを抑え、コンテキストウィンドウを有効活用できます。

最適化の方法

方法1: 簡潔な表現
悪い例: "それでは、次のステップに進むことにしましょう"
良い例: "次のステップへ"
→ トークン数を削減

方法2: 不要な情報の削除
悪い例: システムメッセージに冗長な説明を含める
良い例: 必要最小限の指示のみ

方法3: 効率的な形式
JSON や箇条書きなど、効率的な形式を使用

具体例

最適化前:
「今日は天気が良いですね。ところで、昨日の会議で
話し合った件について、もう一度確認させてください。
あなたの意見はどうでしたっけ?」
→ 約 30トークン

最適化後:
「昨日の会議の件、あなたの意見は?」
→ 約 8トークン

約75%のトークンを削減

トークンとモデルの性能

トークンの理解は、モデルの性能を理解する上でも重要です。

トークンあたりの処理時間

モデルは、トークンを1つずつ生成します。

生成速度の例:
GPT-4: 約 20〜40 トークン/秒
GPT-3.5 Turbo: 約 60〜100 トークン/秒

100トークンの応答を生成する時間:
GPT-4: 2.5〜5秒
GPT-3.5 Turbo: 1〜1.7秒

トークンと精度

トークンの分割方法は、モデルの性能に影響します。

問題:
"unhappiness" が ["un", "happiness"] と分割される場合、
"un" と "happiness" の意味を理解する必要がある

"unhappiness" が ["unhappiness"] と1トークンなら、
直接その意味を学習できる

適切なトークン化は、モデルの精度向上につながる

トークンのベストプラクティス

トークンを効率的に使うためのベストプラクティスです。

1. トークン数を意識する

特に大量のリクエストを処理する場合、トークン数を最適化します。

最適化前: 1,000回 × 500トークン = 50万トークン
最適化後: 1,000回 × 200トークン = 20万トークン
→ コストが60%削減

2. 言語の違いを考慮

日本語は英語よりトークンを多く消費することを理解します。

対策:
- 必要に応じて英語で処理
- 簡潔な日本語表現を使用
- 重要な部分のみを日本語に

3. コンテキストウィンドウを監視

トークン数がコンテキストウィンドウを超えないよう監視します。

例:
コンテキストウィンドウ: 128,000 トークン
現在の使用量: 120,000 トークン
→ 警告: あと 8,000 トークンで上限

対策を実施

4. ストリーミングを活用

ストリーミングを使えば、トークンが生成されるたびに表示できます。

メリット:
- ユーザーは即座にフィードバックを得られる
- 長い応答でも待ち時間を感じない
- トークンあたりの処理を可視化

まとめ

Token は、AI がテキストを処理する際の最小単位です。料金計算、コンテキストウィンドウの管理、モデルの性能理解に不可欠な概念です。

重要なポイント

  1. 基本単位 - AI はテキストをトークンに分割して処理
  2. 料金 - 多くの API はトークン数で課金
  3. 言語差 - 日本語は英語の2〜3倍のトークンを消費
  4. コンテキストウィンドウ - 処理できるトークン数に上限がある
  5. 最適化 - トークン数を削減してコストとパフォーマンスを改善

トークンを理解すべき理由

  • コストの見積もりと最適化
  • コンテキストウィンドウの効率的な管理
  • モデル選択の判断材料
  • アプリケーションのパフォーマンス向上

トークンの概念を理解することで、AI アプリケーションをより効率的に開発・運用できます。特にコストとパフォーマンスのバランスを取る上で、トークンの管理は非常に重要です。