ベクトルデータベースは、スケーラブルな AI アプリケーションを構築するうえで重要な要素です。既存の機械学習モデルの上に、長期記憶を提供します。
ベクトルデータベースがない場合、クエリのたびにモデルを訓練するか、データセットをモデルに通し直す必要があります。これは遅く、コストも高くなります。
ベクトルデータベースは、入力クエリの近くにあるほかのデータ(ベクトルとして表現)を判定します。これにより、ベクトルデータベースの上に次のような用途を構築できます。
- セマンティック検索。クエリ入力に似た結果を返します。
- 分類。入力クエリに最も近いグループ(または複数グループ)を返します。
- レコメンデーションエンジン。過去の商品販売やユーザー履歴など、さまざまな条件に基づいて入力に似たコンテンツを返します。
- 異常検知。特定のデータ点が既存データに似ているか、異なっているかを識別します。
ベクトルデータベースは Retrieval Augmented Generation ↗(RAG)にも使えます。ベクトル検索のコンテキストでユーザープロンプトを補強し、大規模言語モデル(LLM)に追加の文脈を渡せます。
従来のベクトル検索では、クエリベクトルをベクトルデータベースに渡し、クエリベクトルとの距離が最も短い(「最も似ている」)ベクトルを、設定可能な件数で返します。
手順の流れは次のとおりです。
- 開発者が既存データセット(ドキュメント、画像、R2 に保存したログなど)を、そのデータ種類向けに訓練された機械学習モデルに通し、ベクトル埋め込み(一方向の表現)に変換します。
- 出力された埋め込みを Vectorize データベースのインデックスに挿入します。
- 検索クエリ、分類リクエスト、異常検知クエリも同じ ML モデルに通し、クエリのベクトル埋め込み表現を得ます。
- この埋め込みで Vectorize をクエリし、指定したクエリに最も似たベクトル埋め込みの集合を返します。
- 返された埋め込みを使い、専用ストレージ(R2、KV、D1 など)から元のソースオブジェクトを取得し、ユーザーに返します。
ベクトルデータベースがないワークフローでは、クエリのたびにデータセット全体を渡す必要があります。これは実用的ではなく(モデルには入力サイズの上限があります)、リソースと時間も大きく消費します。
Retrieval Augmented Generation(RAG)は、チャットボットや一般的な質疑応答など、生成 AI の用途で LLM に渡す文脈を改善する手法です。ベクトルデータベースは、クエリと一緒に追加の文脈を足して、LLM に渡すプロンプトを強化します。
プロンプトをそのまま LLM に渡す代わりに、RAG では次のようにします。
- 既存のデータセットまたはコーパスからベクトル埋め込みを生成します(LLM の応答に追加の文脈を足したいデータセットです)。既存のデータセットやコーパスには、製品ドキュメント、研究データ、技術仕様、製品カタログと説明などがあります。
- 出力された埋め込みを Vectorize データベースのインデックスに保存します。
ユーザーがプロンプトを開始したら、追加の文脈なしで LLM に渡す代わりに、追加の文脈で 補強 します。
- ユーザープロンプトを、データセットに使った同じ ML モデルに通し、クエリのベクトル埋め込み表現を得ます。
- この埋め込みをクエリ(セマンティック検索)としてベクトルデータベースに渡し、類似ベクトルを返します。
- これらのベクトルが関連するコンテンツを調べます(メタデータとしてベクトルと一緒に埋め込んでいない場合)。
- このコンテンツを元のユーザープロンプトと一緒に文脈として渡し、LLM に追加の文脈を提供します。スタンドアロンのプロンプトより、文脈に沿った回答が返りやすくなります。
AI Search で RAG アプリケーションを作成 すると、数回のクリックでフルマネージドの RAG パイプラインをデプロイできます。AI Search は Vectorize のセットアップ、継続的なインデックス作成、1 つの API での応答提供を自動で行います。
1 RAG の理論については、RAG の論文 ↗ を参照してください。 1 RAG の理論については、RAG の論文 ↗ を参照してください。
Vectorize では、データベースとインデックスは同じ概念です。作成する各インデックスは、ほかのインデックスから独立しています。新しいデータを挿入すると、Vectorize がインデックスの最適化と再生成を自動で行います。
ベクトル埋め込みは、機械学習モデルの特徴を数値ベクトル(数値の配列)として表します。モデルの元の訓練方法と内部構造に基づき、モデルが入力をどう理解するかを符号化した一方向の表現です。
たとえば、Workers AI で利用できる テキスト埋め込みモデル は、テキスト入力を 768 次元のベクトルとして表せます。テキスト This is a story about an orange cloud をベクトル埋め込みにすると、次のようになります。
[-0.019273685291409492,-0.01913292706012726,<764 dimensions here>,0.0007094172760844231,0.043409910053014755]モデルが入力の特徴を「似ている」と判断する場合(モデルの理解に基づく)、その 2 つの入力のベクトル埋め込みの距離は短くなります。
ベクトルの次元は、ベクトル埋め込みの幅を表します。幅は、そのベクトルを構成する浮動小数点要素の数です。
次元数は、ベクトル埋め込みの生成に使う機械学習モデルと、内部モデルと複雑さに基づいて入力特徴をどう表すかで決まります。次元が多い(「幅の広い」ベクトル)ほど正確さが上がる場合がありますが、計算とメモリのコスト、ベクトル検索のレイテンシ(速度)は増えます。
Vectorize インデックス作成時に受け付けるベクトル次元サイズの設定は、次元 のドキュメントを参照してください。
距離メトリクスは、ベクトル検索で使う指標です。クエリベクトルがインデックス内のほかのベクトルにどれだけ近いかを判定する方法を定義します。
- 距離メトリクスは、ベクトル検索エンジンがベクトル間の類似度をどう評価するかを決めます。
- ベクトル検索でよく使われる距離メトリクスは、Cosine、Euclidean(L2)、Dot Product です。
- 使う機械学習モデルと埋め込みの種類によって、用途に合う距離メトリクスが決まります。
- メトリクスごとにスコアの特性は異なります。たとえば
cosine距離メトリクスは、テキスト、文の類似度、ドキュメント検索に向きます。euclideanは画像や音声認識に向く場合があります。
Vectorize インデックス作成時の距離メトリクスの設定は、距離メトリクス のドキュメントを参照してください。