ベクトル検索コレクションの使用 - Amazon OpenSearch サービス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ベクトル検索コレクションの使用

OpenSearch サーバーレスのベクター検索コレクションタイプは、スケーラブルで高性能な類似検索機能を提供します。これにより、基盤となるベクトルデータベースインフラストラクチャを管理することなく、最新の機械学習 (ML) によって拡張された検索エクスペリエンスや生成人工知能 (AI) アプリケーションを簡単に構築できます。

ベクトル検索コレクションのユースケースには、画像検索、ドキュメント検索、音楽検索、製品のレコメンデーション、動画検索、位置ベースの検索、不正検出、異常検出などがあります。

OpenSearch サーバーレス用のベクターエンジンは、の k-最近隣 (k-NN) 検索機能を搭載しているため OpenSearch、サーバーレス環境のシンプルさで同じ機能を利用できます。このエンジンは k-NN API オペレーションをサポートします。 OpenSearch これらの操作により、全文検索、高度なフィルタリング、集計、地理空間クエリ、データの高速取得のためのネストされたクエリ、および拡張された検索結果を利用できます。

ベクトルエンジンは、ユークリッド距離、コサイン類似度、ドット積などの距離メトリクスを提供し、16,000 次元に対応できます。数値、ブール値、日付、キーワード、ジオポイントなどのさまざまなデータ型を持つフィールドを保存できます。また、保存されたベクトルにさらにコンテキストを追加するための説明情報用のテキストを含むフィールドを保存することもできます。データ型を同一場所に配置することで、複雑さが軽減され、保守性が向上するとともに、データの重複、バージョン互換性の問題、ライセンスの問題を回避できます。

ベクトル検索コレクションの開始方法

このチュートリアルでは、次のステップを実行して、ベクトル埋め込みをリアルタイムで保存、検索、取得します。

ステップ 1: アクセス許可を設定する

このチュートリアルを完了する ( OpenSearch そして一般的にサーバーレスを使用する) には、正しい AWS Identity and Access Management (IAM) 権限が必要です。このチュートリアルでは、コレクションを作成し、データをアップロードして検索を行い、最後にそのコレクションを削除します。

ユーザーまたはロールには、以下の最低限の許可を含む ID ベースのポリシーが、アタッチされている必要があります。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "aoss:CreateCollection", "aoss:ListCollections", "aoss:BatchGetCollection", "aoss:DeleteCollection", "aoss:CreateAccessPolicy", "aoss:ListAccessPolicies", "aoss:UpdateAccessPolicy", "aoss:CreateSecurityPolicy", "iam:ListUsers", "iam:ListRoles" ], "Effect": "Allow", "Resource": "*" } ] }

OpenSearch サーバーレス IAM 権限の詳細については、を参照してください。Amazon OpenSearch Serverless 向けの アイデンティティとアクセス管理

ステップ 2: コレクションを作成する

コレクションは、 OpenSearch 特定のワークロードやユースケースをサポートするために連携するインデックスのグループです。

OpenSearch サーバーレスコレクションを作成するには
  1. https://console.aws.amazon.com/aos/home にある Amazon OpenSearch サービスコンソールを開きます。

  2. 左側のナビゲーションペインで [Collections] (コレクション) 、[Create collection] (コレクションを作成) を選択します。

  3. コレクションに [housing] という名前を付けます。

  4. コレクションタイプで、[ベクトル検索] を選択します。詳細については、「コレクションタイプを選択する」を参照してください。

  5. [デプロイのタイプ] で、[冗長性を有効化 (アクティブレプリカ)] をオフにします。これにより、開発モードまたはテストモードでコレクションが作成され、 OpenSearch コレクション内のコンピュートユニット (OCU) の数が 2 つに減ります。このチュートリアルで本番環境を作成する場合は、チェックボックスをオンのままにしてください。

  6. [セキュリティ] で、[簡単作成] を選択してセキュリティ設定を合理化します。ベクトルエンジン内のすべてのデータは、転送中であっても、保管中であっても、デフォルトで暗号化されます。ベクトルエンジンは、きめ細かい (IAM) アクセス許可をサポートしているため、暗号化、ネットワーク、コレクション、インデックスを作成、更新、削除できるユーザーを定義できます。

  7. [次へ] を選択します。

  8. コレクションの設定を確認して、[Submit] (送信) を選択します。コレクションステータスが Active になるまで数分待機します。

ステップ 3: データをアップロードして検索する

インデックスとは、ベクトル埋め込みや他のフィールドを保存、検索、取得する方法を提供する共通のデータスキーマを持つドキュメントのコレクションです。 OpenSearch ダッシュボードの開発ツールコンソール、または Postman や awscurl などの HTTP ツールを使用して、 OpenSearch サーバーレスコレクションのインデックスにデータを作成してアップロードできます。このチュートリアルでは Dev Tools を使用します。

