トークナイザー実験場

2026年10月29日公開

トークナイザー実験場

文章を入力すると、LLMが扱うトークンへの分割とトークンIDを確認できます。トークナイザーを切り替えると、同じ文章の区切り方や必要なトークン数を比べられます。計算はブラウザー内で行い、入力した文章をサーバーに送信しません。語彙ファイルは、選んだトークナイザーのものだけを読み込みます。
表示

分割機能にはJavaScriptが必要です。


  

表示の見方

LLM(大規模言語モデル)は、文章をトークンという単位に分けて処理します。トークンは単語やその一部、空白などに対応し、それぞれに番号(トークンID)が割り当てられています。画面ではトークンごとに色分けし、「テキスト」と「トークンID」の両方を選ぶと、文字列の上にIDを表示します。
半角スペース・改行・タブは、それぞれ「␣」「↵」「⇥」で表します。1文字を表すUTF-8のバイト列が複数のトークンに分かれたときは、単独で文字に戻せない部分を「<0xE3>」のように表示します。分割前に先頭へ空白を補う方式では、その空白だけのトークンを「▁」と表示することもあります。
文字数は、入力した文章のUnicodeコードポイント数です。トークン数は、選んだトークナイザーで入力を処理して得られたトークンの数です。文字の正規化などで表記が変わる方式では、表示する文字列も入力とは異なることがあります。
コードポイントは、Unicodeで文字や制御文字などに割り当てられた番号です。例えば「👩‍💻」は、女性の絵文字・結合用の制御文字・パソコンの絵文字の3コードポイントで構成されるため、文字数は3と表示します。
トークンIDを表示できる方式では、会話用の書式や、文章の開始・終了を示す特殊トークンを自動では加えません。特殊トークンの表記を入力すると、その方式に登録されているものは対応するIDに変換します。集計の対象は入力欄のテキストで、画像・音声は含みません。
Claudeには、ctokによる非公式の推定値を使います。表示するトークン数は、本文の推定値に、ユーザーの発言1回分の書式に必要な分を加えた値です。この追加分を「枠」として示します。色分けは推定に使った分割例で、Claudeの実際の分割境界やIDは公開されていないため、ID表示は無効にしています。

分割方式の違い

BPE(Byte Pair Encoding)は、文字やバイトを出発点として、隣り合う組を学習済みの優先順位に従って結合する方式です。結合できる組がなくなるまで繰り返し、残ったまとまりをトークンとします。
Unigramは、各トークンに与えられたスコアを足し合わせ、合計が最大になる分割を選ぶ方式です。PLaMo 2・3も、動的計画法でスコア合計が最大になる分割を求めます。使えるトークンの集合である語彙と、それぞれのスコアによって、選ばれる分割が変わります。
分割の前処理も結果に影響します。GPT系などでは、正規表現で文章を区切る事前分割を行い、その区切りをまたがない範囲でBPEを適用します。数字を1桁ずつ区切るか、最大3桁ずつ区切るかによって、使えるトークンが変わります。また、NFC正規化で文字の表し方をそろえる方式や、先頭に空白を補う方式もあります。
Unicodeでは、例えば「é」を1コードポイントで表すことも、「e」と結合文字のアクセントを並べて表すこともできます。NFC正規化では、このような正準等価な文字列を、可能な範囲で合成済みの文字へそろえます。全角英数字は半角に変換せず、元の表記を保ちます。

対応するトークナイザー

以下は、この実験場で使う公開データと分割規則です。語彙数には特殊トークンと予約トークンを含め、同じIDに複数の表記がある場合は1つとして数えます。各モデル名のリンクから、使用した版のデータや設定を確認できます。

Preferred Networks(PLaMo)

License: PLaMo 3: PLaMo Community License Agreement (Built with PLaMo); PLaMo 2: Apache-2.0; PLaMo 1: PLaMo Non-Commercial License Agreement.
  • PLaMo 3は107,520語彙を使い、スコア合計が最大になる分割を選びます。2個以上の連続スペース、改行以外の同じ文字が4個以上続く部分、特殊トークンの表記の前後で事前分割します。
  • PLaMo 2は100,000語彙を使い、PLaMo 3と同じくスコア合計を最大にします。両世代とも、スコアの整数化と同点時の優先規則を公開実装に合わせています。
  • PLaMo 1はSentencePieceのBPE方式で、語彙数は50,112です。連続スペースやタブの専用トークンを使い、先頭に空白を補ってから分割します。
スコアを10,000倍して整数に丸め、入力の後ろから動的計画法で分割を決めます。ちょうど2つの整数の中間になる値は、偶数側へ丸めます。候補の合計スコアが同じ場合は、現在の位置から始まる長いトークンを優先します。

OpenAI(GPT)

License: tiktoken: MIT; Harmony: Apache-2.0.
両方ともバイト単位のBPEを使います。
  • 「GPT-4o〜6・gpt-oss」では、o200k_harmonyの201,088語彙を使います。通常の語彙と事前分割規則はo200k_baseと共通で、特殊トークンにはgpt-ossの会話形式であるHarmonyの定義を使います。
  • 「GPT-3.5〜4」では、cl100k_baseの100,261語彙を使います。
o200k_harmonyは通常のトークン199,998個と特殊トークン1,090個、cl100k_baseは通常のトークン100,256個と特殊トークン5個を含みます。語彙数はIDの種類を数えているため、IDに欠番がある場合は「最大ID+1」と一致しません。

Anthropic(Claude)

