トークナイザーとは?
トークナイザー(Tokenizer)とは、テキストをLLM(大規模言語モデル)が処理できる単位(トークン)に分割し、数値IDに変換するプログラムです。人間が読む文章と、コンピュータが処理する数値列をつなぐ橋渡し役です。
LLMへの入力・出力はすべてトークン単位で処理されるため、トークナイザーの設計はモデルの性能・コスト・多言語対応に大きく影響します。
トークナイザーの仕組み
テキストのトークン分割
「I love AI」というテキストは「I」「 love」「 AI」のように分割されます。日本語では「東京に行く」が「東京」「に」「行く」のように形態素・サブワード単位に分割されます。
語彙(ボキャブラリー)への変換
各トークンには事前に割り当てられた数値ID(トークンID)があります。モデルはこの数値列を処理します。GPT-4の語彙サイズは約10万、Geminiは約25万です。
特殊トークン
文章の開始(BOS)・終了(EOS)・パディング(PAD)・未知語(UNK)などの特殊トークンが使われ、モデルがテキストの構造を理解できるようにします。
主なトークナイズ手法
BPE(Byte Pair Encoding)
最も広く使われる手法の一つ。最初は1文字単位で始まり、最も頻繁に現れる隣接ペアを繰り返しマージしてサブワードを作成します。GPT-4・Claude・LLaMAなどが採用しています。
SentencePiece
Googleが開発したトークナイズライブラリで、BPEとUnigramモデルをサポートします。生の文字列から直接学習でき、日本語・中国語など単語境界が不明確な言語に強みがあります。Geminiが採用しています。
WordPiece
BERT(BERT)が採用するサブワードトークナイズ手法。BPEと似ていますが、マージ基準が尤度に基づく点が異なります。
Unigram
確率的なサブワード分割が特徴で、SentencePieceのデフォルト手法です。同一テキストでも複数の分割パターンが生じるため、汎化性能向上に寄与します。
日本語とトークナイザーの関係
日本語の課題
日本語は単語境界がスペースで区切られず、ひらがな・カタカナ・漢字が混在するため、英語向けトークナイザーは非効率です。「東京」が1トークンで処理できる日本語特化モデルに対し、英語向けモデルでは複数トークンになることがあります。
トークン効率とコスト
同じ文章でも使用するモデルによってトークン数が異なり、APIコストが変わります。日本語特化トークナイザーを持つモデル(PLaMo等)は日本語テキストのトークン効率が高く、実質コストを下げられます。
日本語LLMのトークナイザー
LLM-jpなど国内開発の日本語LLMでは、日本語に特化した語彙を持つトークナイザーが開発されています。日本語テキストの処理効率と精度が英語ベースモデルより優れています。
トークナイザーとLLM性能の関係
語彙サイズが大きいほど1トークンで表現できる情報量が増え、長文処理の効率が高まります。一方でモデルサイズ・メモリ使用量も増加します。適切な語彙サイズのバランスがモデル設計の重要課題です。
よくある質問(FAQ)
Q1. 1トークンは何文字に相当しますか?
英語では平均4〜5文字(約0.75単語)、日本語では1〜2文字程度が目安です。ただしモデルやテキスト内容によって大きく異なります。
Q2. OpenAI APIのトークン計算はどうすればわかりますか?
OpenAIが提供するtiktokenライブラリやPlaygroundのトークンカウンター機能で事前に確認できます。
Q3. トークン数を減らすコツはありますか?
不要なスペース・改行・記号を削除する、長い文章を要約する、日本語に最適化されたモデルを選ぶ、などの方法があります。
Q4. トークナイザーはLLMごとに異なりますか?
はい。GPT-4・Claude・Gemini・LLaMAはそれぞれ独自のトークナイザーを持ちます。同じテキストでもモデルによってトークン数が異なります。
Q5. 自分でカスタムトークナイザーを作れますか?
SentencePieceやHugging Face Tokenizerライブラリを使って独自コーパスからトークナイザーを学習できます。特定ドメイン(医療・法律・特定言語)に特化したモデル開発に有効です。
