Amazon Web Services ブログ

Amazon Titan Text Embeddings V2、Amazon OpenSearch Serverless、および Amazon Bedrock Knowledge Bases における バイナリ埋め込みを使用した費用対効果の高い RAG アプリケーションの構築

本投稿は 2024 年 11 月 18 日に AWS Machine Learning Blog に投稿された Build cost-effective RAG applications with Binary Embeddings in Amazon Titan Text Embeddings V2, Amazon OpenSearch Serverless, and Amazon Bedrock Knowledge Bases を翻訳したものです。


本日、Amazon Bedrock Knowledge BasesAmazon OpenSearch Serverless における Amazon Titan Text Embeddings V2 用のバイナリ埋め込みの提供開始を発表できることを嬉しく思います。Amazon Bedrock でのバイナリ埋め込みと OpenSearch Serverless でのバイナリベクトルストアのサポートにより、Amazon Bedrock Knowledge Bases でバイナリ埋め込みとバイナリベクトルストアを使用した Retrieval Augmented Generation (RAG) アプリケーションを構築し、メモリ使用量と全体的なコストを削減することができます。

Amazon Bedrock は、主要な AI 企業が提供する様々な高性能な 基盤モデル (foundation models – FMs) にアクセスして使用するための単一の API を提供する完全マネージド型サービスです。Amazon Bedrock は、セキュリティ、プライバシー、責任ある AI を備えた生成 AI アプリケーションを構築するための幅広い機能も提供します。Amazon Bedrock Knowledge Bases を使用することで、FM やエージェントは RAG のために企業の非公開データソースから文脈的な情報を取得することができます。RAG は、基盤モデルがより関連性が高く、正確で、カスタマイズされた応答を提供するために役立ちます。

Amazon Titan Text Embeddings モデルは、ドキュメント、段落、文章の意味的表現を生成します。Amazon Titan Text Embeddings は、テキスト本文を入力として受け取り、1,024 (デフォルト)、512、または 256 次元のベクトルを生成します。Amazon Titan Text Embeddings は、高速な検索向けの、低レイテンシを重視したエンドポイントの呼び出し (検索ステップ中での利用を推奨) と、高速なインデックス作成のための、スループットを重視したバッチジョブを通じて利用可能です。Binary Embeddings により、Amazon Titan Text Embeddings V2 は、データを各次元ごとに単一のバイナリ桁 (0 または 1) としてエンコードした、バイナリベクトルとして表現します。このバイナリ表現により、高次元のデータは、格納と計算においてより効率的な形式に変換されます。

Amazon OpenSearch Serverless は、Amazon OpenSearch Service の serverless デプロイメントオプションです。OpenSearch Serverless は、k-nearest neighbor (kNN) プラグインを使用してインタラクティブなログ分析、リアルタイムアプリケーションモニタリング、Web サイト検索、およびベクトル検索を簡単に実行できる完全マネージド型サービスです。exact および approximate nearest-neighbor アルゴリズムと、複数のストレージおよびマッチングエンジンをサポートしています。基盤となるインフラストラクチャを管理することなく、最新の機械学習 (ML) を活用した検索体験、生成 AI アプリケーション、および分析ワークロードを簡単に構築することができます。

OpenSearch Serverless kNN プラグインは、32 ビット浮動小数点ベクトル (FP32) に加えて、16 ビット (FP16) およびバイナリベクトルをサポートするようになりました。kNN ベクターフィールドタイプを binary に設定することで、Amazon Titan Text Embeddings V2 によって生成されたバイナリベクトルを低コストで保存できます。ベクトルは PUT および GET API を使用して OpenSearch Serverless に保存・検索が可能です。

この投稿では、Amazon Titan Text Embedings、Amazon Bedrock Knowledge Bases、および OpenSearch Serverless 全体にわたる新しいバイナリベクトルサポートの利点をまとめ、開始方法に関する情報を紹介します。以下の図は、Amazon Bedrock Knowledge Bases と Amazon OpenSearch Serverless を使用した概略的なアーキテクチャ図です。

