ベクター埋め込みを他の MongoDB データと一緒に保存できます。これらの埋め込みは、データ内の意味のある関係を捉え、セマンティック検索を実行し、RAG を実装することを可能にします。
はじめる
次のチュートリアルでは、ベクトル埋め込みの作成方法とベクトル検索を使用したクエリの実行方法が学べます。具体的には、次の手順を実行します。
埋め込みモデルを使用してベクトル埋め込みを生成する関数を定義します。
使用するモデル(独自またはオープンソース)を選択します。最先端の埋め込みには、Voyage AI を使用します。
データから埋め込みを作成し、MongoDB に保存します。
新しいデータから埋め込みを作成するか、 MongoDBコレクションに既に存在する既存のデータから埋め込みを作成するかを選択します。
検索語句から埋め込みを作成し、ベクトル検索クエリを実行します。
実稼働アプリケーションでは通常、ベクトル埋め込みを生成するためのスクリプトを記述します。 このページのサンプルコードから開始し、 のユースケースに合わせてカスタマイズできます。
注意
MongoDB ベクトル検索自動埋め込みサービスは、コレクション内のテキスト データのセマンティック検索を有効にする 1 つの方法です。自動埋め込みを使用すると、vector embeddingsを自分で生成、保存、またはマネージドする必要はありません。代わりに、 MongoDB ベクトル検索 が vector embeddings を自動的に生成および管理します。詳細については、自動埋め込みの概要 を参照してください。
Considerations
ベクトル埋め込みを作成するときは、次の要素を考慮します。
埋め込みの作成方法の選択
ベクトル埋め込みを作成するには、埋め込みモデルを使用する必要があります。埋め込みモデルは、データの数値表現の生成に使用されるアルゴリズムです。埋め込みモデルにアクセスするには、次のいずれかの方法を選択します。
方式 | 説明 |
|---|---|
オープンソース モデルをロードする | 独自の埋め込みモデルの API キーがない場合は、アプリケーションからローカルにオープンソースの埋め込みモデルをロードします。 |
独自モデルの使用 | ほとんどの AI プロバイダーは、API を独自の埋め込みモデルに提供しており、それを使用してベクトル埋め込みを作成できます。最先端の埋め込みを使用するには、 Voyage AI をご利用ください。 |
統合の活用 | MongoDB ベクトル検索 をオープンソースのフレームワークとAIサービスと統合して、オープンソースとプロファイリングの両方の埋め込みモデルにすばやく接続し、 MongoDB ベクトル検索のベクトル埋め込みを生成できます。 詳細については、「MongoDB AI 統合と提携する」を参照してください。 |
埋め込みモデルの選択
選択した埋め込みモデルはクエリ結果に影響し、 MongoDB ベクトル検索インデックスで指定する次元数を決定します。各モデルには、データとユースケースに応じて異なる利点があります。マルチモーダルやドメイン固有の埋め込みモデルを含む最新の埋め込みには、 投票AI を使用します。
MongoDB ベクトル検索の埋め込みモデルを選択するときは、次のメトリクスを考慮してください。
埋め込み次元: ベクトル埋め込みの長さ。
埋め込みが小さいほどストレージ効率が良く、埋め込みが大きいほどデータ内の微細な関係を捉えることができます。選択するモデルは、効率と複雑さのバランスをとる必要があります。
最大トークン数: 単一の埋め込みで圧縮できるトークンの数。
モデルサイズ: モデルのサイズ(ギガバイト単位)。
大きなモデルはパフォーマンスが向上しますが、 MongoDB ベクトル検索 を本番環境に増やすとより多くの計算リソースが必要になります。
検索平均: 検索システムのパフォーマンスを測定するスコア。
スコアが高いほど、検索された結果のリストの関連するドキュメントをより高く評価することで、モデルがより優れていることを示します。このスコアは、RAG アプリケーションのモデルを選択するときに重要です。
ベクトル圧縮
多数の浮動小数ベクトルを持ち、mongod でストレージと WiredTiger のフットプリント(ディスクやメモリ使用量など)を削減したい場合は、埋め込みを binData ベクトルに変換して圧縮します。
BinData はバイナリ データを保存する BSON データ型です。ベクトル埋め込みのデフォルトの型は、32 ビットの浮動小数点数(float32)の配列です。バイナリ データはデフォルトの配列形式よりもストレージ効率が高いため、必要なディスク容量は 3 分の 1 になります。
binData ベクトルを保存すると、ドキュメントをワーキングセットに読み込むために必要なリソースが少なくなるため、クエリのパフォーマンスが向上します。これにより、20 件を超えるドキュメントを返すベクトルクエリのクエリ速度が大幅に向上します。float32 埋め込みを圧縮する場合は、float32 またはbinData ベクトルのいずれかを使用してクエリを実行できます。
このページのチュートリアルには、float32 ベクトルをbinData ベクトルに変換するために使用できる関数の例が含まれています。
対応ドライバー
BSON BinData ベクトルは、以下のドライバーでサポートされています。
C++ ドライバー v4.1.0 以降
C#/.NET ドライバー v3.2.0 以降
Go Driver v2.1.0 以降
Pymongo ドライバー v4.10 以降
Node.js ドライバー v6.11 以降
Java ドライバー v5.3.1 以降
Ruby ドライバー (
bsongem v5.1 以降 を使用)
バックグラウンド
浮動小数点ベクトルは、たとえほとんどのベクトルが同じ型で構成されていたとしても、配列内の各要素が独立した型を持つため、一般的に圧縮が困難です。このため、埋め込みモデルの出力である浮動小数点ベクトルを、サブタイプ float32 の binData ベクトルに変換することで、より効率的な直列化方式となります。binData ベクトルは、ベクトル全体に対して 1 つの型識別子のみを保持するため、ストレージのオーバーヘッドを削減できます。
埋め込みの検証
埋め込みが正しく最適である状態を確保するために、以下の戦略を検討してください。
次のステップ
MongoDB ベクトル検索を使用して埋め込みを作成し、埋め込みをクエリする方法を学習したら、検索拡張生成 (RAG)(RAG)を実装して生成系AIアプリケーションのビルドを開始します。
また、リソース消費をさらに削減し、クエリ速度を向上させるために、32 ビットのfloat vector embeddingsをより少ないビットに定量化することもできます。詳細については、「About Quantization」を参照してください。