給湯室にて…
凡田(チームリーダー・38, 主人公)

「king − man + woman = queen」って数式、AIが本当に解いてるんですか?

御託(シニアコンサル・39)

フッ、その式は私が独自に発見し、AAAIで発表予定だ。

大蔵(アシスタントマネージャー・35)

御託さん、それ 30年前に Mikolov 氏が論文で出されています わよ。

御託

……。

御託が「king − man + woman = queen / BY GOTAKU」のポスターを掲げて自慢、大蔵がスマホで MIKOLOV 1996 を見せて崩落
このページのまとめ
  • 埋め込み(Embedding) とは、トークン(単語の塊)に 意味の「住所」を与える仕組み。一語一語を空間の中の1点として置き直す。
  • これで 意味の近さが「距離の近さ」になる。似た言葉ほど近くに集まるので、機械が言葉の意味を扱えるようになる(変換のしくみは本文で)。
  • イメージは 意味の地図上の住所。同じ町内に仲間が住み、地図上の方向が「性別」「複数形」などの意味のちがいを表す。

「ChatGPT は単語をどう扱っているのか?」と聞かれて、「いや、文字列でしょ?」と答えてしまうと、その先の Attention も MLP もすべて意味不明になる。LLM は文字列を直接扱わない。最初にやるのは、トークンを ベクトル(数のリスト)に変換すること だ。

これが 埋め込み(Embedding) と呼ばれる仕組みで、Transformer の入口にあたる。本記事は、なぜ単語をベクトルにするのか、ベクトルになるとなぜ「意味の演算」ができてしまうのか、そこに焦点を絞る。

なぜ文字列をそのまま使えないのか

文字列を機械が弾く一方で、ベクトルなら通る対比図

機械学習モデルが扱える入力は、突き詰めれば 数の配列だけ。掛け算と足し算ができないと学習できない。

「king」という文字列を入れて「queen」という文字列を出すモデル、というイメージは数学的には成立しない。何らかの形で 数値表現に落とす 必要がある。

最も素朴な方法は、辞書順で 1番目の単語に 1、2番目に 2、…と番号を振ることだ(整数 ID)。だが、これだと 「1と2が近い意味」「3はその2倍」 という意味のない関係が紛れ込む。「apple = 1, banana = 2, zebra = 50,000」と振ったとして、apple と banana が近いとは限らないし、zebra が 50,000倍重要なわけでもない。

数を1つだけ割り当てると、意味的な近さを表現する余地がない。じゃあどうするか — 数を1つじゃなく、数百〜数千個割り当てる しかない。

埋め込み = トークンをベクトルにする

埋め込みのしていることは、本質的にこれだけだ。

トークン1つ ↔ 数のリスト(=ベクトル)1本

GPT-3 の場合、1つのトークンに 12,288個の数 が割り当てられる。「king」は12,288次元のベクトル、「queen」も別の12,288次元のベクトル、「apple」もまた別の…という具合。

この対応関係を保管しているのが 埋め込み行列 W_e だ。これは「語彙数 × 埋め込み次元」のテーブルになっていて、GPT-3 では「50,257トークン × 12,288次元」の行列。重みパラメーターの数はこれだけで 約6.17億個。モデル全体の1,750億のうち、けっこうな部分が「ただの単語→ベクトル変換表」に使われている。

「方向」が「意味」になる

ここからが面白い。学習が進むと、空間の方向が意味と結びつく

コンサル流に置き換えると分かりやすい。我々がいつもパワポで描く「2軸マップ」を思い出してほしい。横軸が「価格」、縦軸が「品質」、点をプロットして「うちはここ、競合はここ」とやるアレだ。あれは 2次元の埋め込み に他ならない。

埋め込みでやっているのも本質的に同じ。ただし軸の数が 12,288本ある。そして人間が「価格」「品質」と決めたわけではなく、学習が勝手に有用な軸を見つける

たとえば学習後の埋め込み空間には、こんな方向が自然に現れる。

これらの方向は、人間が手で指定したものではない。「次の単語を予測する」という1つのタスクを延々と訓練しているうちに、勝手にこういう構造が立ち上がる

教科書的な例: king − man + woman ≈ queen

伝統的な例として、ベクトル演算で意味の操作ができることを示すのがこれ。

vec(king) − vec(man) + vec(woman) ≈ vec(queen)

「king」のベクトルから「男性」の方向ぶんを引き、「女性」の方向ぶんを足すと、埋め込み空間の中で「queen」のベクトルにとても近い場所 にたどり着く。

つまり「性別の方向」が空間内に確かに存在する、ということだ。これがあると、モデルは「未知の女性版の単語」を求めるとき、近い領域を探すだけで答えを出せる。

