ベクトル検索と意味の近さ — 「意味」を座標にする

言葉や文章を数百次元のベクトル(埋め込み)に変えると、意味の近さが距離の近さになります。犬と猫は隣どうし、車は遠く。すると「意味で探す」ことが「近い点を探す」という幾何の問題に化ける — その地図の作り方から、億単位の点でも一瞬で近所を見つける近似最近傍探索(ANN)までを、動かして掴みます。

1. 意味を座標にする — 埋め込み空間

単語や文をベクトルに変換することを埋め込み(embedding)と呼びます。うまく学習された埋め込みでは、似た意味のものは近くに、無関係なものは遠くに配置されます。実際は数百次元ですが、下では平面に押し込んで眺めてみましょう。

光っている語から、意味の近い語へ線が伸びます。動物は動物どうし、乗り物は乗り物どうしで固まっているのが見えるはずです。

意味の地図 — 近いほど意味が似ている
光る語=いま注目している語(自動で順に切り替わる)。伸びる線=その語に意味が近い上位の語。橙=動物・青=乗り物・緑=果物。同じ仲間どうしが自然と近くに集まります。
POINT — 「意味が近い」=「ベクトルが近い」 埋め込みの世界では、意味の類似度をベクトルの向きの近さで測るのが定番。よく使うのがコサイン類似度で、2つのベクトルのなす角が小さい(同じ向き)ほど 1 に近づく。長さではなく向きを見るので、文章の長短に左右されにくい。
cos(θ) = (a · b) / (|a| |b|) a・b はベクトルの内積。値は −1〜1 で、1 なら同じ向き(意味がそっくり)、0 なら無関係、−1 なら正反対

2. 意味の足し算・引き算 — ベクトル演算

埋め込みが面白いのは、意味の関係が「向き」として保存されることです。「男→女」という性別の差を表すベクトルを、王に足すと女王のあたりに着地します。有名な 王 − 男 + 女 ≈ 女王 です。

下では、同じ長さ・同じ向きの矢印(=意味の差)を平行移動させています。四角形(平行四辺形)ができ、計算結果が答えの語のすぐ近くに着地するのを見てください。

意味のベクトル演算 — 関係は平行移動できる
下の辺の矢印=2語の意味の差(例: 男→女=性別)。同じ矢印を上の語にコピーして平行移動すると、その先に答えの語が待っています。○=計算結果、破線の丸=答えの語。ぴったりではなく「≈(ほぼ一致)」なのがポイント。
注意 — きれいな類推はいつも成り立つわけではない 「王−男+女≈女王」は分かりやすい成功例だが、すべての関係がこう素直に線形で表せるわけではない。埋め込みは学習データの統計を映す鏡なので、データに含まれる偏り(バイアス)まで座標に焼き込まれる。類推が「それっぽい」答えを出しても、鵜呑みにせず用途に応じて検証する姿勢が要る。

3. 意味で探す — 最近傍検索

検索したい文(クエリ)も同じ空間のベクトルにして、いちばん近い点たちを答えにする。これが意味検索(セマンティック検索)です。昔ながらのキーワード検索は「その単語を含む文」しか拾えないので、同義語や言い換えを取りこぼします。

クエリ点をドラッグして動かしてみてください。意味検索なら「犬」で探しても「イヌ」の文が一緒に見つかります。キーワード一致だけに切り替えると、いちばん近いはずの同義語を見逃すのが分かります。

意味検索 vs キーワード検索 — 同義語を拾えるか
◆=検索クエリ「犬」(ドラッグで移動)。破線の円=k 番目までの距離。強調された点=ヒットした文。意味検索は距離が近い順に拾うので「イヌ」も見つかるが、キーワード検索は文字が一致する文だけなので同義語を見逃す。
POINT — RAG の心臓部はこの検索 大規模言語モデルに外部知識を渡すRAG(検索拡張生成)は、質問をベクトル化して知識ベースの近い文書を引き、それを文脈に入れて答えさせる。つまり「意味で近いものを探す」というこのレッスンの技術が、幻覚を抑える最新手法の土台になっている。

4. 全部と比べない工夫 — 近似最近傍探索(ANN)

ここで問題。文書が10億件あったら、クエリと全部の距離を測るのは重すぎます(O(N))。そこで、正確さを少しだけ諦めて桁違いに速くするのが近似最近傍探索(ANN: Approximate Nearest Neighbor)です。空間をあらかじめ格子やグラフで区切っておき、クエリの近所の区画だけを調べます。

下で、格子の細かさを変えてみてください。細かくするほど調べる点は減って速くなりますが、ときどき本当の最近傍を取りこぼすのが分かります。この速さと正確さの取引が ANN の本質です。

近似最近傍探索 — 近所の区画だけ調べる
◆=クエリ(ドラッグで移動)。明るい区画=実際に調べるセル、明るい点=比較対象。白リング=ANNが見つけた最近傍、赤リング=本当の最近傍。両者がズレたら「取りこぼし」=近似の代償。格子を細かくするほど比較数は減り、代わりに取りこぼしが増えます。
全探索 O(N) → ANN 実質 O(log N)〜O(1) 近く N=データ点の数。ANN は前処理(索引作り)に手間をかける代わり、1回の検索を劇的に速くする

5. まとめ

一歩先へ — 実際の ANN とベクトルDB 実務では格子より賢い索引が使われる。近いものどうしをリンクで結んだグラフを辿るHNSW、空間を代表点でクラスタ分けするIVF、ベクトルを圧縮して省メモリにする積量子化(PQ) などだ。これらを束ねたベクトルデータベース(Faiss・pgvector・各種クラウドサービス)が、検索・推薦・RAG を支えている。次のレッスンでは、キーワード側の王道である転置索引と BM25 を見て、意味検索と使い分ける勘所を掴む。