Mosaic AI Vector Search
この記事では、Databricks のベクター データベース ソリューションである Mosaic AI Vector Search の概要と、それが何であるか、どのように機能するかについて説明します。
Mosaic AI Vector Search とは何ですか?
Mosaic AI Vector Search は、Databricks データ インテリジェンス プラットフォームに組み込まれ、ガバナンスおよび生産性ツールと統合されたベクター データベースです。 ベクターデータベースは、埋め込みの保存と検索に最適化されたデータベースです。 埋め込みは、データ (通常はテキストまたは画像データ) のセマンティック コンテンツの数学的表現です。 埋め込みは大規模言語モデルによって生成され、互いに類似したドキュメントや画像を見つけることに依存する多くの GenAI アプリケーションの重要なコンポーネントです。 例としては、RAGシステム、レコメンダーシステム、画像およびビデオ認識などがあります。
Mosaic AI Vector Searchを使用すると、 Deltaテーブルから検索インデックスを作成できます。 インデックスには、メタデータを含む埋め込みデータが含まれます。 次に、REST API を使用してインデックスをクエリし、最も類似したベクトルを識別して、関連するドキュメントを返すことができます。 基になる Delta テーブルが更新されたときに自動的に同期するようにインデックスを構造化できます。
Mosaic AI Vector Search はどのように機能しますか?
Mosaic AI Vector Search 、近似最近傍検索に Hierarchical Navigable Small World (HNSW) アルゴリズムを使用し、埋め込みベクトルの類似性を測定するために L2 距離メトリックを使用します。 コサイン類似度を使用する場合は、データポイントの埋め込みをベクトル検索に渡す前に正規化する必要があります。 データポイントが正規化されると、L2 距離によって生成されるランキングは、コサイン類似度によって生成されるランキングと同じになります。
Mosaic AI Vector Search は、ベクターベースの埋め込み検索と従来のキーワードベースの検索手法を組み合わせたハイブリッド キーワード類似性検索もサポートしています。 このアプローチでは、クエリ内の単語と完全に一致すると同時に、ベクトルベースの類似性検索を使用して、クエリのセマンティックな関係とコンテキストをキャプチャします。
これら 2 つの手法を統合することで、ハイブリッド キーワード類似検索は、正確なキーワードだけでなく、概念的に類似したキーワードを含むドキュメントも取得し、より包括的で関連性の高い検索結果を提供します。 この方法は、純粋な類似性検索には適さない SKU や識別子などの固有のキーワードがソース データに含まれている RAG アプリケーションで特に役立ちます。
ハイブリッド検索は パブリック プレビュー段階です。 APIの詳細については、 Python SDKリファレンスおよびクエリ検索エンドポイントを参照してください。
キーワード検索アルゴリズム
関連性スコアは、 Okapi BM25 を使用して計算されます。 テキストまたは文字列形式のソース テキスト埋め込みおよびメタデータ列を含む、すべてのテキストまたは文字列列が検索されます。 トークン化関数は、単語の境界で分割し、句読点を削除し、すべてのテキストを小文字に変換します。
ベクトルエンべディングを提供するためのオプション
Databricks でベクター データベースを作成するには、まずベクター埋め込みを提供する方法を決定する必要があります。 Databricks は次の 3 つのオプションをサポートしています。
オプション 1テキスト形式のデータを含むソース Delta テーブルを提供します。 Databricks は、指定したモデルを使用して埋め込みを計算し、オプションで埋め込みを Unity Catalog のテーブルに保存します。 Deltaテーブルが更新されても、インデックスはDeltaテーブルと同期されたままになります。
次の図は、このプロセスを示しています。
クエリの埋め込みを計算します。 クエリにはメタデータ フィルターを含めることができます。
類似検索を実行して、最も関連性の高いドキュメントを特定します。
最も関連性の高いドキュメントを返し、クエリに追加します。
オプション 2事前に計算された埋め込みを含むソース Delta テーブルを提供します。 Deltaテーブルが更新されても、インデックスはDeltaテーブルと同期されたままになります。
次の図は、このプロセスを示しています。
クエリは埋め込みで構成され、メタデータ フィルターを含めることができます。
類似検索を実行して、最も関連性の高いドキュメントを特定します。 最も関連性の高いドキュメントを返し、クエリに追加します。
オプション 3 (直接アクセス)事前に計算された埋め込みを含むソース Delta テーブルを提供します。 Delta テーブルが更新されても自動同期は行われません。 埋め込みテーブルが変更された場合は、REST API を使用してインデックスを手動で更新する必要があります。
次の図はプロセスを示しています。これはオプション 2 と同じですが、 Deltaテーブルが変更されてもベクトル インデックスが自動的に更新されない点が異なります。
Mosaic AI Vector Searchの設定方法
Mosaic AI Vector Search を使用するには、以下を作成する必要があります。
ベクトル検索エンドポイント。 このエンドポイントは、ベクトル検索インデックスを提供します。 REST API または SDK を使用して、エンドポイントのクエリと更新を行うことができます。 エンドポイントは、インデックスのサイズまたはライブラリ リクエストの数をサポートするために自動的にスケーリングされます。 手順については、「 ベクトル検索エンドポイントの作成 」を参照してください。
ベクトル検索インデックス。 ベクトル検索インデックスはDeltaテーブルから作成され、リアルタイムの近似最近傍検索を提供するように最適化されています。 検索の目的は、クエリに類似したドキュメントを識別することです。 ベクトル検索インデックスは Unity Catalog に表示され、 Unity Catalogによって管理されます。 手順については、 ベクトル検索インデックスの作成 を参照してください。
さらに、 Databricksに埋め込みを許可する場合は、事前構成された基盤モデルAPIsエンドポイントを使用するか、モデル サービス エンドポイントを作成して、選択した埋め込みモデルを提供することができます。 手順については、「トークン単位の従量課金基盤モデルAPIsまたはAIモデル生成サービス エンドポイントの作成」を参照してください。
モデルビングサー エンドポイントをクエリするには、REST API または Python SDK を使用します。 クエリでは、 Deltaテーブルの任意の列に基づいてフィルターを定義できます。 詳細については、 「クエリでフィルターを使用する」 、 「API リファレンス」 、または「 Python SDK リファレンス」を参照してください。
要件
Unity Catalog が有効なワークスペース。
サーバレス コンピュートが有効です。
ソーステーブルでは変更データフィードが有効になっている必要があります。
インデックスを作成するためのカタログ スキーマに対する CREATE TABLE 権限。
データ保護と認証
Databricks では、データを保護するために次のセキュリティ制御が実装されています。
Mosaic AI Vector Search へのすべての顧客リクエストは、論理的に分離され、認証され、承認されます。
Mosaic AI Vector Search は、保存中のすべてのデータ (AES-256) と転送中のすべてのデータ (TLS 1.2+) を暗号化します。
Mosaic AI Vector Search は、次の 2 つの認証モードをサポートしています。
個人アクセストークン - 個人アクセストークンを使用して、 Mosaic AI Vector Searchで認証できます。 個人アクセス認証トークンを参照してください。 ノートブック環境で SDK を使用すると、認証用の PAT トークンが自動的に生成されます。
サービスプリンシパル トークン - 管理者は サービスプリンシパル トークン を生成し、それをSDKまたはAPIに渡すことができます。 サービスプリンシパルの使用を参照してください。 本番運用のユースケースでは、 Databricksサービス プリンシパル トークンの使用を推奨しています。
顧客管理キー (CMK) は、 2024 年 5 月 8 日以降に作成されたエンドポイントでサポートされます。
使用状況とコストの監視
課金利用システムテーブルを使用すると、ベクター検索インデックスとエンドポイントに関連する使用量とコストを監視できます。 クエリの例を次に示します。
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 |