似た例:

vec(Tokyo) − vec(Japan) + vec(France) ≈ vec(Paris)
vec(walking) − vec(walked) + vec(swam) ≈ vec(swimming)

「首都の方向」「過去形→現在進行形の方向」が、空間に埋め込まれているということ。

ベンチマークもベクトルの近さで測れる

コンサル業務にもう一歩寄せる。クライアントの「類似事例検索」を考えてみよう。

従来のやり方は、業界・売上規模・地域などのタグで絞り込んで「条件マッチ」する案件を引っ張る。だが、本当に欲しいのは「雰囲気が近い案件」だ。

埋め込みがあると、それぞれの案件記述をベクトル化して、新しい案件のベクトルとの 内積(類似度)が高い順 に並べるだけで済む。「業種は違うけど構造は近い」「規模は違うけど論点は同じ」みたいな、人間が直感でやっていた類似探索が 数値計算で再現できる

これが Transformer 以前から「Word2Vec」「BERT」などで実用化されていた応用だ。Transformer の埋め込みも本質的に同じ仕組みを継承している。

登場人物の反応 ①
御託(シニアコンサル・39)

フッ、要するにこれは4P分析の高次元版だな。Product, Price, Place, Promotion …で、たった4軸だぞ?マッキンゼーの友人に言わせれば、本質はそこではないがな。

凡田(チームリーダー・38, 主人公)

いや、御託さん、これ12,288軸ですよ。我々がパワポで描いてる2軸マップが、6,000枚分くらい同時に走ってるイメージで…広告時代に学んだことなんですが、「ポジショニング」って結局これですよね。本来のコンサルとしては、押さえておかないと…

大蔵(アシスタントマネージャー・35)

あら…私の経験では、Excelの列ベクトルで十分ですわよ、ええ。12,288列のシート、INDEX/MATCH で参照できますし。

川口(アナリスト・22)

えっと…つまり、king − man + woman = queen って、社員 − 部長 + パートナー = 取締役、みたいな感じで…(無言で計算しはじめる)

2軸マップと12,288次元空間の対比 / king-queen-man-woman の意味平行四辺形

何次元あれば十分なのか

「12,288次元って多すぎでは?」と思うかもしれない。実際これは設計判断で、モデルによって違う。

なぜ次元を増やすかというと、多くの軸を持つほど多くの意味を独立に表現できる から。低次元だと「性別」の方向と「単複」の方向が混ざって、片方を動かすと意図せず他方も動いてしまう。次元が増えれば、軸を直交に近く配置して 意味同士の干渉を減らせる

逆に多すぎると、計算コストが爆発する(後段の行列が全部 12,288 ベースになるため)。実用上は「次のトークン予測の精度が頭打ちになる手前」あたりに設定する。

なぜ Transformer の出発点として重要か

Transformer の中で起きていることは、ざっくり言うと「埋め込みベクトルを文脈に応じて何度も書き換える」プロセスだ。

入口で「king」がベクトルになる。アテンション層を通ると、周りの単語(「the」「Macbeth」「kill」など)の情報が混ざり、「king」のベクトルが「シェイクスピアの戯曲のスコットランド王」を指す方向に動く。MLP 層を通ると、また別の方向に変換される。

こうして 同じトークンが、文脈次第で異なるベクトル位置を持つ ようになる。これが Transformer の表現力の核心だ。

つまり埋め込みは「Transformer が動き出す前のスタート位置」を決めている。スタート位置がよく学習されているから、その後のアテンションと MLP が活きてくる。

登場人物の反応 ②
赤崎(部長 / AI戦略推進室室長・42)

なるほど、これは産業革命だ。…で、具体的に何次元にすればいいんだっけ?ふわっとした方向感としては、まず1万次元で行ってみるか?これパワポにしてみる?

凡田

部長、次元数はモデル設計の最適化で決まるので、ふわっとは決められないんですけど…

御託

フッ、本質はそこではない。私の友人の MBA 仲間も言っていたが、結局重要なのは「次元呪い」だ。サンデルの本にもあるように、人間の認知は3次元で…

大蔵

あら、御託さんのおっしゃる「次元呪い」って、どの本ですの?私の経験では、そういう専門用語はちゃんと出典を…

御託

…(沈黙)

川口

あの…ぼく、社内のCRM の取引先データ全部ベクトル化してみたんですけど、業界タグだけで分類してた頃より、ずっと「似てる案件」が出てきます…(無言でデモ画面を開く)

アイマイ社5人が12,288次元の埋め込み空間に圧倒される図