DatabricksのVector Search

[Databricks Vector Search \| Databricks on AWS](https://docs.databricks.com/en/generative-ai/vector-search.html) [2023/11/30時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

:::note info
**プレビュー**
本機能は[パブリックプレビュー](https://docs.databricks.com/release-notes/release-types.html)です。
:::

本書では、DatabricksのベクトルデータベースソリューションであるDatabricks Vector Searchが何であるのかと動作原理の概要を説明します。

# Databricks Vector Searchとは？

Databricks Vector Searchは、ベクトルデータベースでメタデータを含む皆様のデータのベクトル表現を格納できるサーバレスの類似検索エンジンです。Vector Searchによって、Unity Catalogで管理されるDeltaテーブルから自動で更新されるベクトル検索インデックスを作成しし、最も類似するベクトルを返却するためにシンプルなAPIでクエリーを行うことができます。

Vector Searchは以下のDatabricksの機能とインテグレーションされています:

- [Deltaテーブル](https://docs.databricks.com/ja/introduction/delta-comparison.html)には、ベクトルデータベースの入力データが格納されます。Vector Searchによって、Deltaテーブルからベクトル検索インデックスを作成することができ、Deltaテーブルのコンテンツとそのインデックスが自動で同期されます。
- [Unity Catalog](https://docs.databricks.com/ja/data-governance/unity-catalog/index.html)は、データガバナンスとアクセスコントロールリストを取り扱います。Unity Catalogによって、Vector Search APIと背後のデータベース両方へのアクセスを管理することができます。
- [サーバレスコンピュート](https://docs.databricks.com/ja/serverless-compute/index.html)。Vector Searchはサーバレスコンピュートで稼働し、これはサーバーとインフラストラクチャの管理が、あなたのDatabricksアカウント内で行われることを意味します。
- [モデルサービング](https://docs.databricks.com/ja/machine-learning/model-serving/index.html)は、エンべディング生成のためのモデルサービングへのクエリーを自動化します。

以下のようなユースケースにVector Searchを適用することができます:

- Retrieval augment generation (RAG)システム: Vector Searchによって、データの効率的な検索と拡張が可能となります。これによって、LLMアウトプットにおいてより正確なレスポンスに繋がり、幻覚のようなエラーを最小化します。
- レコメンデーションシステム: eコマースやストリーミングプラットフォームにおいて、効率的な最近傍検索、ユーザー挙動と適切なアイテムのマッチングで活用されます。
- 画像、動画認識: 画像や動画における類似特徴量のクイックな検索を促進します。
- バイオインフォマティクス: DNAシーケンスのアライメントやプロテインの構造類似性検索のようなタスクに適用できます。
- 異常検知: 不正検知やネットワークセキュリティのような文脈で外れ値を特定します。

# Vector Searchの動作原理

Vector Searchは、あなたがエンべディングベクトルをどのように計算し、[Vector Searchインデックス](#vector-searchインデックス)をどのように管理したいのかによって挙動が異なります。

ハイレベルでは、Vector Searchを以下のように取り扱うことができます:

1. Vector Searchエンドポイントを作成します。このエンドポイントは、Vector Searchインデックスの作成、アクセスに使用されます。REST APIあるいは**Compute** UIからVector Searchエンドポイントを作成することができます。それぞれのエンドポイントは、インデックスにあるベクトルの数と同時リクエスト数に応じて自動でスケールします。
1. Vector Searchインデックスを作成します。このインデックスは、皆様のチャンク化されたデータを含むDeltaテーブルの特定のカラムをベースに作成されます。サポートされるインデックスのタイプの詳細については、[Vector Searchインデックス](#vector-searchインデックス)をご覧ください。
1. Vector Searchは入力としてデータのチャンクを取り込み、それらをエンべディングベクトルとして知られる、数のシーケンスによって表現されるN次元の空間にマッピングします。
1. Vector Searchは、類似するコンセプトが異なるコンセプトよりも近くにマッピングされるように、プロパティと共にこのエンべディングベクトルを活用します。例えば、りんごとオレンジは、りんごとボートよりも互いに近く配置されます。
1. Vector Searchは、類似するベクトルを特定できるように高速でスケーラブルな近傍検索アルゴリズムを提供するベクトルデータベースにこれらのベクトルを格納します。
1. お使いのVector Searchエンドポイントを用いてベクトルデータベースにクエリーを実行します。

# 要件

- Unity Catalogが有効化されたワークスペース。
- サーバレスコンピュートの有効化。
- ソーステーブルで`Change Data Feed`が有効化されていること。

# Vector Searchインデックス

Vector Searchインデックスは、リアルタイムかつ効率的な近似最近傍検索クエリーをサポートする、あなたのデータのエンべディングベクトル表現となります。

Vector Searchでは、ソースのDeltaテーブルの特定のカラムからエンべディングのインデックスが作成されます。Vector Searchインデックスは、REST APIやSDKを用いてクエリー、更新に使用できるVector Searchエンドポイントによってサービングされます。Vector Searchエンドポイントには複数のインデックスを含めることができます。

Vector Searchインデックスは、Unity Catalog内のテーブルのようなオブジェクトとして表示されます。Vectorインデックスへのアクセスや、クエリー、更新、作成のようなインデックスレベルの権限は、Unity Catalogによって制御されます。

Vector Searchは2つのインデックスタイプをサポートしています:

- **Delta Sync Index**はソースのDeltaテーブルと自動で同期し、Deltaテーブルの背後のデータが変更するとインクリメントタルに更新を行います。Databricksにエンべディングベクトルを管理させるか、ご自身で管理するのかを選択することができます。
- **Direct Vector Access Index**は、REST APIやSDKを通じてエンベデディングベクトルとメタデータを直接読み書きすることができます。このインデックスでは、ご自身でエンべディングベクトルとインデックスの更新を管理します。

以下のセクションでは、これらのインデックスそれぞれのシナリオを通じて、どのようにVector Searchが動作するのかをウォークスルーします。

## マネージドエンベディングを用いたDelta Sync Index

エンべディングの自動生成とDatabricksマネージドのエンべディングでは、Delta Sync Indexを作成します。

このシナリオでは、

1. あなたのチャンク化されたデータを格納するDeltaテーブルを指定します。
1. お好きなエンべディングモデルをサービングするモデルサービングエンドポイントを指定します。OpenAIやオープンソースモデル、ご自身でトレーニングしたカスタムモデルのように、あなたの要件に適した任意のエンべディングモデルを選択することができます。
1. Deltaテーブルのデータからエンべディングを生成するために、Vector Searchはこのエンべディングモデルを活用します。
1. Deltaテーブルのソースデータが更新されると、ソースのDeltaテーブルで`Change Data Feed`が有効化されている限り、Vector Searchはベクトルインデックスを更新します。
1. 2つのアップデートモードがサポートされています: `triggered`と`continuous`です。`continuous`モードは数秒のレーテンシーでインデックスを同期し続けます。しかし、連続的な同期ストリーミングパイプラインを実行するために計算資源がプロビジョンされるので、コストが高くなります。
1. Delta Sync APIを用いて、インデックスとベクトルデータベースにクエリーを行うことができます。

## セルフマネージドのエンべディングを用いたDelta Sync Index

ご自身でDelta Sync Index を作成し、エンべディングを計算することもできます。この選択肢は、すでに事前生成したエンべディングを持っており、転送学習やエンべディングの再ランキングのように外部アクセスを必要とするお客様に適用されます。

このシナリオでは、

1. Deltaテーブルに格納されているエンべディングベクトルを指定します。
1. Vector SearchはソースのDeltaテーブルで指定したカラムをベースにインデックスを作成します。
1. Deltaテーブルのソースデータが更新されると、ソースのDeltaテーブルで`Change Data Feed`が有効化されている限り、Vector Searchはベクトルインデックスを更新します。
1. 2つのアップデートモードがサポートされています: `triggered`と`continuous`です。`continuous`モードは数秒のレーテンシーでインデックスを同期し続けます。しかし、連続的な同期ストリーミングパイプラインを実行するために計算資源がプロビジョンされるので、コストが高くなります。
1. Delta Sync APIを用いて、インデックスとベクトルデータベースにクエリーを行うことができます。

## Direct Vector Access Index

Databricks外に既存のパイプラインがある、あるいは、すでにベクトルデータベースを使用している場合には、Direct Vector Access Indexを作成することができます。

このシナリオでは、

1. Deltaテーブルに格納されているエンべディングベクトルを指定します。
1. Vector SearchはソースのDeltaテーブルで指定したカラムをベースにインデックスを作成します。
1. インデックスは自動でスケールし、リアルタイムのパフォーマンスを提供しますが、ソースデータのインデックスに対する更新の管理はユーザーが行います。
1.  Delta Sync APIを用いて、インデックスとベクトルデータベースにクエリーを行うことができます。

# Vector Searchの活用

Vector SearchエンドポイントやVector SearchインデックスのようなVector Searchのコンポーネントは、UI、Python SDK、REST APIを用いて作成、管理することができます。最もシンプルに行うにはUIを用いることをお勧めします。[Vector Searchインデックスの作成とクエリー](https://docs.databricks.com/ja/generative-ai/create-query-vector-search.html)をご覧ください。

以下の表では、サポートされているVector Searchインデックスの操作で利用できるAPIを列挙しています。

|  | 取り込みパイプライン | エンべディングの計算 | 説明 |
|:--|:--|:--|:--|
|  [マネージドエンベディングを用いたDelta Sync Index](#マネージドエンベディングを用いたdelta-sync-index) | 自動 & マネージド  | モデルサービング経由のマネージド  | DatabricksはDeltaテーブルのデータのベクトルを生成するために、ユーザー提供のエンべディングモデルを使用します。テキストのみがサポートされています。  |
| [セルフマネージドのエンべディングを用いたDelta Sync Index](#セルフマネージドのエンべディングを用いたdelta-sync-index)  |  自動 & マネージド | 自分で管理  | 入力としてユーザーがdoubleあるいはfload配列としてのエンべディングを持つDeltaテーブルのカラムを参照することで、エンべディングを提供します。  |
| [Direct Vector Access Index](#direct-vector-access-index)  |  手動 & 自分で管理 | 自分で管理  |  ユーザーはベクトルインデックスのインサート、削除、アップデート操作を行います。すべてのデータがサポートされます。SDKを用いてのみ、これらのインデックスタイプを作成できます。 |

# 制限

- [PrivateLink](https://docs.databricks.com/ja/administration-guide/cloud-configurations/aws/privatelink.html)や[IPアクセスリスト](https://docs.databricks.com/ja/security/network/ip-access-list.html)を使用しているワークスペースではVector Searchはサポートされていません。
- パブリッププレビュー中はCustomer Managed Keys (CMK)はサポートされません。
- 制限のかかっているワークスペースはサポートされておらず、この機能はHIPAA準拠していません。
- 行列レベルの権限管理はサポートされていません。しかし、多くのお客様ではfilter APIを用いてご自身のアプリケーションレベルのACLを実装しています。
- この機能は以下のリージョンでのみ利用可能です:
    - ap-southeast-2
    - eu-west-1
    - us-east-1
    - us-east-2
    - us-west-2

# その他のリソース

- [Vector Searchインデックスの作成とクエリー](https://docs.databricks.com/ja/generative-ai/create-query-vector-search.html)

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)