ベクトル検索と意味の近さ — 「意味」を座標にする
言葉や文章を数百次元のベクトル(埋め込み)に変えると、意味の近さが距離の近さになります。犬と猫は隣どうし、車は遠く。すると「意味で探す」ことが「近い点を探す」という幾何の問題に化ける — その地図の作り方から、億単位の点でも一瞬で近所を見つける近似最近傍探索(ANN)までを、動かして掴みます。
1. 意味を座標にする — 埋め込み空間
単語や文をベクトルに変換することを埋め込み(embedding)と呼びます。うまく学習された埋め込みでは、似た意味のものは近くに、無関係なものは遠くに配置されます。実際は数百次元ですが、下では平面に押し込んで眺めてみましょう。
光っている語から、意味の近い語へ線が伸びます。動物は動物どうし、乗り物は乗り物どうしで固まっているのが見えるはずです。
2. 意味の足し算・引き算 — ベクトル演算
埋め込みが面白いのは、意味の関係が「向き」として保存されることです。「男→女」という性別の差を表すベクトルを、王に足すと女王のあたりに着地します。有名な 王 − 男 + 女 ≈ 女王 です。
下では、同じ長さ・同じ向きの矢印(=意味の差)を平行移動させています。四角形(平行四辺形)ができ、計算結果が答えの語のすぐ近くに着地するのを見てください。
3. 意味で探す — 最近傍検索
検索したい文(クエリ)も同じ空間のベクトルにして、いちばん近い点たちを答えにする。これが意味検索(セマンティック検索)です。昔ながらのキーワード検索は「その単語を含む文」しか拾えないので、同義語や言い換えを取りこぼします。
クエリ点をドラッグして動かしてみてください。意味検索なら「犬」で探しても「イヌ」の文が一緒に見つかります。キーワード一致だけに切り替えると、いちばん近いはずの同義語を見逃すのが分かります。
4. 全部と比べない工夫 — 近似最近傍探索(ANN)
ここで問題。文書が10億件あったら、クエリと全部の距離を測るのは重すぎます(O(N))。そこで、正確さを少しだけ諦めて桁違いに速くするのが近似最近傍探索(ANN: Approximate Nearest Neighbor)です。空間をあらかじめ格子やグラフで区切っておき、クエリの近所の区画だけを調べます。
下で、格子の細かさを変えてみてください。細かくするほど調べる点は減って速くなりますが、ときどき本当の最近傍を取りこぼすのが分かります。この速さと正確さの取引が ANN の本質です。
5. まとめ
- 埋め込み:言葉や文をベクトルにすると、意味の近さが距離(コサイン類似度)になる。
- ベクトル演算:意味の関係は「向き」として保存され、足し引きで類推できることがある(王−男+女≈女王)。
- 意味検索:クエリの最近傍を答えにする。キーワード検索と違い同義語・言い換えを拾える(RAG の心臓部)。
- 近似最近傍探索(ANN):全部と比べず近所だけ調べ、正確さと引き換えに桁違いの速さを得る。