본문 바로가기

블로그/딥러닝

[RAG] RAG 성능 향상을 위한 Re-ranking

대학원 시절 검색 모델에 흥미를 가져 관련 연구와 공부를 진행했었는데, 당시 배운 지식이 RAG 시스템을 이해하는 데 많은 도움이 되고 있다.

 

예를 들어, RAG에서 주로 활용되는 임베딩 방식은 쿼리와 문서가 독립적으로 인코딩되어 문장 간의 유사도를 계산하는 Bi-Encoder이다.

All-to-all interaction이 필요한 Cross-Encoder와 비교했을 때, Bi-Encoder는 텍스트를 미리 인코딩할 수 있으며, ANN Search 방식을 활용하면 Cross-Encoder 대비 빠른 연산 속도를 보장한다. 따라서 Latency가 중요한 RAG 시스템에서 Bi-Encoder 구조를 활용하는 것은 타당해 보인다.

 

Figure. Efficient and Effective Passage Search via Contextualized Late Interaction over BERT


하지만 Bi-Encoder 방식은 문서를 독립적으로 임베딩하기 때문에 텍스트 간의 상호작용을 놓칠 수 있어, Cross-Encoder 방식에 비해 정확도가 낮아질 수 있다.

 

그렇다고 해서 LLM의 컨텍스트로 활용되는 문서 수를 늘리면, 토큰 수가 길어져 비용이 비싸지고, 실제로 컨텍스트를 몇 개 더 추가한다고해서 성능 향상에 큰 효과가 있을지는 불확실하다. 첨부 그림은 관련 컨텍스트의 순서가 LLM 모델의 성능에 중요하다는 사실을 보여준다(Liu et al. 2023)


>> Liu, Nelson F., et al. "Lost in the middle: How language models use long contexts." Transactions of the Association for Computational Linguistics 12 (2024): 157-173.
https://arxiv.org/abs/2307.03172

 

 

정리하면 LLM의 컨텍스트 윈도우 사이즈가 제한적이기 때문에 RAG 품질을 높이려면 정보를 압축하거나 관련 있는 문서를 프롬프트의 상위에 위치시켜야 한다. 따라서 Retrieval만큼 Re-ranking도 중요하다. 이를 위해 기존의 추천 시스템과 IR에서 주로 활용하는 Two-Stage 전략을 RAG 시스템 구축에 그대로 활용할 수 있다.

 

 

Figure. Personalized re-ranking with item relationships for e-commerce

 

 

 

>> AWS 한국어 Reranker를 활용한 검색 증강 생성(RAG) 성능 올리기
https://aws.amazon.com/ko/blogs/tech/korean-reranker-rag/

Figure. AWS 한국어 Reranker를 활용한 검색 증강 생성(RAG) 성능 올리기


서비스마다 Re-ranker의 특성이 조금씩 달라질 수 있지만, 일반적으로 전체 문서에서 한 번 유사도 기반으로 Top-K만큼 줄여준 document에 대해 Ranking을 수행하기 때문에 Cross-Encoder를 활용할 수 있다. 만약 Latency와 랭킹의 품질을 동시에 고려한다면, Late Interaction 방식을 활용한 ColBERT를 활용할 수도 있을 것 같으며, LLM에서 활용하기 쉽게 Wrapping되어 있다.

>>llamaIndex의 ColbertRerank
https://docs.llamaindex.ai/en/stable/examples/node_postprocessor/ColbertRerank/

 

이러한 Two-Stage에서 한국어가 가능한 다국어 모델을 찾는다면, BGE M3 기반으로 한 reranker(cross-encoder)와 그 임베딩 모델(bi-encoder)이 프로덕션 레벨에서 오픈소스 조합으로 괜찮은 성능을 내준다고 한다(bge-reranker-v2)

>> BAAI/bge-reranker-v2-m3
https://huggingface.co/BAAI/bge-reranker-v2-m3

 

Figure. BGE M3-Embedding: Multi-Lingual, Multi-Functionality, Multi-Granularity Text Embeddings Through Self-Knowledge Distillation

 

이 외에도 Lost in the middle 문제를 해결하기 위해 입력 정보를 압축하여 크기를 줄이는 방식(RECOMP) 등이 존재하며, 임베딩 모델 자체를 fine-tuning 하는 것도 RAG 성능을 끌어올릴 수 있는 방법으로 활용되고 있다

>> Fine-tune Embedding models for Retrieval Augmented Generation (RAG)
https://www.philschmid.de/fine-tune-embedding-model-for-rag