ブログ

RAGの様々な手法の比較検証

1. はじめに

近年、AIエージェントへの注目が高まっており、そのエージェントが利用するツールとしてRAG(Retrieval-Augmented Generation)システムが有力な候補の一つとして考えられます。今後、RAGが企業においてより本格的に活用される可能性を踏まえ、RAGの基礎を理解するために様々なRAGの手法を構築・比較検証を行いました。本記事では、そのプロセスと結果を共有します。

2. 利用したツール・構成

LLM API, モデル:

  • OpenAI API(RAGの推論に利用)
    • gpt-4o-mini
    • text-embedding-3-small
  • GCP VertexAI(PDFのテキスト化に利用)
    • gemini-2.0-flash

LLM Pythonライブラリ: LangChain

評価ライブラリ: Ragas

PDFテキスト抽出: Langchain PyPDFLoader

画像からのテキスト抽出: Gemini-2.0-flash

開発環境:

  • WSL2
  • Ubuntu
  • Docker
  • VSCode (Cursor)
  • 使用言語: Python
  • DB:
    • PostgreSQL pgvector
    • Elastic Search(Hybrid RAGに使用)
    • neo4j(Graph RAGに使用)

3. 検証した手法と開発・評価プロセス

試した手法

プロセス

  1. Vector DBはコンテナを立てて(参考:いまさら基本的なRAGを構築する)構築し、それぞれのRAGシステムを構築する。
  2. 構築したRAGシステムをRagasに接続し、評価する。

4. Ragas評価(ご参考までに)

※データセットを使って評価をしましたが、API利用料を抑えるために一部のみ(使用データセット: 01.pdf, 1c202401.pdf, DP2023-2.pdf, eval_datasets.pdf, FILP_Report2022.pdf)を使用してRagasで評価していますので、正確なものではありません。あくまでも参考程度にご確認ください。

PDFテキスト抽出方法:Langchain PyPDFLoader

ドキュメント(PDF)のテキスト抽出方法context_recallfactual_correctnessfaithfulnesssemantic_similarity
シンプルなRAG0.79170.39520.62630.6187
Dense X0.81480.35960.47240.565
Parent Document0.80860.34590.55150.593
ハイブリッド検索0.84910.42480.64530.6435
クエリ翻訳0.8750.30220.65520.5009
RAG Fusion0.83520.31810.57030.5738

次に、上記で結果の良かった「シンプルなRAG」「Parent Document」「ハイブリッド検索」に加え、Graph検索を取り入れたGraph RAGを、下記方法でテキスト抽出したPDFを使って再度評価

PDFテキスト抽出方法:Gemini 2.0-flash を使った画像からのテキスト抽出

ドキュメント(PDF)のテキスト抽出方法context_recallfactual_correctnessfaithfulnesssemantic_similarity
シンプルなRAG0.90.46220.66010.6821
Parent Document0.8210.40780.54920.6854
ハイブリッド検索0.86570.45520.65910.6928
Graph RAG0.88730.43560.68890.6853
MS Graph RAG0.31850.23070.25620.4465

検証結果まとめ

  • PDFのテキスト抽出プロセスの改善: Gemini-2.0-flashを用いたテキスト抽出により、大幅な性能向上が見られました。
  • 検索方法の拡張: Graph検索や全文検索の導入も精度向上に貢献しました。
  • 階層構造のDBの再帰検索処理: こちらも有効でしたが、Dense Xは今回の検証ではあまり精度向上に繋がりませんでした。

5. 学んだこと

  • RAGをどのように評価し、改善していくのかは難しい課題であると感じました。個別具体的な利用シーンや環境を定義し、そこに最適化することは可能であると考えられますが、汎用的な利用を想定した評価・改善は特に困難であることがわかりました
  • Ragasの検証結果(Ragas評価が正確なものではないとしても)から、シンプルなRAGが比較的高い精度を示したことは、RAGの精度向上の難易度が高いことを示唆していると考えられます
  • 上記でも述べた通り、今回はAPIの利用料を抑えるために使用するモデルも軽量なものを選択したため、より最新の高性能なモデルを使用することで、精度は大幅に向上する可能性があると考えられます

参考文献

pagetop