ベクトル類似性探索(VSS)は、AI搭載のインテリジェントアプリケーションで一般的な機能です。 Azure Managed Redisは、Retrieval-Augmented 生成(RAG)、セマンティックキャッシュ、推薦、検索、その他のAIシナリオに組み込みモデル(Azure OpenAIなど)と組み合わせることで、低遅延のベクトルデータベースとして利用できます。
この記事では、ベクトル埋め込み、ベクトル類似性検索、そしてAzure Managed RedisがRediSearchモジュールを使ってベクターを保存・検索する方法を紹介します。
Azure Managed RedisとAzure OpenAIを組み合わせたチュートリアルやサンプルアプリケーションについては、以下のリソースをご覧ください。
利用可能範囲
Redis のベクトル検索機能には、Redis スタック (特に、RediSearch モジュール) が必要です。 Azure Managed Redisでは、RediSearchがマネージドモジュールとして利用可能で、キャッシュを作成する際に有効化する必要があります。
以下の表は、Azure Managed RedisティアにおけるRediSearchの利用可能性を示しています。
| Azure Managed Redis レベル | RediSearchのサポート |
|---|---|
| メモリ最適化 | イエス |
| Balanced | イエス |
| コンピューティング最適化 | イエス |
| フラッシュ最適化 | いいえ |
Important
Azure管理のRedisインスタンスは作成後にモジュールを追加できません。 ベクターサーチを使う予定がある場合は、プロビジョニング時にRediSearchモジュールを有効にしてください。
Plan a Azure Managed Redis instance for vector search(ベクター検索用)
ベクター検索用のAzure管理Redisインスタンスを作成する前に、キャッシュの設定とデータモデルを計画してください。 プロビジョニング時にはモジュールやクラスタリングポリシーなど、いくつかのオプションを選択しなければなりません。
ベクトルサーチのワークロードについて:
- Azure管理のRedisインスタンスを作成する際にRediSearchモジュールを有効にしてください。
- エンタープライズクラスタリングポリシーを使用してください。 RediSearchはエンタープライズクラスタリングポリシーが必要です。
- RediSearchが有効になっている場合は
NoEviction立ち退きポリシーを使いましょう。 - サポートされるインメモリティア:メモリ最適化、バランス、計算最適化のいずれかを選択します。
- ベクターデータとインデックスオーバーヘッドの両方を考慮してキャッシュのサイズを調整します。
- ドキュメントID、タイトル、ソースURL、カテゴリ、タイムスタンプ、テナントID、アクセス制御フィールドなどのベクターでメタデータを保存し、クエリが結果をフィルタリングしソース情報を返すことができます。
- クライアント接続にはTLSを使用し、クライアントがサポートしている場合はMicrosoft Entra認証を検討してください。
- 本番ワークロードでは、Private Link、高可用性、診断を検討してください。
Azure Managed Redisはサービス用の利用可能なモジュールバージョンを管理しています。 モジュールを手動で読み込んだり、モジュールのバージョンを手動で更新したりすることはできません。
詳細については、「Use Redis modules with Azure Managed Redis」、「Azure Managed Redis architecture」、「Quickstart: Create an Azure Managed Redis instance」をご覧ください。
ベクトル埋め込みとは何ですか?
ベクトル埋め込みとは、単語、文書、画像、または積などのデータを高次元ベクトル空間内で数値的に表現するものです。 埋め込みは、アプリケーションがデータを数学的に比較できるように意味的な関係を捉えます。
例えば、単語 basketball と baseball は通常、どちらの単語 rainforestよりも埋め込みが近い。これはモデルが意味的に関連する概念をベクトル空間で近くに配置するためである。
機械学習モデルによって埋め込みの生成方法が異なります。 最良の結果を得るには、与えられたベクトルインデックスに対して一つの埋め込みモデルを一貫して使用してください。 インデックススキーマ、ベクトル寸法、距離計量は、ベクトル生成に用いられた埋め込みモデルと一致しているはずです。
ベクトル比較
距離や類似度の指標を使ってベクトルを比較できます。 一般的なメトリックは次のとおりです。
- コサイン類似度はベクトル間の角度を比較します。
- ユークリッド距離は、ベクトル空間における直線距離を測定するものです。
- 内積は、埋め込みやランキングのシナリオでよく使われます。
正しい計量は埋め込みモデルやベクトルの正規化方法に依存します。 多くのテキスト埋め込みシナリオでは、コサイン類似性が一般的な選択です。
埋め込みの生成
多くの機械学習モデルでは、埋め込み API がサポートされています。 Azure OpenAIを使ってベクター埋め込みを作成する方法の例については、「Azure OpenAIで埋め込みを生成する方法を学ぶ」をご覧ください。
ベクトル データベースとは
ベクトルデータベースは高次元ベクトルを保存、インデックス作成、検索、比較します。 ベクターデータベースは、低遅延かつ高いスループットで類似したベクトルを返すよう設計されています。
Azure管理のRedisは、Redisのデータ構造に埋め込みを保存し、RediSearchを使ってインデックス化することでベクターデータベースとして利用できます。
ベクターストレージとメタデータ
Redisでは、ベクターをハッシュやJSONドキュメントに保存できます。 各ベクターには、文書ID、タイトル、送信元URL、カテゴリ、タイムスタンプ、テナントID、アクセス制御フィールドなどの有用なメタデータを保存します。
メタデータは、アプリケーションがベクター検索の前や検索中の結果をフィルタリングできるため、ベクトル検索をより有用にします。 RAGアプリケーションでは、引用や出典の接地をサポートするために検索結果とともにメタデータを返すことも可能です。
インデックスおよび検索方法
ベクターデータベースは検索を効率的にするためにインデックスを使用します。 RediSearchは一般的なベクトルインデックス手法をサポートしており、以下のようなものがあります。
- FLAT - 厳密なブルートフォースインデックス。 FLATは、小規模なデータセットや徹底的な検索を必要とするワークロードに有用です。
- HNSW - 階層的ナビビタブル・スモールワールドグラフに基づく近隣インデックス。 HNSWは、網羅的な精度よりもレイテンシーの低さが重視される大規模なデータセットでよく使われます。
一般的な検索方法には以下があります:
-
K-最近傍(KNN) - 最も似たベクトル
K上位を返します。 - 近傍近接近(ANN) - 精度を犠牲にしてレイテンシを低くし、計算コストを削減します。
検索機能
ベクターデータベースはクエリベクトルとインデックス付きベクターを比較し、最も似た結果を返すことで検索を実行します。 多くのアプリケーションでは、メタデータフィルターを使ってベクトル比較の前後に候補集合を絞り込むハイブリッドサーチも使用されます。
例えば、製品推薦クエリは特定のカテゴリの製品のみを検索したり、RAGアプリケーションは現在ユーザーがアクセス許可されている文書のみを検索したりします。
ベクトル検索の主要なシナリオ
ベクター類似性探索は、以下を含む多くの応用パターンで使用できます。
- セマンティック Q&A. 自分のデータ上で質問に答えるチャットボットを作りましょう。 文書はチャンク化され、ベクトル化されて Azure Managed Redis に保存され、ベクトル類似度に基づいて取得された後、大規模言語モデルによって要約されます。
- 文書の取得。 キーワード検索だけでは不十分な場合、埋め込みを使って意味的な文書検索を提供しましょう。
- 製品のおすすめ。 閲覧活動、購入履歴、商品説明に基づいて類似した商品やサービスを見つけてください。
- 視覚的検索。 提出した画像と視覚的に似ている商品や画像を検索してください。
- セマンティック キャッシュ。 新しいプロンプトが前のプロンプトと意味的に類似している場合、完了をキャッシュし、キャッシュされた応答を再利用することでLLMのコストと遅延を削減します。
- LLMの会話記憶。 最近の会話の切り替えなどの短期記憶や、持続的な要約、ユーザーの好み、事実などの長期記憶を埋め込みとして保存し、アプリケーションが将来の回答のために取得できるようにします。
なぜベクターの保存と検索にAzure管理Redisを選ぶのですか?
Azure Managed Redisは、アプリケーションデータ、キャッシュデータ、セッション状態、または会話メモリに近い低遅延アクセスを必要とするベクターサーチワークロードに便利です。 Redisは高性能なアプリケーションパターンに一般的に使われているため、AzureマネージドRedisはベクターサーチをサポートしつつ、キャッシュ、レート制限、セッションストレージ、セマンティックキャッシュ、エージェントメモリなどの隣接ユースケースもサポートできます。
多くのAIおよびアプリケーションフレームワークには、以下のようなRedis統合が含まれています。
- Microsoft Agent Framework Redis Provider
- Semantic Kernel Redis コネクタ
- LangChain と Redis の連携
- LlamaIndex Redis ベクターストア
Azure Managed Redisは、以下のようなベクトル検索機能をサポートするためにRediSearchモジュールを使用しています。
- 一般的な距離指標(
L2、COSINE、IPなど)。 -
FLATおよびHNSWベクトルインデックスを用いたKNN検索。 - ハッシュやJSONデータ構造におけるベクターストレージ。
- トップKのクエリ。
- ベクトル範囲クエリ。
- 以下のようなクエリ機能を備えたハイブリッド検索:
- 地理空間フィルタリング。
- 数値フィルターとテキストフィルター。
- プレフィックスとファジーマッチング。
- 音声学的照合。
- ブールクエリです。
ベクターを保存・検索するための他の選択肢にはどんなものがありますか?
Azureはベクター保存と検索のための複数のサービスを提供しています。 最適な選択はあなたの仕事量によります。
| Service | 以下の場合を考えてみましょう |
|---|---|
| Azure マネージド再配布 | アプリケーションキャッシュ、セッションステート、セマンティックキャッシュ、またはLLMメモリパターンに近い低遅延ベクターサーチが必要です。 |
| Azure AI 検索 | ドキュメントインデックス作成、ハイブリッド検索、関連性調整、エンタープライズ検索シナリオには、まず検索先行のサービスが必要です。 |
| Azure Cosmos DB | 運用中のNoSQLデータと並行してベクター検索も必要です。 |
| Azure Database for PostgreSQL - フレキシブル サーバー | PostgreSQLでリレーショナルデータと pgvector を組み合わせたベクター検索を望んでいます。 |
関連コンテンツ
埋め込みやベクトルサーチを始める最良の方法は、自分で試してみることです。