Elasticsearchは、業界をリードする生成AIツールやプロバイダーとネイティブに統合されています。RAG応用編やElasticベクトルデータベースで本番環境対応のアプリを構築する方法についてのウェビナーをご覧ください。
ユースケースに最適な検索ソリューションを構築するには、無料のクラウドトライアルを始めるか、ローカルマシンでElasticを試してみてください。
このブログでは、Elasticsearch を使用してマルチモーダル RAG (Retrieval-Augmented Generation) パイプラインを構築する方法を学びます。ImageBind を活用して、テキスト、画像、音声、深度マップなど、さまざまなデータ タイプの埋め込みを生成する方法について説明します。また、dense_vector と k-NN 検索を使用して、これらの埋め込みを Elasticsearch で効率的に保存および取得する方法についても説明します。最後に、大規模言語モデル (LLM) を統合して取得した証拠を分析し、包括的な最終レポートを生成します。
マルチモーダル RAG パイプラインはどのように機能しますか?
- 手がかりの収集→ ゴッサムの犯罪現場からの画像、音声、テキスト、深度マップ。
- 埋め込みの生成→ 各ファイルは、ImageBind マルチモーダル モデルを使用してベクトルに変換されます。
- Elasticsearch でのインデックス作成→ ベクトルは効率的な検索のために保存されます。
- 類似度による検索→ 新しい手がかりが与えられると、最も類似したベクトルが取得されます。
- LLM が証拠を分析→ GPT-4 モデルが応答を合成し、容疑者を特定します。
使用される技術
- ImageBind → さまざまなモダリティの統合された埋め込みを生成します。
- Elasticsearch → 高速かつ効率的なベクトル検索を可能にします。
- LLM (GPT-4、OpenAI) → 証拠を分析し、最終レポートを生成します。
このブログは誰に向けたものですか?
- マルチモーダルベクトル検索に興味のある Elastic ユーザー。
- マルチモーダル RAG を実際に理解したい開発者。
- 複数のソースからのデータを分析するためのスケーラブルなソリューションを探している方。
マルチモーダルRAGの前提条件: 環境の設定
ゴッサム シティの犯罪を解決するには、テクノロジー環境を整える必要があります。次のステップバイステップガイドに従ってください。
1. 技術要件
| 成分 | 仕様 |
|---|---|
| システムOS | Linux、macOS、またはWindows |
| Python | 3.10以降 |
| ラム | 最低8GB(16GBを推奨) |
| グラフィックプロセッサ | オプションですが、ImageBind では推奨されます |
2. プロジェクトの設定
すべての調査資料は GitHub で公開されており、このインタラクティブな犯罪解決体験には Jupyter Notebook (Google Colab) を使用します。開始するには、次の手順に従ってください。
Jupyter Notebook の設定 (Google Colab)
1. ノートブックにアクセスする
- すぐに使用できる Google Colab ノートブック「 Multimodal RAG with Elasticsearch」を開きます。
- このノートブックには、従う必要があるすべてのコードと説明が含まれています。
2. リポジトリをクローンする
3. 依存関係をインストールする
4. 資格情報を設定する
注: ImageBind モデル (約 2 GB) は、最初の実行時に自動的にダウンロードされます。
準備はすべて整ったので、詳細を調べて犯罪を解決しましょう。
はじめに:ゴッサム・シティの犯罪
ゴッサム・シティの雨の夜、衝撃的な犯罪が街を揺るがす。ゴードン委員長は謎を解くためにあなたの助けを必要としています。手がかりは、ぼやけた画像、謎の音声、暗号化されたテキスト、さらには深度マップなど、さまざまな形式で散在しています。最先端の AI テクノロジーを駆使して事件を解決する準備はできていますか?
このブログでは、さまざまな種類のデータ ( 画像、音声、テキスト、深度マップ) を単一の検索空間に統合する マルチモーダル RAG (検索拡張生成) システムの 構築を段階的に説明します。ImageBindを使用してマルチモーダル埋め込みを生成し、 Elasticsearch を使用してこれらの埋め込みを保存および取得し、大規模言語モデル (LLM) を使用して証拠を分析し、最終レポートを生成します。
基礎:マルチモーダルRAGアーキテクチャ
マルチモーダル RAG とは何ですか?
検索拡張生成 (RAG) マルチモーダルの台頭により、AI モデルとの対話方法に革命が起きています。従来、RAG システムはテキストのみを処理し、応答を生成する前にデータベースから関連情報を取得します。しかし、世界はテキストに限定されません。画像、ビデオ、音声にも貴重な知識が存在します。このため、マルチモーダル アーキテクチャが注目を集めており、AI システムがさまざまな形式の情報を組み合わせて、より豊富で正確な応答を実現できるようになりました。
マルチモーダルRAGの3つの主なアプローチ
マルチモーダル RAG を実装するには、一般的に 3 つの戦略が使用されます。それぞれのアプローチには、ユースケースに応じて独自の利点と制限があります。
1. 共有ベクトル空間
さまざまなモダリティからのデータは、ImageBind などのマルチモーダル モデルを使用して共通のベクトル空間にマッピングされます。これにより、明示的な形式変換を行わずに、テキスト クエリで画像、ビデオ、オーディオを取得できるようになります。
利点:
- 明示的な形式変換を必要とせずにクロスモーダル検索を可能にします。
- さまざまなモダリティ間のスムーズな統合を提供し、テキスト、画像、オーディオ、ビデオを直接取得できます。
- さまざまなデータ タイプに拡張可能なので、大規模な検索アプリケーションに役立ちます。
デメリット:
- トレーニングには大規模なマルチモーダル データセットが必要ですが、必ずしも利用できるとは限りません。
- 共有された埋め込み空間では意味ドリフトが生じる可能性があり、その場合、モダリティ間の関係は完全には保持されません。
- マルチモーダル モデルのバイアスは、データセットの分布に応じて、検索精度に影響を及ぼす可能性があります。
2. 単一のグラウンデッドモダリティ
すべてのモダリティは、検索前に単一の形式(通常はテキスト)に変換されます。たとえば、画像は自動的に生成されたキャプションを通じて説明され、音声はテキストに転記されます。
利点:
- すべてが 統一されたテキスト表現 に変換されるため、 検索が簡単になります 。
- 既存のテキストベースの検索エンジンと連携して動作し、特殊なマルチモーダル インフラストラクチャの必要性を排除します。
- 取得された結果は人間が読める形式であるため、解釈可能性が向上します。
デメリット:
- 情報の損失: 特定の詳細 (画像内の空間関係、音声のトーンなど) は、テキストの説明では完全には表現されない場合があります。
- キャプション/文字起こしの品質に依存: 自動注釈のエラーにより、検索の有効性が低下する可能性があります。
- 変換プロセスによって重要なコンテキストが削除される可能性があるため、純粋に視覚的または聴覚的なクエリには最適ではありません。
3. 個別検索
各モダリティごとに個別のモデルを維持します。システムは各データ タイプごとに個別の検索を実行し、後で結果を結合します。
利点:
- モダリティごとにカスタム最適化が可能になり、各データのタイプごとの検索精度が向上します。
- 複雑なマルチモーダル モデルへの依存が少なくなり、既存の検索システムとの統合が容易になります。
- さまざまなモダリティからの結果を動的に組み合わせることができるため、ランキングと再ランキングをきめ細かく制御できます。
デメリット:
- 結果の融合が必要なため、検索とランキングのプロセスがより複雑になります。
- 異なるモダリティが矛盾する情報を返す場合、一貫性のない応答が生成されることがあります。
- 各モダリティごとに独立した検索が実行され、処理時間が長くなるため、計算コストが高くなります。
私たちの選択: ImageBindによる共有ベクトル空間
これらのアプローチの中で、私たちは共有ベクトル空間を選択しました。これは、効率的なマルチモーダル検索のニーズに完全に一致する戦略です。私たちの実装は、 共通のベクトル空間 で複数のモダリティ( テキスト、画像、音声、ビデオ )を表現できるモデルである ImageBind に基づいています。これにより、次のことが可能になります。
- すべてをテキストに変換する必要なく、さまざまなメディア形式間でクロスモーダル検索を実行します。
- 非常に表現力豊かな埋め込みを使用して、さまざまなモダリティ間の関係を捉えます。
- スケーラビリティと効率性を確保し、Elasticsearch で高速に検索できるように最適化された埋め込みを保存します。
このアプローチを採用することで、追加の前処理なしでテキストクエリで 画像や音声を直接取得 できる 堅牢なマルチモーダル検索パイプライン を構築しました。この方法は、大規模リポジトリでのインテリジェントな検索から高度なマルチモーダル推奨システムまで、実用的なアプリケーションを拡張します。
次の図は、マルチモーダル RAG パイプライン内のデータ フローを示しており、マルチモーダル データに基づくインデックス作成、検索、および応答生成のプロセスが強調表示されています。

