Multimodal RAG
マルチモーダルRAGは、テキストに加えて画像、動画フレーム、音声、ページスキャンを検索し、見つけた情報をもとに視覚言語モデルが回答します。
マルチモーダルRAGは、テキストだけでなく、画像、動画、音声、スキャン文書やレンダリング文書を含むナレッジベースを対象とした検索拡張生成 (RAG)です。質問に応じて、これらのモダリティから最も関連性の高い項目を検索し、視覚言語モデル (VLM)がそれらをもとに回答を生成します。その結果、配線図、製品写真、PDF内のグラフなどを、誰かが事前に作成したテキスト説明だけに頼らず、直接検索して読み取れるようになります。
テキスト以外のデータをインデックス化する方法#
最も単純な方法は、すべてをテキストに変換することです。画像キャプション生成、光学文字認識 (OCR)、音声テキスト変換の書き起こし、物体検出のラベルを使って、各項目を通常のテキストインデックスで検索可能な言葉で記述します。この方法では既存のテキストRAGパイプラインを変更せずに再利用できますが、説明に含まれない情報は失われます。
2つ目の方法では、画像とテキストを同じ共有空間に埋め込みます。対照学習で学習したOpenAIのCLIPやGoogleのSigLIPなどのモデルは、写真とその説明文を近接した埋め込みに変換するため、テキストの質問からベクトルデータベース内の画像を直接検索できます。文書の場合、ColPali (2024)は各ページのスクリーンショットをパッチベクトルのグリッドとして埋め込み、ColBERT方式の遅延インタラクションを使って質問のトークンと照合します。これにより、表やグラフが多いPDFでもOCRやレイアウト解析を省略できます。
その後、検索された画像とテキストの抜粋などを組み合わせて、質問とともにVLMへ渡し、回答を生成します。検索した画像を根拠として回答をグラウンディングすると、ある企業のコントロールパネルのレイアウトなど、モデルが学習時に見ていない視覚的な詳細に関するハルシネーションを減らせます。
共有埋め込み空間での検索#
この例では、2枚の画像からなるナレッジベースを使い、各質問への回答となる画像をCLIP ViT-B/32チェックポイントで選択します。
import requests
from PIL import Image
from transformers import CLIPModel, CLIPProcessor
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
# Image knowledge base: CLIP embeds images and text into one shared vector space
urls = ["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/zidane.jpg"]
images = [Image.open(requests.get(url, stream=True, timeout=10).raw) for url in urls]
questions = ["What color is the man's tie?", "How many people are standing next to the bus?"]
# Retrieve: score each question against every image and keep the best match for the VLM
inputs = processor(text=questions, images=images, return_tensors="pt", padding=True)
scores = model(**inputs).logits_per_text
for question, row in zip(questions, scores):
print(f"{question} -> {urls[row.argmax()].split('/')[-1]}")ネクタイに関する質問ではzidane.jpgが、バスに関する質問ではbus.jpgが検索されます。CLIPが各質問のテキスト埋め込みを、質問の対象となる写真に最も近く配置するためです。その後の生成処理はUltralytics LLMインターフェースが担います。llm(question, image=...)は質問と検索画像を1回の呼び出しで任意のOpenAI互換視覚言語モデルに渡し、プロバイダーの応答を返します。
マルチモーダルRAGと関連用語の比較#
- 視覚的質問応答 (VQA): ユーザーが提供した画像についての質問に回答します。マルチモーダルRAGは、何千もの画像、ページ、クリップから確認対象を最初に見つけます。
- マルチモーダルモデル:OpenAIのGPTやGoogleのGeminiモデルなど、画像とテキストを一緒に読み取る生成モデルです。マルチモーダルRAGは、これらのモデルに何を見せるかを決定する検索システムです。
- セマンティック検索: 検索機能のみを指し、モデルではなく人に対して順位付けした結果を返します。
実際のアプリケーション#
- 製造の保守: 技術者が故障した部品を撮影すると、システムは対応する分解図が載ったマニュアルのページと、同じアセンブリを過去に修理した際の写真を検索します。
- 小売の検索とサポート: 買い物客の写真から見た目の似たカタログ商品を検索し、アシスタントは商品資料をもとにサイズ適合性や互換性に関する質問に回答します。
- 文書に関する質問応答: 年次報告書、科学論文、スライド資料では、重要な数値がグラフや表に記載されています。ページ画像検索を使えば、別途テーブルパーサーを用意せずにそれらを見つけられます。
- 動画理解: サンプリングしたフレームや短いクリップを埋め込みでインデックス化すると、「配送バンはいつ到着しましたか?」といった質問から該当する映像の時間帯を検索できます。そのため、VLMは何時間もの動画ではなく、少数のフレームを読み取ります。
設計上のトレードオフ#
画像はコンテキストのコストが高く、VLMは画像ごとに数百から数千のトークンへ変換するため、パイプラインでは通常、検索結果の上位数枚のみを渡し、その周囲に短いテキストの抜粋を配置します。共有埋め込みを使う検索システムには、学習に由来する制約もあります。CLIPのテキストエンコーダーが読み取れるのは最大77トークンのため、長い質問は照合前に切り詰められます。また、画像全体の埋め込みは、ラベルにあるシリアル番号などの細部より、シーン全体の内容を捉えるのに適しています。OCRで読み取れる細部はテキスト変換によって検索可能な状態を保てるため、多くのシステムはOCRテキストと画像埋め込みの両方をインデックス化し、2つの結果リストをハイブリッド検索で統合します。










