Databricks Vector Search
この記事では、Databricks のベクトル データベース ソリューションである Databricks Vector Search の概要と、その概要と仕組みについて説明します。
Databricks Vector Search とは
Databricks Vector Search は、Databricks Data Intelligence Platform に組み込まれ、ガバナンスおよび生産性ツールと統合されたベクター データベースです。 ベクターデータベースは、埋め込みの保存と検索に最適化されたデータベースです。 埋め込みは、データ (通常はテキストまたは画像データ) のセマンティック コンテンツの数学的表現です。 埋め込みは大規模言語モデルによって生成され、互いに類似したドキュメントや画像を見つけることに依存する多くの GenAI アプリケーションの重要なコンポーネントです。 例としては、RAGシステム、レコメンダーシステム、画像およびビデオ認識などがあります。
Vector Searchでは、 Deltaテーブルからベクトル検索インデックスを作成します。 インデックスには、メタデータを含む埋め込みデータが含まれます。 その後、REST API を使用してインデックスをクエリし、最も類似したベクトルを特定し、関連するドキュメントを返すことができます。 基礎となるDeltaテーブルが更新されたときに自動的に同期するようにインデックスを構造化できます。
Databricks Vector Search は、近似最近傍検索に Hierarchical Navigable Small World (HNSW) アルゴリズムを使用し、埋め込みベクトルの類似性を測定するために L2 距離メトリクスを使用します。 コサイン類似度を使用したい場合は、データポイントの埋め込みをVector Searchに入力する前に正規化する必要があります。 データポイントを正規化すると、L2距離によるランキングとコサイン類似度によるランキングは同じになります。
Vector Searchどのように機能しますか?
Databricks でベクター データベースを作成するには、まずベクター埋め込みを提供する方法を決定する必要があります。 Databricks は次の 3 つのオプションをサポートしています。
オプション 1テキスト形式のデータを含むソース Delta テーブルを提供します。 Databricks は、指定したモデルを使用して埋め込みを計算し、オプションで埋め込みを Unity Catalog のテーブルに保存します。 Deltaテーブルが更新されても、インデックスはDeltaテーブルと同期されたままになります。
次の図は、このプロセスを示しています。
クエリの埋め込みを計算します。 クエリにはメタデータ フィルターを含めることができます。
類似検索を実行して、最も関連性の高いドキュメントを特定します。
最も関連性の高いドキュメントを返し、クエリに追加します。
オプション 2事前に計算された埋め込みを含むソース Delta テーブルを提供します。 Deltaテーブルが更新されても、インデックスはDeltaテーブルと同期されたままになります。
次の図は、このプロセスを示しています。
クエリは埋め込みで構成され、メタデータ フィルターを含めることができます。
類似検索を実行して、最も関連性の高いドキュメントを特定します。 最も関連性の高いドキュメントを返し、クエリに追加します。
オプション 3事前に計算された埋め込みを含むソース Delta テーブルを提供します。 Delta テーブルが更新されても自動同期は行われません。 埋め込みテーブルが変更された場合は、REST API を使用してインデックスを手動で更新する必要があります。
次の図はプロセスを示しています。これはオプション 2 と同じですが、 Deltaテーブルが変更されてもベクトル インデックスが自動的に更新されない点が異なります。
Vector Searchの設定方法
Databricks Vector Search を使用するには、以下を作成する必要があります。
ベクトル検索エンドポイント。 このエンドポイントは、ベクトル検索インデックスを提供します。 REST API または SDK を使用して、エンドポイントのクエリと更新を行うことができます。 エンドポイントは、インデックスのサイズまたはライブラリ リクエストの数をサポートするために自動的にスケーリングされます。 手順については、「 ベクトル検索エンドポイントの作成 」を参照してください。
ベクトル検索インデックス。 ベクトル検索インデックスはDeltaテーブルから作成され、リアルタイムの近似最近傍検索を提供するように最適化されています。 検索の目的は、クエリに類似したドキュメントを識別することです。 ベクトル検索インデックスは Unity Catalog に表示され、 Unity Catalogによって管理されます。 手順については、 ベクトル検索インデックスの作成 を参照してください。
さらに、Databricks で埋め込みをコンピュートすることを選択した場合は、埋め込みモデルのモデルサービング エンドポイントも作成する必要があります。 手順については、 「エンドポイントを提供する基盤モデルの作成」を参照してください。
モデルビングサー エンドポイントをクエリするには、REST API または Python SDK を使用します。 クエリでは、 Deltaテーブルの任意の列に基づいてフィルターを定義できます。 詳細については、 「クエリでフィルターを使用する」 、 「API リファレンス」 、または「 Python SDK リファレンス」を参照してください。
要件
Unity Catalog が有効なワークスペース。
サーバレス コンピュートが有効です。
ソーステーブルでは変更データフィードが有効になっている必要があります。
インデックスを作成するためのカタログ スキーマに対する CREATE TABLE 権限。
データ保護と認証
Databricks では、データを保護するために次のセキュリティ制御が実装されています。
Vector Searchに対するすべての顧客要求は、論理的に分離され、認証され、承認されます。
Databricks ベクター検索では、保存データ (AES-256) と転送データ (TLS 1.2+) がすべて暗号化されます。
Databricks Vector Search では、次の 2 つの認証モードがサポートされています。
パーソナル アクセス ウイルス - パーソナル アクセス ウイルスを使用して、Vector Search で認証することができます。 「個人アクセス認証トークン」を参照してください。 ノートブック環境で SDK を使用する場合、認証用の PAT トークンが自動的に生成されます。
サービスプリンシパル トークン - 管理者は サービスプリンシパル トークン を生成し、それをSDKまたはAPIに渡すことができます。 サービスプリンシパルの使用を参照してください。 本番運用のユースケースでは、 Databricksサービス プリンシパル トークンの使用を推奨しています。
Vector Searchの使用状況とコストを監視する
課金利用システムテーブルを使用すると、ベクター検索インデックスとエンドポイントに関連する使用量とコストを監視できます。 クエリの例を次に示します。
SELECT *
FROM system.billing.usage
WHERE billing_origin_product = 'VECTOR_SEARCH'
AND usage_metadata.endpoint_name IS NOT NULL
課金利用システムテーブルの内容の詳細については、 「課金利用システムテーブルリファレンス」を参照してください。 追加のクエリは次のサンプルノートブックにあります。
リソースとデータのサイズ制限
次の表は、ベクトル検索エンドポイントとインデックスのリソースとデータサイズの制限をまとめたものです。
リソース |
粒 度 |
制限 |
---|---|---|
ベクトル検索エンドポイント |
ワークスペースごと |
100 |
埋め込み |
エンドポイントごと |
100,000,000 |
埋め込みサイズ |
インデックスごと |
4096 |
索引 |
エンドポイントごと |
20 |
列 |
インデックスごと |
20 |
列 |
サポートされている型: バイト、short、integer、long、float、double、 Boolean 、文字列、タイムスタンプ、日付 |
|
メタデータ フィールド |
インデックスごと |
20 |
インデックス名 |
インデックスごと |
128 文字以内 |
ベクトル検索インデックスの作成と更新には、次の制限が適用されます。
リソース |
粒 度 |
制限 |
---|---|---|
Delta Sync Index の行サイズ |
インデックスごと |
100KBの |
Delta Sync インデックスのソース列サイズの埋め込み |
インデックスごと |
32764バイト |
Direct Vector インデックスの一括更新/挿入要求のサイズ制限 |
インデックスごと |
10メガバイト |
Direct Vector インデックスの一括削除要求サイズ制限 |
インデックスごと |
10メガバイト |
ベクトル検索のクエリ API には、次の制限が適用されます。
リソース |
粒 度 |
制限 |
---|---|---|
クエリのテキストの長さ |
クエリごと |
32764 |
返される結果の最大数 |
クエリごと |
10,000 |