埋め込みスペースはどのように機能しますか?
従来、テキスト埋め込みは言語モデル (BERT、GPT など) から得られます。現在、Meta AI のImageBindのようなネイティブ マルチモーダル モデルにより、複数のモダリティのベクトルを生成するバックボーンが得られます。
- テキスト: 文と段落は同じ次元のベクトルに変換されます。
- 画像 (視覚) : ピクセルは、テキストに使用されるのと同じ次元空間にマッピングされます。
- オーディオ: サウンド信号は、画像やテキストに匹敵する埋め込みに変換されます。
- 深度マップ: 深度データが処理され、ベクターが生成されます。
したがって、 コサイン類似度 などのベクトル類似度メトリックを使用して、任意の手がかり ( テキスト、画像、音声、深度) を他の手がかりと比較できます。笑い声の音声サンプルと容疑者の顔の画像がこの空間で「近い」場合、何らかの相関関係(同じ身元など)を推測できます。
ステージ1 - 犯罪現場の手がかりを集める
証拠を分析する前に、それを収集する必要があります。ゴッサムでの犯罪は、画像、音声、テキスト、さらには深度データに隠されている可能性のある痕跡を残しました。これらの手がかりを整理してシステムに取り入れてみましょう。
何があるでしょうか?
ゴードン委員は、犯罪現場から4つの異なる方法で収集された証拠を含む以下のファイルを私たちに送信しました。
トラックの説明とモダリティ
a) 画像(写真2枚)
crime_scene1.jpg, crime_scene2.jpg→ 犯罪現場から撮影された写真。地面に怪しい痕跡が残っている。suspect_spotted.jpg→現場から逃走するシルエットが映った防犯カメラの映像。



