Dance with Agents

LLMは日本語を単語に割っていない

英語は単語のあいだに空白があります。日本語にはありません。ですから日本語を機械に読ませるときは、まず単語に割るのが最初の仕事でした。MeCabやJUMAN、Sudachiといった形態素解析器が担ってきた工程です。

今のLLMは、これをしていません。 しかも調べていくと、英語のほうも似た扱いを受けていることが分かります。


実際に割ってみる

公開されているトークナイザ(GPT-4oのもの)で、日本語を分割した結果です。区切りが実際の単位です。

有名人には詳しく   →  有 | 名 | 人 | には | 詳 | しく
有名人のことは詳しく →  有 | 名 | 人 | の | こと | は | 詳 | しく
歴史に詳しい      →  歴 | 史 | に | 詳 | しい

形態素解析器なら「有名人 / に / は」と割るところです。ところが実際は、「有名人」が3つにばらけ、逆に「には」が1つの塊になっています。

ここは注目に値します。「には」は「に」と「は」という2つの助詞です。 文法的には別々の部品なのに、融合したまま1つの単位として扱われている。 一方、同じ「は」が「のことは」の中では独立した単位になっています。同じ助詞が、隣に何が来るかで別々に扱われているわけです。

つまり、分割の切れ目は文法の切れ目と一致しません。

英語も、似たようなものだった

では空白のある英語は単語で割られているのか。同じトークナイザで見ると、そうではありません。

tokenization         →  token | ization
unbelievable         →  un | bel | ievable
internationalization →  international | ization

un | bel | ievable は、意味の切れ目としては壊れています。正しくは un / believ / able のはずです。英語も、文法や語源とは無関係なところで切られている。

「英語は単語が分離しているから有利」という直感は、少なくともこの工程では表れていません。 空白は手がかりの一つに過ぎず、英語も日本語も、同じところまで降ろされてから処理されます。

なぜ、これで動くのか

単位を決めているのは文法ではなく頻度です。大量のテキストを眺めて、よく一緒に登場する並びを1つの単位にまとめる——BPEやUnigramと呼ばれる方式です。「には」がひと塊になったのも、日本語のテキストに「には」という並びが大量に登場するからでしかありません。

この考え方を、空白のない言語まで含めて徹底したのがSentencePiece(2018年)です。空白を特別扱いせず、生のテキストから直接、単位を学ぶ。 日本語や中国語で前処理を不要にすることが、論文に明示された設計目標に含まれています。

形態素解析をやめたのではなく、要らない作り方に変えた、というのが正確なところです。

なお、形態素解析が完全に無意味というわけでもありません。日本語のトークナイザを比べた研究は、形態素解析器を前段に置く構成も検討したうえで、課題ごとに最適な解析器が違う(=万能の1つはない)と報告しています。

副作用:日本語はトークンを食う

割り方が頻度で決まる以上、学習データに多い言語ほど、少ないトークンで済みます。 そして多くのモデルは英語中心のデータで作られています。

同じ内容の日英3組を、先ほどのトークナイザで測った結果です。

日本語 英語 比
3文の合計 66トークン 31トークン 2.13倍

同じことを言うのに、日本語はおよそ2倍のトークンを使います。 これは料金にも、文脈に収まる量にも、そのまま効きます(トークン節約の話)。

数えたいときは

ここまでの測定はすべて公開されているGPT-4oのトークナイザによるもので、Claudeのトークナイザではありません。 Anthropicはトークナイザ本体を公開していないので、Claudeでの正確な数はトークンカウントAPIで数えることになります。傾向は共通ですが、具体的な数字はモデルごとに違います。

まとめ

  • LLMは形態素解析をしていない。単語に割る工程そのものを持たない
  • 分割は頻度で決まるので、文法の切れ目と一致しない。「には」は助詞2つのまま1つの単位になり、「有名人」は3つにばらける
  • 英語も同じ扱いを受けている。un | bel | ievable のように、意味の切れ目を無視して切られる
  • 日本語は同じ内容でおよそ2倍のトークンを使う(本記事の実測値、3文の比較)
  • Claudeのトークナイザは非公開。正確に数えるなら公式のトークンカウントAPI

では、単語にすら割っていないモデルが、なぜ助詞を間違えないのか。文法はどこにあるのか。 それは次の記事で扱います。

LLMと自然言語の記事

LLMと自然言語のページへ →