ベクトルデータベース
ベクトルデータベースとは
ベクトルデータベースは、[[埋め込みとベクトル検索]] で作られるベクトル(数百〜数千個の数値の並び)を保存し、「意味が近いもの」を高速に探すためのデータベースです。
普通のデータベースが「IDが一致する行」「名前に『田中』を含む行」を探すのに対し、ベクトルデータベースは「この文章と意味が似ている文章トップ5」を返します。キーワードが一言も一致しなくても、意味が近ければヒットするのが最大の特徴です。
普通のデータベースとの違い
| リレーショナルDB | ベクトルDB | |
|---|---|---|
| 探し方 | 値の完全一致・範囲・部分一致 | ベクトル同士の距離が近い順 |
| 結果 | 条件に合う行すべて | 近い順に上位N件 |
| インデックス | B-tree など([[データベースインデックス]]) | HNSW・IVF などの近似最近傍探索 |
| 得意なこと | 正確な集計・トランザクション | 意味の近さによる検索・推薦 |
分類としては [[NoSQL]] の仲間で、「厳密な表形式より、特定の検索用途に特化する」という発想が共通しています。
近い・遠いをどう測るか
ベクトルの近さは距離や角度で測ります。代表的なのは次の3つです。
- コサイン類似度 — ベクトルの向きの近さ。文章の意味の比較で最もよく使われる
- ユークリッド距離 — 空間上の直線距離
- 内積 — 向きと大きさをまとめて見る
近似最近傍探索(ANN)
100万件のベクトルすべてと距離を計算していては間に合いません。そこで近似最近傍探索(ANN)を使い、「厳密に一番近いもの」ではなく「ほぼ確実に近いもの」を高速に返します。
HNSW などのアルゴリズムが専用の索引を作る点は、[[データベースインデックス]] が全件走査を避ける発想とまったく同じです。精度を上げれば遅くなり、速度を上げれば取りこぼしが増える、というトレードオフがあります。
実務での使い方
- メタデータフィルタ: ベクトルと一緒に「部署」「公開日」などを保存し、絞り込んでから類似検索する
- ハイブリッド検索: [[全文検索]] によるキーワード一致の結果とベクトル検索の結果を組み合わせ、固有名詞の取りこぼしを防ぐ
- 選択肢: 専用製品(Pinecone、Qdrant、Weaviate など)のほか、[[PostgreSQL]] に拡張機能を入れて使う方法もある
小規模なら既存のDBの拡張で十分なことも多く、いきなり専用製品を導入する必要はありません。
初学者向けポイント
- 検索する文章と保存した文章は、同じ埋め込みモデルで変換する必要がある。モデルを変えたら全件作り直し
- ベクトルは元の文章に戻せないが、意味は保持している。個人情報を含む文章の扱いは元データと同等に注意する
- 「必ず正解が出る」検索ではない。上位N件に入らなければ後段のAIには届かない
関連技術とのつながり
- [[埋め込みとベクトル検索]] — 保存するベクトルを作る工程
- [[RAG(検索拡張生成)]] — 社内文書を検索して回答に使う仕組みの中核ストア
- [[NoSQL]] — 用途特化型データベースという同じ系譜
- [[データベースインデックス]] — 全件走査を避けるという共通の考え方
Q: ベクトルデータベースが得意な検索はどれ?
- [ ] 指定したIDの行を1件だけ正確に取り出す
- [x] 入力した文章と意味が近い文章を上位N件返す
- [ ] 売上を月ごとに合計する
解説: ベクトル同士の距離を使い、意味の近さで上位N件を返すのがベクトルDBの役割です。
Q: 近似最近傍探索(ANN)を使う理由はどれ?
- [x] 全件と距離を計算すると遅すぎるため、精度を少し譲って高速化する
- [ ] ベクトルを元の文章に戻すため
- [ ] トランザクションを保証するため
解説: 厳密な全件比較を避け、ほぼ近いものを高速に返すのがANNです。精度と速度はトレードオフになります。
Q: ベクトル検索で注意すべき点として正しいのはどれ?
- [ ] 保存時と検索時で別の埋め込みモデルを使うと精度が上がる
- [x] 保存時と検索時は同じ埋め込みモデルを使う必要がある
- [ ] ベクトルは個人情報とは無関係なので管理は不要
解説: モデルが違うとベクトル空間がそろわず比較できません。モデル変更時は全件を作り直します。