文章を数字に変える:トークン化
「コンピューターは文字を読めるの?」「ChatGPTはどうやって日本語を理解しているの?」そんな疑問を持ったことはありませんか?実は、コンピューターは文字をそのまま理解することはできません。この記事では、LLMがどのように文章を数字に変換して処理しているのか、トークン化 という基本的な仕組みについて分かりやすく解説します。
コンピューターの文字認識
はじめに、コンピューターがどのように文字を扱っているのかについて紹介します。
■コンピューターは数字しか分からない
実は、コンピューターは数字しか理解できません。私たちが見ている「A」「あ」「1」といった文字は、全てコンピューターの内部では数字として保存されています。
たとえば:
- 「A」→ 65番
- 「a」→ 97番
- 「あ」→ 12354番
- 「1」→ 49番
これは 文字コード という仕組みで、世界中の文字に番号を割り当てたものです。コンピューターは「65番の文字を表示しなさい」と命令されると、私たちには「A」として見えるように画面に表示します。
■日本語の複雑さ
日本語は特に複雑で、ひらがな、カタカナ、漢字、アルファベット、数字 など、様々な文字が混在しています。
たとえば:
- 「今日はAIについて勉強する」という文章には、漢字(今日)、ひらがな(は)、アルファベット(AI)、カタカナ(勉強という文字はありませんが、「コンピューター」のような場合)が含まれています。
要するに、LLMが日本語を処理するには、この複雑な文字体系を適切に数字に変換する必要があるのです。
トークン化とは何か
次に、LLMが文章を処理するための基本的な仕組みについて説明します。
■トークンの概念
トークン とは、LLMが処理する最小単位のことです。簡単に言うと、文章を小さな意味のある部品に分解したもの です。
たとえば、「今日は良い天気です」という文章は、以下のようにトークンに分解されます:
「今日は良い天気です」 ↓ 「今日」「は」「良い」「天気」「です」
それぞれのトークンが、コンピューターが理解できる数字に変換されます:
「今日」→ 1523番 「は」→ 89番 「良い」→ 2441番 「天気」→ 1876番 「です」→ 156番
■トークン化の重要性
トークン化は、LLMにとって 「文章を理解するための第一歩」 です。人間が文章を読む時に、文字を一つずつ読むのではなく、単語や文節のまとまりで理解するように、LLMもトークン単位で文章を処理します。
たとえば:
- 人間:「今日は」「良い」「天気」「です」というまとまりで理解
- LLM:「今日」「は」「良い」「天気」「です」というトークンで処理
要するに、トークン化は「人間の文章理解」をコンピューターで再現するための重要な技術なのです。
単語分割の方法
次に、具体的にどのように文章をトークンに分解するのかについて解説します。
■日本語の単語分割の難しさ
日本語の文章は、単語と単語の間にスペースがない ため、どこで区切るかを判断するのが困難です。
たとえば:
- 「今日は学校に行きます」
- 正解:「今日」「は」「学校」「に」「行き」「ます」
- 間違い:「今」「日は」「学」「校に」「行き」「ます」
この判断を間違えると、LLMは文章の意味を正しく理解できません。
■形態素解析という技術
日本語の単語分割には、形態素解析 という技術が使われます。これは、文章を 形態素(意味を持つ最小の言語単位)に分解する技術です。
たとえば:
- 「走ります」→「走り」(語幹)+「ます」(語尾)
- 「美しい」→「美し」(語幹)+「い」(語尾)
- 「学校に」→「学校」(名詞)+「に」(助詞)
形態素解析では、辞書と文法ルールを使って、最適な分割を判断します。
■サブワード分割
最近のLLMでは、サブワード分割 という新しい手法が使われています。これは、単語をさらに細かい部分に分割する方法です。
たとえば:
- 「走ります」→「走」「り」「ます」
- 「コンピューター」→「コン」「ピュー」「ター」
- 「artificial」→「art」「if」「icial」
■サブワード分割の利点
サブワード分割には、以下の利点があります:
- 未知語対応: 辞書にない新しい言葉でも、部分的に理解できる
- 言語間の共通性: 異なる言語でも似たような音の部分を共有できる
- 効率性: 単語数を減らして、処理を高速化できる
たとえば:
- 「スマートフォン」という新しい言葉が登場しても、「スマート」「フォン」に分割できれば、部分的に意味を理解できる
- 「international」と「インターナショナル」で、「inter」「インター」のような共通部分を認識できる
実際のトークン化プロセス
次に、実際にLLMがどのようにトークン化を行っているのかについて説明します。
■BPE(Byte Pair Encoding)
多くのLLMでは、BPE という手法が使われています。これは、最も頻繁に出現する文字ペアを段階的に結合していく 方法です。
たとえば:
- 最初:「a」「b」「c」「d」「e」「f」「g」「h」「i」「j」「k」「l」「m」「n」「o」「p」「q」「r」「s」「t」「u」「v」「w」「x」「y」「z」
- 「th」がよく出現するので結合:「th」を一つのトークンとして扱う
- 「the」がよく出現するので結合:「the」を一つのトークンとして扱う
- 「ing」がよく出現するので結合:「ing」を一つのトークンとして扱う
この結果、「thinking」という単語は「th」「ink」「ing」のように分割されます。
■日本語でのBPE
日本語でも同様に、よく出現する文字や文字列の組み合わせが優先的にトークン化されます。
たとえば:
- 「です」「ます」「ました」などの語尾
- 「する」「した」「して」などの動詞
- 「という」「について」などの助詞の組み合わせ
要するに、BPEは「よく使われる表現をまとめて効率的に処理する」ための技術なのです。
■トークン数の制限
LLMには トークン数の制限 があります。たとえば、ChatGPTは一度に処理できるトークン数に上限があります。
たとえば:
- GPT-3.5:約4,000トークン
- GPT-4:約8,000トークン(モデルによって異なる)
これは、本でいうと「一度に読める章数に制限がある」ようなものです。長い文章を処理する場合は、複数回に分けて処理する必要があります。
トークン化の実際の影響
最後に、トークン化がLLMの性能にどのような影響を与えるかについて解説します。
■言語による違い
トークン化の方法によって、LLMの性能が大きく変わります。特に、言語によって必要なトークン数が大きく異なる ことが知られています。
たとえば:
- 英語:「I am a student」→ 4トークン
- 日本語:「私は学生です」→ 6トークン(「私」「は」「学生」「で」「す」「。」)
このため、同じ内容でも日本語の方が多くのトークンを消費し、処理時間が長くなる傾向があります。
■文脈理解への影響
トークン化の質は、LLMの 文脈理解能力 に直接影響します。
たとえば:
- 適切な分割:「人工知能」→「人工」「知能」(意味を保持)
- 不適切な分割:「人工知能」→「人」「工知」「能」(意味が壊れる)
適切なトークン化により、LLMはより正確に文章の意味を理解できるようになります。
■生成品質への影響
トークン化は、LLMが生成する文章の品質にも影響します。
たとえば:
- よく使われる表現(「ありがとうございます」「よろしくお願いします」)が適切にトークン化されていると、自然な文章を生成しやすくなります
- 珍しい表現や専門用語が適切に分割されていないと、不自然な文章になる可能性があります
要するに、トークン化は「LLMの基礎体力」のようなもので、これが優れているとLLM全体の性能が向上するのです。
まとめ
トークン化は、LLMが文章を理解するための基本的な仕組みです。コンピューターは文字をそのまま理解できないため、文章を意味のある小さな単位(トークン)に分解し、それぞれを数字に変換して処理します。日本語のような複雑な言語では、適切な単語分割が特に重要で、BPEのような高度な技術が使われています。
要するに、トークン化は「人間の言葉をコンピューターが理解できる形に翻訳する」ための重要な技術であり、LLMの性能を左右する基盤なのです。
次回の記事では、LLMがトークン化された文章からどのように重要な情報を見つけ出すのか、「注意のメカニズム」について詳しく解説していきます。