トークナイザーTokenizer
文を決まった断片一覧で切り番号を付ける装置
- トークナイザーは文をモデルが受け取れる断片に切り、番号に変える装置です。モデルのすぐ手前に立つ門番です。
- 切る基準はあらかじめ作っておいた断片一覧です。一覧に丸ごと載っている言葉は一つの断片、載っていない言葉は複数の断片に分かれます。
- 一覧は人が手で書いたのではなく、膨大な文章からよく一緒に出てくる文字の組を繰り返し合わせて自動で作ります。
- 答えを返すときは番号をもう一度文字に戻します。 切るときと戻すときは同じ一覧を使います。
- 一覧はモデルごとに違います。だから同じ文でもどのモデルに入れるかで断片数が変わります。
目次
1たとえで理解する
銭湯に入るとロッカーを一つもらい、番号の付いた鍵を手首に付けます。ロッカーは大きさが決まっているので、荷物が大きいと一つに収まりません。そのときは分けて二、三個のロッカーに入れ、鍵もその分だけもらいます。トークナイザーは文をこうして決まったロッカーに分けて入れ、番号を付ける受付です。
ロッカーの種類と数は銭湯を開いたときにすでに決まっています。よく預けられるありふれた荷物には余裕のある専用ロッカーがあって丸ごと入り、初めて見る大きくて変わった荷物は細かく分けられて何個ものロッカーに散らばります。よくあるあいさつの言葉が一つの断片で、見慣れない名前が三つ四つの断片になる理由です。
出るときは番号さえあればよいのです。番号を伝えればロッカーから荷物を出して元どおりに返してくれるからです。
2くわしく
ロッカーの一覧は自動で作られました
一覧を作る方法は意外に単純です。まずすべての文字を一つひとつ単独のロッカーとして置きます。そのあと学習用の文章全体を見渡しながら最もよく一緒に出てくる文字の組を探して一つに合わせ、その合わさった塊を新しいロッカーとして登録します。この合わせる作業を数万回繰り返すと一覧が完成します。
よく出てくる言葉ほど早く合わさって大きなロッカーを持ちます。ありふれた助詞や語尾、よく使う単語がそうやって自分のロッカーを得ます。反対にめったに出てこない言葉は最後まで合わさりきれず、小さな断片のまま残ります。
一覧の大きさはふつう数万個ほどです。増やせば文一つあたりの断片数が減って効率がよくなりますが、モデルが扱うべき候補がその分増えて重くなります。この間でつり合いを取った値が今の数万個です。
一覧にない言葉は分けて入れます
トークナイザーは知らない言葉に出会ってもあきらめません。一覧の中にあるもっと小さな断片の組み合わせで、必ず切り分けられるように作られています。一文字ずつのロッカーまで一覧に入っているので、最悪の場合でも一文字ずつなら入れられます。
そのため新語や見慣れない外国の地名もエラーなく処理されます。代わりに断片数がぐっと増えます。ありふれた単語一つが一断片なのに、見慣れない名前一つが五断片になることもよくあります。断片数はそのまま一度に入れられる文章の量とコストにつながるので、この差は軽く見過ごせることではありません。
日本語はこの問題をより大きく抱えています。文字の種類が多いうえ、同じ語に助詞や語尾が次々と違う形で付くため、一覧に丸ごと収まらない形が細かく砕かれやすいのです。
切るときと戻すときは同じ一覧を使います
文を断片に切って番号の列に変える過程と、モデルが出した番号の列をもう一度文字につなげる過程があります。両方とも同じ一覧を裏返して使うのです。一覧がなければ番号には何の意味もありません。
だからモデルとトークナイザーは常に一組で動きます。違う一覧で切った番号を入れると、モデルはまったく見当違いの文章を読んだことになります。銭湯が違うのに鍵の番号だけ持っていくのと同じです。
空白や改行もロッカーの一部として一緒に収められます。戻したときに元の文章が正確に復元されるにはそうする必要があるからです。断片の前に付いた空白まで一つのロッカーに入ることがよくあります。
一覧が違えば断片数も変わります
モデルを作った所ごとに学習に使った文章が違い、その文章から作った一覧も違うので、同じ文を入れても断片数が互いに違います。ある一覧は日本語の文章を多く見て作られていて日本語の塊を丸ごと収めており、ある一覧は英語中心で日本語を細かく砕きます。
だから「この文は何断片か」という問いには、モデルを決めずには答えられません。サービスの料金を比べるときも断片単価だけを見てはいけず、同じ文がそれぞれ何断片になるかも一緒に見る必要があります。
トークナイザーのせいで起きること
モデルが長い数字の計算をよく間違えるのには理由があります。数字が桁どおりに切られず、見当違いの塊で砕かれるからです。同じ数でもどこで切られるかがまちまちで、規則をつかみにくいのです。
「この単語に子音がいくつありますか」のような質問に弱いのも同じ理由です。モデルは一文字ずつを別々に見ているのではなく、まとまった断片の番号を受け取るだけなので、断片の中にどんな文字が入っているかはぼんやりとしか分かりません。逆に誤字が少しあってもよく通じるのは、砕かれた断片が元の言葉と似た位置に置かれるからです。
3もう少し正確に
トークナイザーは文字列を決まった語彙辞書に従ってサブワード単位に分け、各断片を辞書の整数IDに変えるプログラムです。辞書を作る代表的な方法がバイトペアエンコーディング(Byte Pair Encoding、文字ペアの合成)で、確率を基準に断片を選ぶ別の方式も一緒に使われます。最近は文字ではなくバイト単位から始める方式が多く、どんな文字が入ってきても崩れずに処理されます。
たとえがずれる点もあります。銭湯のロッカーは荷物を実際に保管しますが、トークナイザーは何も保存しません。切って番号に変える規則だけを持っているだけです。またロッカーは荷物を目で見て大きさに合わせて分けますが、トークナイザーは意味をまったく見ません。統計的によく一緒に出てきたかだけを見るので、単語の真ん中を平気で断ち切ることもあります。
4やってみる
5よくある誤解
トークナイザーが意味や文法を見て切ると思われがちですが、実際にはよく一緒に出てきた頻度だけを見るため、単語の真ん中が割れることもあります。
トークナイザーはどのモデルでも同じだと考えられがちですが、実際にはモデルごとに一覧が違い、同じ文の断片数がかなり開きます。
知らない言葉が入るとエラーになると思われがちですが、実際にはより小さな断片に必ず砕かれて入り、代わりに断片数だけが増えます。
7ひとこと要約
つまりトークナイザーは決まったロッカー一覧に合わせて文を分けて入れ、番号を付けたりまた戻したりする装置で、この一覧がモデルごとに違います。
誤りや、もっと良いたとえがありますか? 修正を提案する · 最終更新2026-09-02