1. トークンは 文字でも ことばでも ない
1. 文字でも単語でもない「トークン」
1. トークンの定義 ── 文字と単語のあいだの単位
AIに 文を わたすと、AIは まず 文を 小さな 切れはしに 分けます。この 切れはしが「トークン」です。
1つの トークンは、1文字ほど 短い ことも、1ことばほど 長い ことも あります。スペースや 「。」も、数に 入ります[1]。
たとえば、手紙を はさみで 切って、ふくろに 入れると 思って ください。ふくろの 中の 紙の 数が トークンの 数です。ただし 本当の AIは、紙ではなく、文字の ならびを 数字に して あつかって います。
大規模言語モデルは、入力された文章をそのまま読むのではなく、まず小さな断片に分けます。この断片がトークンです。OpenAIの説明では、1トークンは1文字ほど短いこともあれば、1語ほど長いこともあり、空白や句読点、語の一部もトークン数に入ります[1]。
たとえば、手紙をはさみで細かく切って袋に入れ、袋の中の紙の枚数を数えるようなものです。ただし実際には紙ではなく、文字の並びを数値に置きかえて扱っています。
ここで大事なのは、文字数とも単語数とも一致しない単位だということです。モデルやサービスによっては、料金や一度に入れられる量の上限がトークン数に関わるため、この数え方は利用者にも関わってきます[5]。
2. 「4文字で 1トークン」は 日本語では 使えない
2. 英語の目安「4文字で1トークン」
2. 英語の経験則 ── 1トークン≒4文字≒0.75語
えいごの 文なら、1トークンは 4文字ぐらい、と いう めやすが あります。100トークンで、えいごの ことば 75こぐらいです[1]。
けれど これは、えいごの ための めやすです。日本語に そのまま 当てはめる ことは できません。
ただしい 数は、数えるための 道具で 数えます。「tiktoken」と いう 道具が その 1つです[2]。
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は、人がハンコを決めるのではなく、大量の文章からこの塊を自動で決めています。
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]。切り方は道具の設計にすぎませんが、使う人にとっての得や損につながる、という指摘です。
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%の目安から筆者が計算した。
- 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 (トークンの定義と英語の目安について)
- openai/tiktoken(GitHub)。 https://github.com/openai/tiktoken (BPEトークナイザと平均約4バイトの目安について)
- Sennrich, Haddow, Birch, "Neural Machine Translation of Rare Words with Subword Units," 2015. https://arxiv.org/abs/1508.07909 (サブワードとBPEの機械翻訳への応用について)
- Kudo, Richardson, "SentencePiece," 2018. https://arxiv.org/abs/1808.06226 (言語に依存しない分割器について)
- Petrov et al., "Language Model Tokenizers Introduce Unfairness Between Languages," NeurIPS 2023. https://proceedings.neurips.cc/paper_files/paper/2023/hash/74bb24dca8334adce292883b4b651eda-Abstract.html (言語間のトークン長の差について)
- Kudo, "Subword Regularization," 2018. https://arxiv.org/abs/1804.10959 (分割の曖昧さとユニグラム言語モデルについて)
- Anthropic Docs「Token counting」。 https://platform.claude.com/docs/en/build-with-claude/token-counting (トークン数の見積もりと、モデルによる数の違いについて)
なおした ところ
更新履歴
更新履歴(改版の記録)
- 初版。
このサイトでは、公開した記事の本文は原則として書き直しません。誤りが見つかったときや、内容が古くなったときだけ手を入れ、その理由をこの欄に残します。