MongoDB Atlas Stream Processingとベクトル検索を使用し、一元化されたインターフェイスを通じて埋め込みを継続的に更新、保存、検索します。
ユースケース: Gen AI
製品: MongoDB Atlas、MongoDB Atlas Vector Search、MongoDB Atlas Stream Processing
パートナー: Confluent、Amazon Web Services
ソリューション概要
1 つのサイズがすべて完了するAIアプローチを超える推奨事項を提供する際に、関連するコンテキストを使用できるように、モデルに最新データを提供することが重要です。検索拡張生成(RAG)システムにより、組織は大規模言語モデル(MMS)やその他の基礎モデルを、自分のデータの真実のとおりに使用できます。ただし、基礎となるデータの維持は複雑です。モデルが正確な結果を提供できるようにするには、利用可能な最新情報を表すように RG システムのコアを構成するベクトル埋め込みを継続的に更新することが重要です。
さらに、埋め込みモデルの選択はAI出力の品質に影響します。これは、異なるモデルが異なる目的とデータ型に最適化されているためです。例、特定の言語で訓練された埋め込みモデルは、多くの言語で訓練された汎用モデルよりもその言語にコンテキストに適した埋め込みを作成します。
MongoDB AtlasのネイティブStream Processingとベクトル検索機能を活用することで、開発者は 1 つのインターフェース内の埋め込みを継続的に更新、保存、検索できます。
このソリューションは、次のような多くの業界とユースケースに関連します。
金融サービス: 金融ドキュメント、法定ポリシー、契約書は多くの言語を使用し、国の規則に基づいて異なります。フレーズの作成を迅速化するために、関連する最新データを使用してAI対応のインターフェースで金融機関のオペレーターを認証すると、金融ワークフローを最適化できます。
医療と保証: ユーザ レコードの更新や保証ポリシーの作成に役立つ RG システムは、最新情報にアクセスする必要があります。
小売: 最新のコンテキスト データは、RAG システムが適切な埋め込みモデルを選択し、使用する言語に関係なくカスタマーがパーソナライズされたエクスペリエンスを可能にするのに重要です。
参照アーキテクチャ
このソリューションでは、次のコンポーネントが使用されます。
MongoDB Atlasクラスター: テキスト、関連メタデータ、ドキュメント内の対応するベクトル埋め込みなど、さまざまなデータ型の柔軟なストレージを可能にします。Atlas のベクトルインデックスは、MongoDB集計フレームワーク で使用できるデータベース内の効率的なセマンティック検索クエリを直接サポートします。
Confluent Kafkaクラスター: プロデューサーからドキュメントの更新と新しいドキュメントを受け取り、Atlas Stream Processing によるさらなる処理で使用できるようにします。
Atlas Stream Processing: MongoDBによって生成されたイベントストリームをサブスクライブし、関連情報をフィルタリングしてイベントを変換し、対応するKafkaトピックに出力します。また、更新を処理し、変更をデータベースに伝達するためにもKafkaクラスターをサブスクライブします。
メタデータサービス:
埋め込みジェネレーター: Kafka入力トピックをサブスクライブするPythonスクリプト。受信したメッセージごとに、専用の機械学習モデルを使用して埋め込みを生成します。
タグ エクスポート: 受信データを分析して関連する構造化メタデータを識別し、インデックス作成、検索、または分析用にドキュメントを増やすPythonスクリプト。
図 1. MongoDB を用いたスケーラブルなベクトル更新のリファレンス アーキテクチャ
データモデルアプローチ
デモ ソリューションでは、データモデルは、時間に関するすべての関連情報をカプセル化したドキュメントのコレクションです。MongoDB のドキュメントデータモデルには、さまざまなデータ型がその埋め込みとともに保存されているため、簡単かつ高速なデータ検索が可能です。
サンプルデータには、archive_lyrics_small1
と archive_lyrics_small2
の 2 つのデータセットがあります。これらのデータセット内のドキュメントは、次の構造をしています。
{ "title": "Hurricane", "artist": "Bob Dylan", "year": 1976, "lyrics": "...", "language": "en", "genre": "rock", "duration": 61, "lyrics_embeddings_en": [...], "tags": ["man", "story", "night"] // only in archive_lyrics_small1 }
このソリューションでは、Atlas Stream Processing は出力トピックに次のデータ フィールドを使用します。
lyrics_embeddings_en
/lyrics_embeddings_es
: 言語固有のテキスト埋め込みベクトルtags
:archive_lyrics_small1
データセットのみに、テキスト内で頻繁に出現する単語をリストします。
ソリューションのビルド
Githubリポジトリには、このソリューションを複製するための詳細な手順が記載されているため、 MongoDB Atlasを使用して埋め込みを非同期かつ増やすに更新できます。
README
は、次の手順についてガイドします。
データセットをロードする
提供されたスクリプトを使用して、mongoimportにデータをロードします。
Confluent でのKafkaクラスターの構成
Confluent のドキュメントの手順に従ってKafkaクラスターを作成します。
Confluent の Cluster Settings
タブからブートストラップURLをコピーし、 Kafka REST APIを使用してクラスターに接続するためのAPIキーを作成します。
Confluent の Topics
タブでトピック SpanishInputTopic
、EnglishInputTopic
、OutputTopic
を作成します。
Stream Processing 接続レジストリの構成
接続レジストリの Confluent ブートストラップURLを使用して、Atlas Stream Processing インスタンスとKafkaクラスター間の新しい接続を構成します。
Atlas Stream Processing インスタンスを Atlas クラスターに接続します。
Atlas Stream Processing の構成
Atlas Stream Processing インスタンスに接続するための接続文字列をコピーします。
MongoDB Shell(mongosh)を使用して、Stream Processing インスタンスのパイプラインと接続を構成します。
Atlas Vector Search インデックスの作成
lyrics_embeddings_es
用の Atlas ベクトル検索インデックスを作成して構成します。検索インデックスは、次のように構成する必要があります。
{ "fields": [ { "type": "vector", "path": "lyrics_embeddings_es", "numDimensions": 768, "similarity": "cosine" } ] }
lyrics_embeddings_en
用の Atlas ベクトル検索インデックスを作成して構成します。検索インデックスは、次のように構成する必要があります。
{ "fields": [ { "type": "vector", "path": "lyrics_embeddings_en", "numDimensions": 384, "similarity": "cosine" } ] }
ベクトル検索を使用した大規模なドキュメントの検索と分析
提供された query_client.py スクリプトを使用して、チャット インターフェースで Atlas ベクトル検索を使用してセマンティック クエリを実行します。
キーポイント
埋め込みの関連性を維持する: データ埋め込みを定期的に更新して、セマンティック検索が正確に保たれるようにします。
言語とモデルのペアを最適化します。 検索結果の関連性と精度を高めるために、LM がデータの言語と厳密に一致していることを確認します。
柔軟な埋め込みを使用: MongoDB の柔軟なデータモデル、埋め込みの長さや埋め込みに使用されるモデルに関係なく、埋め込みをデータと直接保存できます。
適切な類似度関数を選択: セマンティック検索の有効性は、選択した類似度関数に依存します。特定のユースケースに合わせて選択を調整します。
非同期埋め込みを生成: 非同期に埋め込みを作成して、アプリケーションのパフォーマンスを維持し、生成関数を水平方向に増やす。
作成者
David Sanchez, MongoDB