このサイトは、ほんの入り口です

ここにあるのは、だれかが実際に調べ、考え、作ってきたことを集めたメモです。気になったら、ページの下の「参考にした情報源」から、もとの本や記事、それを生み出した人たちに、直接ふれてみてください。このメモには書ききれないおもしろさが、そこにあります。

AIは 文を どんな 大きさで 切って かぞえて いるの?

AIは文章を何で数えているのか ── 「トークン」の切り方と、言語・モデルで変わる数

トークンとは何か ── サブワード分割(BPE・SentencePiece)と、言語間で最大15倍になるトークン長の差

分野:技術

同じ 意味の 文でも、ことばが ちがうと、AIが かぞえる 数が 15ばいも ちがう ことが あると 発表されて います[5]。

AIは 文を 1文字ずつでも、1ことばずつでも なく、「トークン」と いう 切れはしで かぞえます。その 切り方は どう 決まるのでしょう。この メモでは、切り方の 生まれ方と、数が かわる わけが 分かります。

同じ内容の文を別の言語に訳すと、AIが数えるトークンの長さが最大15倍もちがう場合がある、と2023年の国際会議で報告されました[5]。日本語と英語が15倍ちがう、という意味ではなく、調べた組み合わせの中で最も大きかった例です。

AIが数える単位「トークン」は、文字でも単語でもありません。なぜ言語で数がずれるのか、そして新しいモデルに変わるとまた数がずれるのはなぜか。切り方の生まれ方から、その理由が分かります。

Petrovらは、同じ内容を別の言語に訳した文で、トークン化後の長さが最大15倍異なる場合があると報告した(NeurIPS 2023)[5]。15倍は最大の例であり、日本語と英語の比ではない。

大規模言語モデルが文章を数える単位「トークン」は、文字とも単語とも一致しない。サブワード分割の由来(2015〜2018年の論文)と、言語・モデルによる数の変動を、出典つきで整理すると、この差が生じる理由が分かる。

読み方を切り替えられます。画面の上にある「よみかた」のボタンで、小学校低学年むけ・小学校高学年むけ・中学生むけの3つの書き方に切り替わります。むずかしいと思ったら、いつでもやさしい方に戻ってください。選んだ読み方はブラウザが覚えているので、次に別の記事を開いたときも同じ読み方で始まります。

1. トークンは 文字でも ことばでも ない

1. 文字でも単語でもない「トークン」

1. トークンの定義 ── 文字と単語のあいだの単位

AIに 文を わたすと、AIは まず 文を 小さな 切れはしに 分けます。この 切れはしが「トークン」です。

1つの トークンは、1文字ほど 短い ことも、1ことばほど 長い ことも あります。スペースや 「。」も、数に 入ります[1]。

たとえば、手紙を はさみで 切って、ふくろに 入れると 思って ください。ふくろの 中の 紙の 数が トークンの 数です。ただし 本当の AIは、紙ではなく、文字の ならびを 数字に して あつかって います。

大規模言語モデルは、入力された文章をそのまま読むのではなく、まず小さな断片に分けます。この断片がトークンです。OpenAIの説明では、1トークンは1文字ほど短いこともあれば、1語ほど長いこともあり、空白や句読点、語の一部もトークン数に入ります[1]。

たとえば、手紙をはさみで細かく切って袋に入れ、袋の中の紙の枚数を数えるようなものです。ただし実際には紙ではなく、文字の並びを数値に置きかえて扱っています。

ここで大事なのは、文字数とも単語数とも一致しない単位だということです。モデルやサービスによっては、料金や一度に入れられる量の上限がトークン数に関わるため、この数え方は利用者にも関わってきます[5]。

トークンは、OpenAIのモデルが処理する文章の構成単位と説明される。1文字ほど短い場合も、単語ほど長い場合もあり、空白・句読点・単語の一部もトークン数に入る[1]。したがって文字数とも単語数とも一致しない。

この単位が問題になるのは、モデルやサービスによって、料金や上限などがトークン数に関わる場合があるためだ。Petrovらは、トークン化後の長さが利用コストや処理時間、扱える量に影響すると論じている[5]。

2. 「4文字で 1トークン」は 日本語では 使えない

2. 英語の目安「4文字で1トークン」

2. 英語の経験則 ── 1トークン≒4文字≒0.75語

えいごの 文なら、1トークンは 4文字ぐらい、と いう めやすが あります。100トークンで、えいごの ことば 75こぐらいです[1]。

