Chapter 2

第2章: 単語に座標を与える — 埋め込み

前章で文字列をトークンに切れた。
たとえば [東京, タワー, は, 高い] のように。

ところがこの状態の機械は、まだ「東京」と「大阪」が 似ている都市の名前 だということを何も知らない。 彼にとって「東京」はトークン番号 4218、「大阪」はトークン番号 9802、ただの整数だ。 「東京 = 4218」と「東京 = 9802」を入れ替えても、何の違いもない。

ここから先で機械が 意味を扱えるように なるには、各トークンを ただの番号ではなく、もっと豊かな表現 に変える必要がある。 その答えが、本章のテーマ ── 埋め込み (embedding) だ。

2.1 トークン番号だけでは何も分からない

前章でトークン化を済ませると、文は 整数の並び になる。

[東京, タワー, は, 高い][4218, 1903, 7, 5567]

しかしこの整数は、ただの背番号 だ。 番号 4218 と 9802 のあいだに「意味的に近い/遠い」という関係は何もない。 番号同士を足したり比べたりしても、言葉の意味についての情報は何も出てこない。

これではまずい。 機械に翻訳・要約・対話をさせたいのに、入力が「ただの背番号」なら、機械が言葉の 意味の構造 を学ぶ足場がない。

背番号は 「区別はできるが、関係を表せない」 表現だ。 言葉の意味を扱うには、トークン同士の 類似性・対比・関係 が反映できる表現が要る。 それを与えるのが「埋め込み」だ。

2.2 ベクトルを与えるという発想

そこで採用するのが、各トークンに「数の並び(ベクトル)」を割り当てる という方針だ。 たとえば、各トークンに 300 個の数の並びを与える。

トークン与えるベクトル(300次元の数値)
東京[0.21, -0.83, 0.15, …, 0.04]
大阪[0.19, -0.79, 0.18, …, 0.02]
[-0.55, 0.30, -0.41, …, 0.81]
[-0.51, 0.28, -0.39, …, 0.78]
バナナ[0.62, 0.91, -0.10, …, -0.33]

このベクトルが 300 次元空間の「座標」 だと思えばいい。 すると、各トークンは 空間内の点 として暮らすことになる。

この「トークン → ベクトル」の変換、つまり トークンを高次元空間に住まわせる操作 を、埋め込み (embedding) と呼ぶ。 住まわせた先のベクトルそのものを、埋め込みベクトル ともいう。

最初に聞くと「なぜ突然 300 次元の話?」と戸惑うが、ここはぐっと飲み込んでほしい。 実は、この「意味を空間の座標に置く」という素朴な発想が、近代 NLP の魔法の入口だった。

2.3 似た意味のトークンは、近い場所に住む

ここまでは「ベクトルを割り当てる」だけの話だった。 肝心なのは、そのベクトルを「意味的に良い感じ」に決められるか だ。

良い埋め込みとは何か。一言で言うとこうだ:

意味が似ているトークンは、空間内で近くに置かれる。

「東京」と「大阪」は近く。 「猫」と「犬」も近く。 「東京」と「バナナ」は遠い場所に。

これさえ実現できれば、機械にとって 「東京 と 大阪 は似ている」 という事実が、ベクトル間の距離 として自動的に表現される。 言語学者がルールで教えなくても、空間の幾何学が意味を背負ってくれる。

座標軸の一例(実際は数百次元)東京大阪名古屋= 都市の島うさぎ= 動物の島バナナりんご= 果物の島
図 2.1 — 良い埋め込み空間のイメージ。意味の近いトークンが「島」のように集まる。実際は数百次元なので、図はそのうちの 2 次元を平面に切り出した断面に過ぎない。

実際の埋め込み空間は 300〜数千次元あるので、人間が直接眺めることはできない。 だが「意味の近いものは近く、遠いものは遠く という配置になっている」という性質さえ守られていれば、機械は十分にその構造を活用できる。

2.4 ベクトルをどうやって決めるか ── Word2Vec の発想

「意味的に良い埋め込み」を、人間が手で決めるのは無理だ。語彙が数万〜数十万あれば、ひとつずつ「東京は [0.21, -0.83, …]」なんて書いていられない。

そこで、大量のテキストからベクトルを自動学習 する手法が 2013 年に登場した。 代表選手が Word2Vec(Google の Tomas Mikolov らによる)だ。

Word2Vec の発想は、言語学の古いスローガンに根拠を置く:

「単語の意味は、その周りに現れる単語によって決まる」(J.R. Firth, 1957)

たとえば「猫」という単語の周りには、「鳴く」「ふわふわ」「飼う」「ペット」がよく現れる。 「犬」の周りにも、ほぼ同じ単語が現れる。

ということは、周辺に現れる単語の傾向が似ているトークン同士は、意味が近い はずだ。 だから「周辺単語をうまく予測できるベクトル」を学習すれば、自然と意味が空間に埋め込まれる。

