なぜ「数字に変える」のか
コンピュータは文字列を直接扱えません。「猫」と「犬」を見せても、それが似た意味の単語だなんて分かりません。文字コード上では「猫」(U+732B)と「犬」(U+72AC)は単なる数字の羅列で、両者の意味的な近さは表現されていないのです。
Attentionが「単語同士の関係性」を計算するためには、まず単語を「意味を含んだ数値ベクトル」に変換する必要があります。これがAttentionに入る前の最初のステップ、Embedding(埋め込み)です。
graph LR A[文章\n猫が好き] --> B[Tokenizer\n断片化] B --> C[トークンID\n猫=1234\nが=87\n好き=5678] C --> D[Embedding\n各IDを\n512次元\nベクトルに] D --> E[Attention\n次章以降] style A fill:#3b82f6,stroke:#1d4ed8,color:#fff style B fill:#8b5cf6,stroke:#6d28d9,color:#fff style C fill:#f97316,stroke:#ea580c,color:#fff style D fill:#14b8a6,stroke:#0d9488,color:#fff style E fill:#3b82f6,stroke:#1d4ed8,color:#fff
Tokenizer — 文章を「トークン」に分割する
Tokenizer(トークナイザ) は、文章をAIが扱いやすい小さな単位(トークン)に分割するプログラムです。
最も素朴な方法は「単語ごとに分割する」ですが、これだと未知の単語(造語、固有名詞)に対応できません。「unhappiness」を学習データで見たことがないと処理できない、というわけです。
そこで現代のLLMは BPE(Byte-Pair Encoding) という方式を使います。BPEは頻出する文字ペアを繰り返し統合し、サブワード(単語の部品)の辞書を作る方法です。
| 文字列 | トークン例(GPT-4の場合) | トークン数 |
|---|---|---|
| I love AI | ["I", " love", " AI"] | 3 |
| Hello, world! | ["Hello", ",", " world", "!"] | 4 |
| 機械学習 | ["機", "械", "学", "習"] または ["機械", "学習"] | 2〜4 |
| unbelievable | ["un", "bel", "iev", "able"] | 4 |
| Tokyo | ["Tokyo"] | 1(1単語=1トークン) |
| 東京 | ["東", "京"] | 2(2文字=2トークン) |
Vocabulary — モデルが知っている全トークンの辞書
Tokenizerが分割するトークンの全集合を Vocabulary(語彙) と呼びます。各トークンには固有の整数ID(語彙ID)が振られます。
| モデル | Vocabulary数 | 対応言語 |
|---|---|---|
| GPT-2 | 約50,000 | 英語中心 |
| BERT (multilingual) | 約110,000 | 104言語 |
| GPT-4 | 約100,000 | 多言語対応強化 |
| Llama 3 | 約128,000 | 多言語 |
| Claude 3 | 非公開 | 多言語 |
「猫」というトークンが語彙ID 1234に対応する、というように、文章はまず「整数の列」に変換されます。
Embedding — 意味を持つベクトルに変える
整数IDになった次は、いよいよ Embedding(埋め込み) です。各トークンIDを、数百〜数千次元の実数ベクトル に変換します。
# 例: GPT-2 (d_model = 768) の場合
"猫" (ID=1234) → [0.12, -0.45, 0.78, ..., 0.23] # 768個の実数
"犬" (ID=2345) → [0.15, -0.40, 0.81, ..., 0.20] # 似ている
"車" (ID=3456) → [-0.83, 0.62, -0.11, ..., 0.95] # 全然違う ここで重要なのは、意味の近い単語は、ベクトル空間で近い位置に配置される ということです。これは人間が手で決めるのではなく、大量のテキストで学習した結果として 自動的に獲得される 性質です。
分布仮説 — 「単語の意味はその周囲で決まる」
なぜ機械が単語の意味を学習できるのでしょうか? その理論的根拠が、1957年の言語学者 J.R. Firth による有名な格言です。
"You shall know a word by the company it keeps."(単語はその周囲の単語によって特徴づけられる)
「猫」と「犬」は、似たような文脈で使われます(「ペットの○○」「○○を飼う」「○○がかわいい」など)。だから、周囲の単語の出現パターンから、「猫」と「犬」が意味的に近いと機械が判断できる、というわけです。これを 分布仮説(Distributional Hypothesis) と呼びます。
驚きの性質 — king - man + woman ≒ queen
Embeddingが獲得する最も有名な性質が、次の式です。
vec("king") - vec("man") + vec("woman") ≒ vec("queen")
ベクトルの足し引きが、なんと 「意味の演算」 に対応するのです。これは2013年のWord2Vec(Mikolov et al.)で広く知られるようになった性質で、Embeddingが単語間の関係性を 幾何学的な構造 として学習している証拠です。
graph LR K[king\n王] -- 男→女 --> Q[queen\n女王] M[man\n男] -- 男→女 --> W[woman\n女] style K fill:#3b82f6,stroke:#1d4ed8,color:#fff style Q fill:#ec4899,stroke:#be185d,color:#fff style M fill:#3b82f6,stroke:#1d4ed8,color:#fff style W fill:#ec4899,stroke:#be185d,color:#fff
同様に、vec("Tokyo") - vec("Japan") + vec("France") ≒ vec("Paris")(首都の関係)といった例も成り立ちます。Embeddingは、人間が教えなくても「性別」「首都-国」「単数-複数」などの抽象的な関係を自動で見つける のです。
なぜ「512次元」もあるのか
「512次元」と聞くと身構えるかもしれませんが、要するに「512個の数字を並べたもの」です。1次元なら数直線、2次元なら平面、3次元なら立体、それ以上は人間には視覚化できませんが、計算規則は同じ(内積も同じ式 Σxi·yi で定義されます)。
| モデル | Embedding次元 (d_model) | 備考 |
|---|---|---|
| Word2Vec | 300 | 2013年、現代の基礎 |
| BERT base | 768 | 2018年 |
| GPT-2 | 768〜1600 | サイズによる |
| GPT-3 | 12,288 | 175Bパラメータ |
| Llama 3 8B | 4,096 | 2024年 |
| DeepSeek V3 | 7,168 | 2024年末 |
この章のまとめ
Attentionが扱うのは文字列ではなく、Embeddingによって 「意味を含むベクトル」 に変換されたトークン列です。意味の近い単語は近くに、意味の方向(性別、首都-国など)は一定のベクトル差として、空間内に整理されています。
次の第4章では、これらのベクトル同士の「似ている度」を測る道具——内積——を高校数学から呼び戻し、Attentionの核心であるQ・Kの内積につなげていきます。
理解度チェック
Tokenizerの主な役割は何ですか?
キーボード: 1〜4 で選択、Enter で回答