ベクトル検索用の Azure サービスを選択する
ベクトル検索は、データベースにベクトルの形で保存されている情報を検索する方法です。 ベクトルは、テキストや画像などのメディアの機能や特性を表す数値のグループです。 ベクトルは、従来のキーワードベースの検索方法よりも大幅に進歩しています。 情報内のセマンティック リレーションシップを理解することで、より高速で正確な結果が得られます。
Azure は、ベクトル化されたデータを保存および検索するための複数の方法を提供します。 この記事は、アプリケーションのベクトル検索に適した Azure サービスを理解して選択する必要があるアーキテクトと開発者に役立ちます。
この記事では、ベクトル検索機能に基づいて次のサービスを比較します。
- Azure AI Search
- NoSQL 用 Azure Cosmos DB
- Azure Cosmos DB for MongoDB (仮想コア)
- PostgreSQL 用 Azure Cosmos DB
- Azure Database for PostgreSQL
- Azure SQL データベース
アーキテクトと開発者は、「候補サービスの選択」と「機能マトリックス」のシステム要件の観点から利用可能なサービス比較する必要があります。
サービス候補を選択する
このセクションは、ニーズに最も適したサービスを選択するのに役立ちます。 選択肢を絞り込むには、まずシステム要件を検討します。
主な要件
従来のデータベース ソリューションと Azure AI Search サービスのどちらを使用するかを決定するときは、要件と、データに対してライブまたはリアルタイムのベクトル検索を実行できるかどうかを考慮してください。 ベクトル化されたフィールドの値を頻繁に変更し、その変更をリアルタイムまたは凖リアルタイムで検索できる必要がある場合は、従来のリレーショナル データベースまたは NoSQL データベースがシナリオに最適です。 同様に、既存のデータベースを使用することが、パフォーマンス目標を達成するための最良のソリューションである可能性があります。 一方、ワークロードがリアルタイムまたはほぼリアルタイムのベクトル検索機能を必要とせず、ベクトルのインデックスの管理を受け入れる場合は、AI Search が魅力的な選択肢となる可能性があります。
従来のデータベース ソリューションを選択した場合、どのタイプのデータベース サービスを使用するかは、主にチームのスキル セットと現在運用しているデータベースによって決まります。 MongoDB などの特定の種類のデータベースを既に使用している場合は、その同じ種類のデータベースを使用することが、シナリオにとって最も簡単な解決策となる可能性があります。 「機能マトリックス」セクションに示すように、各データベース サービスにはベクトル検索に固有の機能と制限があります。 この情報を確認して、希望するデータベースの種類が必要な機能をサポートしていることを確認してください。
コストの懸念が推進要因である場合は、新しいサービスやデータベース サービスの他のインスタンスを導入すると、新たな正味コストと複雑さが追加される可能性があるため、既存の設計を維持することがシナリオに最も適していると考えられます。 現在のデータベースをベクトル検索に使用すると、専用サービスを使用するよりもコストへの影響が少なくなる可能性があります。
AI Search ではなく従来のデータベースを使用することを選択した場合、一部の高度な検索機能は既定では利用できません。 たとえば、再ランク付けやハイブリッド検索を実行したい場合は、Transact-SQL (T-SQL) またはその他のコーディングを通じてその機能を有効にします。
機能のマトリックス
このセクションの表は、機能の主な違いをまとめたものです。
基本機能
ベクトル データ型、近似最近傍 (ANN) ベクトル インデックス、ベクトル ディメンション制限、複数のベクトル フィールド、および複数のベクトル インデックスのネイティブ サポートは、サービス間で異なる場合があります。 ワークロードの要件には、これらの特定の機能の一部が必要な場合があります。 次の表に示すように、各 Azure サービスの基本的なベクトル機能を理解します。
機能 | PostgreSQL 用 Azure Cosmos DB | NoSQL 用 Azure Cosmos DB | Azure Cosmos DB for MongoDB (仮想コア) | Azure Database for PostgreSQL (Flex) | Azure AI Search | Azure SQL データベース |
---|---|---|---|---|---|---|
組み込みのベクトル検索 | はい 1 | はい | はい 2 | はい 1 | はい 3 | はい 4 |
ベクトル データ型 | はい | イエス | イエス | イエス | はい | いいえ |
ディメンションの制限 6 | 16,000 7 または 2000 | 5058 または 4096 | 2,000 | 16,000 7 または 2000 | 3,072 | 1998 (プレビュー)5 |
複数のベクトル フィールド | はい | はい | いいえ | イエス | イエス | はい |
複数のベクトル インデックス | はい | はい | いいえ | イエス | イエス | はい |
- "pgvector" は、PostgreSQL の拡張機能であるベクトル検索をサポートしています。
- Azure Cosmos DB for MongoDB 仮想コアの組み込みでベクトル検索を使用します。
- Azure AI Search のベクター
- ネイティブ ベクトル検索は Azure SQL Database の早期導入者プレビューで利用可能
- ベクトルは VARBINARY(8000) 列または変数に格納できます。
- OpenAI の埋め込みモデル、text-embedding-ada-002 と text-embedding-3-small の両方で 1536、text-embedding-3-large の場合は 3072。 Azure AI Vision マルチモーダル埋め込みモデルの場合は、画像とテキストの両方に対して 1024。
- ベクトルには、最大 16,000 個のディメンションを含めることができます。 ただし、"IVFFlat" と "HNSW" を使用するインデックスでは、最大 2,000 ディメンションのベクターがサポートされます。
- フラット インデックス タイプでインデックス付けされたベクトルの最大ディメンション数は 505 です。 quantizedFlat または DiskANN インデックス型でインデックス付けされたベクトルの最大インデックス数は 4,096 です。
Search メソッド
ワークロードでは、多くの場合、ベクトル検索と全文検索、さらにはハイブリッド検索 (全文検索またはセマンティック検索およびベクトル検索) を組み合わせる必要があります。 ハイブリッド検索と再ランク付けの組み合わせにより、ワークロードの高い精度が実現します。 独自のコードを使用してハイブリッド検索と再ランク付けを手動で実装することも、ベクトル ストアがこのワークロード要件をどのようにサポートするかを検討することもできます。
検索メソッド | PostgreSQL 用 Azure Cosmos DB | NoSQL 用 Azure Cosmos DB | Azure Cosmos DB for MongoDB (仮想コア) | Azure Database for PostgreSQL (Flex) | Azure AI Search | Azure SQL データベース |
---|---|---|---|---|---|---|
フルテキスト検索 | はい 1 | いいえ | はい 2 | はい 1 | はい 3 | はい 4 |
ハイブリッド検索 | はい 5 | いいえ | いいえ | はい 5 | はい 6 | はい 7 |
組み込みの再ランク付け | いいえ | いいえ | いいえ | いいえ | はい 8 | いいえ |
- PostgreSQL のフルテキスト検索
- Azure Cosmos DB for MongoDB 仮想コアのテキスト インデックスを使用した検索とクエリ。
- フルテキスト検索の概要
- SQL Server 上のベクトル データ
- ファースト クラスの機能として提供されていませんが、 サンプル コードが提供されます。
- ハイブリッド検索 (フルテキスト検索、ベクトル検索、セマンティック ランク付けの組み合わせ) は、ファーストクラスの機能として提供されます。
- Azure SQL データベースと SQL Server のハイブリッド検索の例。
- セマンティック ランク付けと呼ばれる再ランク付けは、フルテキスト検索および/またはベクトル検索の結果を再ランク付けするためのファーストクラスの機能です。
ベクトル データ インデックス作成アルゴリズム
ベクトル データのインデックス作成は、ベクトルを効率的に格納および取得する機能です。 インデックス作成はデータ ソースの類似検索とニアレストネイバー クエリの速度と精度に影響を与えるため、この機能は重要です。
インデックスは通常、完全な k 近傍法 (Ek-NN) または ANN アルゴリズムに基づいています。 Ek-NN は、すべてのデータ ポイントを 1 つずつ網羅的に検索し、正確な K 近傍法を返します。 Ek-NN は、少量のデータでミリ秒単位で動作しますが、大量のデータの場合、待機時間が発生する場合があります。
DiskANN、HNSW、IVFFlat は ANN アルゴリズムのインデックスです。 適切なインデックス付け戦略を選択するには、データセットの性質、クエリの特定の要件、利用可能なリソースなどのさまざまな要素を慎重に考慮する必要があります。 DiskANN は、データセットの変更に適応し、計算リソースを節約できます。 HNSW は、高速なクエリ応答を必要とし、データセットの変更に適応できるシステムに優れています。 IVFFlat は、ハードウェア リソースが限られている環境、またはクエリ量が多くない環境で効果的です。
次の表から、どのような種類のベクトル データ インデックスが提供されているかを理解してください。
インデックス作成のアプローチ | PostgreSQL 用 Azure Cosmos DB | NoSQL 用 Azure Cosmos DB | Azure Cosmos DB for MongoDB (仮想コア) | Azure Database for PostgreSQL (Flex) | Azure AI Search | Azure SQL データベース |
---|---|---|---|---|---|---|
DiskANN | いいえ | 有効 | いいえ | いいえ | いいえ | いいえ |
網羅的 K ニアレストネイバー (EKNN) | はい | イエス | イエス | イエス | イエス | はい |
階層ナビゲーション可能な小さい世界 (HNSW) | はい | いいえ | はい (プレビュー)1 | はい | はい | いいえ |
IVFflat | はい | いいえ | イエス | はい | いいえ | いいえ |
その他 | - | flat、quantizedFlat2 | ベクトル フィールド制限 3 ベクトル インデックス制限 4 |
- | - | 外部ライブラリを使用可能5 |
- Azure Cosmos DB for MongoDB - ベクトル検索の概要
- ベクトル インデックス ポリシー
- コンテナーごとに使用できるベクトル フィールドは 1 つだけです。
- コンテナーごとに使用できるベクトル インデックスは 1 つだけです。
- Scikit Learn や FAISS などの外部ライブラリを使用してインデックスを作成可能
類似性と距離の計算機能
ベクトル検索には、コサイン類似度、ドット積、ユークリッド距離の計算方法があります。 これらの方法は、2 つのベクトル間の類似度または 2 つのベクトル間の距離を計算するために使用されます。
予備データ分析ではメトリクスとユークリッド距離の両方の利点が得られ、データ構造に関するさまざまな洞察を抽出できますが、テキスト分類は一般にユークリッド距離でより適切に実行されます。 特定のテキストに最も類似したテキストの検索は、通常、コサイン類似度を使用するとより適切に機能します。
Azure OpenAI サービスの埋め込みでは、コサイン類似度を用いてドキュメントとクエリの類似性が計算されます。
組み込みのベクトル比較計算 | PostgreSQL 用 Azure Cosmos DB | NoSQL 用 Azure Cosmos DB | Azure Cosmos DB for MongoDB (仮想コア) | Azure Database for PostgreSQL (Flex) | Azure AI Search | Azure SQL データベース |
---|---|---|---|---|---|---|
コサイン類似度 | はい | 可1 | ○ | イエス | はい | はい 2 |
ユークリッド距離 (L2 距離) | はい | 可1 | ○ | イエス | はい | はい 2 |
ドット積 | はい | 可1 | ○ | イエス | はい | はい 2 |
Azure OpenAI とその他のコンポーネントとの統合
ベクトル検索を実装する場合は、他の Microsoft コンポーネントとのリンクも検討できます。 たとえば、Azure OpenAI Service は、データのベクトルを作成し、ベクトル類似検索用のクエリを入力するのに役立ちます。
機能 | PostgreSQL 用 Azure Cosmos DB | NoSQL 用 Azure Cosmos DB | Azure Cosmos DB for MongoDB (仮想コア) | Azure Database for PostgreSQL (Flex) | Azure AI Search | Azure SQL データベース |
---|---|---|---|---|---|---|
Azure OpenAI Service - 独自のデータを追加する | いいえ | いいえ | はい 1 | いいえ | はい 2 | いいえ |
Azure OpenAI を使用したベクトル埋め込み | いいえ | いいえ | いいえ | はい 3 | はい 4 | はい 5 |
プロンプト フローとの統合 | いいえ | いいえ | いいえ | いいえ | はい 6 | いいえ |
セマンティック カーネルとの統合 | はい 7 | はい8 | はい9 | はい 7 | はい 10 | はい 11 |
- Azure Cosmos DB for MongoDB (仮想コア) は、データ上の Azure OpenAI のデータ ソースとしてサポートされています。
- Azure AI 検索は、データに対する Azure OpenAI のデータ ソースとしてサポートされています。
- Azure AI 拡張機能 (プレビュー) を利用できます。
- Azure AI Search には、チャンクされたテキストをベクター化するスキルが用意されています。
- 埋め込みモデル デプロイ用のストアド プロシージャを作成できます。
- ベクトル DB 参照ツールでベクトル データベースとしてサポートされます。
- メモリ コネクタとベクトル データベース コネクタ (C#) としてサポートされます。
- メモリ コネクタとベクトル データベース コネクタ (C#, Python) としてサポートされます。
- ベクトル データベース コネクタ (C#、Python) としてサポートされます。
- メモリ コネクタとベクトル データベース コネクタ (C#, Python) としてサポートされます。
- メモリ コネクタとしてサポートされます。
共同作成者
この記事は、Microsoft によって保守されています。 当初の寄稿者は以下のとおりです。
プリンシパルの作成者:
その他の共同作成者:
- Kruti Mehta | カスタマー エンジニア
パブリックでない LinkedIn プロファイルを表示するには、LinkedIn にサインインします。
次のステップ
Azure AI Search でのナレッジ マイニングの実装。 このラーニング パスでは、Azure AI Search の使用方法について説明します。