AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

ベクトル埋め込みを手動で作成する方法

ベクター埋め込みを他の MongoDB データと一緒に保存できます。これらの埋め込みは、データ内の意味のある関係を捉え、セマンティック検索を実行し、RAG を実装することを可能にします。

次のチュートリアルでは、ベクトル埋め込みの作成方法とベクトル検索を使用したクエリの実行方法が学べます。具体的には、次の手順を実行します。

  1. 埋め込みモデルを使用してベクトル埋め込みを生成する関数を定義します。

    使用するモデル(独自またはオープンソース)を選択します。最先端の埋め込みには、Voyage AI を使用します。

  2. データから埋め込みを作成し、MongoDB に保存します。

    新しいデータから埋め込みを作成するか、 MongoDBコレクションに既に存在する既存のデータから埋め込みを作成するかを選択します。

  3. 検索語句から埋め込みを作成し、ベクトル検索クエリを実行します。

実稼働アプリケーションでは通常、ベクトル埋め込みを生成するためのスクリプトを記述します。 このページのサンプルコードから開始し、 のユースケースに合わせてカスタマイズできます。

注意

MongoDB ベクトル検索自動埋め込みサービスは、コレクション内のテキスト データのセマンティック検索を有効にする 1 つの方法です。自動埋め込みを使用すると、vector embeddingsを自分で生成、保存、またはマネージドする必要はありません。代わりに、 MongoDB ベクトル検索 が vector embeddings を自動的に生成および管理します。詳細については、自動埋め込みの概要 を参照してください。

Atlas の サンプル データ セット からの映画データを含むコレクションを使用します。

このセクションでは、定義した関数を使用してデータからベクトル埋め込みを作成し、これらの埋め込みを MongoDB のコレクションに保存します。

このセクションでは、コレクション内のベクター埋め込みにインデックスを付け、サンプルのベクター検索クエリの実行に使用する埋め込みを作成します。

ベクトル検索では、クエリからの距離が最も近い埋め込みのドキュメントが返されます。距離の近さは意味が似ていることを示します。

ベクトル埋め込みを作成するときは、次の要素を考慮します。

ベクトル埋め込みを作成するには、埋め込みモデルを使用する必要があります。埋め込みモデルは、データの数値表現を生成するために使用するアルゴリズムです。埋め込みモデルにアクセスするには、次のいずれかの方法を選択します。

方式
説明

オープンソース モデルをロードする

独自の埋め込みモデル用の API キーがない場合は、オープンソースの埋め込みモデルをアプリケーションからローカルにロードしてください。

独自モデルの使用

ほとんどの AI プロバイダーは、API を独自の埋め込みモデルに提供しており、それを使用してベクトル埋め込みを作成できます。最先端の埋め込みを使用するには、 Voyage AI をご利用ください。

統合の活用

MongoDB ベクトル検索 をオープンソースのフレームワークとAIサービスと統合して、オープンソースとプロファイリングの両方の埋め込みモデルにすばやく接続し、 MongoDB ベクトル検索のベクトル埋め込みを生成できます。

詳細については、 MongoDB AI統合 を参照してください。

選択した埋め込みモデルはクエリ結果に影響し、 MongoDB ベクトル検索インデックスで指定する次元数を決定します。各モデルには、データとユースケースに応じて異なる利点があります。マルチモーダルやドメイン固有の埋め込みモデルを含む最新の埋め込みには、 投票AI を使用します。

MongoDB ベクトル検索の埋め込みモデルを選択するときは、次のメトリクスを考慮してください。

  • 埋め込み次元: ベクトル埋め込みの長さ。

    埋め込みが小さいほどストレージ効率が良く、埋め込みが大きいほどデータ内の微細な関係を捉えることができます。選択するモデルは、効率と複雑さのバランスをとる必要があります。

  • 最大トークン数: 単一の埋め込みで圧縮できるトークンの数。

  • モデルサイズ: モデルのサイズ(ギガバイト単位)。

    大きなモデルはパフォーマンスが向上しますが、 MongoDB ベクトル検索 を本番環境に増やすとより多くの計算リソースが必要になります。

  • 検索平均: 検索システムのパフォーマンスを測定するスコア。

    スコアが高いほど、検索された結果のリストの関連するドキュメントをより高く評価することで、モデルがより優れていることを示します。このスコアは、RAG アプリケーションのモデルを選択するときに重要です。