License: ctok: MIT.
ctokは、Claudeのトークン数を外部から調べ、分割の候補や前処理の規則を復元したものです。この実験場では、次の2種類の設定で推定します。
  • 「Claude 4.7〜5」では、ctokの4.8世代の設定を使い、本文に6トークンの枠を加えます。ctokの4.7世代とは候補を共有しますが、先頭空白と枠の扱いが異なります。
  • 「Claude 3〜4.6」では、ctokの3世代の設定を使い、本文に7トークンの枠を加えます。
ctokは、文字を正規化し、単語の境界や大文字を専用の記号で表してから、復元した候補を使ってトークン数が最小になる分割を求めます。画面の「⟨bow⟩」「⟨eow⟩」は単語の境界、「⟨shift⟩」「⟨caps⟩」は大文字の変換、「⟨0xNN⟩」はバイト列を表します。
この実験場が読み込む候補数は、4.8世代が文字列14,819個とバイト列468個、3世代が文字列48,332個とバイト列467個です。これらはctokの推定に使う候補の数で、Claudeの語彙数を表すものではありません。

Google(Gemma・Gemini)

License: Apache-2.0 (Gemma tokenizer); Apache-2.0 (Google SDK).
「Gemini 2.0〜3.5・Gemma 3〜4」では、Gemma 4の262,144語彙を使います。Gemma 3・3n・4は通常の語彙と分割規則を共有し、特殊トークンにはGemma 4の定義を使います。Geminiは、リンク先のGoogle公式SDKが対応を明記するモデルを対象としています。
空白を「▁」に置き換えてからBPEで分割します。PLaMo 1などと異なり、先頭には空白を補いません。

xAI(Grok)

License: Grok 2: xAI Community License Agreement (Powered by xAI); Grok 1: Apache-2.0.
  • Grok 2はバイト単位のBPEで、語彙数は131,072です。数字を1桁ずつ事前分割し、先頭に空白は補いません。
  • Grok 1はSentencePieceのBPE方式で、語彙数は131,072です。先頭に空白を補ってから分割します。
This product includes materials licensed under the xAI Community License. All rights reserved. Copyright © xAI 2025.

Cohere(Command)

License: Command A+: Apache-2.0; Command R / R+: CC BY-NC 4.0.
どちらもバイト単位のBPEを使い、先頭に空白は補いません。Unicode正規化を行うのはR・R+です。
  • Command A+の語彙数は255,032です。数字を右から最大3桁ずつに区切り、大文字・小文字や結合文字を考慮して事前分割します。
  • Command R・R+の語彙数は255,029です。NFC正規化を行い、数字を1桁ずつに区切ってから、単語・記号・空白を事前分割します。使用したRとR+の2024年8月版の公開定義が同一のため、1つにまとめています。
Command R・R+のトークナイザーデータはCohere For AIが公開したものです。この実験場では、imosが公開語彙と分割規則をブラウザー用のJSONに変換しています。

Mistral AI

License: Apache-2.0.
「Mistral 4」では、Mistral Small 4のTekken v15を使います。バイト単位のBPEで、語彙数は131,072です。大文字・小文字などを区別して事前分割し、区切った文字列全体が語彙にある場合は、結合処理を省いてそのトークンを使います。

Alibaba(Qwen)

License: Qwen 3.8: Apache-2.0; Qwen 3: Apache-2.0.
両世代ともバイト単位のBPEを使います。NFC正規化を行ってから事前分割し、数字は1桁ずつ扱います。
  • Qwen 3.8の語彙数は248,077です。文字と、それに付くアクセント記号などの結合文字を同じまとまりとして事前分割します。
  • Qwen 3の語彙数は151,669です。Qwen 3.8とは結合文字を区切る規則が異なります。

DeepSeek

License: MIT.
「DeepSeek V3〜V4」では、V4の129,280語彙を使います。V4とV3.2は基本語彙128,000個と結合規則・事前分割を共有します。追加トークンにはV4の定義を使うため、一部のIDはV3.2と異なります。
分割方式はバイト単位のBPEです。事前分割では、数字を最大3桁ずつに区切り、日本語・中国語の文字列を分離してから、単語や記号の分割規則を適用します。

Z.ai(GLM)

License: MIT.
GLM 5.1はバイト単位のBPEで、語彙数は154,856です。数字を最大3桁ずつに事前分割します。区切った文字列全体が語彙にあれば、そのトークンを使います。

LLM-jp

License: 4: Apache-2.0; 3: Apache-2.0; 2: Apache-2.0; 1: Apache-2.0.
各世代ともUnigram方式で、先頭に空白を補ってから分割します。語彙とスコアが異なる4種類を選べます。
画面の選択肢使用する公開データ語彙数
LLM-jp 44196,608
LLM-jp 33.199,574
LLM-jp 22.096,867
LLM-jp 11.050,570
LLM-jp 4は、<|message|>などのHarmony形式の会話区切りに対応します。文字列へ戻す際は、文章の先頭と会話区切りの直後で、分割時に補った空白を除去します。
LLM-jp 3と3.1は、語彙・スコア・正規化・特殊トークンを含む公開定義が同一のため、1つの選択肢にまとめています。

SB Intuitions(Sarashina)

License: MIT.
「Sarashina 2」では、Sarashina 2.2の102,400語彙を使います。SentencePieceのUnigram方式で、先頭に空白は補いません。追加トークンを文字列へ戻す際に、その前後へ空白が入ることがあります。