けれど これは、えいごの ための めやすです。日本語に そのまま 当てはめる ことは できません。

ただしい 数は、数えるための 道具で 数えます。「tiktoken」と いう 道具が その 1つです[2]。

英語については、1トークンが約4文字、単語の4分の3にあたる、という目安が示されています。100トークンなら、英単語で約75語です[1]。

ただし、これはあくまで英語での経験則です。日本語の文章にそのまま当てはめると、ずれます。

正確な数は、専用の道具で数えます。OpenAIが公開している「tiktoken」は、その1つです[2]。ここまでで、トークンとは何か、どう数えるかは分かりました。では、この切り方は、いったい誰が、どう決めたのでしょう。

OpenAIのヘルプは、英語の目安として、1トークン≒4文字≒単語の4分の3、100トークン≒75語を挙げる[1]。英語の経験則であり、日本語には当てはまらない。

正確な数え方として、OpenAIのモデル用の高速なBPEトークナイザ「tiktoken」が公開されている。READMEには、実用上は1トークンが平均約4バイトに当たるとある[2]。4バイトは平均の目安であり、言語や文章で変わる。

では、切り方はどう決まるのか。次章でその由来をたどる。

3. 切り方は「よく 出る ならび」から できた

3. 2015年、よく出る並びをまとめる方法が翻訳に使われた

3. サブワード分割の由来 ── Sennrichらの論文(2015)

むかしの、ほかの ことばに 直す AIは、「見た ことの ない ことば」に 出会うと、こまって しまいました。

2015ねんの 8がつ、3人の 人が、その 助けに なる やり方を 文しょうに して 発表しました。ことばを 小さな 部分に 分けて、部分の ならびで あらわす やり方です[3]。

たとえば、よく 書く「ありがとう」に、ハンコを 1つ 作ると 思って ください。1回 おせば 1トークンです。よく 出る ならびが、ひとつの ハンコに まとめられる ことが あります。ただし、どの ならびを まとめるかは、人が 決めるのでは ありません。たくさんの 文から、じどうで 決めます。

むかしの翻訳のAIは、見たことのない語に出会うと困りました。この問題に対して、Sennrich・Haddow・Birchの3人が2015年8月に、まれな語や知らない語を「部分単語(サブワード)」の並びとして表す方法を論文で示しています[3]。

使ったのは、BPE(バイト対符号化)という圧縮の方法です。文章の中でよく出てくる並びを、少しずつ1つの塊にまとめていく考え方です。この論文は、BPEを機械翻訳に応用した点が新しく、BPEそのものを発明した論文ではありません。

ハンコにたとえると、「ありがとう」をよく書くなら、それ専用のハンコを1つ作るようなものです。1回押せば1トークンで済みます。ただし実際のAIは、人がハンコを決めるのではなく、大量の文章からこの塊を自動で決めています。

Sennrich・Haddow・Birchは、2015年8月にarXivで、まれな語・未知の語をサブワード単位の並びとして符号化する方法を示した(ACL 2016)。分割には、バイト対符号化(BPE)という圧縮アルゴリズムを用いる[3]。

この論文はBPEの発明ではなく、機械翻訳への応用を示したものだ。

tiktokenのREADMEによれば、BPEは任意の文章に使え、トークン列から元の文へ完全に戻せる[2]。誰が決めた辞書でもなく、データの統計から切り方を作るため、どんな入力も扱える。この性質が、後の大規模言語モデルでも使われた理由と考えられる。

4. 日本語は スペースが ないから むずかしい

4. 空白のない日本語のために ── SentencePiece(2018)

4. SentencePiece(2018)── 事前の単語分けを要しない分割器

えいごは、ことばと ことばの あいだに スペースが あります。日本語は、スペースを あけない ことが 多いです。「わたしはがっこうにいく」のように つづきます。

2018ねん、くどうたくさんと リチャードソンさんが、「センテンスピース」を 発表しました。前もって ことばを 分けなくても、生の 文から 切り方を まなべる 道具です[4]。

くどうさんは 同じ年に、同じ ことばでも 切り方が いくつも ありうる ことを、反対に 使う やり方も 考えました[6]。

英語には単語の間に空白がありますが、日本語では、英語のように単語の間に空白を置かないことが多いです。「わたしは学校に行く」は、ふつう切れ目のない一続きの文字で書きます。英語のように空白で語を分けてから処理する方法は、そのままでは使えません。

