논문 리뷰

[논문] Searching for Best Practices in Retrieval-Augmented Generation

aaa0843 2025. 4. 21. 20:41

1. Introduction

  • 대형 언어 모델(LLMs)은 인간 피드백에 기반한 정렬(reinforcement learning from human feedback, RLHF)에도 불구하고, 여전히 오래된 정보 생성, 사실 왜곡(hallucination) 문제를 가진다.
  • Retrieval-Augmented Generation(RAG)은 사전학습(pretraining)과 검색 기반(retrieval-based) 모델의 장점을 결합하여 이 문제를 해결하는 방법이다.
  • RAG는 모델 파라미터를 수정하지 않고 특정 조직/도메인에 특화된 응용을 빠르게 배포할 수 있게 한다.
  • RAG 워크플로우
    • 쿼리 분류(Query Classification)
    • 검색(Retrieval)
    • 재정렬(Reranking)
    • 재구성(Repacking)
    • 요약(Summarization)
  • 각 단계는 다양한 방법으로 구현할 수 있으며, 각각 성능과 효율성에 영향을 미친다.
  • 본 연구는 RAG 각 모듈의 다양한 구현 방법을 비교하고, 최적 조합을 찾아내어 RAG 시스템의 성능효율성을 균형 있게 향상시키는 전략을 제안한다.

2. Related Work

2.1. Query and Retrieval Transformation

  • 검색 성능 향상을 위해 쿼리를 변환하거나, 검색 대상을 변형하는 다양한 방법이 제안되었다.
  • 대표적 기법
    • Query2Doc, HyDE: 쿼리로부터 의사 문서(pseudo-document)를 생성하여 검색 성능 향상
    • TOC(Tree of Clarifications): 쿼리를 세부 질문으로 분해하여 검색
  • 검색 대상을 변환하는 방법
    • LlamaIndex: 문서로부터 의사 쿼리(pseudo-query)를 생성해 매칭 성능 향상.
    • 대조학습 기반 임베딩: 쿼리-문서 임베딩 간 거리를 좁히는 방식.

2.2. Retriever Enhancement Strategy

  • 검색 품질을 높이기 위해 문서를 적절히 chunking하고, 임베딩을 고도화하는 연구가 진행되었다.
  • Chunking 기법: Small2Big, Sliding Window
  • Reranking 필요성: 초기 검색 결과를 BERT, T5, LLaMA 기반 모델로 재정렬하여 검색 품질 향상

2.3. Retriever and Generator Fine-tuning

  • 검색기(retriever)와 생성기(generator)를 별도로 또는 통합적으로 파인튜닝하여 성능을 최적화하는 연구가 진행되었다.
  • RAG를 통합 시스템으로 보고 동시 학습(joint fine-tuning)하는 방법도 제안되었다.

3. RAG Workflow

3.1. Query Classification

  • 모든 쿼리가 검색을 필요로 하는 것은 아니므로, 쿼리 분류기를 통해 필요 여부를 판정한다.
  • "정보가 충분한" 쿼리는 검색 없이 직접 답변하고, "불충분한" 쿼리만 검색을 거친다.
  • 111K 쿼리 데이터셋을 구축해 분류기를 훈련시켰으며, BERT-base-multilingual-cased 모델을 사용했다.

3.2. Chunking

  • 문서 청킹은 검색 정확도를 높이고 LLM 입력 길이 한계를 해결하기 위해 필요하다.
  • 청킹 단위:
    • 토큰 단위
    • 문장 단위 (본 연구 기본 설정)
    • 의미 단위(LLM 이용)
  • 추가적으로 메타데이터(title, keyword 등)를 붙여 검색 품질을 높일 수 있다.
  • 임베딩 모델로는 LLM-Embedder를 채택했다.

3.3. Vector Databases

  • 검색을 위한 벡터 DB로 Milvus, Faiss, Weaviate, Qdrant, Chroma를 평가하였다.
  • 기준: 다양한 인덱스 지원, 대규모 데이터 처리, 하이브리드 검색 지원, 클라우드 친화성.
  • 최종적으로 Milvus를 채택했다.