b)音声(録音1件)
joker_laugh.wav→ 犯罪現場近くのマイクが不気味な笑い声を捉えた。

c) テキスト(1件)
Riddle.txt, note2.txt→ その場所で、犯人が残したと思われる謎のメモが見つかりました。

d) 深度(深度マップ1枚)
depth_suspect.png→ 深度センサー付きの防犯カメラが近くの路地に容疑者を捉えた。jdancing-depth.png→ 深度センサー付きの防犯カメラが、地下鉄の駅に降りていく容疑者を捉えた。


これらの証拠は形式が異なり、同じ方法で直接分析することはできません。これらを埋め込み、つまりモーダル間の比較を可能にする数値ベクトルに変換する必要があります。
ファイル構成
処理を開始する前に、パイプラインがスムーズに実行されるように、すべての手がかりが data/ ディレクトリ内で適切に整理されていることを確認する必要があります。
予想されるディレクトリ構造:
手がかりの構成を確認するためのコード
続行する前に、必要なファイルがすべて正しい場所にあることを確認しましょう。
ファイルを実行する
予想される出力(すべてのファイルが正しい場合):
予想される出力(ファイルが欠落している場合):
このスクリプトは、埋め込みを生成して Elasticsearch にインデックス付けする前にエラーを防ぐのに役立ちます。
ステージ2 - 証拠の整理
ImageBindによる埋め込みの生成
手がかりを統合するには、手がかりを埋め込み、つまり各様相の意味を捉えるベクトル表現に変換する必要があります。ここでは、共有ベクトル空間内でさまざまなデータ タイプ ( 画像、音声、テキスト、深度マップ) の埋め込みを生成する Meta AI のモデルである ImageBind を 使用します。

