Spanner ベクトル検索の概要

このページでは、ベクトル検索と Spanner での動作について説明します。

ベクトル検索は、高次元ベクトル データに対するセマンティック検索と類似性マッチングを可能にする、高性能な組み込み機能です。Spanner は、ベクトル エンベディングをトランザクション データベース内に直接保存してインデックス登録することで、個別のベクトル データベースや複雑な ETL パイプラインを不要にします。

主なコンセプト

このセクションでは、ベクトル検索の次の主なコンセプトについて説明します。

  • ベクトル エンベディング
  • 検索方法(KNN と ANN)
  • 距離関数

ベクトル エンベディング

ベクトル エンベディングは、非構造化データの高次元の数値表現です。これらは、ML モデルを使用して非構造化データから生成されます。たとえば、Vertex AI Text Embedding API を使用して、Spanner に保存されているデータのテキスト エンベディングを生成、保存、更新できます。

検索方法

Spanner は、類似するベクトルを見つけるための次の 2 つの方法をサポートしています。

  • k 近傍法(KNN): クエリとデータセット内のすべてのベクトルの距離を計算して、正確な検索を実行します。再現率の精度は高くなりますが、大規模なデータセットでは計算コストが高くなります。

  • 近似最近傍(ANN): ベクトル インデックス(Google の ScaNN アルゴリズムに基づく)を使用して、多数のベクトルから一致するものをすばやく見つけます。精度(再現率)が若干低下する代わりに、速度とスケーラビリティが向上します。

主な機能

  • スケーラビリティ: パーティショニングされていない ANN 検索では数十億のベクトル、パーティショニングされた KNN ワークロードでは数兆のベクトルをサポートします。

  • 統合 AI データベースとエンジン: GoogleSQL ML.PREDICT 関数または PostgreSQL spanner.ML_PREDICT_ROW 関数を使用して、クエリフロー内で Vertex AI モデルからエンベディングを直接生成します。

  • インライン フィルタリング: ベクトル検索と構造化メタデータ フィルタ(「カテゴリが靴で価格が 100 未満の類似画像を検索」など)を効率的に組み合わせ、パフォーマンスを損なうことなく実行します。

  • LangChain インテグレーション: LangChain の組み込みサポートにより、Spanner をベクトル ストアとして使用して検索拡張生成(RAG)アプリケーションを構築できます。

ハイブリッド検索の機能

ベクトル検索は、Spanner の他のデータ機能と組み合わせることで、その効果を最大限に発揮します。

組み合わせ メリット
SQL フィルタリングを使用したベクトル検索 ベクトル検索とフィルタを効率的に組み合わせます(例: 「カテゴリが靴で価格が 100 未満の類似画像を検索する」)。
ベクトル検索 + 全文検索 Reciprocal Rank Fusion(RRF)を使用してセマンティック類似性とキーワードの精度を組み合わせ、検索の関連性を高めます。
ベクトル + グラフ ベクトル検索を使用して、プロパティ グラフ内の関連するエントリ ポイント(ノード)を見つけ、複雑な関係をトラバースします。

次のステップ