3.4. Retrieval Methods

  • 검색 성능 향상을 위해 다음 세 가지 쿼리 변형 방법을 비교했다:
    • 쿼리 리라이팅(Query Rewriting)
    • 쿼리 분해(Query Decomposition)
    • 의사 문서 생성(Pseudo-document Generation; HyDE)
  • BM25 + Contriever 조합과 하이브리드 검색(Hybrid Search)을 비교 분석.
  • 최종적으로 Hybrid Search + HyDE 방법이 가장 높은 성능을 기록했다.

3.5. Reranking Methods

  • 초기 검색 결과를 재정렬하여 품질 향상.
  • 방법:
    • DLM Reranking: monoT5, monoBERT, RankLLaMA 사용.
    • TILDE Reranking: 빠른 재정렬을 목표로 한 전통적 확률 기반 접근.
  • 최종적으로 monoT5를 기본 선택으로 채택했다.

3.6. Document Repacking

  • 검색 결과를 어떻게 배열하느냐에 따라 생성 품질이 달라진다.
  • 방법:
    • Forward (높은 점수부터)
    • Reverse (낮은 점수부터)
    • Sides (가장 관련성 높은/낮은 정보를 양 끝에 배치)
  • 실험 결과, Reverse 방식이 최적이었다.

3.7. Summarization

  • 검색된 문서에서 핵심 내용을 요약하여 입력 길이를 줄이고 응답 품질을 높인다.
  • 요약 방법:
    • Recomp: 추출적, 생성적 요약 둘 다 가능.
    • LongLLMLingua: 압축 요약, 일반화에 강함.
  • 최종적으로 Recomp를 기본 요약 방법으로 선택했다.

3.8. Generator Fine-tuning

  • 생성기는 검색 결과의 품질에 민감하므로, 파인튜닝이 필요하다.
  • 다양한 맥락 조합으로 모델을 훈련:
    • 골드 컨텍스트만(Dg)
    • 무작위 컨텍스트만(Dr)
    • 골드+무작위(Dgr)
    • 골드 2개(Dgg)
  • Dgr 방식(골드와 랜덤을 섞어 훈련)이 가장 강건한 성능을 보였다.

4. Searching for Best RAG Practices

4.1. Comprehensive Evaluation

  • 다양한 태스크 (상식 추론, 팩트 체크, 오픈 도메인 QA, 멀티홉 QA, 메디컬 QA)에 대해 평가를 실시
  • 평가 지표: Faithfulness, Context Relevancy, Answer Relevancy, Answer Correctness, Retrieval Similarity.

4.2. Results and Analysis

  • Query Classification: 성능 향상과 응답 속도 개선에 크게 기여
  • Retrieval: Hybrid + HyDE가 가장 좋은 성능을 보였지만, 계산 비용이 높았음
  • Reranking: monoT5가 가장 우수했으며, 필수적이었음
  • Repacking: Reverse 구성이 최적
  • Summarization: Recomp가 의미 왜곡 없이 정보를 보존함
  • 종합적으로 모든 모듈이 성능 개선에 기여함

5. Discussion

5.1. Best Practices for Implementing RAG

  • 최고 성능 목표
    • Query Classification 사용
    • Hybrid with HyDE 검색
    • monoT5 Reranker
    • Reverse Repacking
    • Recomp Summarizer
  • 성능-효율 균형 목표
    • Query Classification 사용
    • Hybrid 검색
    • TILDEv2 Reranker
    • Reverse Repacking
    • Recomp Summarizer

5.2. Generalization of Best Practices

  • 모든 태스크에 완벽하게 적용되지는 않으므로, 각 모듈별로 조합을 평가하고 최적화를 해야 함을 강조하였다.