多数の浮動小数ベクトルを持ち、mongod でストレージと WiredTiger のフットプリント(ディスクやメモリ使用量など)を削減したい場合は、埋め込みを binData ベクトルに変換して圧縮します。

BinData は、バイナリ データを保存するBSONデータ型です。ベクトル埋め込みのデフォルトの型は、32 ビット浮動小数点数(float32)の配列です。バイナリ データは、デフォルトの配列形式よりもストレージ効率が高いため、ディスク容量が 3 倍に少なくなります。

binData ベクトルを保存すると、ドキュメントをワーキングセットに読み込むために必要なリソースが少なくなるため、クエリのパフォーマンスが向上します。これにより、20 件を超えるドキュメントを返すベクトルクエリのクエリ速度が大幅に向上します。float32 埋め込みを圧縮する場合は、float32 またはbinData ベクトルのいずれかを使用してクエリを実行できます。

このページのチュートリアルには、 float32ベクトルをbinData ベクトルに変換するために使用できる例関数が含まれています。

BSON BinData ベクトルは、以下のドライバーでサポートされています。

浮動小数点ベクトルは、たとえほとんどのベクトルが同じ型で構成されていたとしても、配列内の各要素が独立した型を持つため、一般的に圧縮が困難です。このため、埋め込みモデルの出力である浮動小数点ベクトルを、サブタイプ float32binData ベクトルに変換することで、より効率的な直列化方式となります。binData ベクトルは、ベクトル全体に対して 1 つの型識別子のみを保持するため、ストレージのオーバーヘッドを削減できます。

埋め込みが正しく最適である状態を確保するために、以下の戦略を検討してください。

埋め込みを作成する際のベストプラクティスを学びましょう。

埋め込みを生成およびクエリする際には、以下のベストプラクティスを考慮してください。

  • 関数とスクリプトをテストします

    埋め込みの生成には時間と計算リソースが必要です。 大規模なデータセットまたはコレクションから埋め込みを作成する前に、埋め込み関数またはスクリプトが少数のデータサブセットで期待どおりに動作することをテストしてください。

  • バッチで埋め込みを作成します

    大規模なデータセットまたは多数のドキュメントを含むコレクションから埋め込みを生成する場合は、バッチで作成してメモリの問題を回避し、パフォーマンスを最適化します。

  • パフォーマンス を評価します。

    テスト クエリを実行して、検索結果が関連性があり、正確にランク付けされているかどうかを確認します。

    結果を評価し、インデックスとクエリのパフォーマンスを微調整する方法の詳細については、「 MongoDB ベクトル検索のクエリ結果とベンチマークの精度を測定する方法 」を参照してください。

埋め込みに関する問題のトラブルシューティング戦略を学びましょう。

埋め込みで問題が発生した場合は、次の方法を検討してください。

  • 環境 を確認します。

    必要な依存関係がインストールされ、最新であることを確認します。 ライブラリのバージョンが競合すると、予期しない動作が発生する可能性があります。 新しい環境を作成し、必要なパッケージのみをインストールして、競合が存在しないことを確認します。

    注意

    Comb を使用している場合は、ノート セッションのIPアドレスが Atlas プロジェクトのアクセス リストに含まれていることを確認します。

  • メモリ使用量 を監視します。

    パフォーマンスの問題が発生した場合は、RAM、CPU、ディスクの使用状況をチェックして、潜在的なボトルネックを特定します。Colab や Jupyter Notebooks のようなホスト環境では、インスタンスに十分なリソースがプロビジョニングされていることを確認し、必要に応じてインスタンスをアップグレードしてください。

  • 次元の一貫性を確保

    MongoDB ベクトル検索インデックスの定義がMongoDBに保存されている埋め込みのサイズと一致し、クエリ埋め込みがインデックス付き埋め込みのサイズと一致していることを確認します。そうしないと、ベクトル検索クエリを実行中ときにエラーが発生する可能性があります。

特定の問題をトラブルシューティングするには、「 トラブルシューティング 」を参照してください。

MongoDB ベクトル検索を使用して埋め込みを作成し、埋め込みをクエリする方法を学習したら、検索拡張生成 (RAG)(RAG)を実装して生成系AIアプリケーションのビルドを開始します。

また、リソース消費をさらに削減し、クエリ速度を向上させるために、32 ビットのfloat vector embeddingsをより少ないビットに定量化することもできます。詳細については、「About Quantization」を参照してください。