Share via


Reciprocal Rank Fusion (RRF) を使用したハイブリッド検索での関連性スコアリング

Reciprocal Rank Fusion (RRF) は、以前にランク付けされた複数の結果の検索スコアを評価して、統合された結果セットを生成するアルゴリズムです。 Azure AI Search では、並列で実行される 2 つ以上のクエリがある場合は、常に RRF が使用されます。 各クエリがランク付けされた結果セットを生成し、RRF はランク付けをマージして、クエリ応答で返される 1 つの結果セットに均質化するために使用されます。 常に RRF が使用されるシナリオの例としては、ハイブリッド検索、同時に実行される複数のベクター クエリなどがあります。

RRF は、"逆順位" の概念に基づいています。これは、検索結果のリスト内の最初の関連ドキュメントのランクの逆数です。 この手法の目標は、元のランキング内の項目の位置を考慮して、複数のリストで上位にランク付けされた項目により高い重要性を与えることです。 これにより、最終的なランク付けの全体的な品質と信頼性が向上し、複数の順序付けされた検索結果を融合するタスクに役立ちます。

RRF ランク付けのしくみ

RRF は、複数の方法から検索結果を取得し、結果の各ドキュメントに逆順位スコアを割り当て、スコアを組み合わせて新しいランク付けを作成することで機能します。 この概念では、複数の検索方法で上位の位置に表示されるドキュメントはより関連性が高い可能性があるため、結合された結果の上位にランク付けされます。

RRF プロセスの簡単な説明を次に示します。

  1. 並列で実行される複数のクエリからランク付けされた検索結果を取得します。

  2. ランク付けされた各リストの結果に対して逆順位スコアを割り当てます。 RRF は、各結果セットの一致ごとに新しい @search.score を生成します。 検索結果のドキュメントごとに、エンジンはリスト内の位置に基づいて逆順位スコアを割り当てます。 スコアは 1/(rank + k) として計算されます。ここで、rank はリスト内のドキュメントの位置であり、k は定数で、60 などの小さな値に設定されている場合に最適に実行されることが実験で確認されています。 この k 値は RRF アルゴリズムの定数であり、最も近い近傍の数を制御する k とは完全に別の定数であることに注意してください。

  3. スコアを結合します。 各ドキュメントについて、エンジンは各検索システムから取得した逆順位スコアを合計し、各ドキュメントの結合スコアを生成します。 

  4. エンジンは、結合されたスコアに基づいてドキュメントをランク付けし、それらを並べ替えます。 結果のリストは融合されたランキングです。

スコアリングには、インデックスで searchable としてマークされているフィールド、またはクエリで searchFields としてマークされているフィールドのみが使用されます。 retrievable としてマークされたフィールド、またはクエリの select で指定されたフィールドのみが、検索スコアと共に検索結果に返されます。

並列クエリの実行

RRF は、複数のクエリが実行されるたびに使用されます。 次の例は、並列クエリ実行が行われるクエリ パターンを示しています。

  • フルテキスト クエリと 1 つのベクター クエリ (単純なハイブリッド シナリオ) は、2 つのクエリ実行に相当します。
  • フルテキスト クエリと、2 つのベクター フィールドを対象とする 1 つのベクター クエリは、3 つのクエリ実行に相当します。
  • フルテキスト クエリと、5 つのベクター フィールドを対象とする 2 つのベクター クエリは、11 個のクエリ実行に相当します

ハイブリッド検索結果のスコア

結果がランク付けされるたびに、@search.score プロパティには結果の順序付けに使用される値が含まれます。 スコアは、方法ごとに異なるランク付けアルゴリズムによって生成されます。 各アルゴリズムには、独自の範囲と大きさがあります。

次の表に、各関連性ランク付けアルゴリズムの各一致で返されるスコアリング プロパティ、アルゴリズム、スコアの範囲を示します。

検索メソッド パラメーター スコアリング アルゴリズム Range
フルテキスト検索 (full-text search) @search.score BM25 アルゴリズム 上限なし。
ベクトル検索 @search.score HNSW アルゴリズム。HNSW 構成で指定された類似性メトリックを使用します。 0.333 - 1.00 (Cosine)、Euclidean と DotProduct の場合は 0 から 1。
ハイブリッド検索 @search.score RRF アルゴリズム 上限は結合されるクエリの数によって制限され、各クエリは RRF スコアに対して最大約 1 を寄与します。 たとえば、3 つのクエリをマージすると、2 つの検索結果のみがマージされる場合よりも RRF スコアが高くなります。
セマンティック ランク付け @search.rerankerScore セマンティック ランク付け 0.00 - 4.00

セマンティック ランク付けは RRF には関係していません。 そのスコア (@search.rerankerScore) は、常にクエリ応答で個別に報告されます。 セマンティック ランク付けでは、フルテキスト検索結果とハイブリッド検索結果を再ランク付けでき、それらの検索結果には意味的に豊富なコンテンツを持つフィールドが含まれていると仮定しています。

ハイブリッド クエリ応答のランク付けされた結果の数

既定では、改ページを使用していない場合、検索エンジンは、フルテキスト検索では上位 50 位のランクの一致、ベクトル検索では最も類似した k 個の一致を返します。 ハイブリッド クエリでは、top によって応答の結果の数が決まります。 既定に基づいて、統合結果セットの上位 50 にランク付けされた一致が返されます。

多くの場合、検索エンジンは topk よりも多くの結果を見つけます。 より多くの結果を返すには、ページング パラメーター topskipnext を使用します。 ページングは、各論理ページ上の結果の数を決定し、完全なペイロードを導く方法です。

フルテキスト検索には、最大 1,000 件の一致という制限が適用されます (「API 応答の制限」を参照)。 1,000 件の一致が見つかると、検索エンジンはそれ以上の検索を行いません。

詳細については、「検索結果の操作方法」を参照してください。

検索スコアリング ワークフローの図

次の図は、スコアリング プロファイルによるブーストとセマンティック ランク付けを使用して、キーワード検索やベクトル検索を呼び出すハイブリッド クエリを示しています。

Diagram of prefilters.

前のワークフローを生成するクエリは、次のようになります。

POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2023-11-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
   "queryType":"semantic",
   "search":"hello world",
   "searchFields":"field_a, field_b",
   "vectorQueries": [
       {
           "kind":"vector",
           "vector": [1.0, 2.0, 3.0],
           "fields": "field_c, field_d"
       },
       {
           "kind":"vector",
           "vector": [4.0, 5.0, 6.0],
           "fields": "field_d, field_e"
       }
   ],
   "scoringProfile":"my_scoring_profile"
}

関連項目