5.3. Multimodal Extension

  • 텍스트 외에도 이미지(text-to-image, image-to-text)를 검색 대상으로 삼아, 멀티모달 RAG 확장을 시도했다.
  • Retrieval-as-Generation 전략을 통해 효율성과 정합성(groundedness)을 향상시켰다.

6. Conclusion

  • RAG 시스템을 최적화하기 위한 모듈별 평가최적 조합을 체계적으로 제시하였다.
  • 새로운 평가 벤치마크를 도입하고, 대규모 실험을 통해 최적 관행(best practices)을 검증하였다.
  • 향후 연구 방향으로 리트리버-제너레이터 통합 파인튜닝, 다른 모달리티(음성, 비디오 등) 확장을 제시하였다.

Limitations

  • 본 연구는 생성기 파인튜닝만 다루었고, 리트리버 파인튜닝은 미래 연구로 남겨두었다.
  • 청킹 기술의 전체 시스템에 미치는 영향은 추가 연구가 필요하다.
  • 실험은 NLP 및 이미지 생성에 집중되었으며, 음성, 비디오 모달리티로 확장할 계획이다.

프로젝트 활용

대규모 코드베이스 검색 최적화 (Chunking, Embedding, Retrieval)

  • 코드 파일을 청킹하고(chunking)
  • 코드를 의미 기반으로 임베딩하고(embedding)
  • 적절한 벡터 DB를 활용해 검색하는(retrieval) 체계 

→ 코드베이스 검색 효율화!

 

  • Chunking: 함수 단위, 클래스 단위, 또는 의미 단위로 코드 청킹 가능
    • 'Small2Big' 전략: 작은 코드 블록 먼저 매칭하고, 이후 확장
  • Embedding 모델
    • 코드베이스 특화 Embedding(CodeBERT, GraphCodeBERT, starcoder embeddings)로 대체할 수 있음
  • Vector Database
    • Milvus, Faiss, Qdrant 등으로 코드 청크 임베딩을 저장하고 검색 가능
    • 수십~수백만 단위 코드 청크에 대해 확장성 보장

→ 코드 청킹, 임베딩, 벡터DB 구축 → 검색까지 RAG 전처리 파이프라인 구축


검색 결과 최적화 (Retrieval + Reranking)

  • LLM이 취약점을 찾을 때, 단순히 검색된 코드만 사용하는 것이 아니라 검색된 결과를 reranking하여 더 유효한 코드 조각을 우선순위로 주는 것이 중요
  • Hybrid Retrieval (BM25 + Dense Retrieval)
    • 오타나 특수 토큰이 많은 코드베이스에 매우 유효
  • Reranking
    • monoT5와 같은 딥러닝 기반 Reranker를 적용하여 취약점 탐지에 더 적합한 코드 청크를 상위에 배치할 수 있음

우리가 코드 검색 후 LLM에 넘기기 전에 reranking 단계를 추가하여 LLM 응답 품질을 높일 수 있음


검색 결과 정제 및 요약

  • 검색된 코드 조각이 너무 크거나 중복된 경우 LLM이 문맥 길이 제한 때문에 제대로 이해하지 못할 수 있다.
    → Recomp Summarization 방식 적용
    • 검색된 다수의 코드 조각 중 취약점 분석에 필수적인 부분만 추출하고 요약하여 LLM 입력 길이를 최적화

우리가 최종적으로 LLM에 넣어줄 코드를 가볍게 요약, 최적화할 수 있음


LLM Fine-tuning

  • 실제 코드 취약점 탐지는 정답과 관련 없는 코드 조각이 함께 있을 가능성이 높음
    → 노이즈가 섞인 입력에도 강인한 LLM이 필요
  • Relevant + Random Context Fine-tuning (Dgr 방식)
    • 골드 문맥과 무작위 문맥을 섞어서 LLM을 훈련하면 노이즈에 강하고, 정확성도 유지하는 LLM을 만들 수 있음

우리 프로젝트에서 fine-tuning을 고려할 경우 매우 유용한 전략이 될 수 있음