Azure Cache for Redis でのベクトル埋め込みとベクトル検索とは?
ベクトル類似性検索 (VSS) は、AI 搭載インテリジェント アプリケーションの一般的なテクノロジになっています。 検索拡張生成 AI 用の Azure OpenAI のようなモデルと分析シナリオを組み合わせると、Azure Cache for Redis をベクトル データベースとして使用できます。 この記事は、ベクトル埋め込みの概念、ベクトル類似性検索、およびインテリジェント アプリケーションを強化するベクトル データベースとして Redis を使用する方法の概要です。
Azure Cache for Redis と Azure OpenAI を使ってベクトル類似性検索を実行する方法に関するチュートリアルとサンプル アプリケーションについては、次を参照してください。
- チュートリアル: Azure Cache for Redis と LangChain を使用して Azure OpenAI 埋め込みでベクトル類似性検索を実行する
- サンプル: .NET セマンティック カーネルを使用するチャットボット アプリケーションでのベクトル データベースとしての Redis の使用
- サンプル: Redis OM for .NET を使用する Dall-E 搭載画像ギャラリーでのセマンティック キャッシュとしての Redis の使用
可用性のスコープ
Redis のベクトル検索機能には、Redis スタック (特に、RediSearch モジュール) が必要です。 この機能は、Azure Cache for Redis の Enterprise レベルでのみ使用できます。
この表には、さまざまなレベルでのベクトル検索の可用性に関する情報が含まれています。
レベル | Basic/Standard | Premium | エンタープライズ | Enterprise Flash | Azure Managed Redis (プレビュー) |
---|---|---|---|---|---|
対応可能 | いいえ | 番号 | はい | はい (プレビュー) | はい |
ベクター埋め込み?
概念
ベクトル埋め込みは、機械学習と自然言語処理における基本的な概念であり、単語、ドキュメント、画像などのデータを高次元ベクトル空間での数値ベクトルとして表現できるようにします。 ベクトル埋め込みの背後にある主な考え方は、データの基になるリレーションシップとセマンティクスを、このベクトル空間内のポイントにマップすることによってキャプチャすることです。 つまり、テキストまたは画像をデータを表す数値のシーケンスに変換してから、さまざまな数値シーケンスを比較します。 これにより、複雑なデータを数学的に操作したり分析したりできるようになるため、類似性の比較、レコメンデーション、分類などのタスクの実行が簡単になります。
各機械学習モデルでは、データの分類やベクトルの生成をさまざまな方法で行います。 さらに、通常、各ベクトル次元がどのようなセマンティックな意味を表すかを正確に特定することはできません。 ただし、モデルは入力データの各ブロック間で一貫性があるため、類似した単語、ドキュメント、または画像はそのベクトルも同様に類似しています。 たとえば、単語 basketball
と baseball
には、rainforest
などの単語よりはるかに互いに隣接した埋め込みベクトルがあります。
ベクトル比較
ベクトルは、さまざまなメトリックを使用して比較できます。 ベクトルを比較するための最も一般的な方法は、多次元空間内の 2 つのベクトル間の角度のコサインを測定するコサイン類似度を使用することです。 ベクトルが近ければ近いほど、その角度も小さくなります。 その他の一般的な距離メトリックには、ユークリッド距離や内積が含まれます。
埋め込みの生成
多くの機械学習モデルでは、埋め込み API がサポートされています。 Azure OpenAI Service を使用してベクトル埋め込みを作成する方法の例については、「Azure OpenAI を使用して埋め込みを生成する方法を学習する」を参照してください。
ベクトル データベースとは
ベクトル データベースは、ベクトルを格納、管理、取得、比較できるデータベースです。 ベクトル データベースは、高次元ベクトルを効率的に格納し、それを最小限の待ち時間と高スループットで取得できる必要があります。 非リレーショナル データストアはベクトル データベースとして最も一般的に使用されていますが、PostgreSQL などのリレーショナル データベースを (たとえば、pgvector 拡張機能で) 使用することは可能です。
インデックスと検索方法
ベクトル データベースでは、高速な検索や取得のためにデータのインデックスを作成する必要があります。 さらに、ベクトル データベースは、簡素化されたプログラミング エクスペリエンスのための組み込み検索クエリをサポートする必要があります。
インデックス作成には、次のようないくつかの方法があります。
- FLAT - ブルート フォース インデックス
- HNSW - Hierarchical Navigable Small World グラフを使用した効率的で堅牢な近似最近傍検索
一般的な検索方法には、次のものがあります。
- K ニアレスト ネイバー (KNN) - 最も高い精度を提供するが、計算コストも同様に高くなる網羅的な方法。
- 近似最近傍 (ANN) - 精度を落とす代わりに速度を向上させ、処理オーバーヘッドを削減しているため、より効率的です。
検索機能
最終的に、ベクトル データベースでは、選択されたベクトル比較方法を使用して最も類似したベクトルを返すことによってベクトル検索を実行します。 一部のベクトル データベースでは、ベクトル検索を実行する前に、まず、これもデータベースに格納されている特性またはメタデータに基づいて結果を絞り込むことにより "ハイブリッド" 検索を実行することもできます。 これは、ベクトル検索をより効果的で、かつカスタマイズ可能にする方法です。 たとえば、ベクトル検索を、データベース内の特定のタグを持つベクトル、または特定のリージョン内の位置情報データを持つベクトルのみに制限することもできます。
ベクトル検索の主要なシナリオ
ベクトル類似性検索は、複数のアプリケーションで使用できます。 一般的なユース ケースは次のとおりです。
- セマンティック Q&A. 独自のデータに関する質問に答えることができるチャットボットを作成します。 たとえば、従業員の自分の医療保険に関する質問に答えることができるチャットボットです。 数百ページもの高密度の医療保険ドキュメントをチャンクに分割して、埋め込みベクトルに変換し、ベクトル類似性に基づいて検索できます。 結果として得られるドキュメントは、その後、別の大きな言語モデル (LLM) を使用して従業員のために要約できます。 セマンティック Q&A 例
- ドキュメント取得。 LLM によって提供されるテキストのより深いセマンティック理解を使用して、従来のキーワード ベースの検索に不足しているより豊富なドキュメント検索エクスペリエンスを提供します。 ドキュメント取得の例
- 製品のレコメンデーション。 検索履歴や以前の購入などの過去のユーザー アクティビティに基づいて推奨する類似した製品またはサービスを見つけます。 製品レコメンデーションの例
- Visual Search。 ユーザーが撮影した写真、または別の製品の写真に似ている製品を検索します。 Visual Search の例
- セマンティック キャッシュ。 LLM の完了をキャッシュすることによって LLM のコストと待ち時間を削減します。 LLM クエリは、ベクトル類似性を使用して比較されます。 新しいクエリが以前にキャッシュされたクエリに十分に類似している場合は、そのキャッシュされたクエリが返されます。 LangChain を使用したセマンティック キャッシュの例
- LLM の会話メモリ。 LLM の会話履歴をベクトル データベース内の埋め込みとして保持します。 アプリケーションでは、ベクトル検索を使用して、関連する履歴または "メモリ" を LLM からの応答にプルできます。 LLM の会話メモリの例
ベクトルの格納と検索のために Azure Cache for Redis を選択する理由
Azure Cache for Redis は、埋め込みベクトルを格納し、ベクトル類似性検索を実行するためのベクトル データベースとして効果的に使用できます。 次のような多くの主要な機械学習フレームワークで、ベクトル ストレージと検索のサポートを利用できるようになっています。
これらのフレームワークは、Redis との高度な統合を備えています。 たとえば、Redis LangChain 統合では、Redis をベクトル ストアとして使用しているときに渡されたメタデータのインデックス スキーマが自動的に生成されます。 これにより、結果をメタデータに基づいてフィルター処理することがはるかに簡単になります。
Redis には、Azure Cache for Redis の Enterprise レベルで使用できる RediSearch モジュールによる広範囲の検索機能があります。 次のようなものが含まれます。
- 複数の距離メトリック (
Euclidean
、Cosine
、Internal Product
を含む)。 - KNN (
FLAT
を使用) と ANN (HNSW
を使用) の両方のインデックス作成方法のサポート。 - ハッシュまたは JSON データ構造内のベクトル ストレージ
- 上位 K 個のクエリ
- ベクトル範囲クエリ (つまり、特定のベクトル距離内のすべての項目を検索する)
- 次のような強力なクエリ機能を使用したハイブリッド検索:
- 地理空間フィルター処理
- 数値およびテキスト フィルター
- プレフィックスおよびあいまい一致
- 発音照合
- ブール型クエリ
さらに、Redis はキャッシュまたはセッション ストア アプリケーションに既に非常によく使用されているため、多くの場合は経済的な選択肢です。 これらのシナリオでは、ベクトル検索アプリケーションを同時に処理しながら、一般的なキャッシュ ロールに対応することでダブル デューティをプルできます。
ベクトルの格納と検索のための他のオプションには何がありますか?
ベクトルの格納と検索のための Azure 上の他のソリューションは複数存在します。 他には、次のようなソリューションがあります。
- Azure AI Search
- MongoDB 仮想コア API を使用する Azure Cosmos DB
pgvector
を使用する Azure Database for PostgreSQL - フレキシブル サーバー
関連するコンテンツ
埋め込みとベクトル検索を開始するための最善の方法は、それを自分で試してみることです。