コンテンツにスキップ

RAG検索の3択+融合 — Dense/BM25/SPLADE を RRF で混ぜて JMTEB 11タスクで検証

作成日: 2026-06-29 出典 / きっかけ: TAIMO「RAGの検索、結局どれが強い?Dense/BM25/SPLADE を RRF で混ぜて11タスクで検証した結果」(Zenn, 2026-04-19, https://zenn.dev/taimo/articles/28a1d0eccbc199) を起点に、SPLADE原典・JMTEB・モデルを一次資料で裏取りして体系化 関連: rag_hybrid_search_bm25_embedding_rrf_整理(BM25+Embedding+RRFの概念編。本ノートはその実測検証編)、vectordb_recommendation_整理


0. 要点(3行)

  • 検索手法は 3系統 ある — Dense(埋め込み・意味)/Lexical(BM25・完全一致)/Sparse-learned(SPLADE・学習した疎ベクトル)。SPLADEは「BM25の語彙一致」と「埋め込みの語拡張・重み学習」の中間に位置する第3の選択肢。
  • JMTEB 11タスク(NDCG@10)で7パターンを比較した結果、3-way(D+L+S)が総合1位。ただし強さの正体は「尖りではなく転びにくさ」=どのデータセットでも4位以下に落ちない安定性。個別タスクではほぼ単体手法に負ける(3-wayが単独首位はTitleAbsの1タスクのみ)。
  • 教訓: クエリ分布が読めない汎用RAG → ハイブリッド(保険)クエリ傾向が既知のドメイン特化 → 単体手法を最適化。「混ぜれば最強」ではなく「混ぜると事故らない」が正しい理解。

1. 検索手法は3系統ある(Dense / Lexical / Sparse-learned)

rag_hybrid_search_bm25_embedding_rrf_整理 では Dense と BM25 の2系統で説明したが、実際には学習した疎ベクトル(SPLADE) という第3系統がある。

系統 代表 何で引くか 得意 インデックス
Dense(密ベクトル) text-embedding-3-large 等 意味の近さ(コサイン類似度・ANN) 言い換え・類義語・文脈 ベクトル(HNSW等)
Lexical(疎・規則) BM25 語の頻度・希少度(TF-IDF系) 固有名詞・型番・完全一致 転置インデックス
Sparse-learned(疎・学習) SPLADE 学習した語の重み+語拡張 完全一致を保ちつつ同義語も拾う 転置インデックス

ポイントは、SPLADE は Dense と Lexical の「いいとこ取り」を狙う中間種だということ。


2. SPLADE とは — 「学習する BM25」

SPLADE(Sparse Lexical and Expansion model) は Formal, Lassance, Piwowarski, Clinchant(NAVER LABS Europe, 2021。SPLADE / SPLADE v2 = arXiv:2109.10086)が提案した学習型の疎ベクトル検索

仕組み(一次資料に基づく): - BERT の MLM(Masked Language Modeling)ヘッドを使い、入力文を語彙次元の疎ベクトル(ほとんどが0、一部の語だけ重みを持つ)に変換する。 - このとき語の重み付け(re-weighting)と語の拡張(expansion)を同時に学習する。=原文に無い同義語・関連語にも重みが立つ。 - 出力は疎なので、BM25と同じ転置インデックスに載せて高速検索できる。

直感: BM25は「書いてある語をそのまま数える」。SPLADEは「書いてある語+関連語まで、重要度を学習して数える」。BM25の高速さ(転置インデックス)を保ったまま、埋め込み的な意味拡張を足したもの。だから「学習するBM25」と捉えると早い。

本検証で使われた日本語モデルは hotchpotch/japanese-splade-v2(base: japanese-splade-base-v1_5、YAST で学習、推論は YASEM ライブラリ。実在を HuggingFace で確認)。


3. 検証セットアップ(再現条件)

項目 内容
ベンチマーク JMTEB(Japanese Massive Text Embedding Benchmark, SB Intuitions)の Retrieval 11タスク
評価指標 NDCG@10(上位10件の順位品質。1.0が満点)
Dense OpenAI text-embedding-3-large
Lexical BM25(トークナイザは kuromoji
Sparse hotchpotch/japanese-splade-v2
検索エンジン Elasticsearch 9.4.0(密・疎・転置を1基盤で扱う)
融合 RRF、k=60(Elasticsearch既定。順位の逆数を手法横断で合算)

JMTEB は v2.0 で28データセット/5タスク種別に拡張され、現在は MTEB Leaderboard(Japanese)に統合されている。本検証の11タスクは Retrieval サブセット(Jaqket, MrTyDi, GovFaqs, TitleAbs/Intro 系, JaCWIR, MIRACL, Mintaka, MultiLongDoc 等)。


4. 結果 — NDCG@10 全タスク(太字=各タスク最高)

7パターン(単体3 + 2-way 3 + 3-way 1)の比較:

手法 Jaqket MrTyDi GovFaqs TitleAbs TitleIntro AbsIntro AbsArticle JaCWIR MIRACL Mintaka MultiLongDoc
3-way (D+L+S) 0.7716 0.7764 0.7034 0.9825 0.9243 0.9728 0.9722 0.9591 0.9496 0.2320 0.4948
2-way A (D+L) 0.7137 0.7215 0.6789 0.9696 0.9668 0.9939 0.9753 0.9461 0.9097 0.2355 0.5238
2-way B (D+S) 0.6965 0.8209 0.7265 0.9760 0.8916 0.9539 0.9459 0.9416 0.9453 0.2752 0.3951
2-way C (L+S) 0.8148 0.7439 0.6705 0.9711 0.8749 0.9535 0.9592 0.9781 0.9358 0.1613 0.4666
Dense のみ 0.6065 0.8171 0.7119 0.9666 0.9542 0.9934 0.9238 0.9210 0.9326 0.3930 0.3791
BM25 のみ 0.7829 0.5974 0.5996 0.9633 0.9435 0.9905 0.9942 0.9624 0.8502 0.1143 0.5991
SPLADE のみ 0.8003 0.8566 0.7152 0.9752 0.8021 0.9028 0.8998 0.9794 0.9858 0.2040 0.3416

読み取れること: - 各タスクの最高値は手法がバラバラ。SPLADEが3冠(MrTyDi, JaCWIR, MIRACL)、BM25が2冠(AbsArticle, MultiLongDoc)、Denseが1冠(Mintaka)、2-wayが残りを分け合う。「常勝の単体手法」は存在しない。 - SPLADEは振れ幅が最大: 最高 0.8566(MrTyDi)〜最低 0.1613相当の弱さ(Mintaka 0.2040)。強いが、ドメイン次第で大崩れする(学習データ依存)。 - Mintaka(エンティティQA)はDenseの独壇場(0.393 vs 3-wayの0.232)。逆に MultiLongDoc(長文)はBM25が強い(0.599 vs 3-wayの0.495)。


5. 総合順位 — 「尖り」でなく「転びにくさ」の指標

著者は各タスクの順位を再び RRF で合算して総合点を出している(=順位の安定性スコア)。

順位 手法 総合RRFスコア 最高順位 最低順位
1 3-way (D+L+S) 0.1736 1位(1回) 4位
2 2-way A (D+L) 0.1728 1位(2回) 6位
3 2-way B (D+S) 0.1725 1位(1回) 6位
4 SPLADE のみ 0.1724 1位(3回) 7位
5 Dense のみ 0.1711 1位(1回) 7位
6 2-way C (L+S) 0.1710 1位(1回) 6位
7 BM25 のみ 0.1709 1位(2回) 7位

解釈の注意(重要): - この総合スコアは NDCGの絶対値ではなく「7手法の順位を11タスクで RRF 集約したメタ指標」。だから 1位 0.1736 と最下位 0.1709 の差はごくわずか。「どれも総合では壊滅的に悪くはない」を意味するだけで、個別タスクの大差(§4)こそが実態。 - 3-wayが1位なのは最低順位が4位一度も大コケしないから。単体手法は1位を何度も取る一方、苦手タスクで7位に沈む(SPLADE/Dense/BM25いずれも最低7位)。 - 3-wayの価値 = 分散の小ささ(保険)。手法どうしが互いの穴を埋め合う。ピーク性能は単体に譲る。

  単体手法:   ある時は1位、ある時は7位   ── 当たれば最強・外すと最弱(高分散)
  3-way 融合: 常に1〜4位               ── 突出はしないが事故らない(低分散)

N. まとめ — いつ何を選ぶか

一言: ハイブリッド(特に3-way)は「最強」ではなく「最も安定」。クエリが読めないなら混ぜ、読めるなら単体を磨く。

状況 推奨 根拠
クエリ分布が読めない汎用RAG 3-way(D+L+S) どのタスクでも4位以下に落ちない安定性
エンティティ/事実QAが主 Dense中心 Mintakaで単体0.393 vs 3-way0.232
長文ドキュメント検索が主 BM25中心 MultiLongDocで単体0.599 vs 3-way0.495
一般的な短文検索・多言語 SPLADE中心 MrTyDi/MIRACL/JaCWIRで単体首位。ただしドメイン外で大崩れに注意
コスト最小で底上げしたい 2-way(D+L) 3-wayとほぼ同点で、SPLADE運用(GPU推論・モデル管理)を省ける

実務の勘所: - SPLADE導入は「日本語学習済みモデル(japanese-splade-v2等)+転置インデックス対応エンジン(ES 9.x)」が前提。Denseに比べ学習データドメイン依存が強いので、自ドメインでの NDCG 実測は必須。 - まず2-way(Dense+BM25)で基準を作り、SPLADE追加(3-way化)が自データで本当に上乗せするかを A/B で確認してから採否を決めるのが堅実。


参考リンク

  • 出典: TAIMO「RAGの検索、結局どれが強い?Dense/BM25/SPLADE を RRF で混ぜて11タスクで検証」— https://zenn.dev/taimo/articles/28a1d0eccbc199
  • 同著者の続報: 共有index方式でのBM25の落とし罠 on Elasticsearch — https://zenn.dev/taimo (フィード参照)
  • SPLADE 原典: Formal et al., "SPLADE v2: Sparse Lexical and Expansion Model for Information Retrieval" (arXiv:2109.10086) — https://arxiv.org/abs/2109.10086
  • SPLADE 解説: Pinecone — SPLADE for Sparse Vector Search — https://www.pinecone.io/learn/splade/
  • 日本語モデル: hotchpotch/japanese-splade-v2 — https://huggingface.co/hotchpotch/japanese-splade-v2
  • JMTEB(SB Intuitions)— https://github.com/sbintuitions/JMTEB / https://huggingface.co/datasets/sbintuitions/JMTEB
  • RRF 原典(k=60): Cormack, Clarke, Büttcher (SIGIR 2009) — https://plg.uwaterloo.ca/~gvcormac/cormacksigir09-rrf.pdf

作成: 2026-06-29 / 最終更新: 2026-06-29