Mosaic AI ベクトル検索
この記事では、Databricks のベクトル データベース ソリューションである Mosaic AI ベクトル検索について、その概要と仕組みなどを説明します。
Mosaic AI ベクトル検索とは
Mosaic AI ベクトル検索は、Databricks Data Intelligence プラットフォームに組み込まれ、そのガバナンスおよび生産性ツールと統合されたベクトル データベースです。 ベクトル データベースは、埋め込みを保存および取得するために最適化されたデータベースです。 埋め込みとは、データ (通常はテキストまたは画像データ) のセマンティック コンテンツの数学的表現です。 埋め込みは大規模言語モデルによって生成され、互いに類似したドキュメントまたは画像の検索に依存する、多くの GenAI アプリケーションの重要なコンポーネントです。 たとえば、RAG システム、レコメンダー システム、画像およびビデオ認識などがあります。
モザイク AI ベクター検索では、デルタ tableからベクター検索インデックスを作成します。 そのインデックスには、メタデータを含む埋め込みデータが含まれます。 それから、REST API を使用してそのインデックスにクエリを実行し、最も類似したベクトルを特定して、関連付けられているドキュメントを返すことができます。 基になる Delta tableが更新された際に自動的にsyncするようにインデックスを構築することができます。
モザイク AI ベクター検索では、次の機能がサポートされます。
- ハイブリッド キーワード類似性検索。
- フィルター処理。
- ベクトル検索エンドポイントを管理するためのアクセス制御リスト (ACL。
- 選択したcolumnsのみをSyncする。
- 生成された埋め込みの保存とsync。
モザイク AI ベクター検索のしくみ
Mosaic AI ベクトル検索では、近似ニアレストネイバー探索に Hierarchical Navigable Small World (HNSW) アルゴリズムを使用し、埋め込みベクトルの類似性を測定するために L2 距離による距離メトリックを使用します。 コサイン類似度を使用したい場合は、データポイント埋め込みをベクトル検索にフィードする前に正規化する必要があります。 データ ポイントが正規化されると、L2 距離によって生成されるランク付けは、コサイン類似度によって生成されるランク付けと同じになります。
Mosaic AI ベクトル検索では、ベクトルベースの埋め込み検索と従来のキーワードベースの検索手法を組み合わせたハイブリッド キーワード類似性検索もサポートされています。 この手法は、クエリ内の正確な単語と一致させると同時に、ベクトルベースの類似性検索を使用して、クエリのセマンティック リレーションシップとコンテキストをキャプチャします。
ハイブリッド キーワード類似性検索では、これら 2 つの手法を統合することで、正確なキーワードだけでなく、概念的に似ているものも含まれるドキュメントを取得し、より包括的で関連性の高い検索結果を提供します。 この方法は、ソース データに SKU や識別子などの一意のキーワードがあり、純粋な類似性検索に適していない where RAG アプリケーションで特に便利です。
API の詳細については、Python SDK リファレンスと「ベクトル検索エンドポイントにクエリを実行する」を参照してください。
類似性検索の計算
類似性検索の計算では、次の式を使用します。
wheredist
は、クエリ q
とインデックス エントリ x
間のユークリッド距離です。
キーワード検索アルゴリズム
関連性スコアは、Okapi BM25を 使用して算出されます。 ソース テキストの埋め込みと、テキストまたは文字列形式のメタデータ columns を含め、すべてのテキストまたは文字列 columns が検索されます。 トークン化関数は、すべてのテキストを単語の境界で分割し、句読点を削除し、小文字に変換します。
類似性検索とキーワード検索を組み合わせる方法
類似性検索とキーワード検索結果は、Reciprocal Rank Fusion (RRF) 関数を使用して組み合わされます。
RRF はスコアを使用して、各ドキュメントを各手法で再スコアリングします。
上記の数式では、ランクは 0 から始まり、各ドキュメントのスコアを合計し、スコアが最も高いドキュメントを返します。
rrf_param
は、上位と下位のドキュメントの相対的な重要度を制御します。 文献に基づいて、rrf_param
は set から60です。
スコアは、次の数式を使用して、最高スコアが 1、最低スコアが 0 になるように正規化されます。
ベクター埋め込みを提供するためのオプション
Databricks 内でベクトル データベースを作成するには、まずベクトル埋め込みを提供する方法を決定する必要があります。 Databricks では、3 つのオプションがサポートされています:
オプション 1: Databricks によって計算された埋め込みを持つ Delta Sync インデックス テキスト形式のデータを含むソース Delta table を指定します。 Databricks は、指定したモデルを使用して埋め込みを計算し、必要に応じて Unity Catalogの table に埋め込みを保存します。 差分 table が更新されると、インデックスは差分 tableと同期された状態が維持されます。
次の図にこのプロセスを示します。
- クエリの埋め込みを計算してください。 クエリにはメタデータ フィルターを含めることができます。
- 類似性検索を実行して、最も関連性の高いドキュメントを特定してください。
- 最も関連性の高いドキュメントを返し、それをクエリに追加してください。
オプション 2: 自己管理埋め込みを用いたデルタ Sync インデックス 事前に計算された埋め込みを含むソースデルタ table を指定します。 差分 table が更新されると、インデックスは差分 tableと同期された状態が維持されます。
次の図にこのプロセスを示します。
- クエリは埋め込みで構成され、メタデータ フィルターを含めることができます。
- 類似性検索を実行して、最も関連性の高いドキュメントを特定してください。 最も関連性の高いドキュメントを返し、それをクエリに追加してください。
オプション 3: 直接ベクター アクセス インデックス 埋め込み table が変更されたときに、REST API を使用してインデックスを手動で update する必要があります。
次の図にこのプロセスを示します。
ベクター データベース
なしで事前計算された埋め込み
Mosaic AI ベクトル検索のset方法
Mosaic AI ベクトル検索を使用するには、以下のものを作成する必要があります。
ベクトル検索エンドポイント。 このエンドポイントは、ベクトル検索インデックスを提供します。 REST API または SDK を使用して、エンドポイントのクエリと update を行うことができます。 手順については、「ベクトル検索エンドポイントを作成する」をご参照ください。
エンドポイントは、インデックスのサイズや同時要求の数をサポートするように、自動的にスケールアップされます。 エンドポイントは自動的にスケールダウンしません。
ベクトル検索インデックス。 ベクター検索インデックスはデルタ table から作成され、近似近隣検索をリアルタイムで提供するように最適化されています。 検索の目的は、クエリと類似したドキュメントを特定することです。 ベクター検索インデックスが表示され、Unity Catalogによって管理されます。 手順については、「ベクトル検索インデックスを作成する」をご参照ください。
さらに、Databricks で埋め込みを計算することを選択した場合、事前に構成された Foundation Model API エンドポイントを使用するか、モデル提供エンドポイントを作成して、任意の埋め込みモデルを提供できます。 手順については、「トークンごとの支払い基盤モデル API」または「エンドポイントにサービスを提供するエンドポイントを作成する」 を参照してください。
そのモデル サービング エンドポイントに対してクエリを実行するには、REST API または Python SDK を使用します。 クエリでは、デルタ table内の任意の column に基づいてフィルターを定義できます。 詳細については、「クエリでのフィルターの使用」、「API リファレンス」、または「Python SDK リファレンス」を参照してください。
要件
- Unity Catalog が有効なワークスペース。
- サーバーレス コンピューティングが有効になっている。 手順については、「サーバーレス コンピューティングに接続する」を参照してください。
- ソース table で Change Data Feed が有効になっている必要があります。 手順については、「Azure Databricks で Delta Lake 変更データ フィードを使用する」を参照してください。
- ベクター検索インデックスを作成するには、インデックスが作成される catalogschemawhere に対する CREATE TABLE 権限が必要です。
ベクター検索エンドポイントを作成および管理するためのアクセス許可は、アクセス制御リストを使用して構成されます。 Vector 検索エンドポイント ACL を参照してください。
データ保護と認証
Databricks では、データを保護するために次のセキュリティ制御が実装されています。
- Mosaic AI ベクトル検索に対するすべての顧客要求は、論理的に分離、認証、認可されます。
- Mosaic AI ベクトル検索では、すべての保存データ (AES-256) と転送中のデータ (TLS 1.2 以降) が暗号化されます。
Mosaic AI ベクトル検索では、次の 2 つの認証モードがサポートされています。
サービス プリンシパル トークン。 管理者は、サービス プリンシパル トークンを generate し、SDK または API に渡すことができます。 「サービス プリンシパルの使用」を参照してください。 運用環境のユース ケースの場合、Databricks ではサービス プリンシパル トークンを使用することをお勧めしています。
# Pass in a service principal vsc = VectorSearchClient(workspace_url="...", service_principal_client_id="...", service_principal_client_secret="..." )
個人用アクセス トークン。 個人用アクセス トークンを使用して、モザイク AI ベクター検索で認証できます。 「個人用アクセス トークン認証」を参照してください。 ノートブック環境で SDK を使用する場合、SDK によって認証用の PAT トークンが自動的に生成されます。
# Pass in the PAT token client = VectorSearchClient(workspace_url="...", personal_access_token="...")
カスタマー マネージド キー (CMK) は、2024 年 5 月 8 日以降に作成されたエンドポイントでサポートされます。
使用状況とコストの監視
課金対象の使用システム table を使用すると、ベクター検索インデックスとエンドポイントに関連付けられている使用量とコストを監視できます。 クエリの使用例を次に示します。
WITH all_vector_search_usage (
SELECT *,
CASE WHEN usage_metadata.endpoint_name IS NULL
THEN 'ingest'
ELSE 'serving'
END as workload_type
FROM system.billing.usage
WHERE billing_origin_product = 'VECTOR_SEARCH'
),
daily_dbus AS (
SELECT workspace_id,
cloud,
usage_date,
workload_type,
usage_metadata.endpoint_name as vector_search_endpoint,
SUM(usage_quantity) as dbus
FROM all_vector_search_usage
GROUP BY all
ORDER BY 1,2,3,4,5 DESC
)
SELECT * FROM daily_dbus
課金使用量 tableの内容の詳細については、「課金対象の使用量システム table リファレンス」を参照してください。 追加のクエリは、次のノートブック例にあります。
ベクトル検索システム tablesのクエリ ノートブック
ノートブックをGet
リソースとデータ サイズの制限
次の table は、ベクター検索エンドポイントとインデックスのリソースとデータ サイズの制限をまとめたものです。
リソース | 細分性 | Limit |
---|---|---|
ベクトル検索エンドポイント | ワークスペースごと | 100 |
埋め込み | エンドポイントあたり | 320,000,000 |
埋め込みディメンション | インデックスごと | 4096 |
インデックス | エンドポイントあたり | 50 |
Columns | インデックスごと | 50 |
Columns | サポートされている型: Bytes、short、integer、long、float、double、boolean、string、timestamp、date | |
メタデータ フィールド | インデックスごと | 50 |
インデックス名 | インデックスごと | 128 文字 |
ベクター検索インデックスの作成と update には、次の制限が適用されます。
リソース | 細分性 | Limit |
---|---|---|
デルタ Sync インデックスの行サイズ | インデックスごと | 100 KB |
Delta Sync インデックスの埋め込みソースcolumnサイズ | インデックスごと | 32764 バイト |
直接ベクトル インデックスの一括 upsert 要求サイズのlimit | インデックスごと | 10 MB |
Direct Vector インデックスの一括削除要求サイズ limit | インデックスごと | 10 MB |
クエリ API には、次の制限が適用されます。
リソース | 細分性 | Limit |
---|---|---|
クエリ テキストの長さ | クエリごと | 32764 バイト |
返される結果の最大数 | クエリごと | 10,000 |
制限事項
- 行レベルと column レベルのアクセス許可はサポートされていません。 ただし、フィルター API を使用して独自のアプリケーション レベルの ACL を実装できます。