Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

Amazon S3 Vectors によるRAGの性能/精度を評価してみた

はじめに

こんにちは。データ分析エンジニアの木介です。
今回は、AWS Summit 2025 New Yorkにて発表されたS3 Vectorsについて、既存のベクトルストレージとの比較も含めて紹介していきたいと思います。
aws.amazon.com

S3 Vectorsとは

AWS S3の新機能として提供されるベクトルストレージです。
S3で提供されるため、従来のAWS上で利用できたベクトルストレージであるOpenSearch Serverlessや、Auroraなどと違いランニングコストがかからず、データ量とAPIリクエスト量に応じたコストのみでの運用が可能です。
これによりユースケースによっては大幅にコストの削減を行うことが出来ます。

aws.amazon.com

1. 他ベクトルストレージとのコスト面での比較

ひと月で1GBのストレージ容量と30,000回の検索を行うことを想定した場合の他ベクトルストレージとのコスト比較の例を示します。
AWSのリージョンはバージニア北部で計算をしています。

ベクトルストレージ名 ひと月の総コスト 内訳
S3 Vectors $2.06 ストレージ: $2.00, リクエスト: $0.06
OpenSearch Serverless $175.22 1OCU: $175.2, ストレージ: $0.02
Aurora Serverless v2 $87.83 1ACU: $87.60, ストレージ: $0.10, I/O: $0.13
Pinecone $0(Starter)/$50(Standard) 5インデックス以上利用する場合はStandardプランが必須となる

他ベクトルストレージと比較して圧倒的に安くなることがわかります。

2. 機能面での制限事項

S3 Vectorsは安価で利用できるサービスですが、以下の機能に制限があります。

ベクトルストレージ名 メタデータフィルタリングの検索機能 チャンクサイズの制限 階層チャンキング
S3 Vectors 完全一致検索・範囲検索のみ 500tokens △(デフォルトの設定では不可)
OpenSearch Serverless 部分一致検索など柔軟な検索が可能 なし

メタデータフィルタリングの検索機能
メタデータフィルタリングの検索時にはOpenSearch Serverlessのような部分一致といった柔軟な検索が出来ず、完全一致や範囲検索などのみとなっています。
docs.aws.amazon.com

チャンクサイズの制限
作成できる最大チャンクサイズに500tokensという制限があります。
docs.aws.amazon.com

Bedrock Knowledgebaseによる階層チャンキングの利用
Bedrock KnowledgeBaseのデフォルトの設定では同期時に以下のエラーが発生するため、階層チャンキングが利用できません。

Filterable metadata must have at most 2048 bytes (Service: S3Vectors, Status Code: 400, Request ID:XXXXXX) 

階層チャンキングをBedrock KnowledgeBaseから利用する際には、予め以下の設定のインデックスをS3 Vectorsにて作成する必要があります。

aws s3vectors create-index \
  --vector-bucket-name "bucket-name" \
  --index-name "index-name" \
  --data-type "float32" \
  --dimension 256 \
  --distance-metric "cosine" \
  --metadata-configuration '{"nonFilterableMetadataKeys":["AMAZON_BEDROCK_METADATA"]}'

これは階層チャンキングの親チャンクが格納されるメタデータがデフォルトでは2048バイトまでしか入らないためです。
そのため上記の形で親チャンクが入るメタデータをフィルタリング不可能なメタデータとして指定する必要があります。

docs.aws.amazon.com


上記のほかにもベクトル検索のみ対応しているため、当然Opensearch Serverlessなどが対応しているハイブリッド検索はできません。

3. S3 Vectorsのベストプラクティス

以下でベストプラクティスが紹介されていました。

ベストプラクティス ポイント
リトライ処理 過負荷回避にバックオフ付き再試行を推奨
インデックス分割によるスケーリング テナントや用途別に複数インデックスを使うとスループットが向上
メタデータ設計 参照のみのテキストなどはフィルタリング不可なメタデータとして設定し、パフォーマンス最適化
アクセス制御 テナント別アクセス制限などをインデックス単位のIAM制御 で柔軟に設計可能

docs.aws.amazon.com

特にアクセス制御についてはIAMロールを用いたものが推奨されており、実運用時にも参考になりそうです。

他ベクトルストレージとの速度面での比較

では実際に利用する上でまず気になる検索速度についてOpensearch Serverlessと比較していきます。
検索条件としては以下となり、Bedrock KnowledgeBaseを利用した検索で比較を行います。

  1. データソース:以下のIPAのPDFを含めた約800MBの約1000ファイル
    1. 安全なウェブサイト運営にむけて
    2. ソフトウェア開発データ白書2018-2019
    3. ソフトウェア開発データ白書2018-2019 金融保険業編
    4. ソフトウェア開発データ白書2018-2019 情報通信業編
  2. Embedding Model:Titan Text Embeddingsv2
  3. Embedding Type:浮動小数点ベクトル埋め込み1024次元
  4. Chunking Strategy:固定チャンキング
    1. Chunk Size: 300

