LLMを使わない弱い検索の予測
ほとんどの検索システムはすべてのクエリに単一のパイプラインを使用しますが、これは難しいクエリには十分でなく、簡単なクエリには計算を無駄にします。この記事では、LLMを使わずに弱い検索を検出するための安価なシグナル(スコアの分散や検索器の一致など)を紹介し、必要な場合にのみ選択的にエスカレーションできるようにします。
ほとんどの検索システムはすべてのクエリに対して単一のパイプラインを実行しますが、これは両方向で間違ったデフォルトです。単一パスは難しいクエリには十分でなく、すべてのクエリをリランキングや書き換えをすると簡単なクエリで計算を無駄にします。さらに悪いことに、単一パスは静かに失敗します。関連ドキュメントがトップに到達しない場合、システムは取得したものから答えを出すだけで、何か問題が発生した兆候はありません。
高価な修正(クロスエンコーダー、ColBERT遅延相互作用、クエリ書き換え、分解)はよく知られているため、本当の問題はいつそれらを使用するかです。理想的には、それらの費用を支払う前に安価に弱い検索を捕捉し、必要なクエリのみをエスカレーションします。しかし、何が安価に検索が弱いことを教えてくれるのでしょうか?それは検索の失敗方法に依存し、3つのコーパスで測定しました。
弱い検索の定義
弱い検出は測定可能な定義から始まります。使用されるのは上位の結果だけです。モデルに供給される上位k個のチャンク、またはユーザーに表示されるページです。これをウィンドウと呼びます。良い検索はクエリに必要なすべての証拠をウィンドウ内に入れます。検索が弱いのは、より深い場所での再現率が良くても、1つでも証拠が欠けている場合です。
ウィンドウをシステムが消費するサイズに設定します。ラベル付きの分割では、どのドキュメントが必要かがわかっているため、弱いは予測可能な二値ラベルです。
安価なシグナル
シグナルは、結果から計算された弱い証拠を予測する数値です。2つの基準があります。ラベル付きデータで良い検索と弱い検索を分離できること。そして、すべてのクエリで実行できるほど安価であること。「安価」とは明白な動きを除外します。すべてのクエリにLLMに「これで十分か?」と尋ねると、保護しているパスにモデル呼び出しが追加されます。ここでのシグナルは、検索器が既に返したもの、または多くても1回の追加Qdrantクエリを読み取ります。ホットパスにLLMはありません。
これらのシグナルは新しいものではありません。検索が成功したかどうかの予測はクエリ性能予測(QPP)であり、dense_varianceはその非正規化クエリコミットメントに近いです。貢献は新しい予測器ではなく、どの既知の予測器がそのコストに見合うか、そしてどの種類のコーパスに対してかです。
シグナルのファミリーには、高さ(最大スコア)、広がり(密度分散)、カバレッジ(証拠カバレッジ)、一致(密度とスパース、または密度モデル間)が含まれます。直感は次のとおりです。自信のある検索器はトップスコアを引き離します。迷った検索器はそれらを束ねます。カバレッジはクエリで名前が付けられたエンティティが検索されたテキストに存在するかどうかを確認します。一致とは、2つの検索器または2つの密度モデルが異なるドキュメントを返すとき、通常は一方が迷っていることを意味します(特に専門用語や語彙外の用語で)。
シグナルの計算方法
広がりシグナルは検索器のスコアの母分散です。dense_varianceは元の密度ランキングを読み取ります。これは、既に埋め込んだクエリベクトルを再利用する1回の追加Qdrantクエリであるため、モデル呼び出しはありません。両方の一致シグナルは上位kセットの重複です。retriever_divergenceは密度とスパースのランキングを比較し、dense_agreementは2つ以上の独立した密度モデルの重複を平均します。どちらにしても、不一致は弱い検索を意味します。
一致シグナルは無料ではありません。dense_agreementは追加の密度モデルを実行し、クエリごとにいくつかの埋め込みが必要です。それでもLLMジャッジよりはるかに安価です。
どのシグナルが発火するかは障害モードに依存
各シグナルがラベル付き分割で良い検索と弱い検索をどの程度分離できるかをAUC(0.5は偶然、1.0は完全)で評価しました。3つの異なる障害モードのコーパスで全てのシグナルを実行しました。MuSiQue(マルチホップQA)、BEIRセットのNFCorpus(医学専門用語)とSciFact(科学的クレーム)です。
単一のシグナルが全てで最高というわけではなく、どのシグナルが価値があるかはコーパスの障害の仕方に依存しました。
語彙不一致(NFCorpus):このコーパスでは、専門用語と語彙外の用語により、密度とスパースモデル、および独立した密度モデルが弱いクエリで不一致になるようです。一致シグナルは偶然のレベルから0.73〜0.76に上昇し、広がりと同等になり、これがそれらを測定する価値がある唯一の状況です。
ランキング精度(SciFact):正しいドキュメントは検索されるがランクが低すぎる。広がりと高さがそれを捉える(0.75〜0.76)。一致は何も言わない。
到達可能性(MuSiQue):答えにはクエリが表現できないホップが必要であり、最初の検索は誤っていても自信があるように見える。最良の安価なシグナルは0.73にしか達せず、一致シグナルは偶然のレベルに落ちる。安価なシグナルは欠けたホップを確実に捕捉できないため、修正は分解(次のホップに到達する新しいクエリ)であり、より良いゲートではない。
3つのベンチマークは普遍的なシグナルを生み出せないため、成果物はデフォルトではなく方法です。自分のデータで分離を測定し、有効なものを保持します。一般化すべきパターンは上限です。障害が埋め込みの混乱ではなく到達可能性である場合、結果は健全に見え、安価なシグナルはそれを認識できません。
自分のシグナルを見つける
勝利シグナルは移植できませんが、方法は移植できます。キャリブレーション分割で、各候補シグナルをその分離でスコア付けします。sklearn.metricsのroc_auc_scoreを使用し、方向に関係なく分離としてmax(auc, 1-auc)を取ります。2つのルール:閾値(0.65が合理的な開始点)を超えるシグナルを保持し、より強いシグナルと冗長なもの(絶対相関が0.85を超える)は削除します。冗長なシグナルはコストを追加し、情報を追加しません。キャリブレーション分割で閾値を設定し、テスト分割を最終数値のために保持します。障害モードが最初に導きます。専門用語や識別子が多いコーパスでは一致シグナル、精度ミスでは広がりと高さを、そして数値で確認します。勝者はコーパス固有だからです。
シグナルをゲートに変える
閾値がシグナルを決定に変えます。選択したシグナルを低いほど弱いことを意味するように方向付け、弱い検索で高く発火するシグナル(retriever_divergenceなど)を否定し、単一の閾値で決定します。それを下回ると検索を弱いと見なしエスカレーションします。
function retrieval_is_weak(result) { return signal(result) < FLOOR; // signal oriented so lower means weaker }
閾値はトレードオフです。上げるとより多くの弱い検索を捕捉しエスカレーションが増え、下げるとエスカレーションが減り見逃しが増えます。適切なデフォルトはキャリブレーションセットでの捕捉率から誤警報率を引いた値を最大化する(ユーデン点)ことです。見逃しのコストが追加エスカレーションより高い場合は、代わりに再現率(例えば90%)を目標にします。2つのシグナルがよく分離しほとんど相関しない場合、どちらかが発火したらゲートします。
弱い検索への対応
エスカレーション先は簡単な選択です。リランキング、書き換え、分解、フィルターの緩和、または人間への引き継ぎ。ゲートはどれを気にしません。高価なのは「するかどうか」の決定であり、それをすべてのクエリで無料で行います。エスカレーションができないことは、コーパスにない証拠を発明することです。何も見つからない場合、勝利は弱い検出を検出し、薄い証拠から回答することを控えることです。実行可能な例は、ゲートを完全な自己修正ループに配線します。
この方法を自分のコーパスに適応させる
ここでの勝者は移植できませんが、レシピは移植できます。
ウィンドウと各クエリに必要な証拠を定義します。 キャリブレーション分割で弱い検索をラベル付けします。 安価なシグナルをベンチマークし、分離するものを保持し、冗長なものを削除します。 勝者シグナルを閾値でゲートにし、発火したときのみエスカレーションします。
検索品質は結果の安価な統計から観察可能ですが、それは障害がそれらの統計に見えるタイプである場合のみです。自分のデータでどのシグナルがそれに該当するかを測定します。
関連研究
この研究は修正的および適応的検索と並んでいます。違いは決定の出所です。既に取得された内容の安価な統計、追加のモデル呼び出しなし、訓練するものなし。クエリ性能予測には多くの検索後予測器があります。最も安価なものがどこまで移転できるか、そしてどこで上限に達するかがここでの問題です。CRAGは検索評価器を訓練し、Self-RAGは生成器が自身のコンテキストを批評するように微調整します。両方とも訓練されたモデルを、この研究が無料統計を使用する場所に置きます。Adaptive-RAGは検索前にクエリ複雑性でルーティングします。この記事はそのクエリ形状アプローチに反対し、質問の形状ではなく得られた証拠でゲートすることを主張します。十分コンテキストの研究は、無料シグナルではなくLLMジャッジで同じ「これで十分か?」の質問をします。完全なループ、修正措置、評価ハーネスは自己修正検索ループワークショップにあります。エスカレーション先の構成要素については、遅延相互作用モデル、ハイブリッド検索、クエリ分解を参照してください。