ベクトルデータベース
ベクトルデータベースは、スケーラブルな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に追加のコンテキストを提供し、単独のプロンプトよりもはるかに文脈に即した回答を返すことを可能にします。
Workers AIチュートリアルのRAGを使用するを参照して、生成AIユースケースのためにWorkers AIとVectorizeを組み合わせる方法を学んでください。
1 RAGの理論について詳しくは、RAG論文 ↗をお読みください。
Vectorizeでは、データベースとインデックスは同じ概念です。作成する各インデックスは、他のインデックスとは別のものです。Vectorizeは、新しいデータを挿入する際に、インデックスの最適化と再生成を自動的に管理します。
ベクトル埋め込みは、機械学習モデルの特徴を数値ベクトル(数の配列)として表現します。これは、機械学習モデルが提供された入力をどのように理解するかをエンコードする片方向の表現です。これは、モデルが元々どのようにトレーニングされ、内部構造に基づいています。
例えば、Workers AIで利用可能なテキスト埋め込みモデルは、テキスト入力を受け取り、それを768次元のベクトルとして表現することができます。テキストこれはオレンジの雲についての物語ですは、ベクトル埋め込みとして表現されると、以下のようになります:
[-0.019273685291409492,-0.01913292706012726,<764 dimensions here>,0.0007094172760844231,0.043409910053014755]モデルが入力の特徴を「類似」と見なす場合(その理解に基づいて)、それらの2つの入力のベクトル埋め込み間の距離は短くなります。
ベクトル次元は、ベクトル埋め込みの幅を説明します。ベクトル埋め込みの幅は、特定のベクトルを構成する浮動小数点要素の数です。
次元の数は、ベクトル埋め込みを生成するために使用される機械学習モデルによって定義され、内部モデルと複雑さに基づいて入力特徴をどのように表現するかによって決まります。より多くの次元(「広い」ベクトル)は、計算およびメモリリソースのコストと、ベクトル検索のレイテンシ(速度)を犠牲にして、より高い精度を提供する可能性があります。
Vectorizeインデックスを作成する際に受け入れられるベクトル次元サイズを構成する方法については、次元のドキュメントを参照してください。
距離メトリックは、ベクトル検索に使用されるインデックスです。これは、クエリベクトルがインデックス内の他のベクトルにどれだけ近いかを決定する方法を定義します。
- 距離メトリックは、ベクトル検索エンジンがベクトル間の類似性を評価する方法を決定します。
- コサイン、ユークリッド(L2)、およびドットプロダクトは、ベクトル検索で最も一般的に使用される距離メトリックです。
- 使用する機械学習モデルと埋め込みのタイプによって、どの距離メトリックがユースケースに最適かが決まります。
- 異なるメトリックは、異なるスコアリング特性を決定します。例えば、
cosine距離メトリックは、テキスト、文の類似性、および/またはドキュメント検索のユースケースに適しています。euclideanは、画像や音声認識のユースケースにより適している場合があります。
Vectorizeインデックスを作成する際に距離メトリックを構成する方法については、距離メトリックのドキュメントを参照してください。