メインコンテンツまでスキップ
バージョン: User Guides (Cloud)

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 番目のリトリーバーによって生成されたドキュメント d のランキング位置です。k は、通常 60 に設定される平滑化パラメーターです。

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

M2SawupkSh2NZxbX7SAcwqZZnxd

RRF Ranker の例

この例では、疎密ベクトルに対するハイブリッド検索 (topK=5) を示し、RRFRanker 戦略が 2 つの ANN 検索からの結果をどのように再ランク付けするかを示します。

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

    ID

    ランク (疎)

    101

    1

    203

    2

    150

    3

    198

    4

    175

    5

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

    ID

    ランク (密)

    198

    1

    101

    2

    110

    3

    175

    4

    250

    5

  • RRF を使用して、2 つの検索結果セットのランキングを再配置します。平滑化パラメーター k は 60 に設定されていると仮定します。

    ID

    スコア (疎)

    スコア (密)

    最終スコア

    101

    1

    2

    1/(60+1)+1/(60+2) = 0.03252247

    198

    4

    1

    1/(60+4)+1/(60+1) = 0.03201844

    175

    5

    4

    1/(60+5)+1/(60+4) = 0.03100962

    203

    2

    N/A

    1/(60+2) = 0.01612903

    150

    3

    N/A

    1/(60+3) = 0.01587302

    110

    N/A

    3

    1/(60+3) = 0.01587302

    250

    N/A

    5

    1/(60+5) = 0.01538462

  • 再ランキング後の最終結果 (topK=5):

    ランク

    ID

    最終スコア

    1

    101

    0.03252247

    2

    198

    0.03201844

    3

    175

    0.03100962

    4

    203

    0.01612903

    5

    150

    0.01587302

    5

    110

    0.01587302

RRF Ranker の使用法

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

RRF Ranker の作成

コレクションが複数のベクトルフィールドで設定されたら、適切な平滑化パラメーターを使用して RRF Ranker を作成します。

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
}
)

パラメータ

必須?

説明

値/例

name

はい

この関数のユニークな識別子

"rrf"

input_field_names

はい

関数を適用するベクトルフィールドのリスト(RRF Rankerの場合は空である必要があります)

[]

function_type

はい

呼び出す関数のタイプ。リランキング戦略を指定するにはRERANKを使用します

FunctionType.RERANK

params.reranker

はい

使用するリランキングメソッドを指定します。

RRF Rankerを使用するにはrrfに設定する必要があります。

"weighted"

params.k

いいえ

ドキュメントのランクの影響を制御する平滑化パラメータ。kが高いほど、上位ランクへの感度が低下します。範囲: (0, 16384); デフォルト: 60

詳細については、RRF Rankerのメカニズムを参照してください。

100

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

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"]
)

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