상호 순위 융합(RRF)
상호 순위 융합(RRF)은 이전에 순위가 매겨진 여러 결과의 검색 점수를 평가하여 통합된 결과 세트를 생성하는 알고리즘입니다.이는 서로 다른 관련성 지표를 가진 여러 결과 집합을 단일 결과 집합으로 결합하는 방법입니다. RRF를 조정할 필요가 없고, 서로 다른 관련성 측정 항목을 서로 연관시키지 않아도 고품질 결과를 얻을 수 있습니다. 워털루 대학(캐나다)과 구글의 협업으로 개발된 이 기술은 "단일 시스템을 사용하는 것보다 더 나은 결과를 낳고, 표준 재순위 매기기 방법보다 더 우수하다"고 저자는 밝혔습니다.
RRF 프로세스
RRF의 기본 원칙은 다양한 검색 전략에서 지속적으로 상위에 나타나는 문서는 관련성이 더 높을 가능성이 높으므로 통합된 결과에서 더 높은 순위를 받아야 한다는 것입니다.
RRF 프로세스에 대한 간단한 설명은 다음과 같습니다.
- 동시에 여러 개의 쿼리를 실행하여 순위가 매겨진 검색 결과를 수집합니다.
- 순위가 매겨진 목록의 각 결과에 상호 순위 점수를 할당합니다. RRF 프로세스는 각 결과 집합의 각 일치 항목에 대해 새로운 검색 점수를 생성합니다. 검색 결과에 있는 각 문서에 대해 알고리즘은 목록 내 위치를 기준으로 상호 순위 점수를 할당합니다. 점수는 1/(순위 + k)로 계산됩니다. 여기서 "순위"는 목록에서 문서의 위치이고 "k"는 상수입니다. 경험적 관찰에 따르면 k는 60과 같은 작은 값으로 설정했을 때 가장 좋은 성능을 보입니다. 이 "k" 값은 RRF 알고리즘의 상수이며 가장 가까운 이웃의 수를 조정하는 "k"와는 완전히 다릅니다.
- 점수를 합산합니다. 이 알고리즘은 각 문서에 대한 각 검색 전략에서 얻은 상호 순위 점수를 더하여 각 문서에 대한 결합 점수를 생성합니다.
- 이 알고리즘은 결합된 점수를 기준으로 문서를 순위화하고 그에 따라 정렬합니다. 그 결과 목록은 앙상블 순위를 구성합니다.
RRF(Reciprocal Rank Fusion) 프로세스는 흐름도를 사용하여 설명할 수 있습니다.

그림 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