AI News HubLIVE
サイト内リライト2 分で読了

RAG-Anything チュートリアル:Colab でテキスト、表、数式、画像を扱うマルチモーダル検索パイプラインの構築

このチュートリアルでは、Google Colab で RAG-Anything を使用して、テキスト、表、数式、画像を横断的に処理するマルチモーダル検索パイプラインを構築します。環境設定、OpenAI API キーの安全な入力、合成マルチモーダルレポートの作成、content_list 形式への変換と検索システムへの挿入、そして様々な検索モード(naive、local、global、hybrid)のテストを段階的に解説します。

ソースMarkTechPost著者: Sana Hassan

このチュートリアルでは、RAG-Anything フレームワークを使用して、Google Colab 環境でマルチモーダル検索パイプラインを構築する方法を解説します。RAG-Anything は、テキスト、表、数式、画像など、複数のコンテンツタイプを同時に処理できる柔軟な検索拡張生成ツールです。

まず、Colab 実行環境を準備します。pip を使用して raganything[image,text]、openai、python-dotenv、reportlab、pandas、matplotlib、tabulate などのライブラリをインストールし、Pillow のバージョンを調整して互換性を確保します。インストール後、必要な Python モジュール(numpy、pandas、matplotlib、reportlab、openai、RAG-Anything のコアクラス)をインポートします。

次に、作業ディレクトリと実行時変数を設定します。ベースディレクトリ、アセットディレクトリ、出力ディレクトリ、ストレージディレクトリ、ログディレクトリを定義し、必要に応じてストレージをリセットして環境をクリーンに保ちます。その後、getpass を使用して OpenAI API キーを安全に入力し、クレンジングと検証を行います。チャット API と埋め込み API が正常に動作することを確認し、キーが有効で適切な権限を持つことを確認します。このチュートリアルでは、gpt-4o-mini をチャットおよびビジョンモデルとして、text-embedding-3-small を埋め込みモデルとして使用し、埋め込み次元は 1536 です。

インフラストラクチャの準備が整ったら、合成マルチモーダルレポートを生成します。月次データ(クエリ量、ハイブリッド精度、平均レイテンシ)を含む Pandas DataFrame を作成し、Markdown テーブルに変換します。同時に、使用量の増加とレイテンシの減少を示すトレンドグラフをプロットします。ReportLab を使用して PDF ドキュメントを生成し、紹介文、テーブル、数式(加重マルチモーダルスコア)、トレンドグラフを含めます。この合成レポートは、後のテスト用に多様なコンテンツを提供します。

次に、生成されたコンテンツを RAG-Anything の content_list 形式に変換します。これは RAG-Anything が直接受け付ける構造化入力であり、各項目にはタイプ、コンテンツ、およびオプションのメタデータ(ページ番号、キャプション、フットノートなど)が含まれます。テキスト段落、テーブル(本文とキャプションを含む)、数式(LaTeX と説明文)、画像(パスとキャプションを含む)を順に追加します。すべてのコンテンツのページ番号は 0 に設定します。

content_list の構築後、それを RAG-Anything の検索システムに挿入します。システムはこれらのコンテンツをベクトル化してインデックスを作成し、後続の検索に備えます。このチュートリアルでは、OpenAI のチャット、ビジョン、埋め込み機能を設定し、RAG-Anything インスタンスを初期化します。最後に、4 つの検索モード(naive:テキストのみのセマンティック検索、local:ローカルコンテキストのみ、global:グローバル検索、hybrid:ハイブリッドモード)をテストします。各モードの検索結果を比較し、モーダルを横断するクエリに対してどのように応答するかを観察します。例えば、「ハイブリッド精度の傾向」というクエリに対して、hybrid モードはテーブルとグラフの情報を組み合わせてより正確な回答を提供します。

このチュートリアルを通じて、RAG-Anything の基本的な使用方法とマルチモーダル検索の重要な概念を習得できます。このフレームワークは、レポートや研究論文など、複数のコンテンツタイプを含むドキュメントから情報を抽出し、質問応答を行うシナリオに適しています。独自のデータに合わせて content_list 形式を調整し、さまざまな検索戦略を試して最適な結果を得ることができます。