ImageBind はどのように機能しますか?
さまざまな種類の証拠 (画像、音声、テキスト、深度マップ) を比較するには、 ImageBindを使用してそれらを数値ベクトルに変換する必要があります。このモデルにより、あらゆるタイプの入力を同じ埋め込み形式に変換できるため、モダリティ間のクロスモーダル検索が可能になります。
以下は、各モダリティに適したプロセッサを使用して、あらゆるタイプの入力の埋め込みを生成するための最適化されたコード ( src/embedding_generator.py ) です。
テンソルは、特に ImageBind のようなモデルを扱う場合の、機械学習とディープラーニングにおける基本的なデータ構造です。私たちの文脈では:
ここで、テンソルは、モデルが処理できる数学的形式に変換された入力データ (画像、音声、またはテキスト) を表します。具体的には:
- 画像の場合: テンソルは、画像を数値 (高さ、幅、およびカラー チャネル別に整理されたピクセル) の多次元行列として表現します。
- オーディオの場合: テンソルは、音波を時間の経過に伴う一連の振幅として表します。
- テキストの場合: テンソルは単語またはトークンを数値ベクトルとして表します。
埋め込み生成のテスト:
次のコードを使用して埋め込み生成をテストしてみましょう。これを 02-stage/test_embedding_generation.py に保存し、次のコマンドで実行します。
期待される出力:
これで、画像は1024 次元のベクトルに変換されました。
ステージ3 - Elasticsearchでの保存と検索
証拠の埋め込みを生成したので、効率的な検索を可能にするために、それらをベクトル データベースに保存する必要があります。このため、密なベクトル ( dense_vector ) をサポートし、類似性検索を可能にするElasticsearchを使用します。
このステップは、主に次の 2 つのプロセスで構成されます。
- 埋め込みのインデックス作成→ 生成されたベクトルを Elasticsearch に保存します。
- 類似検索→ 新しい証拠に最も類似したレコードを取得します。
Elasticsearchで証拠をインデックスする
ImageBindによって処理される各証拠 (画像、音声、テキスト、深度) は、1024 次元のベクトルに変換されます。将来の検索を可能にするために、これらのベクトルをElasticsearchに保存する必要があります。
次のコード ( src/elastic_manager.py ) は、Elasticsearch にインデックスを作成し、埋め込みを格納するためのマッピングを構成します。
インデックス作成の実行
それでは、プロセスをテストするために証拠をインデックスしてみましょう。
Elasticsearch での予想される出力 (インデックスされたドキュメントの概要):
すべてのマルチモーダル証拠をインデックスするには、次の Python コマンドを実行してください。
これで、証拠はElasticsearchに保存され、必要なときに取得できるようになりました。
インデックス作成プロセスの検証
インデックス作成スクリプトを実行した後、すべての証拠が Elasticsearch に正しく保存されているかどうかを確認しましょう。Kibana の開発ツールを使用して、いくつかの検証クエリを実行できます。
1. まず、インデックスが作成されたかどうかを確認します。
2. 次に、モダリティごとのドキュメント数を確認します。
3. 最後に、インデックスされたドキュメントの構造を調べます。
期待される結果:
- `multimodal_content` という名前のインデックスが存在する必要があります。
- さまざまなモダリティ(視覚、音声、テキスト、深度)に分散された約 7 つのドキュメント。
- 各ドキュメントには、埋め込み、モダリティ、説明、メタデータ、content_path フィールドが含まれている必要があります。
この検証手順により、類似性検索に進む前に証拠データベースが適切に設定されていることが保証されます。
Elasticsearchで類似の証拠を検索する
証拠がインデックス化されたので、検索を実行して新しい手がかりに最も類似した記録を見つけることができます。この検索では、ベクトル類似性を使用して、埋め込み空間内の最も近いレコードを返します。
次のコードはこの検索を実行します。
検索のテスト - マルチモーダル結果のクエリとして音声を使用する
それでは、疑わしい音声ファイルを使用して証拠の検索をテストしてみましょう。同じ方法でファイルの埋め込みを生成し、同様の埋め込みを検索する必要があります。
ターミナルに期待される出力:

これで、取得した証拠を分析し、事件との関連性を判断できます。
オーディオを超えて - マルチモーダル検索の探求
役割の逆転:あらゆるモダリティは「質問」になり得る
当社のマルチモーダル RAGシステムでは、あらゆるモダリティが潜在的な検索クエリとなります。音声の例を超えて、他のデータ タイプで調査を開始する方法を見てみましょう。
1. テキストによる検索(犯人のメモの解読)
シナリオ:暗号化されたテキスト メッセージを発見し、関連する証拠を見つけたいと考えています。
期待される結果:
2. 画像検索(不審な犯罪現場の追跡)
シナリオ:新しい犯罪現場( crime_scene2.jpg ) を他の証拠と比較する必要があります。
アウトプット:
3. 深度マップ探索(3D追跡)
シナリオ:深度マップ( jdancing-depth.png ) により、画像のエスケープ パターンが明らかになります。
出力