OpenSearch Serverless と Amazon Bedrock Knowledge Bases において、検索品質の低下を最小限に抑えつつ、レイテンシーを短縮し、ストレージコストとメモリ要件を削減することができます。

私たちはバイナリ埋め込みを用いて、Massive Text Embedding Benchmark (MTEB) retrieval data set を実行しました。retrieval data set においては、ストレージを削減しつつ、レイテンシーを 1/25 に短縮する効果がみられました。バイナリ埋め込みは、最大精度 (float32) 埋め込みを使用した結果に対して、再ランキングありで 98.5%、再ランキングなしで 97% の正確性を維持しました。end-to-end RAG ベンチマークにおいては、Amazon Titan Text Embeddings V2 のバイナリ埋め込みは、最大精度埋め込みと比較して、再ランキングありで 99.1%、再ランキングなしで 98.6% の正確性を維持しました。お客様の環境でも、Amazon OpenSearch Serverless と Amazon Titan Text Embeddings V2 のバイナリ埋め込みを使用して、独自にベンチマークを実施することをお勧めします。

Hierarchical Navigable Small Worlds(HNSW)アルゴリズムにおいてバイナリベクトルを使用した OpenSearch Serverless のベンチマークでは、検索用の OpenSearch Computing Units (OCUs) が 50% 削減され、ユーザーのコスト削減につながることが明らかになりました。バイナリインデックスの活用により、検索時間が大幅に短縮されました。従来の検索方法は、リソースを大量に消費する可能性のある L2 距離やコサイン距離などの計算集約的な計算に依存することが多いですが、Amazon OpenSearch Serverless のバイナリインデックスは、より効率的なアプローチであるハミング距離を使用して検索を実行します。

以下のセクションでは、Amazon Titan Text Embeddings での バイナリ埋め込み、ベクトルエンジンにおけるバイナリベクトル (および FP16) と、 Amazon Bedrock Knowledge Bases での binary embedding オプションの使用方法について説明します。Amazon Bedrock Knowledge Bases の詳細については、「ナレッジベースは、Amazon Bedrock でフルマネージド型の RAG エクスペリエンスを提供するようになりました」をご覧ください。

Amazon Titan Text Embeddings V2 で Binary Embeddings を生成する

Amazon Titan Text Embeddings V2 は現在バイナリ埋め込みをサポートしており、100 以上の言語のテキストサポートを備え、異なる次元サイズ (1024、512、256) における検索性能と精度が最適化されています。デフォルトでは、Amazon Titan Text Embeddings モデルは Floating Point 32 bit (FP32) 精度で埋め込みを生成します。1024 次元の FP32 埋め込みベクトルを使用することで、より良い精度を達成できますが、検索ユースケースではストレージ要件と関連コストも増大します。

コードでバイナリ埋め込みを生成するには、Amazon Titan Text Embeddings V2 への invoke_model API リクエストに適切な embeddingTypes パラメータを追加します。

import json
import boto3
import numpy as np
rt_client = boto3.client("bedrock-runtime")

response = rt_client.invoke_model(modelId="amazon.titan-embed-text-v2:0", 
          body=json.dumps(
               {
                   "inputText":"What is Amazon Bedrock?",
                   "embeddingTypes": ["binary","float"]
               }))['body'].read()

embedding = np.array(json.loads(response)["embeddingsByType"]["binary"], dtype=np.int8)

上記のリクエストのように、バイナリ埋め込みのみ、またはバイナリと fp32 の両方の埋め込みを要求することができます。得られる埋め込みは、以下のような 1024 の要素からなるバイナリベクトルです。

array([0, 1, 1, ..., 0, 0, 0], dtype=int8)

詳細とサンプルコードについては、Amazon Titan Embeddings Text を参照してください。

Binary Vector Embeddings で Amazon Bedrock Knowledge Bases を設定する