計測するクエリとしては、以下のようなバリエーションの質問を用意します。
キャッシュが利用されるケースも考慮し、合計で100種類を作成し、リクエストを行います。

質問例

"製造業における新規開発プロジェクトの工数と工期の関係について"
"製造業の改良開発におけるFP規模と工数の関係"

比較した結果としては以下になります。
比較結果

ベクトルストレージ名 平均時間(s) 最大時間(s) 最小時間(s)
S3 Vectors 0.688 1.599 0.553
OpenSearch Serverless 0.433 0.507 0.383

OpenSearch Serverlessよりは平均で0.2秒、最大で1秒ほど遅い結果となりました。
とはいえドキュメントにある1秒未満の回答がおおむね実現できていることから、おおよそのRAGでは許容できる速度であると思います。

docs.aws.amazon.com

他ベクトルストレージとの精度面での比較

では次に精度面についても比較をしていきます。
ベクトル検索のときのみと、OpenSearch Serverlessをつかったハイブリッド検索との比較について行っていきます。

比較方法としてはBedrock Evaluationsを用いていきます。
aws.amazon.com

1. ベクトル検索による精度比較

まずはベクトル検索のみの精度検証を行います。
先ほどと同様に同じKnowledgebaseの設定で比較を行いました。
指標としては以下の物を利用しました。

  1. Context relevance:取得したテキストが質問に対して文脈的にどの程度関連しているかを測定
  2. Context coverage:取得されたテキストが正解データの全情報をどの程度網羅しているかを測定

以下が比較結果です。

S3 Vectorsの精度

OpenSearch Serverless(ベクトル検索のみ)の精度

同じ検索手法を選択したため、ほぼ同程度の精度となりました。
ベクトル検索のみを利用する場合は精度面でもOpenSearch Serverlessなど既存のベクトルストレージを利用した場合とそん色がないことがわかります。

2. ハイブリッド検索との精度比較

では次にIDなどを含むデータセットを用いて、OpenSearch Serverlessを使ったハイブリッド検索との精度比較を行っていきます。
データセットしては以下のAmazonのレビューをユーザごとにまとめたものを新しく利用しました。

ハイブリッド検索検証用データセット

  1. Amazon Reviews 2023

amazon-reviews-2023.github.io

以下のような約2万8千件製品IDとレビューの組み合わせを利用が利用できるデータセットになります。

product/productId: B000GKXY4S
product/title: Crazy Shape Scissor Set
product/price: unknown
review/userId: A1QA985ULVCQOB
review/profileName: Carleen M. Amadio "Lady Dragonfly"
review/helpfulness: 2/2
review/score: 5.0
review/time: 1314057600
review/summary: Fun for adults too!
review/text: I really enjoy these scissors for my inspiration books that I am making (like collage, but in books) and using these different textures these give is just wonderful, makes a great statement with the pictures and sayings. Want more, perfect for any need you have even for gifts as well. Pretty cool!

精度検証時の質問と回答のペアは以下のようなものを用意し、ハイブリッド検索の特徴であるキーワードの検索精度を重視して評価しました。

評価用データセット

質問:商品ID B000GKXY4Sのレビューの要約を教えてください。
回答:Fun for adults too!

Knowledgebaseの設定は上記のものと変更なく、OpenSearch Serverlessによる検索方法のみハイブリッド検索に指定して検証を行いました。

以下が精度検証結果です。
S3 Vectors(ベクトル検索)の精度

OpenSearch Serverless(ハイブリッド検索)の精度

Context relevance、Context coverageの両方において、ハイブリッド検索を用いたOpenSearch Serverlessによる検索精度がS3 Vectorsのベクトル検索のみよるものよりも優れていることがわかります。

以下がハイブリッド検索では取得できたが、S3 Vectorsによるベクトル検索ではうまく取得できなかった質問例です。

質問例

商品ID B000GKXY4Sのレビューの要約を教えてください。

S3 Vectors(ベクトル検索)の検索結果
⇒質問に含まれるID: B000GKXY4Sを取得できていない。

product/productId: B000FP553C product/title: Kinesio Scissors

OpenSearch Serverless(ハイブリッド検索)の検索結果
⇒質問に含まれるID: B000GKXY4Sを取得できている。

product/productId: B000GKXY4S product/title: Crazy Shape Scissor Set 


S3 Vectorsはベクトル検索しか利用できない関係上、IDや単語のようなキーワードを指定した検索では、検索精度が下がる状況があることが分かりました。

まとめ

S3の新機能であるS3 Vectorsについて既存のベクトルストレージとの比較も交えて紹介しました。
機能に制限はあるものの、ベクトル検索のみであれば十分実現できる機能であり、なによりも安価であるため積極的に利用していきたいですね。

Acroquest Technologyでは、キャリア採用を行っています。

  • Azure OpenAI/Amazon Bedrock等を使った生成AIソリューションの開発
  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • マイクロサービス、DevOps、最新のOSSクラウドサービスを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

www.wantedly.com