次の方法で共有


ベクトル データベース

ヒント

最新のベクター データベースと RAG パターン アプリのサンプルについては、 Azure Cosmos DB サンプル ギャラリーを参照してください。

ベクトル データベースは、自然言語処理、動画と画像の認識、レコメンデーション システム、検索など、分析および生成 AI のさまざまな領域や状況で使用されています。

2023 年に注目すべきソフトウェアのトレンドは AI の強化です。これは、多くの場合、既存の技術スタックに専用のスタンドアロン ベクトル データベースを組み込むことで実現します。 この記事では、ベクトル データベースとは何か説明するとともに、特にマルチモーダル データを処理する場合に、既に使用している NoSQL データベースやリレーショナル データベースに統合されたベクトル データベースを使用する、別のアーキテクチャについても説明します。 このアプローチにより、コストを削減できるだけでなく、データの整合性、スケーラビリティ、パフォーマンスを向上させることができます。

ヒント

データの整合性、スケーラビリティ、パフォーマンスはデータ集中型アプリケーションにとって非常に重要であるため、OpenAI は Azure Cosmos DB 上に ChatGPT サービスを構築することを選択しました。 数ミリ秒 (1 桁台) の応答時間、自動および即時のスケーラビリティがもたらされ、あらゆるスケールで速度が保証されることに加え、統合されたベクトル データベースも活用できます。 実装サンプルを参照し、無料で試してください

ベクトル データベースとは

ベクトル データベースは、高ディメンション空間におけるデータの数学的表現であるベクトル埋め込みを格納および管理するように設計されたデータベースです。 この空間では、各ディメンションがデータの特徴に対応しており、高度なデータを表現するために数万ディメンションが使われる場合があります。 この空間内のベクトルの位置は、その特性を表します。 単語、フレーズ、ドキュメント全体、画像、オーディオ、その他の種類のデータはすべてベクトル化できます。 これらのベクトル埋め込みは、類似性検索、マルチモーダル検索、レコメンデーション エンジン、大規模言語モデル (LLM) などで使われます。

ベクトル データベースでは、埋め込みがインデックス化され、ベクトルの距離や類似性に基づいてベクトル検索アルゴリズムを通じてクエリが実行されます。 最も関連性の高いデータを識別するには、堅牢なメカニズムが必要です。 よく知られているベクター検索アルゴリズムには、階層ナビゲーション可能 Small World (HNSW)、反転ファイル (IVF)、DiskANN などがあります。

統合ベクトル データベースと純粋なベクトル データベース

ベクター データベースの実装には、純粋ベクター データベースと NoSQL またはリレーショナル データベースの統合ベクター データベースの 2 つの一般的な種類があります。

  • 純粋なベクター データベースは、ベクター埋め込みを少量のメタデータと共に効率的に格納および管理するように設計されています。埋め込みの派生元のデータ ソースとは別です。

  • パフォーマンスの高い NoSQL またはリレーショナル データベースに 統合された ベクター データベースには、追加の機能が用意されています。 NoSQL またはリレーショナル データベースの統合ベクトル データベースでは、対応する元のデータと共に埋め込みを保存し、インデックスを付けて、クエリを実行できます。 この方法により、データを別の純粋なベクトル データベースに複製する余分なコストがかかりません。 さらに、ベクトル埋め込みと元のデータが一緒に保持されるため、マルチモーダル データの操作が簡略化され、データの整合性、スケール、パフォーマンスを向上させることができます。 スキーマの柔軟性と統合ベクトル データベースを備えたパフォーマンスの高いデータベースは、AI エージェントにまさに最適です。

ベクトル データベースのユース ケース

ベクター データベースは、自然言語処理、ビデオと画像認識、レコメンデーション システム、検索など、分析および生成 AI 全体で多数のドメインと状況で使用されます。 たとえば、ベクトル データベースを使用して次のことを行うことができます。

  • コンテンツ、テーマ、センチメント、スタイルに基づいて類似の画像、ドキュメント、曲を識別する
  • 特性、機能、およびユーザー グループに基づいて類似製品を識別する
  • 個人の好みに基づいてコンテンツ、製品、またはサービスを推奨する
  • ユーザー グループの類似点に基づいてコンテンツ、製品、またはサービスを推奨する
  • 大規模な選択肢の中から、要求に適した最善の候補を見つけ出し、複雑な条件を満たす方法を探る。
  • 主要なパターンまたは通常のパターンとは異なるデータの異常または不正なアクティビティを特定する
  • AI エージェントの永続メモリを実装する

