ベクトルデータベースとは? 埋め込みの保存と検索の解説
ベクトルデータベースとは、高次元の埋め込みベクトルを類似度でインデックス化・検索するために構築されたストアで、セマンティック検索やretrieval-augmented generationを支えます。
現代のAIはテキスト、画像、その他のデータを埋め込み - 意味を捉えた長い数値のリスト - として表現します。似た項目を見つけるには、完全一致ではなく近さでこれらのベクトルを検索します。ベクトルデータベースはまさにそのために専用設計されています。数百万の埋め込みに対する高速な類似度検索です。
ベクトルデータベースとは
ベクトルデータベースは埋め込みベクトルを保存し、与えられたベクトルに最も近いものをクエリできるようにします。キーワードを一致させる代わりに、意味が最も近い項目を見つけます。例としてはPinecone、Weaviate、Qdrant、Milvus、そしてPostgreSQL向けのpgvectorがあります。
類似度検索の仕組み
クエリを保存されたすべてのベクトルと比較するのは大規模では遅すぎるため、ベクトルデータベースはHNSWのような近似最近傍 (ANN) インデックスを使います。これらはごくわずかな精度と引き換えに莫大な速度を得て、数百万のエントリの中から最も近いベクトルをミリ秒で返します。
何を支えるのか
ベクトルデータベースはセマンティック検索、レコメンデーション、重複排除、そしてretrieval-augmented generation (RAG) を支えます。RAGでは、LLMが回答する前に埋め込みの類似度で関連ドキュメントを取得します。これらは現代のAIアプリケーションスタックの中核となる要素です。
CIにおけるベクトルデータベース
データを埋め込みデータベースにクエリするコードは、サンプルベクトルでシードされたローカルまたは一時的なベクトルストアに対してCIでテストされます。
steps:
- run: docker compose up -d qdrant # ephemeral vector DB
- run: pytest tests/retrieval # seed vectors, assert top-kLatchkeyのメモ
テストインデックスをシードするための埋め込み生成はGPUで加速でき、かつ遅くなり得ます。Latchkeyでは、埋め込み重のテストをGPUや大型のランナーで実行し、埋め込みモデルとサンプルベクトルを実行間でキャッシュし、ベクトルストアのイメージやモデルの重みの一時的な取得をauto-retryします。
重要なポイント
- ベクトルデータベースは高次元の埋め込みを完全一致ではなく類似度でインデックス化・検索します。
- HNSWのような近似最近傍インデックスにより、大規模でも類似度検索を高速にします。
- ベクトルデータベースはセマンティック検索とRAGを支え、シードされた一時的なストアに対してCIでテストされます。