ストーリー
Query Rewriting(クエリ書き換え)
基本概念
ユーザーの元のクエリをLLMが検索に適した形に書き換える手法です。
Query Rewritingの流れ:
ユーザーのクエリ: 「なんか最近のRAGの話ってどうなってる?」
↓ LLMで書き換え
書き換え後: 「RAGシステムの最新動向と技術トレンド 2025年以降」
↓
ベクトル検索(書き換え後のクエリで実行)
書き換えパターン
| パターン | 元のクエリ | 書き換え後 |
|---|---|---|
| 曖昧→具体化 | 「あの認証の仕組み」 | 「OAuth 2.0認証フローの実装方法」 |
| 口語→検索用語 | 「DBが重い」 | 「データベースのパフォーマンス低下の原因と対策」 |
| 省略→展開 | 「k8sのHPA設定」 | 「Kubernetes Horizontal Pod Autoscalerの設定方法」 |
| 文脈付加 | 「エラーの対処法」 | 「Pythonアプリケーションの一般的なエラーハンドリングの方法」 |
HyDE(Hypothetical Document Embeddings)
基本概念
LLMで「仮の回答」を生成し、その仮回答のEmbeddingを使って検索する手法です。
HyDEの流れ:
ユーザーのクエリ: 「RAGの検索精度を上げるには?」
↓
[Step 1] LLMで仮の回答を生成
「RAGの検索精度を向上させるには、以下の手法が有効です。
1. Query Rewritingでクエリを最適化する
2. Rerankingで検索結果を再順位付けする
3. ハイブリッド検索で意味検索とキーワード検索を組み合わせる...」
↓
[Step 2] 仮回答のEmbeddingを生成
↓
[Step 3] 仮回答のEmbeddingでベクトル検索
↓
実際のドキュメントがヒット(仮回答と類似した本物のドキュメント)
なぜ有効か
| 理由 | 説明 |
|---|---|
| 表現ギャップの解消 | クエリ(質問形式)よりも仮回答(説明形式)の方がドキュメントの表現に近い |
| コンテキストの拡張 | 短いクエリよりも、仮回答の方が多くの関連語を含む |
| セマンティックの強化 | 仮回答にはトピックに関連する用語が自然に含まれる |
HyDEの注意点
| 注意点 | 対策 |
|---|---|
| LLM呼び出しのレイテンシ追加 | 軽量モデル(Haiku等)を使用、キャッシュ活用 |
| 仮回答がハルシネーションを含む | 仮回答は検索用であり、最終回答には使わない |
| コスト増加 | 全クエリではなく、精度が低い場合のフォールバックとして使用 |
Multi-Query(マルチクエリ)
基本概念
1つのクエリから複数の異なるクエリを生成し、それぞれで検索して結果を統合する手法です。
Multi-Queryの流れ:
ユーザーのクエリ: 「RAGのメリットとデメリットを教えて」
↓ LLMで複数クエリを生成
├── Q1: 「RAGシステムを導入するメリットと利点」
├── Q2: 「RAGシステムのデメリットと課題、制約事項」
└── Q3: 「RAGとFine-tuningの比較、それぞれの長所短所」
↓ 各クエリで検索
├── Q1の検索結果
├── Q2の検索結果
└── Q3の検索結果
↓ RRFで統合
統合された検索結果
効果
| 効果 | 説明 |
|---|---|
| 多角的な検索 | 複数の視点からドキュメントを検索 |
| Recall向上 | 単一クエリでは見つからない関連ドキュメントを発見 |
| 曖昧なクエリへの対応 | 複数の解釈を並行して検索 |
Step-back Prompting
基本概念
具体的なクエリを一段抽象化し、より広い概念で検索する手法です。
Step-back Promptingの流れ:
ユーザーのクエリ: 「QdrantのHNSWパラメータのef値を128にしたらどうなる?」
↓ LLMで一段抽象化
Step-backクエリ: 「ベクトルDBのHNSWインデックスのパラメータチューニング方法」
↓ 両方のクエリで検索
├── 元のクエリ → 具体的な設定値に関する情報
└── Step-backクエリ → HNSWの一般的なチューニングガイド
↓ 結果統合
具体的な回答 + 背景知識
「クエリ変換は”ユーザーが本当に知りたいこと”を推測する技術だ。ユーザーの質問が完璧であることは稀だ。システム側がフォローする仕組みを入れろ」 — 田中VPoE
4つの手法の比較と使い分け
| 手法 | レイテンシ影響 | 精度向上効果 | 適するケース |
|---|---|---|---|
| Query Rewriting | 小(1回のLLM呼び出し) | 中 | 曖昧・口語的なクエリ |
| HyDE | 中(1回のLLM呼び出し + Embedding) | 高 | クエリとドキュメントの表現ギャップが大きい場合 |
| Multi-Query | 大(N回の検索) | 高 | 複合的なクエリ、Recallを最大化したい場合 |
| Step-back | 中(1回のLLM呼び出し + 追加検索) | 中〜高 | 具体的すぎるクエリ |
まとめ
| ポイント | 内容 |
|---|---|
| Query Rewriting | クエリを検索に適した表現に書き換える |
| HyDE | 仮の回答を生成し、そのEmbeddingで検索する |
| Multi-Query | 複数の異なるクエリで並行検索し、結果を統合 |
| Step-back | クエリを抽象化して、より広い概念で検索 |
チェックリスト
- Query Rewritingの効果と適用パターンを理解した
- HyDEの仕組みと注意点を理解した
- Multi-Queryの効果と使いどころを理解した
- Step-back Promptingの概念を理解した
次のステップへ
次は「Reranking手法」を学びます。検索結果の再順位付けにより、Precisionを大幅に向上させる手法を理解しましょう。
推定読了時間: 30分