2018年、工藤拓さんとRichardsonさんは、言語に依存しないサブワード分割器「SentencePiece」を発表しました。事前の単語分けを要せず、生の文章から直接学習できる点が特徴です[4]。事前の単語分けを要しないため、空白で語を区切らない言語にも使えます。

工藤さんは同じ2018年に、同じ語彙でも分割が複数ありうることを逆に利用する「サブワード正則化」と、ユニグラム言語モデルによる分割法も提案しました[6]。切り方は1通りに決まるものではない、という発想です。

英語は空白で語が区切られるが、日本語では通常、語の間に空白を置かない。事前の単語分けを前提にすると、言語ごとの分かち書きの工程が要る。工藤拓(くどうたく)とRichardsonのSentencePiece(EMNLP 2018デモ論文)は、生の文章から直接学習できる言語非依存のサブワード分割器で、事前分割が不要だ[4]。事前の単語分けを要しないため、空白で語を区切らない言語にも使える。

同年、工藤は「サブワード正則化」(ACL 2018)で、同じ語彙でも分割は複数ありうるという曖昧さを逆に利用する学習法と、ユニグラム言語モデルによる分割法を提案した[6]。

この3本(2015〜2018年)では、サブワード分割のちがう方法が示された。次は、その分割が言語によってどれだけ数をずらすかである。

5. 同じ 意味でも、数が 15ばい ちがう ことが ある

5. 言語で数がちがう ── 最大15倍の報告

5. 言語によってトークン数に差が出る ── Petrovらの評価(NeurIPS 2023)

同じ 文を、いろいろな ことばに 直して、トークンの 数を くらべた 人たちが います。たくさんの 切り方を しらべました[5]。

しらべて みると、ことばに よっては、数が 15ばいまで ちがう 場合が ありました。日本語と えいごが 15ばい、と いう 意味では ありません。しらべた 中で いちばん 大きかった れいです。

いろいろな ことばに 合わせて 作った 切り方でも、ちがいは のこりました。数が おおいと、お金や 時間が よけいに かかることが あります[5]。

Petrovらは2023年に、同じ内容を別の言語に翻訳した文で、トークン化後の長さがどれだけちがうかを調べました。複数のトークナイザを評価した結果、場合によって最大15倍ちがうことが報告されています[5]。

この15倍は、調べた組み合わせの中での最大の例で、日本語と英語の比ではありません。また、多言語向けに作ったトークナイザでも差は残りました。

差が大事なのは、利用料金、処理にかかる時間、一度に入れられる量が、トークン数に左右されるからです。論文はこれを、言語によって不利になる場合がある問題として整理しています[5]。切り方は道具の設計にすぎませんが、使う人にとっての得や損につながる、という指摘です。

Petrovらは、同じテキストを別の言語に翻訳するとトークン化後の長さが大きく変わり、場合により最大15倍の差が出ると報告した。複数のトークナイザを評価し、多言語向けに作られたものでも差は残った[5]。

15倍は最大の例であり、特定の言語の組み合わせの平均ではない。日本語と英語の比としては読めない。

差は、料金・処理時間・一度に入力できる量に影響する[5]。論文はこれを、言語間の扱いの不公平として論じる。ここでの含意は、トークン数を文字数や語数の代わりに使うと、言語によって実態から離れる、という点だ。

6. AIが かわると、同じ 文でも 数が かわる

6. モデルが変わると、同じ文でも数が変わる

6. トークナイザのモデル間差 ── Claude Opus 4.7以降の例

切り方は、AIの しゅるいごとに ちがいます。Anthropicと いう 会社の せつめいでは、Claude Opus 4.7から あとの AIは、新しい 切り方を 使って います[7]。

同じ 文でも、前の AIより トークンが 3わりほど ふえます。ふえ方は、文の 中みで かわります[7]。

だから、AIを かえたら、数を もういちど かぞえなおさないと いけません。

この 会社には、文を おくる 前に トークンの 数を 見つもる しくみも あります。ただし 見つもりなので、本当の 数と、少し ちがう ことが あります[7]。

切り方はモデルごとに違います。Anthropicのドキュメントによると、Claude Opus 4.7以降のモデルは新しいトークナイザを使い、同じ文章が以前のモデルより約30%多いトークンになります[7]。約30%は目安で、増え方は内容によって変わります。

