相互ランク融合(RRF)
Reciprocal Rank Fusion (RRF) は、以前にランク付けされた複数の結果の検索スコアを評価して、統合された結果セットを生成するアルゴリズムです。これは、異なる相関メトリックを持つ複数の結果セットを 1 つの結果セットに結合する方法です。 RRF は調整を必要とせず、高品質の結果を得るために異なる相関メトリックを相互に相関させる必要もありません。この技術は、ウォータールー大学 (カナダ) と Google が共同で開発したもので、著者らによれば、「個々のシステムよりも優れており、標準的な再ランキング手法よりも優れた結果が得られる」という。
RRFプロセス
RRF の基本原則は、さまざまな検索戦略にわたって一貫して上位に表示されるドキュメントの関連性がより高い可能性が高いため、組み合わせた結果でより高いランクを獲得する必要があるということです。
RRF プロセスの簡略化した内訳は次のとおりです。
- 複数の同時クエリからランク付けされた検索結果を収集します。
- ランク付けされたリスト内の各結果に相互のランキング スコアを割り当てます。 RRF のプロセスでは、各結果セット内の各一致に対して新しい検索スコアが生成されます。検索結果内の各ドキュメントに対して、アルゴリズムはリスト内の位置に基づいて相互のランキング スコアを割り当てます。スコアは 1/(rank + k) として計算されます。ここで、「rank」はリスト内のドキュメントの位置、「k」は定数です。経験的な観察によれば、「k」は小さい値 (60 など) に設定すると最高のパフォーマンスが得られます。この「k」値は RRF アルゴリズムの定数であり、最近傍数を調整する「k」とはまったく異なることに注意してください。
- スコアを結合します。このアルゴリズムは、各ドキュメントの各検索戦略から得られた相互ランキング スコアを合計して、各ドキュメントの結合スコアを生成します。
- アルゴリズムは、結合されたスコアに基づいてドキュメントをランク付けし、それに応じてドキュメントを配置します。結果として得られるリストが融合ランキングを構成します。
相互ランキング フュージョン (RRF) プロセスは、フローチャートを使用して説明できます。

図1:相互ランク付け融合 (RRF) のフローチャート。この図は、RRF ランキング プロセスに含まれるステップを示しています。
RRFの実装
RRF は次の式を使用して各ドキュメントのランキング スコアを決定します。
score = 0.0
for q in queries:
if d in result(q):
score += 1.0 / ( k + rank( result(q), d ) )
return score
# where
# k is a ranking constant
# q is a query in the set of queries
# d is a document in the result set of q
# result(q) is the result set of q
# rank( result(q), d ) is d's rank within the result(q) starting from 1
(コードは Elasticsearch ドキュメント)
参考文献
【1】https://safjan.com/implementing-rank-fusion-in-python/
【2】https://www.elastic.co/guide/en/elasticsearch/reference/current/rrf.html