ベクトル データベース
ヒント
最新のベクトル データベースおよび RAG パターン アプリのサンプルについては、新しいサンプル ギャラリーのをご覧ください
適用対象: NoSQL MongoDB 仮想コア PostgreSQL
ベクトル データベースは、自然言語処理、動画と画像の認識、レコメンデーション システム、検索など、分析および生成 AI のさまざまな領域や状況で使用されています。
2023 年に注目すべきソフトウェアのトレンドは AI の強化です。これは、多くの場合、既存の技術スタックに専用のスタンドアロン ベクトル データベースを組み込むことで実現します。 この記事では、ベクトル データベースとは何か説明するとともに、特にマルチモーダル データを処理する場合に、既に使用している NoSQL データベースやリレーショナル データベースに統合されたベクトル データベースを使用する、別のアーキテクチャについても説明します。 このアプローチにより、コストを削減できるだけでなく、データの整合性、スケーラビリティ、パフォーマンスを向上させることができます。
ヒント
データの整合性、スケーラビリティ、パフォーマンスはデータ集中型アプリケーションにとって非常に重要であるため、OpenAI は Azure Cosmos DB 上に ChatGPT サービスを構築することを選択しました。 数ミリ秒 (1 桁台) の応答時間、自動および即時のスケーラビリティがもたらされ、あらゆるスケールで速度が保証されることに加え、統合されたベクトル データベースも活用できます。 実装サンプルを参照して、無料で試してみてください。
ベクトル データベースとは
ベクトル データベースは、高ディメンション空間におけるデータの数学的表現であるベクトル埋め込みを格納および管理するように設計されたデータベースです。 この空間では、各ディメンションがデータの特徴に対応しており、高度なデータを表現するために数万ディメンションが使われる場合があります。 この空間内のベクトルの位置は、その特性を表します。 単語、フレーズ、ドキュメント全体、画像、オーディオ、その他の種類のデータはすべてベクトル化できます。 これらのベクトル埋め込みは、類似性検索、マルチモーダル検索、レコメンデーション エンジン、大規模言語モデル (LLM) などで使われます。
ベクトル データベースでは、埋め込みがインデックス化され、ベクトルの距離や類似性に基づいてベクトル検索アルゴリズムを通じてクエリが実行されます。 最も関連性の高いデータを識別するには、堅牢なメカニズムが必要です。 既知のベクトル検索アルゴリズムには、階層ナビゲーション可能な小さい世界 (HNSW)、反転ファイル (IVF)、DiskANN などがあります。
統合ベクトル データベースと純粋なベクトル データベース
ベクトル データベースの実装には、純粋なベクトル データベースと、NoSQL またはリレーショナル データベースの統合ベクトル データベースという 2 つの一般的な種類があります。
純粋なベクトル データベースは、ベクトル埋め込みを少量のメタデータと共に効率的に格納して管理できるように設計されています。これは、埋め込みの派生元であるデータ ソースからは切り離されています。
高パフォーマンスの NoSQL またはリレーショナル データベースに統合されたベクトル データベースは、追加の機能を備えています。 NoSQL またはリレーショナル データベースの統合ベクトル データベースでは、対応する元のデータと共に埋め込みを保存し、インデックスを付けて、クエリを実行できます。 この方法により、データを別の純粋なベクトル データベースに複製する余分なコストがかかりません。 さらに、ベクトル埋め込みと元のデータが一緒に保持されるため、マルチモーダル データの操作が簡略化され、データの整合性、スケール、パフォーマンスを向上させることができます。 スキーマの柔軟性と統合ベクトル データベースを備えたパフォーマンスの高いデータベースは、AI エージェントにまさに最適です。
ベクトル データベースのユース ケース
ベクトル データベースは、自然言語処理、動画と画像の認識、レコメンデーション システム、検索など、分析および生成 AI のさまざまな領域や状況で使用されています。たとえば、ベクトル データベースを使用して次のことを行うことができます。
- コンテンツ、テーマ、センチメント、スタイルに基づく類似の画像、ドキュメント、楽曲の特定
- 特徴、機能、ユーザー グループに基づく類似製品の特定
- 個人の好みに基づいたコンテンツ、製品、サービスの推奨
- ユーザー グループの類似性に基づいたコンテンツ、製品、サービスの推奨
- 複雑な要件を満たすための多くの選択肢の中からの最適な潜在オプションの特定
- 一般的なパターンや通常のパターンとは異なるデータの異常や不正なアクティビティの特定
- AI エージェント向けの永続メモリの実装
ヒント
ベクトル データベースのこれらの一般的なユース ケースに加えて、Microsoft の統合ベクトル データベースは、待ち時間の短縮、高スケーラビリティ、高可用性により、運用レベルの LLM キャッシュにも理想的なソリューションです。
LLM とカスタム データまたはドメイン固有の情報を活用した取得拡張生成 (RAG) を可能にするために、ベクトル データベースを使うことが特に一般になっています。 このアプローチにより、次のことが可能になります。
- AI モデルからユーザー プロンプトに対するコンテキストに関連した正確な応答を生成する
- LLM のトークン制限の克服
- 更新されるデータの頻繁な微調整によるコストを削減する
このプロセスには、カスタム データ ソースからの関連情報の抽出と、その情報のプロンプト エンジニアリングを通したモデル要求への統合が含まれます。 LLM への要求の送信前に、ユーザーの入力/クエリ/要求も埋め込みに変換され、データベース内で最も類似した埋め込みを見つけるためにベクトル検索手法が適用されます。 この手法により、データベース内の最も関連性の高いデータ レコードを識別できます。 これらの取得されたレコードはその後、プロンプト エンジニアリングを使用して LLM 要求への入力として提供されます。
ベクトル データベース関連の概念
埋め込み
埋め込みは、機械学習モデルとアルゴリズムで簡単に使用できる特別な形式のデータ表現です。 埋め込みは、テキストの意味論的意味の情報密度の高い表現です。 各埋め込みは浮動小数点数のベクトルであり、ベクトル空間内の 2 つの埋め込み間の距離は、元の形式の 2 つの入力間のセマンティック類似性と相関します。 たとえば、2 つのテキストが似ている場合、それらのベクトル表現も似ているはずです。 埋め込みを元のデータと共に格納できるベクトル データベース拡張機能により、データの整合性、スケール、パフォーマンスが確保されます。 [戻る]
ベクトル検索
ベクトル検索は、プロパティ フィールドの完全一致ではなく、データ特性に基づいて類似項目を検索するのに便利な方法です。 この手法は、類似したテキストの検索、関連する画像の検索、おすすめ候補の作成、異常の検出などのアプリケーションで役立ちます。 これは、Azure OpenAI Embeddings や Hugging Face on Azure などの埋め込み API を使い、機械学習モデルを使って作成したデータのベクトル表現 (数値の一覧) を取得することで機能します。 次に、データ ベクトルとクエリ ベクトル間の距離を測定します。 クエリ ベクトルに最も近いデータ ベクトルは、意味的に最も似ていると判明したものです。 ネイティブ ベクトル検索機能を使うと、他のアプリケーション データと共に高次元ベクトル データの保存、インデックス付け、検索を直接行うための効率的な方法を実現できます。 このアプローチは、データをコストの高い代替ベクトル データベースに移行する必要をなくし、AI 駆動型アプリケーションのシームレスな統合を実現します。 [戻る]
プロンプトとプロンプト エンジニアリング
プロンプトは、LLM への命令、または LLM が構築できるコンテキスト データとして機能する特定のテキストまたは情報を指します。 プロンプトは、質問、ステートメント、コード スニペットなど、さまざまな形式を取る可能性があります。 プロンプトは次のように機能します。
- 命令: LLM に対しディレクティブを提供します
- プライマリ コンテンツ: 処理のために LLM に情報を提供します
- 例: 特定のタスクまたはプロセスにモデルを条件付けするのに役立ちます
- キュー: LLM の出力を正しい方向に方向付けます
- サポート コンテンツ: LLM が出力の生成に使用できる補足情報を表します
シナリオに適したプロンプトを作成するプロセスは、プロンプト エンジニアリングと呼ばれます。 プロンプト エンジニアリングのプロンプトとベスト プラクティスの詳細については、Azure OpenAI Service のプロンプト エンジニアリング手法に関する記事を参照してください。 [戻る]
トークン
トークンは、入力テキストをより小さなセグメントに分割することによって生成されるテキストの小さなチャンクです。 これらのセグメントは、単語、または、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 パターンは次のようになります。
- Azure Cosmos DB for NoSQL ベクトル インデックス プレビューに登録する
- コンテナー ベクトル ポリシーとベクトル インデックスを使って、データベースとコンテナーを設定します。
- Azure Cosmos DB for NoSQL データベースとコンテナーにデータを挿入します
- Azure OpenAI Embeddings を使ってデータ プロパティから埋め込みを作成します
- Azure Cosmos DB for NoSQL をリンクします。
- 埋め込みプロパティに対してベクトル インデックスを作成します
- ユーザー プロンプトに基づいてベクトル類似性検索を実行する関数を作成します
- Azure OpenAI Completions モデルを使用してデータに対する質問の回答を行う
RAG パターンは、プロンプト エンジニアリングを使用して、モデルにより多くのコンテキスト情報を提供することで応答品質を向上させる役割を果たします。 RAG を使用することで、関連する外部ソースを生成プロセスに組み込むことで、モデルがより広範なナレッジ ベースを適用できるため、より包括的で情報に基づいた応答が得られます。 LLM の "グラウンディング" の詳細については、「LLM のグラウンディング」を参照してください。 [戻る]
統合ベクトル データベースの機能を使用して、データに RAG を実装する複数の方法を次に示します。
統合ベクトル データベース機能の実装方法
次の 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 つのデータ ストアで活用しながら、規模に関わらず高精度で低遅延のクエリを実行できます。
リンクとサンプル
- ChatGPT の背後にあるデータベースは何ですか? - Microsoft Mechanics
- Azure Cosmos DB for NoSQL でのベクトル インデックス作成
- VectorDistance システム関数の NoSQL クエリ
- Azure Cosmos DB for NoSQL でベクトル データベース機能をセットアップする方法
- Python - ノートブック チュートリアル
- C# - AKS とセマンティック カーネルを使用して独自の Copilot 入力候補ソリューション アクセラレータを構築する
- C# - 独自の Copilot サンプル アプリとハンズオン ラボを構築する
- Python - ムービー チャットボット
Azure Cosmos DB for MongoDB
他のアプリケーション データと共に高次元ベクトル データの保存、インデックス付け、検索を直接行うための効率的な方法を提供する Azure Cosmos DB for MongoDB (仮想コア アーキテクチャ) にネイティブに統合されたベクトル データベースを使用します。 このアプローチは、データをコストの高い代替ベクトル データベースに移行する必要をなくし、AI 駆動型アプリケーションのシームレスな統合を実現します。
コード サンプル
- セマンティック カーネルを使用して C# で独自の Copilot for Azure Cosmos DB for MongoDB を構築する
- .NET チュートリアル - レシピ チャットボット
- C# RAG pattern - OpenAI Service を Cosmos と統合する
- Python RAG パターン - Azure 製品チャットボット
- Python ノートブック - LangChain を使用したベクトル データベース統合のチュートリアル
- Python ノートブック - LangChain を使用した LLM キャッシュ統合のチュートリアル
- Python - LlamaIndex 統合
- Python - セマンティック カーネル メモリ統合
- Python Notebook - ムービー チャットボット
PostgreSQL 用 API
他のアプリケーション データと共に高次元ベクトル データの保存、インデックス付け、検索を直接行うための効率的な方法を提供する Azure Cosmos DB for PostgreSQL にネイティブに統合されたベクトル データベースを使用します。 このアプローチは、データをコストの高い代替ベクトル データベースに移行する必要をなくし、AI 駆動型アプリケーションのシームレスな統合を実現します。
コード サンプル
次のステップ
Azure AI Advantage の 90 日間の無料試用版と最大 6,000 ドルのスループット クレジット