movies コレクションのデータをインデックス化して検索するには
  1. 新しいコレクション用に 1 つのインデックスを作成するには、Dev Tools コンソールで次のリクエストを送信します。デフォルトでは、これにより、nmslib エンジンとユークリッド距離を使用してインデックスが作成されます。

    PUT housing-index { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3 }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } }
  2. 1 つのドキュメントを housing-index にインデックスするために、次のリクエストを送信します。

    POST housing-index/_doc { "housing-vector": [ 10, 20, 30 ], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" }
  3. インデックス内のプロパティに類似したプロパティを検索するには、次のクエリを送信します。

    GET housing-index/_search { "size": 5, "query": { "knn": { "housing-vector": { "vector": [ 10, 20, 30 ], "k": 5 } } } }

ステップ 4: コレクションを削除する

housing コレクションはテスト用のため、試用を終了したら確実に削除してください。

OpenSearch サーバーレスコレクションを削除するには
  1. Amazon OpenSearch サービスコンソールに戻ります

  2. 左側のナビゲーションペインで [コレクション] を選択した後、[プロパティ] コレクションを選択します。

  3. [削除] を選択し、削除を確定します。

フィルタリングされた検索

フィルターを使用して、セマンティック検索の結果を絞り込むことができます。インデックスを作成し、ドキュメントに対してフィルター検索を実行するには、前のチュートリアルの「データをアップロードおよび検索する」を次の手順に置き換えます。他のステップは同じです。フィルターの詳細については、「フィルターを使用した k-NN 検索」を参照してください。

movies コレクションのデータをインデックス化して検索するには
  1. コレクションに 1 つのインデックスを作成するには、Dev Tools コンソールで次のリクエストを送信します。

    PUT housing-index-filtered { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3, "method": { "engine": "faiss", "name": "hnsw" } }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } }
  2. 1 つのドキュメントをインデックスに登録するにはhousing-index-filtered、以下のリクエストを送信します。

    POST housing-index-filtered/_doc { "housing-vector": [ 10, 20, 30 ], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" }
  3. 地理的位置から指定された距離内にある、指定された価格未満のシアトルのアパートのデータを検索するには、次のリクエストを送信します。

    GET housing-index-filtered/_search { "size": 5, "query": { "knn": { "housing-vector": { "vector": [ 0.1, 0.2, 0.3 ], "k": 5, "filter": { "bool": { "must": [ { "query_string": { "query": "Find me 2 bedroom apartment in Seattle under $3000 ", "fields": [ "title" ] } }, { "range": { "price": { "lte": 3000 } } }, { "geo_distance": { "distance": "100miles", "location": { "lat": 48, "lon": 121 } } } ] } } } } } }

数十億規模のワークロード

ベクトル検索コレクションは、数十億のベクトルを使用するワークロードをサポートします。スケーリングのためにインデックスを再作成する必要はありません。自動スケーリングが自動的にこれを実行します。次元数の多いベクトルが数百万(またはそれ以上)あり、200を超えるOCUが必要な場合は、AWS Support に連絡して、 OpenSearch アカウントの最大計算単位(OCU)を引き上げてください。

制限事項

ベクトル検索コレクションには次の制限があります。

  • ベクトル検索コレクションは、Apache Lucene ANN エンジンをサポートしていません。

  • ベクター検索コレクションは Faiss を含む HNSW アルゴリズムのみをサポートし、IVF と IVFQ はサポートしていません。

  • ベクトル検索コレクションは、ウォームアップ、統計、モデルトレーニング API をサポートしていません。

  • ベクトル検索コレクションは、インラインスクリプトまたはストアドスクリプトをサポートしていません。

  • インデックス数情報は、 AWS Management Console ベクター検索コレクションにはありません。

  • ベクトル検索コレクションのインデックスの更新間隔は 60 秒です。

次のステップ

これで、ベクトル検索コレクションおよびインデックスデータの作成方法がわかりました。さらに、次のいくつかの演習も有用です。

  • OpenSearch Python クライアントを使用してベクター検索コレクションを操作します。に関するこのチュートリアルを参照してくださいGitHub

  • OpenSearch Java クライアントを使用してベクター検索コレクションを操作します。に関するこのチュートリアルを参照してくださいGitHub

  • LangChain OpenSearch ベクターストアとして使用するように設定します。 LangChain 言語モデルを利用したアプリケーションを開発するためのオープンソースフレームワークです。詳細については、LangChain ドキュメントを参照してください