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