利益:
- トップ K 選択とセマンティックおよびキーワード検索を組み合わせたハイブリッド検索の実装
- 再ランキングによる最初の検索の精度の向上
- クエリ変換や HyDE などの技術を使用して、難しい質問をより検索しやすくする
文書をうまく細断して、ベクトルデータベースに入れました。ここで実際の作業は、ユーザーが質問したときに適切な部分を取得することです。これは検索と呼ばれ、RAG 品質の根幹です。 「取得品質 = RAG 品質」というフレーズを思い出してください。本機はまさにそのクオリティを向上させる芸術品です。トップ K の選択からハイブリッド検索、再ランキングからクエリ変換まで、実践的なテクニックを取り上げます。
Top-k: 何個持っていきますか?
最も基本的な設定: 検索から何個 (k) を返すか。持参するものが少ない場合 (k=1)、正しいピースを紛失する危険性が高くなります。追加しすぎると (k=20)、モデルにノイズが追加され、トークンのコストが増加します。
2 つの概念を区別します。思い出してください: 取得されたピースの中に正しいピースが含まれる割合。精度: 取得される内容が関連する割合。 k を増やすと再現率は向上しますが、精度は低下します。目標は、この 2 つのバランスを取ることです。
トップ-k
影響
適切な状況
1-3
高精度、ミスの危険性
答えは 1 つだけの簡単な質問
4-8
バランス;ほとんどのシナリオ
一般企業RAG
10-20
再現率が高くなるとノイズが増加します
リランキングあり(下記)
ヒント: 一般的かつ強力なパターン: 幅を広くフェッチし (k=20)、その後、再ランキングで絞り込みます (上位 4)。こうすることで、何も見逃さず、モデルに明確なコンテキストを与えることができます。
ハイブリッド検索: 2 つの検索の力
セマンティック (ベクトル) 検索では意味は捕捉されますが、完全な製品コード (「XR-4471」)、まれな略語、固有名、バージョン番号などの情報が欠落します。このような完全一致タスクには、昔ながらのキーワード検索、特に BM25 と呼ばれる古典的なアルゴリズムが非常に適しています。
ハイブリッド検索は 2 つを組み合わせたものです。セマンティック検索とキーワード検索の両方が機能し、結果が結合されます。したがって、「製品の保証期間」のような質問では、
マージは通常、RRF (相互ランク融合) を使用して行われます。両方のリストで上位のトラックが前に来ます。
# ハイブリッド検索 (概念的) sem = Vector_search(question, k=20) # Meaningkey = bm25_search(question, k=20) # fullwordresult = rrf_merge(sem, key)[:8] # 2 つを融合、上位 8
再ランキング: 2 番目以降のよりスマートなパス
最初の電話は素早いですが失礼な場合があります。再ランキングでは、最初の検索で返された候補をより強力なモデル (通常はクロスエンコーダー、質問と文章を一緒に読み取り、関連性をスコアリングするモデル) を使用して 1 つずつスコアリングし、最も関連性の高い候補を最上位に移動します。
ロジックは次のとおりです。最初の検索では再現のために多数の候補 (20 個の候補) が割り当てられ、再ランカーは精度の点で最良の 4 つを選択します。この 2 段階のアプローチは、1 段階の検索よりもはるかに正確です。多少の遅延と追加の処理がかかります。品質が大幅に向上します。
# 2 段階検索 (概念的) 候補 = hybrid_search(question, k=20) #ブロード、クイックスコア = reranker.score(質問、候補) # 各候補コンテキストの関連性スコア =rated.rank()[:4] # トップ 4
クエリの変換
場合によっては、問題は検索にあるのではなく、質問自体にある場合があります。ユーザーが「リモート ワーカーはどうですか?」と尋ねた場合、 』と考えても、これだけでは求めることはできません(何がリモートワーカー向けなのかは不明です)。クエリ変換手法は次のとおりです。
- 書き換え: 会話履歴を使用して、「リモート ワーカーには年次休暇の権利はありますか?」という質問を独立させます。
- マルチクエリ: 同じ質問の 3 つの異なる表現を生成し、それらすべてで検索し、結果を結合します。言葉が違えば、見つかる部分も異なります。
- HyDE (仮説ドキュメント埋め込み): まずモデルに「考えられる答え」を出力し、次にその想像上の答えを埋め込んで検索します。想像上の答えのほうが実際の文書に近いため、より適切に見つかる場合があります。
# マルチクエリ (概念的)variants = model.uret("この質問を 3 つの異なる方法で表現します: " + question)tum_sonuc = []for v のバリアント: all_sonuc += Vector_intermediate(v, k=6)context = singular_and_order(tum_result)[:6]
弱検索 / 強検索
弱い (単一ステージ、セマンティクスのみ、定数 k=3):
result = Vector_search(question, k=3)# 問題: 製品コードが抜けており、難しい問題のパート 3 を正しく入力できません。
強力 (ハイブリッド + Widek + 再ランキング + 必要に応じてマルチクエリ):
候補者 = hybrid_search(rewrite(質問, 過去), k=20)context = reranker.score(質問, 候補者).first(4)# 完全一致と意味の両方が取得されます。ベスト4モデルに入ります。
ミニケース3個
ケース 1 — 製品コードがエスケープされました。サポート チームによる純粋なセマンティック検索では、「RTX-9080 ドライバー エラー」という質問の中に「RTX-9080」をそのまま見つけることができませんでした。彼は似たような名前の他の製品を持ち込んでいた。ハイブリッド検索を追加すると、完全なコード一致が発生し、正しい記事を返す率が 58% から 92% に増加しました。
ケース 2 — 再ランキングの差。パラリーガルは k=5 で作業していましたが、ほとんどの場合、正しい項目は 7 ~ 10 です。彼は順位に留まっていた。 k=20 + 再ランキングを導入すると、正しい記事がトップ 3 に入る割合は 61% から 94% に増加しました。レイテンシーの増加はわずか 300 ミリ秒であり、許容可能な妥協点です。
ケース 3 — 文脈のないフォローアップの質問。人事アシスタントでは、ユーザーは「パートタイマーはどうですか?」と尋ねます。尋ねると、システムは関係のない部分を持ってきました。クエリを書き直す(過去から「年次休暇」コンテキストを取り出し、「パートタイム従業員には年次休暇を取得する権利がある」を追加する)ことにより、正答率は 40% から 86% に増加しました。
よくある間違い
- セマンティック検索のみに依存する: 製品コード、略語、固有名が欠落します。ハイブリッドを追加します。
- k を小さくしすぎると、正しい部分をリストに入れることができなくなります。再ランク付けで幅を広くしたり狭めたりします。
- 再ランキングについては決して考えないでください。最初の検索は失礼です。 2 番目のスマート パスにより、品質が大幅に向上します。
- フォローアップの質問をそのまま検索する: 文脈のない質問は意味のないものを検索します。リライト。
- k をやみくもに増やす (再ランクなし): モデルはノイズで満たされ、応答が歪み、コストが増加します。
注意: 各手法によりコストと遅延が増加します。マルチクエリは 3 重検索を意味し、再ランキングは追加のモデル呼び出しを意味します。まずは単純なハイブリッド + 合理的な k から始めます。本当に必要な場合は、高度なテクニックを測定して追加します。計らずに加算する。
要約すると
- Top-k は再現率と精度のバランスです。一般的には 4 ~ 8 が良いスタートとなります。
- ハイブリッド検索は、セマンティック検索とキーワード (BM25) 検索を組み合わせたものです。完全一致を復元します。
- 再ランキングでは、堅牢なモデルを使用して広範な初期検索から候補を再スコアリングし、最良の候補を選択します。
- クエリ変換 (書き換え、マルチクエリ、HyDE) により、難しい質問や文脈に依存しない質問が検索可能になります。
- 強力なパターン: 広範囲のフェッチ → ハイブリッドとのマージ → 再ランクによる絞り込み。ただし、各テクニックを測定して追加します。
アプリケーションタスク
前の単元のデータを使用して 6 つの難しい質問を準備します。少なくとも 2 つは完全一致が必要 (製品コード、略語、日付)、2 つは意味論的 (同じトピックで異なる単語)、2 つは文脈なしのフォローアップの質問です。 (1) まず各質問を純粋な意味検索として考え、どの部分が表示されるかを手動でマークします。 (2) ハイブリッドと再ランキングを追加して同じ質問を再評価します。 (3) 文脈を無視してフォローアップの質問を書き直します。どのテクニックがどの質問タイプに影響を与えるかを表形式でメモします。
チェックリスト
- [ ] top-k が再現精度のバランスと妥当な開始範囲であることはわかっています。
- [ ] ハイブリッド検索で完全一致が検索される理由を説明できます。
- [ ] 再ランキングの 2 段階のロジック (幅広い → スマートな狭い) を適用できます。
- [ ] 文脈なしにフォローアップの質問を書き直す必要があることを認識しています。
- [ ] 重いテクニックを追加したことを、測定ではなく測定によって確認します。