AI・機械学習
エンベディングに狂わされる私(HPLM 第2章)
In Which I Lose My Mind over Embeddings (HPLM Chapter 2) (maayanroth.com)
要約
この記事は、自然言語処理におけるトークン化とエンベディングの基本概念を解説しています。特に、単語を数値ベクトルで表現するエンベディングが、メモリ効率と単語間の意味的関係の捉え方の両方で、one-hotエンコーディングよりも優れている点を説明します。さらに、Word2vecアルゴリズムと、エンベディングベクトル間で行える「王様 - 男性 + 女性 = 女王」のような驚くべき数学的操作について掘り下げ、その直感的な理解の難しさと、著者による可視化ツールの試みを紹介しています。
全文翻訳
エンベディングに狂わされる私(HPLM 第2章)
2026年7月31日
The Hundred-Page Language Models Bookの第2章は、私にとって本当にエキサイティングなことが始まった部分です。
第2章 – 言語モデリングの基本
第2章では、自然言語入出力を持つ機械学習の基本的な構成要素を紹介します。トークン化、エンベディング、そしてモデル評価フレームワークです。トークン化は、入力された単語を言語モデルが認識できる「トークン」に変換するプロセスであり、エンベディングはそのトークンを密な数値表現に変換します。これらを組み合わせることで、任意に大きな語彙を機械可読形式で効率的に表現するという問題に取り組みます。
もちろん、「エンベディング」という言葉は聞いたことがあり、エンベディングモデルがLLMにとって重要であり、単語間の意味的な類似性を捉えるために使用されていることは、大まかには理解していました。それ以上のことは、私には説明できませんでした。HPLMはこれらの概念を美しく説明しています。
語彙数が10000語の言語があると想像してみてください。(これは非常に小さな言語です。オックスフォード英語辞典には50万語以上が含まれており、現代のLLMは複数の言語を同時にモデル化しています。)この語彙の単語を表現する最も簡単な方法は、one-hotベクトルを使用することです。これは10000ビットの配列で、配列の各インデックスは語彙の単語に対応します。one-hotベクトルは理解しやすく、完全に機械可読ですが、2つの大きな欠点があります。それは、無駄な0を保存するためにほとんどのスペースを浪費する、信じられないほどメモリ効率が悪いこと、そして単語間の有用な関係をエンコードできないことです。インデックスは単語に任意に割り当てられ、非常に似た単語(例:「happy」と「glad」)は互いに遠く離れてしまう可能性がありますが、隣接するインデックスを持つ単語は意味的に無関係である可能性があります。
Word2vec
エンベディングの主な洞察は、one-hotエンコーディングよりも密であり、単語間の意味的関係を表す、トークンの代替表現を生成できるということです。HPLMは、単語エンベディングを生成するために使用されるアルゴリズムファミリーであるWord2vecについて詳しく説明しています。Word2vecにはいくつかの種類がありますが、それらはすべて同じ中心的な概念を共有しています。
ターゲット単語(この場合は「cat」)といくつかの周囲のコンテキスト単語を含むテキストの断片を想像してください。
ターゲット単語を入力として与えられたときに、コンテキスト単語を高い確率で生成するようにニューラルネットワークをトレーニングした場合、似たような単語、つまり似たようなコンテキストで出現しやすい単語(例:「kitten」)を入力した場合、ネットワークは似たような出力を生成すると期待できるはずです。
ネットワークの構造は次のようになります。2つの層、語彙サイズからエンベディング次元サイズに縮小する入力層と、その逆を行う出力層です。最初の層の出力は、浮動小数点数のベクトルであり、言語モデルのトレーニングまたは使用時に、入力単語の密な表現として使用できるエンベディングベクトルとも呼ばれます。
私の心を奪った部分
ここまでは順調です。「cat」と「kitten」のベクトルが似ている、つまりベクトル空間で互いに近いということは直感的に理解できます。しかしその後、著者はこの爆弾をさりげなく落とします。これらのエンベディングベクトルは、単純な数学的操作をサポートしているのです。例えば、「king」のベクトルから「man」のベクトルを引き、それに「woman」のベクトルを加えると、「queen」のベクトルに非常に近いベクトルが得られます。なんだって?どうして?それは完全に作り話のように聞こえます。
私はClaudeと少し話をして、なぜそれが真実なのかを理解しようとしました。Claudeは、私に対して、「king」と「queen」のベクトルの中には、「王族」という概念を表す何らかのサブコンポーネントがあるという主張をしました。正直、それは私にはナンセンスのように思えます。トレーニング例の空間で操作が行われているかのように考えるか、少なくともそれに目を細めてそれが意味をなすと偽ることができると、少しは明確になります。
「king」という単語のすべてのコンテキスト例を想像してください。それらの一部には性別に関するコンテキストが含まれますが、多くは含まれません。「man」のベクトルを引くとき、それは「king」と「man」の両方を含む例だけを削除しているわけではありません。それは、「man」という概念が言語全体から削除されるかのように、「man」という単語のすべてのコンテキスト例を削除しています。それは、性別のない「君主」という概念にたどり着くのではなく、非常に奇妙な場所に移動します。さて、そこに「woman」のすべての例を追加します。それは「queen」の例をいくつか戻すだけでなく、私たちが「man」が存在しない奇妙な宇宙から言語全体を戻していることにもなります。よし、いや、これは実際には助けにならないかもしれません。
エンベディングベクトルの可視化
この考えに没頭して、より多くの単語ベクトル演算を試せるアプリをコード化することにしました。ここで試すことができます(Word2Vec Arithmetic、GitHubリポジトリ)。約1600語の比較的小さな語彙で、それらを足したり引いたりして、30K語のより大きな語彙から最も近い単語ベクトルのリストを取得できます。また、ベクトル空間での操作の可視化も行えます。距離はベクトルのコサイン類似度で測定されます。
エンベディングモデルの品質は、モデルがより大きなデータセットでトレーニングされるにつれて向上するはずであり、私はこの改善を可視化できるかどうかを見たかったのです。私は2つのエンベディングモデルをトレーニングしました。1つはtext8(英語Wikipediaの最初の100MB)で、もう1つはenwik9(英語Wikipediaの最初の1GB)です。また、事前トレーニング済みのエンベディングモデルであるStanford NLPの60億トークンのGloVeベクトルもダウンロードしました。
それで、うまくいったのでしょうか?まあ、ある程度は。「king - man + woman」という方程式は、3つのベクトルモデルすべてで「queen」を返します。興味深いことに、enwik9モデルによって計算された結果ベクトルは、GloVeモデルから得られる結果よりも、実際の「queen」ベクトルにわずかに近いだけです。
モデルサイズのインパクトは、「walking - walk + swim」で現れ始めます。2つのより大きなモデルは「swimming」を返します。これはかなりかわいいです。小さなtext8モデルは「crawling」を返します。当初、これは語彙の不一致の問題ではないかと心配していました。つまり、「swimming」がtext8モデルの最も自信を持ってトレーニングされた上位30Kトークンに単純に欠けているのではないかということです。3つのモデルすべてを共通の共有語彙に制限した後、これはモデルトレーニングデータサイズが増加するにつれてモデル品質が向上するという真の例であることを確認できました。
もう1つの興味深い結果は、モデル品質の影響が最も明確に見られるところです。
しかし、多くの方程式は単にナンセンスであり、Claudeの説明である「king - man」が何らかの「王族」ベクトルを露出させるはずだということは全く示されませんでした。そしてこれで、私はこの欲求不満を十分に解消したので、第3章 – 再帰型ニューラルネットワークに進む準備ができました。