仕組みを知る

AIのトークンとは?文字数とは違う数え方

AIのトークンは、モデルが文章を処理するために分けた単位で、単語、単語の一部、文字、記号などになります。モデルごとに分割規則が違う理由と、入力上限・出力量・料金との関係を解説します。

AIのトークンとは?文字数とは違う数え方

30秒でわかる答え

AIのトークンとは?

モデルが文章を処理するために分割した単位。 モデルごとに分割規則が違う理由と、入力上限・出力量・料金との関係を解説します。

一文定義
モデルが文章を処理するために分割した単位

TERM PRIMER

先に知っておく言葉

トークン
AIが文章を処理するために分けた単位です。単語一個とは限らず、単語の一部、文字、記号などになる場合があります。
トークナイザー
文章を、モデルが数値として扱えるトークンの列に分けたり、元の文字列へ戻したりする仕組みです。
語彙表
モデルやトークナイザーが区別して扱えるトークンと番号の対応をまとめた一覧です。
コンテキスト
モデルが現在の処理に使う指示、会話履歴、資料、状態、ツール結果などの情報です。

イト

AIのトークンって、日本語なら一文字、英語なら一単語を数える切符なの?

ユイ

同じ長さの文を入れたのに、表示されたトークン数が違って見えるよ

ピコ

トークン改札で二つの文を切って、文字の定規と比べてみよう

AIのトークンとは、モデルが文章を処理するために分割した単位です。単語一個とは限らず、単語の一部、一文字、複数文字、記号などになるため、文字数と一対一には対応しません。

利用画面に「入力○トークン」と出ても、自分で数えた文字数と合わず疑問に思うことがあります。理由を整理するには、文章を分けるトークナイザーと、利用できる断片を登録した語彙表を分けて見ます。ラボの生成工房へ続くトークン改札で、同じ長さに見える文が違う枚数の切符へ分かれる様子を確かめましょう。

トークンは、大規模言語モデルLLMとは?で見た「文脈から次の候補を計算する」流れの入力単位です。人が読む文字列と、モデルが扱うID列の間をつなぎます。

トークンを先に一文でいうと

トークンは、文章をモデル用の番号列に変換するときの区切りです。たとえば一つの文章が、語、助詞、単語の前半と後半、句読点などの断片に分かれ、それぞれ語彙表のIDに対応します。

たとえでは、文章という長い荷物を改札へ通せる切符片に分ける作業です。切符の幅は固定ではなく、よく現れるまとまりは一枚になり、珍しい語は複数枚へ分かれることがあります。実際には紙を物理的に切るのではなく、トークナイザーの規則で文字列とID列を相互変換します。

トークン化は文章の意味を人間の文法どおりに分解する作業とも限りません。語として自然な境界と、モデルの語彙表に都合のよい境界がずれる場合があります。

文字・単語と一致しない理由

文字単位だけなら、どんな言葉も扱いやすい一方、列が長くなります。単語単位だけなら列を短くできますが、固有名詞、新語、活用、スペル違いなど、語彙表にない単語が増えます。そこで多くの言語モデルは、単語より細かいサブワードなどを利用します。

  • よく使う短い語は、一つのトークンになりやすい
  • 長い複合語は、複数のまとまりへ分かれることがある
  • 空白や句読点が、単独または隣の文字と一緒のトークンになる場合がある
  • 絵文字や珍しい記号は、複数の単位へ分かれる場合がある
  • 大文字・小文字や前後の空白で分割が変わる方式もある

このため「100文字だから100トークン」「英語10単語だから10トークン」という換算は固定ルールになりません。目安はサービスごとに示されることがありますが、正確な数は対象モデルのトークナイザーで確認します。

トークナイザーと語彙表の役割

トークナイザーは、文字列をトークン列に変え、出力されたトークン列を文字列に戻す部品です。語彙表には、モデルが扱うトークン断片とIDの対応が登録されています。

語彙表の作り方には、Byte Pair Encoding系やUnigram Language Model系など複数の方式があります。SentencePieceは、言語ごとの事前の単語分割に依存せず、生の文からサブワードモデルを学習できる仕組みとして提案されました。方式が同じ名前でも、学習に使った文章や語彙サイズが違えば、できあがる語彙表は異なります。

モデル本体はトークンIDを埋め込みベクトルに変換し、周囲との関係を計算します。そのため、モデルとトークナイザーは組で使います。別モデルの語彙表で勝手に分割して同じIDを渡しても、意図した入力にはなりません。

