ベクトルデータベース

ベクトルデータベースとは

ベクトルデータベースは、[[埋め込みとベクトル検索]] で作られるベクトル(数百〜数千個の数値の並び)を保存し、「意味が近いもの」を高速に探すためのデータベースです。

普通のデータベースが「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] 保存時と検索時は同じ埋め込みモデルを使う必要がある
- [ ] ベクトルは個人情報とは無関係なので管理は不要
解説: モデルが違うとベクトル空間がそろわず比較できません。モデル変更時は全件を作り直します。