なぜこれが重要なのでしょうか?
それぞれのモダリティは独自の接続を明らかにします。
- テキスト→ 容疑者の言語パターン。
- 画像→場所や物体の認識。
- 深度→ 3D シーンの再構築。
現在、 Elasticsearch には 構造化された証拠データベース があり、 マルチモーダル証拠を効率的に保存および取得 できます。
私たちが行ったことの要約:
- Elasticsearch にマルチモーダル埋め込みを保存しました。
- 類似性検索を実行し、新たな手がかりに関連する証拠を見つけました。
- 疑わしい音声ファイルを使用して検索をテストし、システムが正しく動作することを確認しました。
次のステップ: LLM (大規模言語モデル) を使用して、取得した証拠を分析し、最終レポートを生成します。
ステージ4 - LLMで点と点をつなぐ
証拠が Elasticsearch で インデックス化され 、類似性に基づいて検索できるようになったので、それを 分析し 、ゴードン委員に送信する 最終レポート を生成する LLM (大規模言語モデル) が必要になります。LLM は、取得した証拠に基づいてパターンを識別し、手がかりを結び付け、容疑者を提案する責任を負います。
このタスクでは、 GPT-4 Turbo を使用して、モデルが結果を効率的に 解釈 できるように 詳細なプロンプト を作成します。
LLM統合
LLM を システムに統合するために、 Elasticsearch から 取得した証拠 を受け取り、この証拠をプロンプト コンテキストとして使用して フォレンジック レポート を生成する LLMAnalyzer クラス (src/llm_analyzer.py ) を作成しました。
LLM分析における温度設定:
当社の法医学分析システムでは、0.5 という適度な温度を使用します。このバランスの取れた設定が選択された理由は次のとおりです。
- これは、決定論的(厳しすぎる)出力と非常にランダムな出力の中間地点を表します。
- 0.5 では、モデルは論理的かつ正当な法医学的結論を提供するのに十分な構造を維持します。
- この設定により、モデルは合理的なフォレンジック分析パラメータの範囲内でパターンを識別し、接続を確立できます。
- 一貫性と信頼性の高い出力の必要性と洞察力に富んだ分析を生成する能力のバランスをとります。
この適度な温度設定により、過度に厳格で過度に推測的な結論を回避しながら、法医学的分析の信頼性と洞察力を高めることができます。
証拠分析の実行
LLM 統合が完了したので、すべてのシステム コンポーネントを接続するスクリプトが必要です。このスクリプトは次のことを行います。
- Elasticsearch で 同様の証拠を検索します 。
- LLM を使用して 取得した証拠を分析し 、 最終レポートを生成します。
コード: 証拠分析スクリプト
期待されるLLM出力

結論:事件は解決した
マルチモーダル RAG システムは 、すべての 手がかりを集めて分析し 、容疑者を ジョーカー として特定しました。
ImageBind を使用して 画像、音声、テキスト、深度マップを 共有ベクトル空間 に結合することにより、システムは手動では識別不可能だった 接続を検出 できるようになりました。Elasticsearch は高速かつ効率的な検索を保証し、 LLM は証拠を統合して明確で決定的なレポートを作成しました。
しかし、このシステムの真の力はゴッサム シティだけにとどまりません。マルチモーダル RAG アーキテクチャは、数多くの実際のアプリケーションへの扉を開きます。
- 都市監視:画像、音声、センサーデータに基づいて容疑者を特定します。
- 法医学的分析:複数の情報源からの証拠を相関させて複雑な犯罪を解決します。
- マルチメディア推奨: マルチモーダルコンテキスト を理解する 推奨システム の作成 (例: 画像やテキストに基づいて 音楽 を提案する)。
- ソーシャル メディアのトレンド:さまざまなデータ形式にわたってトレンドのトピックを検出します。
マルチモーダル RAG システムの構築方法を学習したので、独自の手がかりを使ってテストしてみませんか?
あなたの発見を私たちと共有し 、 マルチモーダル AI の分野での コミュニティ の進歩に貢献してください。
特別な感謝
このコードのデプロイメント アーキテクチャを定義するプロセス中に貴重な貢献とレビューをしてくれた Adrian Cole に感謝します。
参照資料
よくあるご質問
マルチモーダル RAG とは何ですか?
マルチモーダル RAG は、AI システムがさまざまな形式 (画像、ビデオ、オーディオなど) の情報を組み合わせて、より豊富で正確な応答を実現できるようにする方法です。
マルチモーダル RAG を実装するにはどうすればよいでしょうか?
マルチモーダルRAGを実装するためには、共有ベクトル空間、単一のグラウンデッドモダリティ、および個別の検索という3つの戦略が一般的に使用されます。




