Re Reference AI

インフラ

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

Vector Database

埋め込みベクトルを高速に類似検索できるよう設計されたデータベース

検索RAGベクトル検索

ひとことで言うと

意味の近い情報同士をすばやく探し出せるように作られたデータベース。

概要

ベクトルデータベースとは、テキストや画像等から生成された埋め込みベクトルを大量に格納し、クエリベクトルと類似度の高いベクトルを高速に検索できるよう設計されたデータベース。 従来のリレーショナルデータベースが完全一致や範囲検索を得意とするのに対し、ベクトルデータベースは高次元空間における近似最近傍探索(ANN, Approximate Nearest Neighbor)のアルゴリズムを用いることで、大規模なベクトル集合の中から高速に類似ベクトルを見つけ出せる。 RAGにおける文書検索や、レコメンデーション、画像・音声の類似検索など幅広い用途で利用され、PineconeWeaviateMilvusQdrant等の専用製品のほか、PostgreSQLの拡張機能pgvectorのように既存DBへ機能追加する形でも提供されている。

背景

埋め込みベクトルは数百〜数千次元の高次元データであり、全件との距離を厳密に計算する総当たり検索は件数が増えるほど計算コストが増大する。 ベクトルデータベースは、多少の精度低下を許容しつつ高速に近い結果を返す近似最近傍探索の技術を組み込むことで、大規模なベクトル集合に対する実用的な検索速度を実現するために発展した。

歴史

2017年以降: Facebook AI Research(現Meta AI)が近似最近傍探索ライブラリFaissを公開し、大規模ベクトル検索の基盤技術として広く使われるようになる。 2019年: Milvusがオープンソースのベクトルデータベースとして公開される。 2021年以降: PineconeWeaviateQdrant等、マネージド型・専用のベクトルデータベースサービスが相次いで登場し、RAGの普及とともに需要が拡大。

アーキテクチャ

ベクトルをHNSW(Hierarchical Navigable Small World)やIVF(Inverted File Index)といった近似最近傍探索用のインデックス構造で管理し、クエリベクトルとの近似的な類似度計算により候補を絞り込む。 多くの製品では、ベクトルに付随するメタデータによる絞り込み(メタデータフィルタ)や、キーワード検索との組み合わせ(ハイブリッド検索)もサポートする。

ワークフロー

テキスト等を埋め込みモデルでベクトル化 → ベクトルとメタデータをデータベースへ格納しインデックスを構築 → クエリを同様にベクトル化 → 近似最近傍探索により類似度の高い上位 k 件を取得 → メタデータで絞り込み。

コード例

Faissでベクトルのインデックスを作成し検索する

import faiss
import numpy as np

dim = 768
index = faiss.IndexFlatL2(dim)

# 埋め込みモデルで生成したベクトル群を登録
vectors = np.random.random((1000, dim)).astype("float32")
index.add(vectors)

# クエリベクトルに近い上位5件を検索
query = np.random.random((1, dim)).astype("float32")
distances, indices = index.search(query, k=5)

print(indices)

利点

  • 大規模なベクトル集合に対しても高速に類似検索を実行できる
  • メタデータによる絞り込みやハイブリッド検索等、検索の実用機能を統合的に提供する製品が多い
  • マネージド型サービスを使えば、インフラの構築・スケーリングを自前で行わずに済む

欠点

  • 近似最近傍探索は精度と速度のトレードオフがあり、常に厳密な最近傍が返るとは限らない
  • インデックスの構築・更新にコストがかかり、頻繁なデータ更新があるユースケースでは運用が複雑になる場合がある
  • 埋め込みモデルを変更すると、既存のベクトルを再生成しインデックスを作り直す必要がある

比較

  • RAGRAGでは、関連文書を検索する基盤としてベクトルデータベースがよく使われる
  • Embeddingベクトルデータベースが格納・検索する対象は、テキスト等から生成された埋め込みベクトル
  • 埋め込みモデルベクトルデータベースに格納するベクトルは、埋め込みモデルによって生成される
  • エージェントメモリ長期記憶は、埋め込みベクトルとしてベクトルデータベースに保存されることが多い
  • PineconePineconeはマネージド型ベクトルデータベースサービスの代表例の1つ
  • MilvusMilvusは大規模分散処理に対応したオープンソースのベクトルデータベースの1つ
  • pgvectorpgvectorは、専用のベクトルデータベースを別に構築せずPostgreSQL上でベクトル検索するための拡張機能

関連用語

RAGEmbedding埋め込みモデルハイブリッド検索エージェントメモリGraphRAGHNSWFaissコサイン類似度PineconeWeaviateMilvusQdrantChromapgvector

よくある質問

ベクトルデータベースは必ず必要?

小規模なデータであれば、通常の配列やライブラリ(Faiss等)によるインメモリ検索でも十分な場合がある。 データ量や更新頻度、運用要件が増すにつれて専用のベクトルデータベースが有効になる。

どのベクトルデータベースを選べばいい?

データ規模、マネージドサービスか自前運用かという運用形態、pgvectorのようにPostgreSQLの拡張として使える既存インフラとの親和性等を踏まえて選定するのが一般的。

参考文献

関連Zenn記事