Amazon Web Services ブログ

Amazon DocumentDB (MongoDB 互換) のベクトル検索が一般公開されました

11月29日は、Amazon DocumentDB (MongoDB 互換) のベクトル検索の一般提供についてお知らせします。この製品は、ドキュメントデータベース内でミリ秒の応答時間で何百万ものベクトルを保存、索引付け、検索できる新しい組み込み機能です。

ベクトル検索は、機械学習 (ML) で使用される新しい手法で、距離または類似度メトリックを使用してベクトル表現を比較することにより、特定のデータに類似したデータポイントを検索します。ベクトルは、Amazon Bedrock、Amazon SageMaker、およびその他のオープンソースまたは独自の ML サービスでホストされている大規模言語モデル (LLM) から作成された非構造化データを数値で表したものです。このアプローチは、検索拡張生成 (RAG) モデルアプローチを使用して、直感的な検索、製品推奨、パーソナライゼーション、チャットボットなどの生成型人工知能 (AI) アプリケーションを作成するのに役立ちます。たとえば、データセットに映画の個別のドキュメントが含まれている場合、単にキーワードを照合するのではなく、「ボート」、「悲劇」、「実話に基づいた映画」などの共有コンテキストに基づいて、タイタニックに似た映画をセマンティックに検索できます。

Amazon DocumentDB のベクトル検索を使用すると、個別のベクトルデータベースインフラストラクチャを管理する時間とコストをかけることなく、微妙な意味とコンテキストに基づいてデータベースを効果的に検索できます。また、Amazon DocumentDB が提供する、完全に管理された、スケーラブルで、安全で、可用性が高い JSON ベースのドキュメントデータベースも利用できます。

Amazon DocumentDB でベクトル検索を開始する
ベクトル検索機能は、Amazon DocumentDB 5.0 インスタンスベースのクラスターで利用できます。ベクトル検索アプリケーションを実装するには、ドキュメント内のフィールドに埋め込みモデルを使用してベクトルを生成し、ソースデータを Amazon DocumentDB 内に並べて保存します。

次に、ベクトルフィールドにベクトルインデックスを作成します。これにより、類似のベクトルを取得しやすくなり、セマンティック検索を使用して Amazon DocumentDB データベースを検索できます。最後に、ユーザーが送信したクエリは、同じ埋め込みモデルを使用してベクトルに変換され、意味的に類似したドキュメントを取得してクライアントに返します。

Amazon DocumentDB でベクトル検索を使用して簡単なセマンティック検索アプリケーションを実装する方法を見てみましょう。

ステップ 1.Amazon Titan 埋め込みモデルを使用してベクトル埋め込みを作成する
Amazon Titan 埋め込みモデルを使用して埋め込みベクトルを作成してみましょう。Amazon Titan Embeddings モデルは、サーバーレスの生成系 AI サービスである Amazon Bedrock で利用できます。インフラストラクチャを管理することなく、単一の API を使用して簡単にアクセスできます。

prompt = "I love dog and cat."
response = bedrock_runtime.invoke_model(
    body= json.dumps({"inputText": prompt}),
    modelId='amazon.titan-embed-text-v1',
    accept='application/json',
    contentType='application/json'
)
response_body = json.loads(response['body'].read())
embedding = response_body.get('embedding')

返されるベクトル埋め込みは次のようになります。

[0.82421875, -0.6953125, -0.115722656, 0.87890625, 0.05883789, -0.020385742, 0.32421875, -0.00078201294, -0.40234375, 0.44140625, ...]

ステップ 2.ベクトル埋め込みを挿入してベクトルインデックスを作成する
insertMany( [{},...,{}] ) オペレーションを使用して、Amazon DocumentDB のコレクションに追加したいドキュメントのリストを使用して、生成されたベクトル埋め込みを追加できます。

db.collection.insertMany([
    {sentence: "I love a dog and cat.", vectorField: [0.82421875, -0.6953125,...]},
    {sentence: "My dog is very cute.", vectorField: [0.05883789, -0.020385742,...]},
    {sentence: "I write with a pen.", vectorField: [-0.020385742, 0.32421875,...]},
  ...
]);

createIndex コマンドを使用してベクトルインデックスを作成できます。Amazon DocumentDB は、フラット圧縮 (IVFFLAT) ベクトルインデックスを使用した転置ファイルを使用して、近似最近傍検索 (ANN) を実行します。この機能は、ユークリッド、コサイン、内積の 3 つの距離計量をサポートします。ここでは、空間の 2 点間の直線距離の尺度であるユークリッド距離を使用します。ユークリッド距離が小さいほど、ベクトルは互いに近づきます。

db.collection.createIndex (
   { vectorField: "vector" },
   { "name": "index name",
     "vectorOptions": {
        "dimensions": 100, // the number of vector data dimensions
        "similarity": "euclidean", // Or cosine and dotProduct
        "lists": 100 
      }
   }
);

ステップ 3. Amazon DocumentDB からベクトル埋め込みを検索する
$search 内の新しい集計パイプライン演算子を使用して、ドキュメント内の類似のベクトルを検索できるようになりました。「ペットが好き」を検索するサンプルコードは次のとおりです。

db.collection.aggregate ({
  $search: {
    "vectorSearch": {
      "vector": [0.82421875, -0.6953125,...], // Search for ‘I like pets’
      "path": vectorField,
      "k": 5,
      "similarity": "euclidean", // Or cosine and dotProduct
      "probes": 1 // the number of clusters for vector search
      }
     }
   });

これにより、「犬と猫が大好き」などの検索結果が返されます。意味的には似ています。

詳細については、Amazon DocumentDB のドキュメントを参照してください。Amazon DocumentDB によるセマンティックムービー検索など、より実用的な例については、GitHub リポジトリにある Python のソースコードとデータセットをご覧ください。

今すぐご利用いただけます
Amazon DocumentDB のベクトル検索は、Amazon DocumentDB が利用可能なすべての AWS リージョンで Amazon DocumentDB 5.0 インスタンスベースのクラスターを使用しているすべてのお客様に追加費用なしで利用できるようになりました。Amazon DocumentDB への埋め込みの保存、インデックス作成、および検索ベクトルには、標準のコンピューティング、I/O、ストレージ、およびバックアップ料金が適用されます。

詳細については、Amazon DocumentDB のドキュメントを参照してください。フィードバックは、AWS re:Post for Amazon DocumentDB または通常の AWS サポート連絡先から送信してください。

Channy

原文はこちらです。