Word2Vec はこの直観を、「ある単語が与えられたとき、その周辺に出る単語を予測する」 という機械学習タスクに落とし込んだ。 予測がうまくいくようにベクトルを調整していくと、副産物として「意味的に良い空間」が手に入る。

ニューラルネットワーク

本書ではここから先、頻繁に ニューラルネットワーク(神経網) という言葉が出てくる。文系読者には未知の道具なので、ここで最低限の定義を置く。

大量の数値(パラメータと呼ぶ)を内部に抱えた計算装置で、入力 → 出力の変換規則を、データから自動で身につける仕組み。

学習」とは、データを見ながら 内部の数値(パラメータ)を少しずつ動かす 作業のことを指す。予測が外れたら、外れにくくなる方向にパラメータを動かす ── これを延々と繰り返す。本書では数式の中身に深入りしないが、「学習 = パラメータを少しずつ調整する作業」とだけ覚えておけば、以降の章はすべて読める。

補足

Word2Vec の内部もニューラルネットワークが使われている。「穴埋めや次単語予測のような小さなタスクで予測誤差を計算し、その誤差を埋め込みベクトル(パラメータの一部)に反映させていく」── これが具体的な学習の流れだ。

同じ発想が、第8〜9章で出てくる BERT や GPT の事前学習の根本にもなっている。「予測タスクで副産物として表現を学ぶ」── これが現代 NLP の通奏低音だ。

2.5 「王 − 男 + 女 ≈ 女王」の魔法

Word2Vec で学習した埋め込みを眺めると、人々を驚かせた現象が起きていた。

ベクトル演算 vec(王) − vec(男) + vec(女) ≈ vec(女王)

つまり「 から 男らしさ の方向を引き、女らしさ の方向を足すと、女王 にたどり着く」。 言葉の意味の引き算と足し算が、ベクトルの足し引きで模擬できてしまった。

同様に:

演算結果
vec(パリ) − vec(フランス) + vec(日本)≈ vec(東京)
vec(歩く) − vec(現在) + vec(過去)≈ vec(歩いた)
vec(Microsoft) − vec(Windows) + vec(iOS)≈ vec(Apple)

これが意味するのは:

埋め込み空間には、意味の「方向」が刻まれている。

「男性 → 女性」「首都 → 国」「現在形 → 過去形」のような 意味的な軸 が、空間内のある方向ベクトルとして実在する。 だから、ベクトルを足し引きするだけで、意味の関係を辿れる。

意味は、距離だけでなく 方向 にも宿っているのだ。

これが、本書冒頭で予告した「意味が幾何学になる」瞬間だ。 言語学者でなく機械が、テキストの大量読み込みだけで、こうした構造を勝手に取り出してくる。

2.6 埋め込みは「意味の地図」── でも欠点もある

ここまでで、トークンが空間の点になり、意味的に似たもの同士が近く、意味の関係が方向として刻まれていることを見た。

しかし、Word2Vec 系の埋め込みには 致命的な欠点 がある。それは:

欠点①: 1 トークン = 1 ベクトル (静的)

Word2Vec は「東京タワー」というトークンに、ただ 1 つの固定ベクトル を割り当てる。 たとえば次の 2 文:

英単語 bank には少なくとも 2 つの意味がある。 ところが Word2Vec の vec(bank)唯一のベクトル。両者の意味を区別できない。 これを 「静的埋め込み (static embedding)」 という。

欠点②: 文脈で意味が動かない

人間は文脈で意味を切り替える。「Apple の新製品」と「Apple とオレンジ」では、Apple が別物だ。 Word2Vec はそれをやれない。文の中で Apple がどんな顔をしているかに関わらず、いつも同じベクトル を返す。

これが Word2Vec の限界だった。 意味は文脈で動く生き物なのに、座標は固定 ── どうしても不器用だ。

2.7 「文脈で動く埋め込み」への扉

この欠点を埋めるために、次に登場するのが 文脈埋め込み (contextual embedding) という発想だ。

トークンに与えるベクトルを、その都度の文脈に応じて動的に計算する。

bank というトークンが「預金した」の隣にあるときと「川の」の隣にあるときで、別のベクトルを返す。 これにより、機械が初めて「文脈で意味が変わる」現象を正面から扱えるようになる。

この文脈埋め込みを実現する道具立てが、後の章で出てくる RNN、Transformer、BERT といったモデルだ。 次章では、文脈埋め込みの考え方そのものを、もう一段深く見ていく。

ここで一度、立ち止まって俯瞰しておこう。 本書の階段は「トークンに切る → ベクトルを与える → 文脈で動かす」の 3 段で構成されている。 ちょうど真ん中の踊り場まで来た。

2.8 この章の振り返り

次章のテーマは、「bank が銀行か土手か、機械はどう区別するのか」。 意味が文脈で動き出す瞬間の話だ。