ベクトル埋め込みを他のMongoDBデータと一緒に保存できます。これらの埋め込みにより、データ内の意味のある関係がキャプチャされ、セマンティック検索を実行し、RAG を実装できるようになります。
はじめる
次のチュートリアルを使用して、ベクトル埋め込みを作成し、ベクトル検索を使用してそれらをクエリする方法を学習します。具体的には、次のアクションを実行します。
埋め込みモデルを使用してベクトル埋め込みを生成する関数を定義します。
プロプロパティ モデルまたはオープンソース モデルのどちらを使用するかを選択します。最新の埋め込みには、 投票AIを使用します。
データから埋め込みを作成し、 MongoDBに保存します。
新しいデータから埋め込みを作成するか、 MongoDBコレクションに既に存在する既存のデータから埋め込みを作成するかを選択します。
検索語句から埋め込みを作成し、ベクトル検索クエリを実行します。
実稼働アプリケーションでは通常、ベクトル埋め込みを生成するためのスクリプトを記述します。 このページのサンプルコードから開始し、 のユースケースに合わせてカスタマイズできます。
Considerations
ベクトル埋め込みを作成するときは、次の要素を考慮します。
埋め込みの作成方法の選択
ベクトル埋め込みを作成するには、 埋め込みモデル を使用する必要があります。埋め込みモデルは、データの数値表現を生成するために使用するアルゴリズムです。埋め込みモデルにアクセスするには、次のいずれかの方法を選択します。
方式 | 説明 |
---|---|
オープンソース モデルをロードする | プロパティ埋め込みモデルの APIキーがない場合は、アプリケーションからローカルにオープンソース埋め込みモデルを読み込みます。 |
独自モデルの使用 | ほとんどのAIプロバイダーは、ベクトル埋め込みを作成するために使用できる独自の埋め込みモデル用のAPIを提供しています。最新の埋め込みには、 投票AIを使用します。 |
統合の活用 | MongoDB ベクトル検索 をオープンソースのフレームワークとAIサービスと統合して、オープンソースとプロファイリングの両方の埋め込みモデルにすばやく接続し、 MongoDB ベクトル検索のベクトル埋め込みを生成できます。 詳細については、「MongoDBとAIテクノロジーの統合」を参照してください。 |
埋め込みモデルの選択
選択した埋め込みモデルはクエリ結果に影響し、 MongoDB ベクトル検索インデックスで指定する次元数を決定します。各モデルには、データとユースケースに応じて異なる利点があります。マルチモーダルやドメイン固有の埋め込みモデルを含む最新の埋め込みには、 投票AI を使用します。
MongoDB ベクトル検索の埋め込みモデルを選択するときは、次のメトリクスを考慮してください。
埋め込み次元: ベクトル埋め込みの長さ。
埋め込みが小さいほどストレージ効率が良く、埋め込みが大きいほどデータ内の微細な関係を捉えることができます。選択するモデルは、効率と複雑さのバランスをとる必要があります。
最大トークン数: 単一の埋め込みで圧縮できるトークンの数。
モデルサイズ: モデルのサイズ(ギガバイト単位)。
大きなモデルはパフォーマンスが向上しますが、 MongoDB ベクトル検索 を本番環境に増やすとより多くの計算リソースが必要になります。
検索平均: 検索システムのパフォーマンスを測定するスコア。
スコアが高いほど、検索された結果のリストの関連するドキュメントをより高く評価することで、モデルがより優れていることを示します。このスコアは、RAG アプリケーションのモデルを選択するときに重要です。
ベクトル圧縮
多数の浮動小数ベクトルがあり、 でストレージとWiredTiger のフットプリント(ディスクやメモリ使用量など)を削減したい場合は、埋め込みをmongod
binData
ベクトルに変換して圧縮します。
BinData は、バイナリ データを保存するBSONデータ型です。ベクトル埋め込みのデフォルトの型は、32 ビット浮動小数点数(float32
)の配列です。バイナリ データは、デフォルトの配列形式よりもストレージ効率が高いため、ディスク容量が 3 倍に少なくなります。
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 以降
バックグラウンド
浮動小数点ベクトルは、たとえほとんどのベクトルが同じ型で構成されていたとしても、配列内の各要素が独立した型を持つため、一般的に圧縮が困難です。このため、埋め込みモデルの出力である浮動小数点ベクトルを、サブタイプ float32
の binData
ベクトルに変換することで、より効率的な直列化方式となります。binData
ベクトルは、ベクトル全体に対して 1 つの型識別子のみを保持するため、ストレージのオーバーヘッドを削減できます。
埋め込みの検証
埋め込みが正しく最適である状態を確保するために、以下の戦略を検討してください。
埋め込みを生成およびクエリする際には、以下のベストプラクティスを考慮してください。
関数とスクリプトをテストします 。
埋め込みの生成には時間と計算リソースが必要です。 大規模なデータセットまたはコレクションから埋め込みを作成する前に、埋め込み関数またはスクリプトが少数のデータサブセットで期待どおりに動作することをテストしてください。
バッチで埋め込みを作成します 。
大規模なデータセットまたは多数のドキュメントを含むコレクションから埋め込みを生成する場合は、バッチで作成してメモリの問題を回避し、パフォーマンスを最適化します。
パフォーマンス を評価します。
テスト クエリを実行して、検索結果が関連性があり、正確にランク付けされているかどうかを確認します。
結果を評価し、インデックスとクエリのパフォーマンスを微調整する方法の詳細については、「 MongoDB ベクトル検索のクエリ結果とベンチマークの精度を測定する方法 」を参照してください。
埋め込みで問題が発生した場合は、次の方法を検討してください。
環境 を確認します。
必要な依存関係がインストールされ、最新であることを確認します。 ライブラリのバージョンが競合すると、予期しない動作が発生する可能性があります。 新しい環境を作成し、必要なパッケージのみをインストールして、競合が存在しないことを確認します。
注意
Colab を使用している場合は、ノートブックセッションの IP アドレスが Atlas プロジェクトのアクセスリストに含まれていることを確認します。
メモリ使用量 を監視します。
パフォーマンスの問題が発生した場合は、RAM、CPU、ディスクの使用状況をチェックして、潜在的なボトルネックを特定します。Colab や Jupyter Notebooks のようなホスト環境では、インスタンスに十分なリソースがプロビジョニングされていることを確認し、必要に応じてインスタンスをアップグレードしてください。
次元の一貫性を確保。
MongoDB ベクトル検索インデックスの定義がMongoDBに保存されている埋め込みのサイズと一致し、クエリ埋め込みがインデックス付き埋め込みのサイズと一致していることを確認します。そうしないと、ベクトル検索クエリを実行中ときにエラーが発生する可能性があります。
特定の問題をトラブルシューティングするには、「 トラブルシューティング 」を参照してください。
次のステップ
MongoDB ベクトル検索を使用して埋め込みを作成し、埋め込みをクエリする方法を学習したら、検索拡張生成 (RAG)(RAG)を実装して生成系AIアプリケーションのビルドを開始します。
32 ビットの浮動小数点ベクトル埋め込みをより少ないビット数に量子化することで、リソース消費をさらに削減し、クエリ速度を向上させることも可能です。詳しくは、「ベクトル量子化」をご覧ください。