HyperAIHyperAI

Command Palette

Search for a command to run...

ビジュアルドキュメント検索機能で強化されたRAGパイプライン:CohereとGeminiを活用したマルチモーダルシステム構築

ビジュアルドキュメント検索のためのガイド ビジュアルドキュメント検索とは何か? 現代のドキュメントは単なるテキストだけでなく、表、グラフ、スクリーンショット、インフォグラフィックスなどの視覚的な要素も含んでいます。これらの視覚的な要素は、言語だけでは捉えきれない重要な情報を伝えることがあります。ビジュアルドキュメント検索は、このような画像形式のドキュメント内の情報を効果的に検索し、抽出できるシステムです。 伝統的なRAGの問題点 伝統的なリトリーバル・オーギュメンテッド・ジェネレーション(Retrieval-Augmented Generation, RAG)システムは、主要な情報をテキストから抽出するための手法に依存しています。しかし、多くの場合、重要な情報は表やグラフなどといった視覚的な要素に埋もれていることがあります。例えば、金融PDF、投資リサーチレポート、市場スライドなどでは、視覚的な要素から得られる情報が非常に豊かで、テキストベースのアプローチではこれらの重要な層の情報を取り逃がしてしまうことがよくあります。 解決策:マルチモーダルRAG マルチモーダルRAGは、伝統的なRAGにテキストと画像理解を組み合わせることによって、視覚的な情報を効果的に活用します。これにより、以下のような利点があります: - イメージとテキストから同時に検索が可能 - 混合モーダルの統合ベクトルインデックス - ジェミニ2.5フラッシュを用いて、マッチしたテキストまたは画像から文脈的な答えを得られる このシステムの流れは次のようになっています。PDFのアップロードから画像とテキストの埋め込み、ベクトル検索、ジェミニ2.5フラッシュによる回答生成まで、すべてStreamlit、Cohere、FAISS、Gemini 2.5 Flashを使って一連の流れとして連結されています。 実際のコード例 マルチモーダルRAGの基本的なフローを説明するために、以下に最小限のスクリプトを示します。 ```python import cohere from google.generativeai import GenerativeModel import faiss import numpy as np from pdf2image import convert_from_path from PIL import Image APIキーの設定 co = cohere.Client("your-cohere-key") gemini = GenerativeModel("gemini-2.5-flash") PDFページを画像に変換する関数 def pdf_to_images(pdf_path): return convert_from_path(pdf_path, dpi=200) 埋め込みを生成する関数 def get_embedding(content, content_type="text"): if content_type == "text": response = co.embed(input_type="search_document", texts=[content]) else: base64_img = Image.open(content).resize((512, 512)).tobytes().hex() response = co.embed( input_type="search_document", inputs=[{"content": [{"type": "image", "image": base64_img}]}] ) return response.embeddings[0] FAISSのインデックス作成とクエリ実行 dimension = 1024 index = faiss.IndexFlatL2(dimension) images = pdf_to_images("your.pdf") for img in images: index.add(np.array([get_embedding(img, "image")], dtype=np.float32)) def answer_query(query): query_emb = get_embedding(query) D, I = index.search(np.array([query_emb], dtype=np.float32), k=1) result = images[I[0][0]] if isinstance(result, Image.Image): return gemini.generate_content([query, result]).text else: return gemini.generate_content(f"Question: {query}\n\nContext: {text}").text ``` 注意:これは基本的なフローを示す最小限のgistです。完全な動作コードとUI、モジュール構造、検索ロジックは GitHubリポジトリ で利用可能です。 設定方法 マルチモーダルRAGを使ったプロジェクトを始める際に必要なものは以下の通りです。 APIキー 環境要件 ```sh GitHubリポジトリのクローン git clone https://github.com/SridharSampath/multimodal-rag-demo cd multimodal-rag-demo 依存パッケージのインストール pip install -r requirements.txt アプリの実行 streamlit run app.py ``` システムの依存関係として、Popplerが必要です。このプロジェクトはpdf2imageを使うことでPDFページを画像に変換しています。 実際の比較:マルチモーダルRAG vs. テキストのみのRAG 以下のクエリについて、マルチモーダルRAGとテキストのみのRAGの違いを示します。 クエリ: InvescoのAUMは何? マルチモーダルApp: バーチャートから発見 テキストのみApp: 見過ごす(テキストには言及なし) クエリ: BlackRockがテクノロジーサービスでどれだけの収益を得たか? マルチモーダルApp: BlackRockの損益計算書画像から値を取得 テキストのみApp: 見過ごす(テキストには言及なし) クエリ: S&P500のAppleの株式比率は? マルチモーダルApp: パイチャートから発見 テキストのみApp: 近似データを提供 クエリ: コビドパンデミック中にS&P500のトップ10のウェイトは? マルチモーダルApp: タイムラインチャートを解析 テキストのみApp: 特定の数字を見逃す クエリ: ETF内でBitcoinを追跡する方法は? マルチモーダルApp: テーブルイメージから発見 テキストのみApp: 特定の数字を見逃す 複数の視覚的要素を活用したRAGの効果 これらの比較から明らかなように、マルチモーダルRAGは視覚的情報を効果的に活用することで、より正確な答えを提供できます。テキストのみのRAGシステムでは、表やグラフに含まれる特定の数値や情報を取り逃がしてしまうことが多いですが、マルチモーダルRAGはその盲点を埋めることができ、ドキュメントからの情報抽出を向上させることができます。 専門家のコメント このシステムの導入により、ドキュメント内の重要な情報をより効率的かつ正確に抽出でき、様々な業務フローでの精度向上が期待できます。特に金融、研究、市場分析などの分野で、多くの視覚的情報が存在するドキュメントを扱う際には、極めて有用なツールとなるでしょう。 より広範な影響 マルチモーダルRAGの導入は、ドキュメントから情報を探し出す能力を大幅に向上させるため、企業や組織の生産性を向上させる可能性があります。また、この技術は、複雑な視覚的情報の理解を必要とするアプリケーション開発者にも大きなメリットをもたらすでしょう。

関連リンク

ビジュアルドキュメント検索機能で強化されたRAGパイプライン:CohereとGeminiを活用したマルチモーダルシステム構築 | 人気の記事 | HyperAI超神経