トークンとは何ですか?
トークンは、OpenAI モデルが処理するテキストの構成要素です。言語やコンテキストに応じて、1 文字ほど短い場合も、1 つの単語ほど長い場合もあります。スペース、句読点、単語の一部もすべてトークン数に含まれます。これは、API が応答を生成する前に内部でテキストを分割する方法です。
英語に関する便利な目安:
1 トークン ≈ 4 文字
1 トークン ≈ 単語の ¾
100 トークン ≈ 75 単語
1~2 文 ≈ 30 トークン
1 段落 ≈ 100 トークン
約 1,500 単語 ≈ 2,048 トークン
トークン化はモデルとエンコーディングによって異なります。対象モデルの正確な数を得るには、Tokenizer ツールまたは tiktoken.encoding_for_model(model) を使用します。
例
実際のテキスト例と、そのおおよそのトークン数を以下に示します。
Wayne Gretzky の名言「打たなかったシュートは 100% 外れる」= 11 トークン
OpenAI Charter = 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」)
