【エンジニア向け】AIはどうやって「似た文章」を探しているのか?ベクトル検索の数学的仕組み
はじめに
「Vector Databaseに入れたら検索できる」というのは魔法のように聞こえますが、裏側のロジックは純粋な高校数学の世界です。
なぜAIは「リンゴ」と「アップル」が似ていると判断できるのか? その計算メカニズムを知ることは、検索精度のチューニングやトラブルシューティングにおいて大きな武器になります。
テキストを座標空間にプロットする
1536次元(OpenAI Embeddingsの場合)という高次元空間を想像するのは無理ですが、2次元(x, y)なら簡単です。
例えば「果物」軸と「色の赤さ」軸があるとします。
- リンゴ: (0.9, 0.8)
- イチゴ: (0.8, 0.9)
- バナナ: (0.9, 0.1)
グラフ上で見ると、リンゴとイチゴの点(座標)は近くにあり、バナナは少し離れています。これが「意味の近さ」の正体です。
コサイン類似度(Cosine Similarity)
ベクトル検索で最もよく使われる指標です。これは2つのベクトルの「距離」ではなく「角度」を見ます。
0度なら完全に一致(1.0)、90度なら無関係(0.0)、180度なら正反対(-1.0)。これを使うと、文章の長さに関係なく「方向性(意味)」の一致度を測ることができます。
ユークリッド距離と内積の違い
- ユークリッド距離 (L2): 2点間の直線距離。値が小さいほど似ている。
- 内積 (Dot Product): ベクトル同士の掛け合わせ。ベクトルの長さが正規化(長さ=1に揃える)されていれば、コサイン類似度と同じ結果になります。計算が高速なので、大規模検索ではよく使われます。
高速化技術:ANN(近似最近傍探索)
100万件のデータ全てに対して、毎回コサイン類似度を計算していたら日が暮れてしまいます。そこで登場するのがANN (Approximate Nearest Neighbor) です。
HNSW(Hierarchical Navigable Small World)などのアルゴリズムを使い、「厳密に一番近いもの」ではなく「多分一番近いもの」を爆速で見つけ出します。精度のわずかな犠牲と引き換えに、検索速度を何千倍にも高める技術です。
まとめ
ベクトル検索の中身は、回転行列や内積計算といった線形代数の塊です。ライブラリを使うだけなら知らなくても動きますが、知っていれば「なぜヒットしないのか」を論理的に考察できるようになります。
次回は、テキストだけでなく画像や音声も一緒に検索できる未来技術、「マルチモーダルRAG」について解説します。
コメント
コメントを投稿