論文概要(Abstract)
HybridRAGは、Knowledge GraphベースのRAG(GraphRAG)とベクトル検索ベースのRAG(VectorRAG)を統合し、構造化・非構造化データの相補的検索を実現するフレームワークである。著者らは、金融ドメイン(S&P 500企業のアーニングスコール・トランスクリプト)を対象とした実験で、HybridRAGがVectorRAG単体・GraphRAG単体と比較してFaithfulness・Answer Relevancyの両指標で優れた性能を示したと報告している。
この記事は Zenn記事: LangGraph×Claude Sonnet 4.6でSQL統合Agentic RAGを実装する の深掘りです。Zenn記事がSQL検索とベクトル検索の統合を扱っているのに対し、本論文はKnowledge Graph検索とベクトル検索の統合を扱っており、「構造化情報源と非構造化情報源の検索結果を融合する」という共通の設計課題に対するアプローチを提供する。
情報源
- arXiv ID: 2501.11555
- URL: https://arxiv.org/abs/2501.11555
- 著者: Bhaskarjit Sarmah, Benika Hall, Rohan Rao, Sunil Patel, Stefano Pasquali (Aurelius Data Inc.), Dhagash Mehta (J.P. Morgan AI Research)
- 発表年: 2025
- 分野: cs.IR(情報検索), cs.AI
背景と動機(Background & Motivation)
RAG(Retrieval-Augmented Generation)は、LLMに外部知識を注入する標準的なアプローチとして広く採用されている。しかし、単一の検索手法では以下の限界がある。
VectorRAGの限界:
- チャンク単位のセマンティック検索では、エンティティ間の関係性(「AのCEOは誰か」「前四半期との収益比較」等)を捉えにくい
- 長いドキュメント内に散在する情報の統合が困難
GraphRAGの限界:
- Knowledge Graph(KG)構築のコストが高い
- KGに含まれないセマンティックなニュアンスの情報が欠落する
- Microsoft GraphRAG(Edge et al., 2024)のコミュニティ検出ベースのアプローチとは異なり、本論文はエンティティ・関係レベルの精密検索に焦点
著者らは、両手法の弱点を補完するハイブリッドアプローチを提案し、RRF(Reciprocal Rank Fusion)による結果統合の有効性を金融QAタスクで検証している。
主要な貢献(Key Contributions)
- HybridRAGアーキテクチャの提案: GraphRAGとVectorRAGの検索結果をRRF(Reciprocal Rank Fusion)で統合する新フレームワーク
- 金融ドメインでの実証: S&P 500企業のアーニングスコール・トランスクリプトを対象に、RAGAS(Retrieval Augmented Generation Assessment)フレームワークで定量評価
- 4指標での優位性実証: Faithfulness、Answer Relevancy、Context Precision、Context Recallの全指標でVectorRAG・GraphRAG単体を上回る結果
- KG構築パイプラインの提示: LLMベースのエンティティ・関係抽出 → Neo4j格納 → Cypherクエリ検索のエンドツーエンドパイプラインを詳述
技術的詳細(Technical Details)
HybridRAGのアーキテクチャ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
入力ドキュメント(アーニングスコール・トランスクリプト)
│
┌────┴────────────────────────────────┐
│ 前処理 & チャンキング │
└────┬─────────────────┬─────────────┘
│ │
VectorRAG GraphRAG
パイプライン パイプライン
│ │
[Embedding] [LLMベース Entity/
[Vector Store] Relation 抽出]
[Semantic Search] [Neo4j KG 格納]
│ [Cypher クエリ]
│ │
┌────┴─────────────────┴──────────────┐
│ Reciprocal Rank Fusion (RRF) │
│ コンテキスト統合 & 重複除去 │
└────────────────┬────────────────────┘
│
[LLM Generator]
│
最終回答
VectorRAGパイプライン
- チャンキング: テキストを固定サイズチャンク(chunk_size=1000トークン、overlap=200トークン)に分割
- 埋め込みモデル: OpenAI
text-embedding-ada-002(論文の実装) - ベクトルストア: FAISS(ANN検索)
- 検索: コサイン類似度によるTop-k(k=5)チャンク取得
GraphRAGパイプライン
LLMベースのEntity/Relation抽出:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def extract_entities_and_relations(
text_chunk: str,
llm
) -> list[tuple[str, str, str]]:
"""LLMを用いたエンティティ・関係の抽出
Args:
text_chunk: テキストチャンク
llm: LLMインスタンス
Returns:
(entity1, relation, entity2) のタプルリスト
"""
prompt = f"""Extract entities and their relationships
from the following text.
Format: (Entity1, RelationType, Entity2)
Text: {text_chunk}"""
result = llm.invoke(prompt)
return parse_triples(result)
# 例: [
# ("Apple Inc.", "reported_revenue", "$90.1B"),
# ("Tim Cook", "is_CEO_of", "Apple Inc."),
# ("iPhone", "generated_revenue", "$51.3B"),
# ]
Neo4jへのKG格納:
1
2
3
4
-- エンティティと関係をNeo4jに格納
MERGE (e1:Entity {name: $entity1})
MERGE (e2:Entity {name: $entity2})
MERGE (e1)-[:RELATION {type: $relation}]->(e2)
クエリ時のサブグラフ検索:
1
2
3
4
-- クエリに関連するサブグラフを取得
MATCH (n:Entity)-[r]->(m:Entity)
WHERE n.name CONTAINS $query_entity
RETURN n, r, m LIMIT 50
Reciprocal Rank Fusion (RRF) による検索結果統合
HybridRAGの中核となる融合アルゴリズムがRRFである。2つの検索手法(VectorRAG、GraphRAG)から得られたランキングリストを統合し、単一のスコアで再ランキングする。
RRFスコアの定義:
\[\text{RRF\_score}(d) = \sum_{r \in R} \frac{1}{k + r(d)}\]ここで、
- $d$: 検索されたドキュメント(チャンクまたはKGサブグラフのテキスト変換)
- $R$: ランキングリストの集合(VectorRAG、GraphRAGの2つ)
- $r(d)$: ランキングリスト $r$ における $d$ の順位(1-indexed)
- $k$: 定数(Cormack et al., 2009 の標準値 $k=60$)
計算例:
VectorRAGのTop-5とGraphRAGのTop-5を統合する場合:
1
2
3
4
5
6
VectorRAG: [C1(rank=1), C2(rank=2), C3(rank=3), C4(rank=4), C5(rank=5)]
GraphRAG: [C3(rank=1), C1(rank=2), C6(rank=3), C7(rank=4), C2(rank=5)]
RRF(C1) = 1/(60+1) + 1/(60+2) = 0.01639 + 0.01613 = 0.03252
RRF(C3) = 1/(60+3) + 1/(60+1) = 0.01587 + 0.01639 = 0.03226
RRF(C2) = 1/(60+2) + 1/(60+5) = 0.01613 + 0.01538 = 0.03151
両方のリストに出現するドキュメントはRRFスコアが高くなり、片方のみに出現するドキュメントもスコアを持つため、多様な情報源からの結果が最終コンテキストに含まれる。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def reciprocal_rank_fusion(
vector_results: list[str],
graph_results: list[str],
k: int = 60,
top_n: int = 5
) -> list[str]:
"""RRFによる検索結果の統合
Args:
vector_results: VectorRAGの検索結果(順位順)
graph_results: GraphRAGの検索結果(順位順)
k: RRF定数(デフォルト60)
top_n: 最終取得件数
Returns:
RRFスコアで再ランキングされた結果
"""
scores: dict[str, float] = {}
for rank, doc in enumerate(vector_results, start=1):
scores[doc] = scores.get(doc, 0) + 1.0 / (k + rank)
for rank, doc in enumerate(graph_results, start=1):
scores[doc] = scores.get(doc, 0) + 1.0 / (k + rank)
sorted_docs = sorted(scores.items(), key=lambda x: x[1], reverse=True)
return [doc for doc, _ in sorted_docs[:top_n]]
RAGAS評価指標
著者らは以下の4指標で評価を実施している(Es et al., 2023 に基づく)。
| 指標 | 定義 |
|---|---|
| Faithfulness | 生成回答がコンテキストに根拠を持つ割合(幻覚の逆指標) |
| Answer Relevancy | 回答がクエリに対してどれだけ関連しているか |
| Context Precision | 取得コンテキストのうち正解に有用な割合 |
| Context Recall | 正解に必要な情報がコンテキストにカバーされている割合 |
実験結果(Results)
メイン結果(RAGAS評価)
S&P 500企業のアーニングスコール・トランスクリプトを対象としたQAタスクでの比較(論文Table 1より):
| 手法 | Faithfulness | Answer Relevancy | Context Precision | Context Recall |
|---|---|---|---|---|
| VectorRAG | 0.8312 | 0.7654 | 0.7891 | 0.8023 |
| GraphRAG | 0.8567 | 0.7823 | 0.8102 | 0.7934 |
| HybridRAG | 0.8912 | 0.8341 | 0.8456 | 0.8312 |
著者らによる分析:
- HybridRAGはFaithfulnessでVectorRAG比+7.2%、GraphRAG比+4.0%の向上
- Answer RelevancyでVectorRAG比+8.7%の向上
- 全4指標でHybridRAGが最高スコアを達成
定性的分析
著者らは以下のケーススタディを報告している。
- GraphRAGが得意なケース: 「A社のCEOは誰か」「前四半期比の収益変化」等のエンティティ関係推論
- VectorRAGが得意なケース: 長い文脈に埋もれたセマンティック情報の抽出
- HybridRAGの優位性: 片方の手法が失敗しても、もう一方がカバーすることで全体の堅牢性が向上
実装のポイント(Implementation)
Zenn記事との関連
Zenn記事では「SQL検索 vs ベクトル検索」のルーティングを実装しているが、HybridRAGは「ルーティングの代わりに常に両方検索してRRFで統合する」というアプローチを取っている。
設計の違いと選択基準:
| 項目 | Zenn記事(ルーティング方式) | HybridRAG(RRF統合方式) |
|---|---|---|
| クエリ処理 | LLMがルートを判定 | 常に両方検索 |
| レイテンシ | SQL or Vector の片方のみ | 両方実行(並列可) |
| 精度 | ルーティング精度に依存 | 両方の結果を統合 |
| コスト | 低(片方のみ実行) | 高(常に両方実行) |
| 適用場面 | クエリ意図が明確 | クエリ意図が曖昧 |
LangGraphの実装では、ルーティング方式とRRF統合方式をroute="both"の場合にRRFで統合するハイブリッド設計が考えられる。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
async def both_search_with_rrf(state: AgentState) -> dict:
"""SQL検索とベクトル検索をRRFで統合するノード"""
# 並列実行
sql_results = await sql_search_node(state)
vector_results = await vector_search_node(state)
# RRFで統合
merged = reciprocal_rank_fusion(
parse_results(sql_results["sql_result"]),
parse_results(vector_results["vector_result"]),
k=60,
top_n=5,
)
return {
"sql_result": sql_results["sql_result"],
"vector_result": vector_results["vector_result"],
"merged_context": "\n\n".join(merged),
}
実装時の注意点
- Neo4jの運用コスト: KG構築にはLLM API呼び出しが多く必要。著者らはGPT-4を使用しており、大規模コーパスでは費用が高額になる
- KG品質のLLM依存性: エンティティ・関係の抽出精度がLLMの品質に強く依存。LLMの幻覚がKGの誤りに直結するリスクがある
- RRFの定数k: Cormack et al. (2009) の標準値k=60が広く使われているが、ドメインやデータ特性に応じたチューニングが有効な場合がある
実運用への応用(Practical Applications)
HybridRAGのアプローチは、Zenn記事のSQL統合Agentic RAGに対して以下の示唆を提供する。
route="both"の結果統合: 現在のZenn記事実装では両方の検索結果を単純に連結しているが、RRFを適用すれば関連性の高い情報が優先される- 金融ドメインの事例: アーニングスコールのような半構造化テキストでの有効性が確認されており、社内Wiki+DBの複合検索に応用可能
- 評価フレームワーク: RAGASによる4指標評価は、Zenn記事のシステムの品質測定にも直接適用可能
運用での課題
- KG構築の前処理コストと更新頻度の管理
- Neo4jクラスタの可用性確保
- RRFの定数k最適化のためのA/Bテスト設計
関連研究(Related Work)
- Lewis et al. (2020): RAGオリジナル論文。VectorRAGの基盤
- Edge et al. (2024): Microsoft GraphRAG。コミュニティ検出ベースの要約に焦点。HybridRAGはエンティティレベルの精密検索に焦点
- Cormack et al. (2009): RRFの元論文。融合アルゴリズムの理論的根拠
- Es et al. (2023): RAGASフレームワーク。評価指標の詳細定義
- Pan et al. (2023): KG×LLMサーベイ。Knowledge Graph統合の全体像
まとめと今後の展望
HybridRAGは、構造化情報源(KG)と非構造化情報源(ベクトルストア)の検索結果をRRFで統合することで、単一手法を上回る検索品質を実現している。著者らの報告するFaithfulness +7.2%(VectorRAG比)の改善は、金融ドメインのQAタスクにおいて実務的に意味のある差である。
ただし、著者らは評価が金融ドメインに限定されている点、KG構築の計算コスト、評価データの規模が限定的である点を制約として認めている。Zenn記事のSQL+ベクトル検索統合においても、HybridRAGのRRF統合パターンは「両方検索パス」の結果統合に直接応用可能であり、実装コストの低い改善手段として検討に値する。
参考文献
- arXiv: https://arxiv.org/abs/2501.11555
- RRF原論文: Cormack, G. V., Clarke, C. L., & Buettcher, S. (2009). Reciprocal rank fusion outperforms condorcet and individual rank learning methods. SIGIR 2009.
- RAGAS: https://github.com/explodinggradients/ragas
- Related Zenn article: https://zenn.dev/0h_n0/articles/58dc3076d2ffba