2. 埋め込みベクトル
トークン ID語彙の中の各トークンに振られた番号。LLM に実際に入力されるのは、この整数の並び。用語集でくわしく → は単なる番号です。ID 1234 と 1235 が意味的に近いわけではありません。 そこで LLM は、各 ID を 埋め込みベクトル(数百〜数万個の数値の並び)に変換してから計算に使います。
- 入力: トークン ID の列。例:10 個の整数
- 出力: ベクトルの列。トークン 1 個につきベクトル数値を決まった個数だけ並べたもの。たとえば [0.2, -1.3, 0.8] は 3 つの数値からなるベクトル。並んだ個数を次元数という。ベクトルの「長さ」は個数ではなく、矢印としての大きさ(例:[3, 4] の長さは 5)。用語集でくわしく → 1 本なので、10 本。各ベクトルは d 個の数値の並び(d は次元ベクトルに並んでいる数値の個数。768 次元のベクトルは、768 個の数値の並び。用語集でくわしく →数。GPT-2 最小構成では 768、このページのデモでは 6)
- 形で書くと: 10 個 → 10 × d(10 行 d 列の表)
- 使うもの: 埋め込み行列(語彙数 × d)と、位置の情報
埋め込み行列から 1 行取り出すだけ
Section titled “埋め込み行列から 1 行取り出すだけ”LLM は「語彙(ボキャブラリ)トークナイザが知っているトークンの一覧。LLM は、この一覧のどれか 1 つを次のトークンとして選ぶ。語彙の数を語彙サイズという。用語集でくわしく →数 × 次元数」の大きな表(埋め込み行列数値を縦横の表の形に並べたもの。横の並びを行、縦の並びを列という。ベクトルに行列を掛けると、別のベクトルに変換できる。用語集でくわしく →)を持っています。トークン ID が 1234 なら、その表の「ID 1234 に対応する行」を取り出したものが、そのトークンの埋め込みベクトルです。計算はそれだけです。
- GPT-2(最小構成): 50,257 語彙 × 768 次元
- GPT-3(175B): 約 5 万語彙 × 12,288 次元(次元数は Brown ら、2020 年 の表 2.1。語彙は GPT-2 と同じトークナイザ)
表の中身は最初はランダムで、学習大量のデータで予測を試し、外れた分だけパラメータを少しずつ調整して、予測を当たりやすくしていくこと。LLM は「次のトークンの予測」で学習する。用語集でくわしく →を通じて 「次のトークンを当てやすい値」に調整されていきます。つまり表の数値はすべて、学習で決まるパラメータモデルが学習で調整する数値。埋め込み行列や、Attention・MLP の行列の中身がすべてパラメータ。「70B のモデル」は、パラメータが 700 億個あるという意味。用語集でくわしく →です。その結果、意味の近いトークンは近い位置に並ぶようになります。関係の似たペアが同じ向きに並ぶ傾向も見られます(はっきり確かめられているのは、次の節の word2vec のような単語ベクトルです)。
「近さ」と「方向」
Section titled “「近さ」と「方向」”ベクトルは、図形として読むこともできます。2 次元の [3, 4] なら「横に 3、縦に 4」の点で、原点からその点に向かう矢印とも見られます。次元が増えても、この「位置」と「向き」の考え方はそのまま使えます。
ベクトル同士の近さは、よくコサイン類似度2 つのベクトルの向きがどれだけ揃っているかを、-1〜1 の数値で表したもの。1 なら同じ向き、0 なら直交(向きがまったく揃っていない)、-1 なら正反対。用語集でくわしく →(2 つのベクトルの向きがどれだけ揃っているか)で測ります。1 に近いほど同じ向き、0 なら直交(向きがまったく揃っていない)、−1 なら正反対です(範囲は −1〜1)。意味の近さの目安としてよく使われ、学習済みの埋め込みでは、0 に近いペアは関連が薄いことが多くなります(どこまで当てはまるかはモデルによります)。
さらに面白いのは、方向に意味が宿る ことです。有名な例が次の式です。
王 − 男 + 女 ≒ 女王
この例は、word2vec という、LLM より前の単語ベクトルの研究で有名になりました(Mikolov ら、2013 年。原論文の英語の例 King − Man + Woman ≒ Queen を、日本語にしたものです)。
ベクトルの足し算・引き算は、同じ位置の数値どうしを足し引きします。下のデモの値のうち[王族, 女性]の 2 つの次元だけで見ると、王 [0.95, 0.05] − 男 [0.05, 0.05] + 女 [0.05, 0.95] = [0.95, 0.95] で、女王 [0.95, 0.95] に着きます。これは、男から女への差 [0, 0.90](「女性」の方向への移動)を、王にそのまま足したのと同じです。
なお、いちばん近い単語を探すときは、計算に使った王・男・女を候補から除くのがふつうです。下のデモも同じです。
- 王子(0.929)
- 女王(0.837)
- 王女(0.804)
- 男(0.740)
これは各次元に意味をつけて手で作った例です。本物のモデルでは、こうした「方向」が学習の結果として、たくさんの次元に混ざった形で自然に現れます。
試してほしいこと
Section titled “試してほしいこと”- 最初の「若さ × 女性」の 2 軸で見る: 人間の単語が「大人の男性・大人の女性・若い男性・若い女性」の 4 つの塊に分かれます。ただし、王と男のように重なって区別できない単語もあります。
- 縦軸を「王族」に変える: 王と男は離れますが、今度は王と女王のように別の組が重なります。2 つの軸では表しきれない違いがあり、たくさんの次元があると、それだけ多くの違いを表せるのです。
- 足し算・引き算で「子犬 − 犬 + 猫」を試す: 「若さの方向」が動物の種類と関係なく使えることが分かります。
- 「寿司」を選んで類似度ランキングを見る: 食べ物同士が近く、人間や王族からは遠くなっています。最初の「若さ × 女性」の図では寿司が男の近くに見えますが、ランキングは図の 2 軸だけでなく、6 つの次元すべてで向きを比べています。横軸を「食べ物」に変えると、図でも寿司はりんごやパンの近くに移ります。
位置の情報も足す
Section titled “位置の情報も足す”次の回で見る Attention は、各トークンが、ほかのトークンの中身(ベクトル)を見て情報を集める仕組みで、相手が 何番目にいるかは直接は見ません。そのままでは「猫が魚を食べた」と「魚が猫を食べた」を区別しにくいので、各トークンの埋め込みに「何番目にあるか」を表す情報を加えます。
- GPT-2 の方式: 位置ごとに学習したベクトル(1 番目用、2 番目用、…)を、埋め込みベクトルに足す。足し算なので、出力の形(10 × d)は変わらない
- 最近のモデルの方式: 埋め込みには何も足さず、Attention の計算の中で、比べるためのベクトル(次の回の Query と Key)を位置に応じて回転させる RoPE(回転位置埋め込み)Attention でトークンどうしを比べるときに使うベクトルを、位置に応じた角度だけ回転させて、位置の情報を入れる方式。埋め込みには何も足さない。Rotary Position Embedding の略。用語集でくわしく → という方式が多い

