トークンとは?
トークンは、OpenAI のモデルが処理するテキストの構成単位です。言語や文脈によって、1 文字ほど短い場合も、単語全体ほど長い場合もあります。スペース、句読点、単語の一部も、すべてトークン数に含まれます。API は応答を生成する前に、このようにテキストを内部で分割します。
英語の場合の目安:
1 トークン ≈ 4 文字
1 トークン ≈ ¾ 単語
100 トークン ≈ 75 単語
1~2 文 ≈ 30 トークン
1 段落 ≈ 100 トークン
約 1,500 単語 ≈ 2,048 トークン
トークン化の方法は、モデルとエンコーディングによって異なります。対象モデルの正確なトークン数を確認するには、Tokenizer ツールまたは tiktoken.encoding_for_model(model) を使用してください。
例
実際のテキスト例と、おおよそのトークン数を以下に示します。
ウェイン・グレツキー氏の言葉「打たなかったシュートは 100% 外れる」=11 トークン
OpenAI 憲章=476 トークン
米国独立宣言=1,695 トークン
トークン数の計算方法
API にテキストを送信すると、次の処理が行われます。
テキストがトークンに分割されます。
モデルがこれらのトークンを処理します。
応答がトークンの並びとして生成され、テキストに戻されます。
トークン使用量は、いくつかのカテゴリに分けて記録されます。
入力トークン – リクエストに含まれるトークン
出力トークン – 応答で生成されたトークン
キャッシュ済みトークン – 会話履歴から再利用されたトークン(多くの場合、割引料金が適用されます)
推論トークン – 一部の高度なモデルで、最終出力の生成前に内部で追加される「思考ステップ」
これらの数は API 応答のメタデータに表示され、料金計算と使用量の追跡に使用されます。
トークン化について詳しく調べるには、インタラクティブな Tokenizer ツールを使用できます。トークン数を計算し、テキストがどのようにトークンへ分割されるかを確認できます。
また、プログラムでテキストをトークン化する場合は、OpenAI のモデル専用の高速 BPE トークナイザーである Tiktoken を使用してください。
トークン上限
各モデルには、入力と出力を合わせた最大トークン数があります。現在の大容量モデルは、コンテキスト内で最大数十万トークンに対応していますが、実際の上限はモデルのバージョンや利用ティアによって異なる場合があります。
上限を超える場合は、次の方法があります。
プロンプトを短くするか、言い換える
長いテキストを小さなまとまりに分割する
入力を送信前に要約または前処理する
トークン料金
API の利用料金はトークン単位で設定され、モデルや、入力・出力・キャッシュ済みのいずれのトークンかによって異なります。現在の料金については、OpenAI の料金ページをご覧ください。一部の推論モデルは内部でより多くのトークンを使用する場合がありますが、タスク完了に必要なトークン数を減らし、効率を高めることを目指しています。
トークンの仕組み
API は、コーパスデータ内の文脈に基づいて単語を扱います。モデルはプロンプトを受け取り、入力をトークンのリストに変換して処理した後、予測したトークンを応答として表示される単語に戻します。
同じ 2 つの単語に見えても、テキスト内での構成によっては異なるトークンとして生成される場合があります。テキスト内の文脈に応じて、API が「red」という単語のトークン値をどのように生成するかを見てみましょう。
上の最初の例では、「 red」のトークン「2266」に後続スペースが含まれています(これらのトークン ID は説明用の例です)。
「 Red」(先頭にスペースがあり、大文字で始まる)のトークン「2296」は、小文字の「 red」のトークン「2266」とは異なります。
「Red」が文頭で使われる場合、生成されるトークンに先頭スペースは含まれません。トークン「7738」は、前述の 2 つの例とは異なります。
観察結果:
出現する確率や頻度が高いトークンほど、割り当てられるトークン番号は小さくなります。
ピリオドに対して生成されるトークンは、3 つの文すべてで同じ「13」です。これは、コーパスデータ全体を通じて、ピリオドが文脈上ほぼ同じように使われているためです。
「red」に対して生成されるトークンは、文中の位置によって異なります。
文中の小文字:「 red」-(トークン:「2266」)
文中の大文字:「 Red」-(トークン:「2297」)
文頭の大文字:「Red」-(トークン:「7738」)