たとえば、以前のモデルで100トークンだった文なら、単純に計算して約130トークンになる目安です。文の中身しだいで、これより増えることも減ることもあります。

この会社のAPIには、メッセージを送る前にトークン数を数える仕組みもあります。数は見積もりで、実際の入力トークンとわずかに違うことがあります。料金や、送る文章の長さを調整するために使うものです[7]。

Anthropicのドキュメントによると、Claude Opus 4.7以降のモデルは新しいトークナイザを使い、同じ入力テキストが以前のモデルより約30%多いトークンになる。増加幅は内容や使い方によって異なる[7]。トークン数はモデルごとに数え直す必要がある。

同ドキュメントには、メッセージ送信前にトークン数を数えるエンドポイントがある。数は見積もりで、実際の入力トークン数とわずかに異なる場合がある。用途は、料金・レート制限の見通しと、プロンプト長の調整とされる[7]。

ここまでで、トークンの単位が固定でなく、言語とモデルの両方で変わることが分かる。数を知りたいときは、そのモデルの道具で確かめる。

7. 紙で トークンごっこを して みよう

7. 紙で「切り方」を比べてみる

7. 出口 ── 自分で切って数える

紙に、みじかい 文を 1つ 書きます。たとえば「きょうは いい てんきです」です。

まず、1文字ずつ 線で 切って、数を かぞえます。つぎに、ことばごとに 切って、かぞえます。さいごに、2文字ずつ 切って、かぞえます。

切り方で、数が かわりましたか。ハサミは 使わず、えんぴつで 線を ひくだけで だいじょうぶです。

もっと 知りたい 人は、おうちの 人と いっしょに、下の「出てん」の 一ばん 下に ある ページを 見て みて ください。

紙に短い文を1つ書き、3通りに区切って数を比べてみてください。文は「今日はいい天気です」のようなもので構いません。

1文字ずつ、単語ごと、2文字ずつ、と区切り方を変えると、同じ文でも数が変わります。AIのトークンも、切り方しだいで数が変わるのと同じ仕組みです。鉛筆で線を引くだけで足ります。

さらに、同じ意味の文を、少し言い方を変えて書いてみてください。区切る数がどれだけ変わるでしょうか。

短い文を紙に書き、1文字ずつ・単語ごと・2文字ずつの3通りで区切って数を比べる。区切り方で数が変わることが、トークンの数が切り方に依存することの手元での確認になる。さらに、同じ意味を別の言い方で書き直し、区切る数の変化を比べるとよい。

しらべた もとの じょうほう

参考にした情報源

参考にした情報源と、その使い方

出典について:OpenAIのヘルプ(トークンの定義と英語の目安)、tiktokenのREADME、Sennrichらの論文、工藤拓さんらの論文2本、Petrovらの論文、Anthropicのドキュメントを使った。100トークンから約130トークンの例は、約30%の目安から筆者が計算した。

  1. OpenAI Help Center「What are tokens and how to count them」。 https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them (トークンの定義と英語の目安について)
  2. openai/tiktoken(GitHub)。 https://github.com/openai/tiktoken (BPEトークナイザと平均約4バイトの目安について)
  3. Sennrich, Haddow, Birch, "Neural Machine Translation of Rare Words with Subword Units," 2015. https://arxiv.org/abs/1508.07909 (サブワードとBPEの機械翻訳への応用について)
  4. Kudo, Richardson, "SentencePiece," 2018. https://arxiv.org/abs/1808.06226 (言語に依存しない分割器について)
  5. Petrov et al., "Language Model Tokenizers Introduce Unfairness Between Languages," NeurIPS 2023. https://proceedings.neurips.cc/paper_files/paper/2023/hash/74bb24dca8334adce292883b4b651eda-Abstract.html (言語間のトークン長の差について)
  6. Kudo, "Subword Regularization," 2018. https://arxiv.org/abs/1804.10959 (分割の曖昧さとユニグラム言語モデルについて)
  7. Anthropic Docs「Token counting」。 https://platform.claude.com/docs/en/build-with-claude/token-counting (トークン数の見積もりと、モデルによる数の違いについて)

なおした ところ

更新履歴

更新履歴(改版の記録)

  •  初版。

このサイトでは、公開した記事の本文は原則として書き直しません。誤りが見つかったときや、内容が古くなったときだけ手を入れ、その理由をこの欄に残します。