トークナイザーとは何をしているのか
大規模言語モデル(LLM)の説明では、TransformerやAttentionが注目されがちですが、実際に性能へ大きく影響しているのが「トークナイザー」です。トークナイザーは、人間の文章をAIが扱える単位に分解する仕組みです。
AIは文字列をそのまま理解できません。日本語の文章も、英語の文章も、まず「扱える形」に変換する必要があります。この変換の質によって、AIの賢さの印象が大きく変わります。
なぜ分解が必要なのか
コンピュータは「文字の意味」を持っていません。扱えるのは数値だけです。したがって、文章はまず数値へ変換されます。しかし、いきなり文字単位にすると問題が起きます。
例えば「プログラミング」という単語を1文字ずつ分解すると:
- プ
- ロ
- グ
- ラ
- ミ
- ン
- グ
この状態では、「プログラム」との関係が分かりません。逆に単語単位にすると、未知語に弱くなります。ここでトークナイザーが登場します。
トークンという単位
トークナイザーは、文字でも単語でもない「トークン」という単位へ文章を分割します。トークンは、頻出パターンを基準に決められます。
例:
> programming
次のように分割される場合があります。
- program
- ming
これにより、未知語でも既存パターンの組み合わせとして扱えます。「reprogramming」も理解しやすくなります。
日本語で重要になる理由
日本語はトークナイザーの影響を特に受けます。英語はスペースで単語が区切られますが、日本語は区切りがありません。
> 今日は雨が降っている
この文は、分割方法によってAIの理解が変わります。
- 今日 / は / 雨 / が / 降って / いる
- 今 / 日は / 雨が / 降っている
どちらが正しいというより、学習時の分割と一致するかが重要です。分割がずれると、AIは別の文章として扱ってしまいます。
トークン数と制限
LLMには「トークン上限」があります。これは文字数ではありません。入力できる文章量はトークン数で決まります。
重要なのは、日本語は英語よりトークン数が増えやすい点です。同じ内容でも、日本語の方が早く上限に達します。長い会話で急に文脈を忘れるのは、この制限の影響です。
トークナイザーが性能に影響する理由
トークナイザーは前処理に見えますが、実際にはモデル性能の一部です。分割の仕方によって、AIが学習するパターンが変わります。
例えば専門用語:
- Kubernetes
- PostgreSQL
- 非同期処理
これらが適切に分割されない場合、AIは一つの概念として扱えません。結果として説明が不安定になります。
つまり、モデル本体が同じでも、トークナイザーが違えば別のAIのように振る舞います。
よくある誤解
トークナイザーは辞書ではありません。意味を解釈しているわけではなく、あくまでパターン分割です。そのため、誤った位置で区切られることもあります。
このときAIは誤解したのではなく、異なる入力を受け取った状態になります。AIの回答が急に不自然になる場合、トークン分割が原因のこともあります。
実用上の注意
トークナイザーの特性を知ると、AIの使い方も変わります。
- 専門用語は表記を統一する
- 略語をむやみに変えない
- 長文を一度に入れない
これだけで回答品質が安定することがあります。AIの性能だけでなく、入力の形も重要です。
まとめ
トークナイザーはAIの前段階ではなく、AIの一部です。文章をどう分解するかによって、AIが見る世界が変わります。
AIが理解していないのに理解しているように見えるのは、適切な分解によってパターンが一致しているからです。大規模言語モデルを使いこなすには、モデルサイズだけでなく、トークンという単位を意識することが重要になります。