Amazon Bedrock Knowledge Bases を使用して、1 行もコードを書かずに、Amazon Titan Text Embeddings V2 の Binary Embeddings と Amazon OpenSearch Serverless のバイナリベクトルおよび Floating Point 16 bit (FP16) を利用することができます。以下の手順に従って作業を行ってください。

  1. Amazon Bedrock コンソールで knowledge base を作成します。名前と説明を含む knowledge base の詳細を入力し、関連する AWS Identity and Access Management  (IAM)権限を持つ新規または既存のサービスロールを作成または使用します。サービスロールの作成については、Service roles を参照してください。Choose data source で、以下のスクリーンショットのように Amazon S3 を選択します。Next を選択します。
  2. データソースを設定します。名前と説明を入力します。ソース S3 URI を定義します。Chunking and parsing configurations で、Default を選択します。続行するには Next を選択します。
  3. 埋め込みモデルを選択して knowledge base のセットアップを完了します。このチュートリアルでは、Titan Text Embedding v2 を選択します。Embeddings typeBinary vector embeddings を選択します。Vector dimensions で 1024 を選択します。Quick Create a New Vector Store を選択します。このオプションは、binary データ型をサポートする新しい Amazon OpenSearch Serverless ストアを設定します。

作成後に knowledge base の詳細を確認して、データソースの同期ステータスを監視できます。同期が完了したら、knowledge base をテストして基盤モデルの応答を確認できます。

まとめ

この投稿で説明したように、バイナリ埋め込みは Amazon Bedrock で利用可能な Amazon Titan Text Embeddings V2 モデルのオプションであり、OpenSearch Serverless のバイナリベクトルストアも利用できます。これらの機能により、Amazon Bedrock と OpenSearch Serverless のメモリとディスク需要が大幅に削減され、RAG ソリューションの OCU が少なくなります。また、パフォーマンスが向上し、レイテンシーも改善されますが、full float データ型 (FP32) を使用した場合と比較して結果の精度にある程度の影響があります。精度の低下は最小限ですが、アプリケーションに適しているかどうかを判断する必要があります。具体的な利点は、データ量、検索トラフィック、ストレージ要件などの要因によって異なりますが、この投稿で説明した例は潜在的な価値を示しています。

Amazon Open Search Serverless、Amazon Bedrock Knowledge Bases、および Amazon Titan Text Embeddings v2 でのバイナリ埋め込みサポートは、既にこれらのサービスが提供されている全ての AWS リージョンで本日から利用可能です。詳細と今後の更新については Region list をご確認ください。Amazon Knowledge Bases の詳細については、Amazon Bedrock Knowledge Bases 製品ページをご覧ください。Amazon Titan Text Embeddings の詳細については、Amazon Titan in Amazon Bedrock をご覧ください。Amazon OpenSearch Serverless の詳細については、Amazon OpenSearch Serverless 製品ページをご覧ください。価格の詳細については、Amazon Bedrock の料金 ページをご確認ください。

今すぐ Amazon Bedrock コンソールで新機能をお試しください。Amazon Bedrock に関するフィードバックは AWS re:Post または通常の AWS の連絡先を通じてフィードバックを送信してください。また、community.aws で生成 AI ビルダーコミュニティにもご参加ください。


著者について

Shreyas Subramanian はプリンシパルデータサイエンティストです。生成 AIと深層学習を用いた AWS サービスの活用による、お客様の事業課題を解決支援を行っています。大規模な最適化と ML、ML と強化学習を用いた最適化タスクの加速といった分野の経験を持っています。

Ron Widha は、Amazon Bedrock Knowledge Bases のシニアソフトウェア開発マネージャーです。簡単に拡張可能な RAG アプリケーションを構築できるよう、お客様を支援しています

Satish Nandi は、Amazon OpenSearch Service のシニアプロダクトマネージャーです。OpenSearch Serverless に注力しており、ネットワーキング、セキュリティ、AI/ML の分野で長年の経験を持っています。コンピューターサイエンスの学士号とアントレプレナーシップの MBA を取得しています。余暇は、飛行機や ハンググライダーの操縦、バイクに乗ることを楽しんでいます。

Vamshi Vijay Nakkirtha は、OpenSearch Project と Amazon OpenSearch Service に従事しているシニアソフトウェア開発マネージャーです。主な関心事は分散システムです。