Serverless Operations, inc

>_cd /blog/id_g2oa60nfvp

title

Amazon S3 Vectors (1) : マネージメントコンソールでナレッジの作成と検索テストの実行

先日AWSからS3をベースとしたベクトルストアである Amazon S3 Vectors がプレビューリリースされました。この記事ではマネージメントコンソールを活用したナレッジの作成と検索テストの手順を解説します。

ベクトルストアとナレッジ

ベクトル検索(Vector Search)とは、高次元の数値ベクトル(特徴量)を使って類似性検索を行う手法です。特に、自然言語処理(NLP)、画像・音声検索、レコメンドなどで広く使われています。

従来の検索は完全一致や部分一致などで似た文字列を特定しますが、ベクトル検索では、検索対象は文字列に限らず非構造化データを取り扱うことができるのが大きな特徴です。また生成AIと組み合わせることでテキストの「意味」をベクトル化させることが可能となり、似た意味を持つ言葉を検索する、といったことが可能です。

たとえば「ねこ」「いぬ」「イルカ」の3つを想像すると「ねこ」は「いぬ」の方が「イルカ」より一般的に近しい存在です。生成AIが与えられた文字列をこの世に意味を込めた数値に変換してくれることで従来は行えなかった検索が可能となりました。社内文章やマニュアルの検索などでも質問の意味を理解し、近しい意味を持つテキストを出力する、などの利用が期待されている技術です。

そしてそのベクトル化されたデータを格納し、検索を可能とするのがベクトルストアです。AWSでは従来OpenSeachやPostgreSQL(+pgvector)など複数のベクトルストアを提供していましたが、Amazon S3 Vectorsが新しいラインナップとして加わることになります。記事執筆の2025年7月時点ではまだプレビューですのでパフォーマンスについて触れるのは野暮ですが、コスト面から専用ベクトルストアを持つS3 Vectorsに期待が集まっています。

さっそくやってみる

では今日はマネージメントコンソールを利用してAmazon Bedrockのナレッジ(特定の文書がベクトル化されベクトルストアに保存されたもの)にS3 Vectorsを設定してみます。

1. S3 Vectors バケットの作成

現時点ではまだプレビューであり提供されているリージョンが限定されているため、バージニアリージョンを用います。

S3のマネージメントコンソールからベクトルバケットをクリックします。

ベクトルバケットを作成をクリックします。

適当な名前で作成を行います。

次にバケットをクリックして遷移する詳細画面からベクトルインデックスを作成をクリックします。

適当な名前を付けディメンションを1024と入力します。そして距離メトリックをコサインに設定し、インデックスを作成します。

ディメンション

ベクトルストアにはベクトル化されたデータが格納されます。ベクトルとは数学に出てきた以下の様なものです。

[0,-1.0,5](3次元ベクトル)

テキストのベクトル化には後程指定する埋め込みモデルという生成AIモデルの一種を用います。このモデルが文字列を意味を数字に変換します。用いるモデル毎に要求する次元が異なります。後程指定する埋め込みモデルでは1024次元ベクトルを生成しますのでここでは1024を指定しておきます。なおベクトルストアが正しい精度で動作するためには、すべてのデータ(生成されたベクトル)は必ず同じモデルによりベクトル化され同じベクトル次元数を持つ必要があります。

距離メトリック

ベクトル化されたデータは検索に使われます。検索を行う文字列もベクトル化され比較が行われます。同じ方向を向ているものを特定するのがコサイン、一番近い距離にいるものを特定するのがユークリッドです。

Aにコサインで近いのはB、ユークリッドで近いのがCです。

たとえば、「和風の静かなカフェで読書したい」という気分のとき、 コサイン類似度は「方向性」、つまりどれくらい“雰囲気が似ているか”を測ります。一方ユークリッド距離は「全体としての近さ」を実際の距離のように測ります。

たとえば「和風の静かなカフェで読書したい」ときに「洋風」だが読書に最適なカフェがある場合、ベクトルは反対方向を向きますが、その他の要件(静かで読書に向く)を満たしているため近しい場所に存在しています。このような場合ユークリッドの方がいい結果を出します。

実際は取り扱うデータや目的ごとにどちらがいいかは異なりますので、両方を試してみて最適な検索方法を確定させることをお勧めします。

Amazon Bedrock でモデルの有効化

ではこれから作成したS3 Vectors バケットとインデックスを活用したチャットボットを作成します。まずは埋め込みモデルのTitan Text Embeddings V2とチャット用モデルのNova Liteを有効化します。

ナレッジの作成

では次にナレッジを作成します。

ベクトルストアを含むナレッジベースを選択します。

BedrockではURLベースとしたウェブサイトなど様々なデータソースを指定できますが、S3 Vectorsはプレビュー中であるためS3 バケットに存在しているテキストデータにのみ対応しています。このためS3を選択し次へをクリックします。

適当なテキストデータを含んでいるS3バケットを指定します。先ほど作ったS3 Vectors用バケットではなく汎用S3バケットを作成してテキストデータをあらかじめアップロードしたものを指定し、次へをクリックします。

埋め込みモデルを指定します。

先ほど作成したS3 Vectorsバケットとインデックスを指定して次へをクリックします。

最後の確認画面でナレッジの作成をクリックします。

作成されたら同期をクリックしデータのベクトル化(一般的に埋め込みと言われます)を開始します。

同期が完了したら画面右上からナレッジベースのテストをクリックします。

モデルにNova Liteを選択してテストを行います。

次回は

このS3 Vectorsをサンプルコードから呼び出したいと思います。

Written by
編集部

亀田 治伸

Kameda Harunobu

  • Facebook->
  • X->
  • GitHub->

Share

Facebook->X->
Back
to list
<-