# マルチホップ検索で「取得済み文書のベクトルを引き算」すると精度は上がるか？ 比較質問と連鎖質問で逆転する到達率

> HotpotQA（Wikipedia 66,635文書 / 1,029クエリ）でのプローブ実験と、LLM要約途中状態のインデックス検証から、ベクトル減算が効く条件と自滅する境界を整理します。

- **Canonical URL**: https://nodus-lab.pages.dev/articles/multihop-rag-orthogonal-residual-subtraction-benchmarks.html
- **CSV Dataset**: https://nodus-lab.pages.dev/datasets/multihop-rag-orthogonal-residual-subtraction-benchmarks.csv
- **Raw Verification Log (JSON)**: https://nodus-lab.pages.dev/logs/multihop-rag-orthogonal-residual-subtraction-benchmarks.json
- **Category**: Cloud & AI Infrastructure
- **Sample Size (N)**: 1029
- **Data Updated**: 2026-10-03

## 結論・実測サマリー (TL;DR)
- クエリ内に比較対象が両方書かれている「比較質問（Comparison）」では、1ホップ目の文書ベクトルを直交射影で引き算すると第2文書へのReach@50が92.07%に達する。
- 一方、1ホップ目の文書内にしか第2の手がかりがない「連鎖質問（Bridge）」で文書全体を引き算すると、次ホップへの接点まで消去して自滅し、Reach@50が27.31%（第1文書単体検索57.23%の半分以下）に落ちる。
- 「充足した局所文だけを引き、第1文書全体の文脈を足す（局所残差＋文書加算）」ことでBridge Reach@10は18.45%→50.00%に改善するが、文分割・再エンコードの計算負荷に対して単純線形結合（r + d1）との差は+1.62 pt（@50）にとどまる。

## 主要実測指標 (Key Metrics)
- **比較質問 Reach@50（直交残差）**: 92.07 % (第1文書単体（12.33%）から+79.74 pt改善)
- **連鎖質問 Reach@50（直交残差単体）**: 27.31 % (第1文書単体（57.23%）から半減し自滅)
- **連鎖質問 Reach@10（局所引き算＋文書加算）**: 50.00 % (大域引き算（18.45%）から+31.55 pt改善)
- **複数スロット隠れ状態の類似度（縮退）**: 0.9990 (100文書平均コサイン類似度（ほぼ同一方向へ潰れる）)

## 条件別の比較表
| 第2ホップ検索プローブ手法 | Bridge Reach@10 | Bridge Reach@50 | Comparison Reach@50 | 全体 Reach@50 | 挙動の特徴とボトルネック |
| --- | --- | --- | --- | --- | --- |
| 大域直交残差単体 (r) | 18.45 % | 27.31 % | 92.07 % | 41.59 % | 比較質問には極めて強いが、連鎖質問で第2文書への接点を消去し自滅 |
| 第1文書ベクトル単体 (d1) | 41.90 % | 57.23 % | 12.33 % | 47.33 % | 共起近傍により連鎖質問の過半を拾うが、比較質問では無力 |
| 局所充足引き算単体 (r_local) | 24.31 % | 34.54 % | 92.07 % | 47.23 % | クエリ内の未充足語は浮き出るが、クエリに無い固有名詞は引けない |
| 大域ブレンド (r + 0.5 d1) | 39.50 % | 49.88 % | 94.27 % | 59.67 % | 文書加算が弱いとBridgeの回復が不十分 |
| 大域ブレンド (r + 1.0 d1) | 46.26 % | 61.22 % | 89.43 % | 67.44 % | 文分割なしで連鎖・比較の両方を高水準でカバーする現実解 |
| 局所引き算＋文書加算 (r_local + 1.0 d1) | 50.00 % | 62.84 % | 89.43 % | 68.32 % | Bridge @10で50%に到達するが、文単位エンコードの計算負荷が高い |
| 4プローブ和集合 (Quad Union / 約36件枠) | 52.10 % | 66.08 % | 96.04 % | 72.69 % | 単一ベクトルではなく複数プローブに検索枠を配分した上限目安 |

## 詳細解説・原因分析
### なぜ「取得済み文書の引き算」は連鎖質問（Bridge）で自滅するのか
マルチホップ検索では、1ホップ目で取得した文書と同じ内容ばかりが2ホップ目でも上位に来るのを防ぐため、クエリベクトル q から第1文書ベクトル d1 の直交射影成分を引き算する（r = q - <q, d1> d1）手法が考案されます。実際にHotpotQAで測定すると、「AとBのどちらが先に設立されたか？」という比較質問（Comparison）では、クエリ内に最初からAとBの両方が含まれるため、Aの文書を引き算すればBが鮮明に残り、Reach@50で92.07%に達します。しかし、「映画『君の名は。』の監督が出身した大学はどこか？」のような連鎖質問（Bridge）では、クエリ内に第2ホップの固有名詞（新海誠）が存在しません。埋め込み空間上で第2文書は第1文書（『君の名は。』）の共起近傍に配置されているにもかかわらず、第1文書ベクトルを約0.75倍も強く引き算してしまうことで、第2文書との接着面まで逆方向へ吹き飛ばしてしまい、Reach@50が27.31%（d1単体検索57.23%の半分以下）へと急落します。

