メインコンテンツまでスキップ

RRF Ranker

Reciprocal Rank Fusion(RRF)Ranker は、Zilliz Cloud のハイブリッド検索向けのリランキング戦略であり、生の類似度スコアではなくランキング位置に基づいて、複数のベクトル検索経路の結果をバランスさせます。個々の統計ではなく選手のランキングを考慮するスポーツトーナメントのように、RRF Ranker は各アイテムが異なる検索経路でどれだけ上位にランクされるかに基づいて検索結果を統合し、公平でバランスの取れた最終ランキングを作成します。

RRF Ranker を使用する場合​

RRF Ranker は、明示的な重要度の重みを割り当てずに、複数のベクトル検索経路の結果をバランスさせたいハイブリッド検索シナリオ向けに特別に設計されています。特に次の場合に有効です。

ユースケース例RRF Ranker が適している理由
同等の重要度を持つマルチモーダル検索両方のモダリティが同等に重要である画像とテキストの検索任意の重みを割り当てることなく結果をバランスさせます
アンサンブルベクトル検索異なる埋め込みモデルの結果を組み合わせる特定のモデルのスコア分布を優先せずに、ランキングを民主的に統合します
クロスリンガル検索複数の言語にまたがるドキュメントの検索言語固有の埋め込み特性に関係なく、結果を公平にランク付けします
専門家によるレコメンデーション複数のエキスパートシステムからのレコメンデーションを組み合わせる異なるシステムが比較できないスコアリング方法を使用する場合に、コンセンサスランキングを作成します

ハイブリッド検索アプリケーションで、明示的な重みを割り当てずに複数の検索経路を民主的にバランスさせる必要がある場合、RRF Ranker が最適な選択肢です。

RRF Ranker のメカニズム​

RRFRanker 戦略の主なワークフローは次のとおりです。

  1. 検索ランキングを収集する: ベクトル検索の各経路から結果のランキングを収集します(rank_1、rank_2)。

  2. ランキングをマージする: 各経路のランキング(rank_rrf_1、rank_rrf_2)を式に従って変換します。

    計算式には、取得回数を表す N が含まれます。ranki(d) は、i(th) 番目のレトリーバーによって生成されたドキュメント d のランキング位置です。k は通常 60 に設定されるスムージングパラメーターです。

  3. ランキングを集計する: 結合されたランキングに基づいて検索結果を再ランキングし、最終結果を生成します。

M2SawupkSh2NZxbX7SAcwqZZnxd

RRF Ranker の例​

この例では、スパース・デンスベクトルに対するハイブリッド検索(topK=5)を示し、RRFRanker 戦略が 2 つの ANN 検索の結果をどのように再ランキングするかを説明します。

  • テキストのスパースベクトルに対する ANN 検索の結果(topK=5):

    ID順位(スパース)
    1011
    2032
    1503
    1984
    1755
  • テキストのデンスベクトルに対する ANN 検索の結果(topK=5):

    ID順位(デンス)
    1981
    1012
    1103
    1754
    2505
  • RRF を使用して 2 セットの検索結果のランキングを並べ替えます。スムージングパラメーター k が 60 に設定されていると仮定します。

    IDスコア(スパース)スコア(デンス)最終スコア
    101121/(60+1)+1/(60+2) = 0.03252247
    198411/(60+4)+1/(60+1) = 0.03201844
    175541/(60+5)+1/(60+4) = 0.03100962
    2032N/A1/(60+2) = 0.01612903
    1503N/A1/(60+3) = 0.01587302
    110N/A31/(60+3) = 0.01587302
    250N/A51/(60+5) = 0.01538462
  • 再ランキング後の最終結果(topK=5):

    順位ID最終スコア
    11010.03252247
    21980.03201844
    31750.03100962
    42030.01612903
    51500.01587302
    51100.01587302

RRF Ranker の使用方法​

RRF リランキング戦略を使用する場合は、パラメーター k を設定する必要があります。これは、全文検索とベクトル検索の相対的な重みを効果的に変更できるスムージングパラメーターです。このパラメーターのデフォルト値は 60 で、(0, 16384)の範囲で調整できます。値は浮動小数点数である必要があります。推奨値は [10, 100] の範囲です。k=60 は一般的な選択肢ですが、最適な k の値は特定のアプリケーションやデータセットによって異なる場合があります。最高のパフォーマンスを実現するには、特定のユースケースに基づいてこのパラメーターをテストおよび調整することをお勧めします。

RRF Ranker を作成する​

コレクションに複数のベクトルフィールドを設定したら、適切なスムージングパラメーターを指定して RRF Ranker を作成します。

python
from pymilvus import Function, FunctionType

rerank = Function(
name="rrf",
input_field_names=[], # Must be an empty list
function_type=FunctionType.RERANK,
params={
"reranker": "rrf",
"k": 100 # Optional
}
)
パラメーター必須説明値/Example
nameはいこの Function の一意の識別子です。"rrf"
input_field_namesはいこの関数を適用するベクトルフィールドのリストです(RRF Ranker では空にする必要があります)。[]
function_typeはい呼び出す Function のタイプです。リランキング戦略を指定するには RERANK を使用します。FunctionType.RERANK
params.rerankerはい使用するリランキング方法を指定します。
RRF Ranker を使用するには rrf に設定する必要があります。
"weighted"
params.kいいえドキュメントのランクの影響を制御するスムージングパラメーターです。k の値が大きいほど、上位ランクに対する感度が低下します。範囲: (0, 16384)、デフォルト: 60。
詳細については、RRF Ranker のメカニズム を参照してください。
100

RRF Ranker は、複数のベクトルフィールドを組み合わせるハイブリッド検索操作向けに特別に設計されています。ハイブリッド検索で使用する方法は次のとおりです。

python
from pymilvus import MilvusClient, AnnSearchRequest

# Connect to Milvus server
milvus_client = MilvusClient(uri="YOUR_CLUSTER_ENDPOINT")

# Assume you have a collection setup

# Define text vector search request
text_search = AnnSearchRequest(
data=["modern dining table"],
anns_field="text_vector",
param={},
limit=10
)

# Define image vector search request
image_search = AnnSearchRequest(
data=[image_embedding], # Image embedding vector
anns_field="image_vector",
param={},
limit=10
)

# Apply RRF Ranker to product hybrid search
# The smoothing parameter k controls the balance
hybrid_results = milvus_client.hybrid_search(
collection_name,
[text_search, image_search], # Multiple search requests
ranker=rerank, # Apply the RRF ranker
limit=10,
output_fields=["product_name", "price", "category"]
)

ハイブリッド検索の詳細については、マルチベクトルハイブリッド検索 を参照してください。