ヒント

ベクトル データベースのこれらの一般的なユース ケースに加えて、Microsoft の統合ベクトル データベースは、待ち時間の短縮、高スケーラビリティ、高可用性により、運用レベルの LLM キャッシュにも理想的なソリューションです。

ベクター データベースは、LLM とカスタム データまたはドメイン固有の情報を利用する 取得拡張生成 (RAG) を有効にするために特に一般的です。 このアプローチにより、次のことが可能になります。

  • AI モデルからユーザー プロンプトに対するコンテキストに関連した正確な応答を生成する
  • LLM のトークン制限の克服
  • 更新されるデータの頻繁な微調整によるコストを削減する

このプロセスには、カスタム データ ソースからの関連情報の抽出と、その情報のプロンプト エンジニアリングを通したモデル要求への統合が含まれます。 LLM への要求の送信前に、ユーザーの入力/クエリ/要求も埋め込みに変換され、データベース内で最も類似した埋め込みを見つけるためにベクトル検索手法が適用されます。 この手法により、データベース内の最も関連性の高いデータ レコードを識別できます。 これらの取得されたレコードはその後、プロンプト エンジニアリングを使用して LLM 要求への入力として提供されます。

埋め込み

埋め込みは、機械学習モデルとアルゴリズムで簡単に使用できる特別な形式のデータ表現です。 埋め込みは、テキストのセマンティックな意味の情報密度の高い表現です。 各埋め込みは浮動小数点数のベクトルであり、ベクトル空間内の 2 つの埋め込み間の距離は、元の形式の 2 つの入力間のセマンティック類似性と相関します。 たとえば、2 つのテキストが似ている場合、それらのベクトル表現も似ているはずです。 埋め込みを元のデータと共に格納できるベクトル データベース拡張機能により、データの整合性、スケール、パフォーマンスが確保されます。

ベクトル検索は、プロパティ フィールドの完全一致ではなく、データ特性に基づいて類似項目を検索するのに便利な方法です。 この手法は、類似したテキストの検索、関連する画像の検索、おすすめ候補の作成、異常の検出などのアプリケーションで役立ちます。

これは、 Azure OpenAI EmbeddingsHugging Face on Azure などの埋め込み API を使用して、機械学習モデルで作成したデータのベクター表現 (数値のリスト) を取得することによって機能します。 次に、データ ベクトルとクエリ ベクトル間の距離を測定します。 クエリ ベクトルに最も近いデータ ベクトルは、意味的に最も似ていると判明したものです。

ネイティブ ベクトル検索機能を使うと、他のアプリケーション データと共に高次元ベクトル データの保存、インデックス付け、検索を直接行うための効率的な方法を実現できます。 このアプローチは、データをコストの高い代替ベクトル データベースに移行する必要をなくし、AI 駆動型アプリケーションのシームレスな統合を実現します。

プロンプトとプロンプト エンジニアリング

プロンプトは、LLM への命令、または LLM が構築できるコンテキスト データとして機能する特定のテキストまたは情報を指します。 プロンプトは、質問、ステートメント、コード スニペットなど、さまざまな形式を取る可能性があります。 プロンプトは次のように機能します。

  • LLMに指示を与える命令
  • 処理のために LLM に情報を提供するプライマリ コンテンツ
  • 特定のタスクまたはプロセスにモデルを条件付けするのに役立つ例
  • LLM の出力を正しい方向に向けるキュー
  • LLM が出力の生成に使用できる補足情報を表すサポート コンテンツ

シナリオに適したプロンプトを作成するプロセスは、プロンプト エンジニアリングと呼ばれます。 プロンプト エンジニアリングのプロンプトとベスト プラクティスの詳細については、「 システム メッセージの設計」を参照してください。