### 「局所引き算＋文書加算」の回復効果とオーバーエンジニアリングの壁
この自滅を防ぐため、第1文書全体を引くのではなく「クエリと最も内積が高い1文（充足文 v_sat）だけを直交射影で引き算する」局所残差 r_local を試すと、クエリ内に残っていた未充足の属性語（「監督」「大学」など）が浮き彫りになり、Bridge Reach@10は18.45%から24.31%へ改善します。さらにそこへ第1文書ベクトル d1 を1.0倍加算（r_local + 1.0 d1）すると、Bridge Reach@10は50.00%、Reach@50は62.84%まで到達します。ただし、ここには重要なエンジニアリング上の教訓があります。文書を文単位に分割してエンコードし直すパイプラインを組んでも、文分割を一切行わない単純な大域ブレンド（r + 1.0 d1、Reach@50 61.22%）に対して+1.62 ptの改善にとどまります。実運用では、文分割の再エンコード負荷をかけるよりも、大域残差プローブと第1文書プローブの検索枠を分けて和集合（Union）を取る方が計算効率・実装難度ともに優位です。

### ネガティブリザルト1：複数命題スロット学習における「コサイン類似度 0.999」の縮退
1つの文書を単一ベクトルではなく複数の命題スロット（Multi-Slot / Multi-Vector）に分解して保持させる学習モデル（実験31）を内部監査したところ、乱数固定100文書におけるスロット間の平均コサイン類似度が0.999005（最小でも0.990349）、スロット間の成分差の最大値が0.0278となり、すべてのスロットが事実上ほぼ同じ方向へ縮退（Collapse）していることが判明しました。さらに計算グラフを点検すると、クエリ側の命題射影パラメータ4個すべてに損失関数からの勾配が届いておらず、旧評価データセットには訓練とテストの間で293文書の正解重複が存在していました。Attention重みにわずかな差（最大0.163）があっても意味的な分離が起きている証拠にはならず、学習型マルチスロット化を導入する際は「スロット間コサイン類似度の直接監視」と「訓練・テスト間の正解文書完全分離（Disjoint Split）」が必須です。

### ネガティブリザルト2：LLM要約の途中隠れ状態（36,435状態）はテキスト検索を超えられるか
正解文書の重複を完全に排除した448文書・32クエリの厳密分離環境において、Qwen2.5-0.5B baseが文書を自己回帰的に要約する際のトークンごとの最終層隠れ状態（計36,435状態、130.58 MB、CPU float32で全文再計算との最大誤差0.000213以下を確認）をそのままインデックス化するパイロット検証（仮説H1）を実施しました。結果として、途中状態をすべて保持した検索は最終トークン単体の隠れ状態に対してはMRRで+0.0427とわずかに上回ったものの、通常の文書テキスト検索基準に対してはMRR差 -0.8478（95%信頼区間: -0.9144〜-0.7696）、Full Match@2差 -0.6250と大きく劣後しました。自己回帰LLMの生成途中状態を無加工でベクトル検索インデックスに流用しても、専用の双方向埋め込みやテキスト検索の代替にはならないことが実測で確認されました。

## よくある疑問と回答 (FAQ)
### Q. マルチホップRAGの2ホップ目では、結局どのベクトルで検索するのが最もコスパが良いですか？
A. クエリが比較質問か連鎖質問かを事前に完璧に分類するのは難しいため、文分割や追加学習を行わず「直交残差 r」「第1文書 d1」「両者の1:1線形結合（r + d1）」の複数プローブでそれぞれ上位10〜15件ずつ引いてマージ（Union）する方式が、追加のエンコード遅延ゼロでOverall Reach@50を72.69%まで引き上げられるため最も実用的です。

### Q. なぜLLMの要約途中の隠れ状態を使った検索はテキスト基準より精度が低かったのですか？
A. Qwen2.5-0.5Bのような因果的（Causal）自己回帰モデルの最終層状態は「次トークンの予測」に最適化されており、質問文とのコサイン類似度空間として整合していないためです。1文書あたり約80状態（計130MB超）のストレージと1,149秒の登録時間をかけても、双方向エンコーダによる標準的なテキスト検索には及びませんでした。

### Q. マルチベクトル（複数スロット）学習が縮退しているかどうかはどうすれば検知できますか？
A. 検索精度（Recall）だけを見ていると、単一ベクトル相当の表現力でも一定のスコアが出るため縮退を見逃します。推論時に1文書から出力されるK個のスロットベクトル間のペアワイズ・コサイン類似度を計算し、平均が0.95を超えている場合はスロット分離が機能していません。

## 検証環境・集計メソドロジー
HotpotQA Wikipediaコーパス（66,635文書）および未見テストクエリ1,395件のうち、第1ホップで正解文書がTop-1にヒットした1,029件を対象に、第2ホップ文書への到達率（Reach@10 / Reach@50）をCPU 16スレッド環境で測定。また、別実験としてQwen2.5-0.5B baseの要約途中状態（448文書・36,435状態・32クエリ）を用いた検索精度をテキスト基準と比較。


## 参考資料
- [Nodus 一次検証生ログ：HotpotQA 多重プローブ到達率・局所残差・隠れ状態パイロット測定データ (JSON)](https://nodus-lab.pages.dev/logs/multihop-rag-orthogonal-residual-subtraction-benchmarks.json)
- [HotpotQA: A Dataset for Diverse, Explainable Multi-hop Question Answering](https://hotpotqa.github.io/)
