๊ฐ์
RRF(Reciprocal Rank Fusion, ์ํธ ์์ ์ตํฉ)๋ ์ฌ๋ฌ ๊ฒ์ ์์คํ ์ด๋ ์ฟผ๋ฆฌ๋ก๋ถํฐ ์ป์ ๊ฒฐ๊ณผ๋ฅผ ํ๋์ ํตํฉ๋ ์์๋ก ๊ฒฐํฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. 2009๋ Gordon V. Cormack, Charles L.A. Clarke, Stefan Buettcher๊ฐ ๋ฐํํ ๋ ผ๋ฌธ1์์ ์๊ฐ๋์๋ค.
RRF๋ ํนํ ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์์์ ํค์๋ ๊ธฐ๋ฐ ๊ฒ์(BM25 ๋ฑ)๊ณผ ๋ฒกํฐ ๊ฒ์(๋ฐ์ง ๋ฒกํฐ ๊ฒ์)์ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐํฉํ ๋ ๋๋ฆฌ ์ฌ์ฉ๋๋ค.
๋์ ์๋ฆฌ
RRF ์๊ณ ๋ฆฌ์ฆ์ ๋ค์ ๊ณผ์ ์ ํตํด ์ฌ๋ฌ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐํฉํ๋ค:
1. ์ํธ ์์ ์ ์ ๊ณ์ฐ
๊ฐ ๋ฌธ์์ ์ ์๋ ๋ค์ ๊ณต์์ผ๋ก ๊ณ์ฐ๋๋ค:
์ฌ๊ธฐ์:
- = ์ ์๋ฅผ ๊ณ์ฐํ ๋ฌธ์
- = ์ฟผ๋ฆฌ ์งํฉ (๋๋ ๊ฒ์ ์์คํ ์งํฉ)
- = ์์ ์์ (์ผ๋ฐ์ ์ผ๋ก 60)
- = ์ฟผ๋ฆฌ ์ ๊ฒฐ๊ณผ์์ ๋ฌธ์ ์ ์์ (1๋ถํฐ ์์)
2. ์ ์ ์ง๊ณ ๋ฐ ์ฌ์ ๋ ฌ
- ๊ฐ ๊ฒ์ ์์คํ /์ฟผ๋ฆฌ์์ ์ป์ ์์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ํธ ์์ ์ ์๋ฅผ ๊ณ์ฐ
- ๋ชจ๋ ๊ฒ์ ์์คํ ์ ๊ฑธ์ณ ๊ฐ ๋ฌธ์์ ์ ์๋ฅผ ํฉ์ฐ
- ์ต์ข ์ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฌธ์๋ฅผ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
์์
๋ ๊ฐ์ ๊ฒ์ ์์คํ (ํค์๋ ๊ฒ์, ๋ฒกํฐ ๊ฒ์)์ด ์๊ณ , k=60์ผ ๋:
ํค์๋ ๊ฒ์ ๊ฒฐ๊ณผ:
- ๋ฌธ์ A (์์ 1)
- ๋ฌธ์ B (์์ 2)
- ๋ฌธ์ C (์์ 3)
๋ฒกํฐ ๊ฒ์ ๊ฒฐ๊ณผ:
- ๋ฌธ์ C (์์ 1)
- ๋ฌธ์ A (์์ 2)
- ๋ฌธ์ D (์์ 3)
RRF ์ ์ ๊ณ์ฐ:
- ๋ฌธ์ A:
- ๋ฌธ์ B:
- ๋ฌธ์ C:
- ๋ฌธ์ D:
์ต์ข ์์: A โ C โ B โ D
k ์์์ ์ญํ
k ๊ฐ์ ์๋ฏธ
์์ ๋ ๋ค์๊ณผ ๊ฐ์ ์ญํ ์ ํ๋ค:
- ํํํ(Smoothing): ํน์ ๊ฒ์ ์์คํ ์ด ๊ฒฐ๊ณผ๋ฅผ ์ง๋ฐฐํ๋ ๊ฒ์ ๋ฐฉ์ง
- ์์ ๊ฐ ์ฐจ์ด ์กฐ์ : ๋ฎ์ ์์์ ๋ฌธ์๋ค์ด ์ต์ข ๊ฒฐ๊ณผ์ ๋ฏธ์น๋ ์ํฅ์ ์กฐ์
์ k=60์ธ๊ฐ?
- ์คํ์ ์ผ๋ก k=60์ด ๊ฐ์ฅ ์ข์ ์ฑ๋ฅ์ ๋ณด์
- k < 60: ์์ 1์์ ๊ณผ๋ํ๊ฒ ์ง์ค, ๊ธ๊ฒฉํ ์ ์ ๊ฐ์
- k > 60: RRF ์ ์๊ฐ ๋๋ฌด ํํํด์ ธ ์์ ๊ตฌ๋ถ์ด ๋ชจํธํด์ง
๋น์ ํ์ ๊ฐ์
๊ณต์์ ์์๊ฐ ์ฆ๊ฐํ ์๋ก ์ ์๊ฐ ๋น์ ํ์ ์ผ๋ก ๊ฐ์ํ๋ค. ์ด๋ ๋ค์๊ณผ ๊ฐ์ ์ง๊ด์ ๋ฐ์ํ๋ค:
- 1์์ 2์์ ๊ด๋ จ์ฑ ์ฐจ์ด > 100์์ 101์์ ๊ด๋ จ์ฑ ์ฐจ์ด
- ์ฌ๋ฌ ๊ฒ์ ์์คํ ์์ ๋ชจ๋ ๋์ ์์๋ฅผ ๋ฐ์ ๋ฌธ์์ ๋ ๋์ ๊ฐ์ค์น ๋ถ์ฌ
ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์์์์ ํ์ฉ
RRF๋ ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์์์ ๋ค์๊ณผ ๊ฐ์ด ํ์ฉ๋๋ค:
ํฌ์ ๋ฒกํฐ + ๋ฐ์ง ๋ฒกํฐ ๊ฒฐํฉ
-
ํฌ์ ๋ฒกํฐ ๊ฒ์ (BM25, ํ์ต๋ ํฌ์ ๊ฒ์ ๋ฑ)
- ํค์๋ ๋งค์นญ์ ๊ฐ์
- ์ ํํ ์ฉ์ด ์ผ์น๊ฐ ์ค์ํ ๊ฒฝ์ฐ ํจ๊ณผ์
-
๋ฐ์ง ๋ฒกํฐ ๊ฒ์ (์๋ฏธ์ ๋ฒกํฐ ๊ฒ์)
- ๋ฌธ๋งฅ๊ณผ ์๋ฏธ ์ดํด์ ๊ฐ์
- ์ ํํ ํค์๋๊ฐ ์์ด๋ ๊ด๋ จ ๋ฌธ์ ๊ฒ์ ๊ฐ๋ฅ
-
RRF๋ฅผ ํตํ ๊ฒฐํฉ
- ๋ ๊ฒ์ ๋ฐฉ์์ ์์๋ฅผ RRF๋ก ์ตํฉ
- ํค์๋ ์ ํ์ฑ๊ณผ ์๋ฏธ์ ๊ด๋ จ์ฑ์ ๋ชจ๋ ๊ณ ๋ คํ ๊ฒฐ๊ณผ ์์ฑ
์ฃผ์ ๊ฒ์ ํ๋ซํผ์ RRF ์ง์
- Elasticsearch:
rrf
retriever๋ฅผ ํตํด ๋ ์์ปฌ ๊ฒ์๊ณผ ๋ฒกํฐ ๊ฒ์ ๊ฒฐํฉ ์ง์ - OpenSearch: ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์์ ์ํ RRF ์ ๊ณต
- Azure AI Search: ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์์์ RRF ์ค์ฝ์ด๋ง ์ฌ์ฉ
- Google Vertex AI: ํ ํฐ ๊ธฐ๋ฐ ๊ฒ์๊ณผ ์๋ฏธ์ ๊ฒ์ ๊ฒฐํฉ์ RRF ํ์ฉ
RRF์ ์ฅ์
1. ์์ ๊ธฐ๋ฐ ์ ๊ทผ
- ์ ์ ์ ๊ทํ ๋ฌธ์ ํํผ: ์๋ก ๋ค๋ฅธ ๊ฒ์ ์์คํ ์ ์ ์ ์ค์ผ์ผ์ ํต์ผํ ํ์ ์์
- ์์๋ง ์ฌ์ฉํ๋ฏ๋ก ๋ค์ํ ๋ฐ์ดํฐ ์์ค์์ ์ผ๊ด๋ ์ฒ๋ฆฌ ๊ฐ๋ฅ
2. ๊ฐ๊ฑด์ฑ(Robustness)
- ์ฌ๋ฌ ์์ค์ ์ฆ๊ฑฐ๋ฅผ ํฉ์ฐํ์ฌ ๋ ๊ฒฌ๊ณ ํ ์์ ์์ฑ
- ๋จ์ผ ๊ฒ์ ์์คํ ์ ํธํฅ์ด๋ ํน์ฑ์ ๋ ๋ฏผ๊ฐ
3. ์ด์์น ์ ํญ์ฑ
- Min-max ์ ๊ทํ, L2 ์ ๊ทํ๋ ์ด์์น(outlier)์ ๋ฏผ๊ฐ
- RRF๋ ์์๋ฅผ ์ง๊ณํ๋ฏ๋ก ๊ทน๋จ์ ์ธ ์ ์ ๊ฐ์ด ๊ฒฐ๊ณผ๋ฅผ ์๊ณกํ์ง ๋ชปํจ
4. ์กฐ์ ๋ถํ์
- ํ๋ผ๋ฏธํฐ ํ๋์ด ๊ฑฐ์ ํ์ ์์ (k=60์ด ์ผ๋ฐ์ ์ผ๋ก ์ ์๋)
- ์๋ก ๋ค๋ฅธ ๊ฒ์ ์์คํ ์ ์ ์๊ฐ ๊ด๋ จ์ด ์์ด๋ ๊ณ ํ์ง ๊ฒฐ๊ณผ ์์ฑ ๊ฐ๋ฅ
Python ๊ตฌํ ์์
def reciprocal_rank_fusion(search_results_list, k=60):
"""
RRF ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ
Args:
search_results_list: ๊ฐ ๊ฒ์ ์์คํ
์ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ
(๋ฌธ์ ID์ ๋ฆฌ์คํธ๋ค์ ๋ด์ ๋ฆฌ์คํธ)
k: ์์ ์์ (๊ธฐ๋ณธ๊ฐ 60)
Returns:
(๋ฌธ์ ID, RRF ์ ์) ํํ์ ์ ๋ ฌ๋ ๋ฆฌ์คํธ
"""
# ๋ชจ๋ ๊ณ ์ ๋ฌธ์ ์์ง
all_docs = set()
for results in search_results_list:
all_docs.update(results)
# ๊ฐ ๋ฌธ์์ RRF ์ ์ ๊ณ์ฐ
doc_scores = {}
for doc in all_docs:
score = 0.0
for results in search_results_list:
if doc in results:
rank = results.index(doc) + 1 # 1๋ถํฐ ์์
score += 1.0 / (k + rank)
doc_scores[doc] = score
# ์ ์ ๊ธฐ์ค ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
return sorted(doc_scores.items(), key=lambda x: x[1], reverse=True)
# ์ฌ์ฉ ์์
keyword_results = ['doc_a', 'doc_b', 'doc_c']
vector_results = ['doc_c', 'doc_a', 'doc_d']
fused_results = reciprocal_rank_fusion([keyword_results, vector_results])
print(fused_results)
# ์ถ๋ ฅ: [('doc_a', 0.0325), ('doc_c', 0.0323), ('doc_b', 0.0161), ('doc_d', 0.0159)]
์ฐธ๊ณ ์๋ฃ
- Reciprocal Rank Fusion - Elasticsearch
- Hybrid search scoring (RRF) - Azure AI Search
- Implementing Reciprocal Rank Fusion in Python
Footnotes
-
Cormack, G. V., Clarke, C. L., & Buettcher, S. (2009). โReciprocal rank fusion outperforms condorcet and individual rank learning methodsโ. SIGIR โ09: Proceedings of the 32nd international ACM SIGIR conference on Research and development in information retrieval. โฉ