トークン

トークンは、入力テキストをより小さなセグメントに分割することによって生成されるテキストの小さなチャンクです。 これらのセグメントは、単語、または、1 文字から単語全体までの異なる長さを持つ文字のグループから成ります。 たとえば、hamburger という単語は、ham、bur、ger などのトークンに分割され、pear のような短くて一般的な単語は 1 つのトークンと見なされます。 ChatGPT、GPT-3.5、GPT-4 などの LLM は、処理のために単語を複数のトークンに分割します。 [戻る]

検索拡張生成

取得拡張生成 (RAG) は、ベクトル データベースに格納されているものなど、グラウンディング データを提供するベクトル検索のような情報取得システムを追加することによって、ChatGPT、GPT-3.5、または GPT-4 などの LLM の機能を拡張するアーキテクチャです。 このアプローチにより、LLM は、ベクトル化されたドキュメント、画像、オーディオ、動画などから取得したカスタム データに基づいて、コンテキストに関連した正確な応答を生成できます。

Azure Cosmos DB for NoSQL を使用した単純な RAG パターンでは、次の可能性があります。

  1. Azure Cosmos DB NoSQL ベクター インデックスを有効にする
  2. コンテナー ベクター ポリシーとベクター インデックスを使用してデータベースとコンテナーを設定する
  3. Azure Cosmos DB for NoSQL データベースとコンテナーにデータを挿入します
  4. Azure OpenAI Embeddings を使ってデータ プロパティから埋め込みを作成します
  5. Azure Cosmos DB for NoSQL をリンクします。
  6. 埋め込みプロパティに対してベクトル インデックスを作成します
  7. ユーザー プロンプトに基づいてベクトル類似性検索を実行する関数を作成します
  8. Azure OpenAI Completions モデルを使用してデータに対する質問の回答を行う

RAG パターンは、プロンプト エンジニアリングを使用して、モデルにより多くのコンテキスト情報を提供することで応答品質を向上させる役割を果たします。 RAG を使用することで、関連する外部ソースを生成プロセスに組み込むことで、モデルがより広範なナレッジ ベースを適用できるため、より包括的で情報に基づいた応答が得られます。 詳細については、「LLMの基盤」を参照してください。

統合ベクトル データベース機能の実装方法

次の Azure Cosmos DB API に統合ベクトル データベース機能を実装できます。

NoSQL API

Azure Cosmos DB for NoSQL は、世界初のサーバーレス NoSQL ベクトル データベースです。 ベクターとデータを Azure Cosmos DB for NoSQL に統合されたベクター データベース機能と共に 格納します。この機能を使用すると、Microsoft Research によって開発された一連の高性能ベクター インデックスアルゴリズムである DiskANN に基づいてベクター インデックスを作成できます。

DiskANN を使用すると、99.999% SLA (HA 対応)、geo レプリケーション、サーバーレスからプロビジョニング済みスループット (RU) へのシームレスな移行など、Azure Cosmos DB for NoSQL のすべての利点を 1 つのデータ ストアで利用しながら、任意のスケールで高精度で待機時間の短いクエリを実行できます。

Azure Cosmos DB for MongoDB

他のアプリケーション データと共に高次元ベクトル データの保存、インデックス付け、検索を直接行うための効率的な方法を提供する Azure Cosmos DB for MongoDB (仮想コア アーキテクチャ) にネイティブに統合されたベクトル データベースを使用します。 このアプローチは、データをコストの高い代替ベクトル データベースに移行する必要をなくし、AI 駆動型アプリケーションのシームレスな統合を実現します。

コード サンプル

PostgreSQLのためのAPI

他のアプリケーション データと共に高次元ベクトル データの保存、インデックス付け、検索を直接行うための効率的な方法を提供する Azure Cosmos DB for PostgreSQL にネイティブに統合されたベクトル データベースを使用します。 このアプローチは、データをコストの高い代替ベクトル データベースに移行する必要をなくし、AI 駆動型アプリケーションのシームレスな統合を実現します。

コード サンプル

次のステップ