【AWS】S3 Vectors 入門

S3 Vectors
こちらでプレビュー公開
OpenSearch との統合
サービスページ
ベクトルデータセットとは
ベクトルデータセットとは、各データ(テキスト、画像、音声など)を数百〜数千次元の“ベクトル”(数値の配列)に変換し、その集合として管理するデータセットのことです。ポイントは以下のとおりです。
ここら辺を見るとイメージが湧きやすそう
ベクトル(埋め込み:Embedding)とは何か
例えばテキストを「意味的に近いもの同士が近くなる」ように数百次元の実数の並びに変換したものを“テキスト埋め込み”と呼びます。
画像の場合は、ニューラルネットワークで特徴抽出した後の特徴量ベクトルが該当します。
ベクトルデータセットの構成
各アイテム(ドキュメントや画像など)には一意のIDと、そのアイテムを表現するベクトル(例:長さ768の浮動小数点配列)が紐づきます。
データセット全体は「ID/ベクトル」の組を大量に保持する構造です。
なぜベクトルデータセットが必要か
ベクトル同士の「内積」や「ユークリッド距離」を計算することで、類似度の高いものを高速に見つけられます。
セマンティック検索や近傍探索(k-NN検索)によって、単語の表面的な一致だけでなく意味的に関連する情報を引き出せるようになります。
S3 Vectors の役割
Amazon S3 上に保存された大量のベクトルを、専用のインデックス構造で効率的に格納・検索できるようにしたものです。
ストレージコストやクエリコストを従来型ベクトルストアに比べ最大90%削減しつつ、ペタバイト級でも1秒未満の検索応答を実現します。
ユースケース
ペタバイト規模の動画アーカイブから「似たシーン」を検索
大量のビジネス文書の中で「関連性の高い複数文書」を抽出
医療画像の大量コレクションから希少パターンを検出
まとめると、ベクトルデータセットは「AI が扱う元データを数値ベクトルとして表現し、その集合を高速・大規模に扱うためのデータ構造」であり、S3 Vectors はそれを低コストかつスケーラブルに運用するためのマネージドサービスです。
AWS リソースとの統合
- Bedrock Knowledge Bases のベクトルストアとして使う
そもそも Bedrock Knowledge Bases と従来のベクトルストア
- OpenSearch との統合
実際の使い方
- マルチモーダル画像検索
コスト面
- OpenSearch のコストに触れる
- S3 Vectors のコストに触れる
制約
S3 Vectorsはベクトルストレージサービスとして基本的な「ベクトルの保存 (追加)」「ベクトルデータのクエリ」「メタデータによるフィルタリング」といった機能のみを備えています。
OpenSearch Serviceのような「ハイブリッド検索」「高度なフィルタリング」「ファセット検索」といった機能は持っていません。
選択(ベクトル格納オプションの理解)
たとえば、アプリケーションが 50 ms 未満のクエリレスポンスと効率的なフィルタリングを必要とする場合、Faiss の HNSW 実装が最適な選択肢です。一方、ストレージコストを最適化しながら妥当なパフォーマンスを維持する必要がある場合は、新しい S3 エンジンタイプがより適切でしょう。
※ クエリ手法についての色々
ベストプラクティス
ベクトルの挿入と削除
アプリケーションは、ベクトルインデックスあたり毎秒最低5件の PutVectors および DeleteVectors リクエストを処理できます。
リクエストレートを超過すると、429 TooManyRequestsException エラーが返される可能性があります。
スループットを最大化し、速度と効率を最適化するには、1回の API リクエストで最大 500 ベクトルまでの大きなバッチで挿入および削除を行うことをおすすめします。
詳細は「ベクトルインデックス」をご参照ください。
S3 ベクトルインデックス内のベクトルアクセスとクエリ
アプリケーションは、S3 ベクトルインデックスあたり毎秒数百件の QueryVectors、GetVectors、ListVectors リクエストを処理できます。
リクエストレートを超過すると、429 TooManyRequestsException エラーが返される可能性があります。
リトライ機構を組み込み、リクエスト数を抑制するようアプリケーションを構成してください。
ベクトルインデックス間でのスケーリング
インデックスあたりのクエリ性能を向上させるには、可能であれば複数のベクトルインデックスにベクトルを分散するようアプリケーションを構成してください。
たとえば、マルチテナントのワークロードで各テナントを個別にクエリする場合は、各テナント専用のベクトルインデックスにデータを格納することを検討してください。
詳細は「ベクトルインデックス」をご参照ください。
マルチテナンシーを実現するための個別ベクトルインデックス
テナントごとにひとつのベクトルインデックスを使用してデータを整理することで、マルチテナンシーを実現できます。
IAM およびバケットポリシーを用い、各テナントが自分のベクトルインデックスのみにアクセスできるよう制限できます。
この方法により、テナントごとにバケットを分ける必要がなく、データの分離性を保ちつつ管理が簡素化されます。
詳細は「S3 Vectors における IAM とアクセス管理」をご参照ください。
フィルタリング不要なメタデータフィールドの設定
ベクトルインデックスを作成する際、フィルタリングが不要なメタデータキーは「非フィルタ可能メタデータ」として設定してください。
たとえば、参照用にのみ必要なテキストチャンクは、非フィルタ可能メタデータフィールドとして格納します。
詳細は「非フィルタ可能メタデータ」をご参照ください。

参考記事
Amazon S3 Vectors で Bedrock Knowledge Bases のベクトルストア
マルチモーダル画像検索
text 検索の例

Amazon Bedrock Knowledge bases
公式ページ
まとめ記事
検索アルゴリズムについて