イト、ユイ、ピコが、同じ幅の二本の文章帯が異なる幅と枚数の無地の切符片へ分かれ、文字数の等間隔目盛りと一致しない様子を見ている
文章の見た目の長さが同じでも、語彙表と分割規則によってトークンの幅と枚数は変わります。

日本語と英語の分かれ方の例

日本語は通常、英語のように単語間へ空白を書きません。しかしトークナイザーは、日本語を一文字ずつだけに分けるわけでもありません。頻出する漢字列、かな、助詞、記号などが、一つまたは複数のトークンとして登録される場合があります。

英語でも、一単語が一トークンとは限りません。よく使う単語は一まとまりになりやすく、珍しい専門語や長い語は接頭部、語幹、接尾部のような複数断片へ分かれることがあります。前の空白を含む断片として登録する方式もあります。

同じ意味の日本語文と英語文でトークン数が違うことも、二つの日本語モデルで数が違うこともあります。これは、ある言語が本質的に何倍難しいという単純な順位ではなく、語彙、訓練データ、正規化、分割方式の違いが関わる結果です。

文字コードとは?で扱う文字の符号化と、AIのトークン化も別工程です。文字コードは文字をコンピューターで表す約束、トークン化はその文字列をモデル用の語彙単位に対応させる処理です。

入力と出力の上限で使われる場面

LLMには、一回の処理で扱えるトークン範囲があります。多くの場合、入力した指示、会話履歴、検索資料、生成する出力などが同じ文脈枠を使います。ただし、入力上限と出力上限を別に定めるサービスもあり、数え方は仕様で確認します。

この上限を表すコンテキストウィンドウでは、資料と回答の量を変えて、同じ枠に収まるかを図で確かめられます。

トークン数が関わる場面は次のとおりです。

  • 長い文書を一度に入力できる範囲
  • 会話履歴をどこまで文脈に含めるか
  • 生成できる回答の最大量
  • APIなどで測る入力・出力の利用量
  • 処理時間やメモリ使用量の見積もり

長い文章を分割するときは、文字数だけで均等に切るとトークン数が偏ることがあります。段落の意味を保ちつつ、対象トークナイザーで計測します。上限に収めるために資料を削りすぎれば、回答に必要な根拠まで失う場合もあります。

認証トークンとの違いに注意

ITには同じ「トークン」という別の言葉があります。ログインやAPI認証で使うアクセストークンは、利用者や権限を示すための秘密情報です。文章を分割する言語モデルのトークンとは役割が違います。

  • 言語モデルのトークン: 文章処理の分割単位
  • 認証トークン: アクセス権を示す資格情報
  • 物理セキュリティトークン: 認証に使う端末や鍵

「トークンを送る」という説明を見たら、文章量の話か、認証情報の話かを確認します。認証トークンは画面共有や記事に載せず、秘密として扱います。名前が同じでも、用途と安全上の扱いは大きく異なります。

トークン改札から次へ進む

トークンに付いた番号から、どうやって計算用の表現へ進むのでしょうか。埋め込みベクトルの記事では、識別番号と特徴を表す数値の違いを、三つのカードで比べます。

トークン列が文脈関係を取り込む内部構造はTransformerとは?で見られます。候補を選んで文章を伸ばす全体像へ戻るなら大規模言語モデルLLMとは?へ。

学習時と回答時の違いはAIの学習と推論の違い、ルート全体はAIルートから確認できます。

実際に分ける確認クイズとワーク

ワーク: 「ピコはラボでAIを学ぶ。」という文を、まず自分の感覚で「語」「助詞」「記号」へ仮分割してください。次に、別の分け方も二つ考えます。どれか一つだけが全モデル共通の正解ではない理由を、語彙表の違いから説明します。

Q1. 同じ文章なら、どのAIモデルでもトークン数は同じ?

同じとは限りません。トークナイザー、語彙表、文字列の正規化方法がモデルごとに異なる場合があります。

Q2. 日本語一文字は一トークン?

固定対応ではありません。複数文字が一つになる場合も、一文字や記号が複数単位へ分かれる場合もあります。

Q3. 入力100トークンなら、出力枠は減らない?

サービス設計によります。入力と出力が共有枠を使う場合、別上限の場合があるため、対象モデルの仕様を確認します。

LAB WHITEBOARD

自分の言葉で説明してみよう

「トークン化、語彙表、文字数との違い、入力・出力上限や利用量との関係を説明し、モデル間で同じ数になるとは限らないと判断できるようになる。」を、いまの自分の言葉で一文にしてみてください。途中の説明でも大丈夫です。