Paper Review

[Paper Review] Retrieval-Augmented Generation for large language models : a servey

cherie-ssom 2024. 11. 30. 18:27

앞서 Facebook AI Research에서 2020년도 처음으로 제시한 RAG 논문에 대해서 살펴보았다. 

 

다시 한번 짚어보자면 non-parametric memory를 활용할 수 있도록 Retriever와 Generator를 각각 결합하는 방식으로 포괄적인 Fine-tuning 방법을 제시한 바 있다.

이때, 논문에서는 Retriever는 DPR, Generator를 BART로 활용했으며, Retriever는 쿼리(q)에 알맞은 문서(d)들을 가져오고, Retriever가 변환한 쿼리와 문서를 Generator에 넣어 최종적인 Sequence를 뽑아내는 방식을 제시했다. 

 

사실, 이 부분은 현재 많이 알고 있는 RAG와는 조금 다르다. (나 역시 최근의 RAG를 먼저 보게 되었다 ㅎ;;)

기존의 RAG는 사실상 Fine-tuning으로 분류가 되었다. (Training 시 Retriever와 Generator가 동시에 학습)

 

 

하지만 LLM이 유행하면서 RAG를 LLM의 inference 단계에 적용하는 경우가 늘면서 할루시네이션과 같은 단점을 완화하고자 했다. 그리고 그러한 RAG의 방법들을 정리해 둔 논문을 한번 살펴보고자 한다.

 

1. Overview of RAG

1-1. RAG의 패러다임 

RAG는 크게 3가지 종류가 있다. 

RAG의 3가지 종류
RAG의 응용사례

 

1) Naive RAG

 

가장 초창기에 나온 방법으로 널리 사용된 방법으로 indexing, retrieval, generation을 포함한 전통적인 방법을 사용한다.

 

1) Indexing : 외부 데이터를 포함한 Document(PDF, HTML, Word, Markdown 등)를 Chunk로 분리 하여 벡터화시키고 벡터 데이터베이스에 저장하는 단계

 

2) Retrieval : Query와 관련된 Top K개의 Chunk를 가져옴. 이때 Query에 대해서 vector로 함께 변환하는데 Indexing

pahse에서 사용한 같은 인코딩 모델을 사용하고, 유사도 계산을 통해서 Top K개의 chunk를 가져온다.

 

3) Generation : 원본 Query와 Retrieval로 가져온 chunk들을 LLM에 input으로 넣어 최종 답변을 생성

 

하지만, Navie RAG에는 단점이 존재한다. 

 

1) Retrieval Challenges : precision 및 recall이 좋지 않아서 관련성이 낮은 Chunk를 선택하거나 중요 정보를 빠트리는 경우가 있다.

2) Generation Difficulties : 그럼에도 여전히 할루시네이션 이슈가 생길 수 있다. (Retrieved된 context에 중요 정보가 없거나 관련성이 낮은 context를 기반으로 답변을 생성하기 때문)

3) Augmentation Hurdles : 다른 종류의 task에서 retrieved된 정보를 합치는 것이 어려워서 LLM에게 좋은 context를 전달하는 것이 힘들다. 이에 문맥이 일치하지 않거나 아예 일관성이 없는 정보가 나올 수도 있고, 반복적인 응답을 생성할 수 있다.  

 

2) Advanced RAG

 

그래서, 이러한 Naive RAG의 Retrieval의 문제를 보완하고 성능을 향상시키기 위해서 pre-retrieval와 post-retrieval을 추가로 사용한다. 

 

Pre-Retrieval process : indexing Structure 개선 및 Query 최적화

 

여러가지 방법들이 존재하는데 (enhancing data granularity, optimizing index structures, adding metadata, alignment optimization, and mixed retrieval)와 같은 방법들이 있다.

 

Post-Retrieval process : 검색한 context들을 query를 효율적으로 합치는 방법이 중요하기 때문에 이를 개선하는 작업이라고 할 수 있다. 이 방법으로는 Chunk를 Rerank 하거나 Context를 요약하는 작업 등이 있다. 즉,

 

3) Modular RAG

 

앞선 두 패러다임을 뛰어넘어서 더 발전된 패러다임이다.

예를 들어, 유사도 계산을 위한 검색 모듈을 추가한다던가, Fine tuning을 통해 Retriever를 정재하는 등의 작업을 모듈 형태로 제공하거나, 특정 문제 해결을 위해 RAG 파이프라인을 재배열하기도 한다.

 

1. New Modules 

  • The Search module : LLM이 생성한 코드와 쿼리언어를 사용해서 특정 시나리오에 맞게 검색엔진, 데이터 베이스, 지식그래프와 같은 다양한 데이터 소스에서 직접 검색
  • RAG-Fusion : single query로는 찾기 어려운 정보를 multi-query strategy를 도입해서 기존의 한계를 극복 
  • The Memory module : LLM 메모리를 활용해서 검색을 유도
  • Routing in the RAG : 다양한 데이터 소스를 탐색해서 query에 대한 최적의 경로를 선택
  • The Predict module : 노이즈와 중복을 줄이고 정확성을 높이기 위해 LLM을 활용해 직접 context를 생성 
  • Task adapter module : RAG를 downstream task에 맞게 조정  

2. New Patterns (Modular RAG의 주요 특징)

  • Navie RAG와 Advanced RAG를 뛰어넘어 모듈을 대체 혹은 재구성을 통해 특정 task를 해결할 수 있는 적응성을 가지고 있음
  • 새로운 모듈을 통합하고 기존 모듈 간 상호작용 흐름을 조정 가능한 확장성을 가지고 있음
  • 단순히 검색 (Retrieval)과 Read (읽기) 메커니즘을 넘어선 기능

4) RAG vs Fine-tuning

RAG vs Fine-tuning

프롬프트 엔지니어링, RAG, Fine-tuning 세가지를 비교한 그래프를 Figure 4에서 볼 수 있다.

  • 프롬프트 엔지니어링 : 모델 고유의 능력을 활용하여 외부 지식이나 모델 적응의 필요성을 최소화한다. 
  • RAG : 정보 검색을 위한 맞춤형 교과서 제공과 유사하다고 비유할 수 있다. 정확한 정보 검색 작업에 적합하다. 실시간으로 지식을 업데이트 가능하며 외부 소스를 효과적으로 활용 수 있다. 이에 Fine-tuning에 비해 동적이라고 표현한다. 반면, 높은 지연 시간과 데이터 검색에 대한 윤리적인 고려사항이 따른다는 단점이 있다.   
  • Fine-tuning : 반면, RAG에 비해 정적이며, 시간이 지남에 따라 지식을 내재화하는 학생과 유사하다고 비유할 수 있다. 다만 업데이트를 위해 재훈련이 필요하고, 데이터셋 준비와 훈련에 상당한 컴퓨팅 자원이 들어간다는 단점이 있지만,  모델의 행동과 스타일에 대한 맞춤화(custormization)가 가능하다.   

성능의 경우 RAG가 일관되게 더 우수한 성능을 보이고 있다. 

선택의 기준으로는 데이터의 동작성, 맞춤화, 컴퓨팅 능력 등 특정 요구사항에 따라 결정이되고 RAG와 FT는 상호배타적인 것이 아니라 서로 보완이 가능한 부분이다. 때로는 이 두 가지의 hybrid 방식이 더욱 좋을 때도 있다. 

2. Retrieval

데이터 소스에서 관련된 document들을 효과적으로 retrieve 하는 것이 중요하다. 이에 retrieval source, retrieval granularity, retrieval의 pre-processing, embedding model의 선택 등의 핵심 문제가 남아있다. 

 

1. Retrieval source

  • 초기에는 text가 주된 검색 source 였지만 최근 PDF와 같은 semi-structured data와 structured data인 knowledge graphs도 포함할 수 있도록 확장되었다. 
  • 또한, 최근 외부 지식 한계를 극복하기 위해 LLM 내부의 지식 즉, LLM이 자체 생성한 콘텐츠를 retrieval이나 enhancement 목적으로 사용하는 연구도 늘고 있다. (e.g. SKR, GenRead, Selfmem 등)
    • SKR : 질문을 알려진/알려지지 않은 것으로 분류하여 선택적으로 검색 강화
    • GenRead : Retriever를 LLM Generater로 대체 (LLM 생성 context가 더 정확한 답변을 포함할 가능성이 높다)
    • Selfmem : 무제한 메모리 풀 반복 생성

2. Retrival granularity (검색 단위 세분화)

  • 활용될 데이터의 세분화 정도도 중요한 요소이다. Coarse-grained retrieval (큰 단위 검색)은 이론적으로 관련 있는 정보를 제공할 수 있지만, 불필요한 정보도 포함되어 있을 수 있다. 반면 Fine-grained retrieval (작은 단위 검색)은 검색에 부담을 증가시킬 수 있다. 
  • Text 데이터에서는 이러한 검색 단위를 Token, Phrase, Sentence, Proposition, Chunks, Document 등의 단위까지 다양하다.

3. Indxing optimization

 

문서를 임베딩하여 벡터 데이터베이스로 저장하기 이전에 외부 문서를 pre-processing 할 필요가 있다. 이 indexing의 quality가 검색 단계에서 올바른 context를 얻을 수 있을지에 대한 여부를 결정한다. 

  • Chunking strategy 
    • 가장 일반적인방법으로 일정한 수의 토큰으로 분할한다. (문서, 문단, 문장 등의 단위로 분할) 하지만 많은 노이즈가 발생할 수 있고, 시간과 비용이 늘어난다는 문제가 있다. 
    • 또 이런식으로 청크를 분할하는 방법은 문장이 잘릴 수 있기 때문에 recursive split이나 sliding window 방법을 활용해서 여러 검색에서 정보를 합쳐서 검색하는 것을 가능하게 한다.  
  • Metadata Attachments\
    • 많은 데이터들은 메타데이터로 이루어져 있다. 이러한 메타데이터를 청크에 추가해서 문서의 범위를 좁혀서 검색할 수 있다.
  • Structural Index
    • 문서에 계층적 구조를 구축함으로써 검색 효율을 높이는 방법이다.
    • Hierarchical index structure : 파일들이 부모-자식 관계로 배열되고 각 노드에 데이터를 요약 저장할 수 있다. 
    • Knowledge Graph index : 개념과 엔티티 간 연결을 명확히 하여 일관성을 유지할 수 있다. 

4. Query optimization

 

Naive RAG의 문제 중 하나는 사용자의 쿼리에 의존해서 검색을 수행한다는 것이다. 부적절한 쿼리는(e.g. 다의어 및 전문용어 등) 검색의 효율성을 떨어트리기 때문에 이러한 쿼리를 최적화하는 것이 중요하다.

  • Query Expansion
    • single query를 multiple query로 확장해서 쿼리의 내용 자체를 풍부하게 만들어서 부족한 쿼리를 해결
  • Query Transformation
    • 쿼리 자체를 원본이 아니라 변환된 쿼리를 기반으로 검색을 수행하는 것
    • 이때, LLM 자체를 프롬프트팅하여 쿼리를 재작성하거나 이에 특화된 sLM을 활용하는 방법이 있다.
  • Query Routing
    • Meta data router/filter : 쿼리에서 키워드 추출 후 청크 내 키워드와 메타데이터를 기반으로 필터링
    • Sematic router : 쿼리의 의미론적 정보를 활용하여 라우팅 하는 방법
    • hybrid router : 위의 두 가지 방법을 함께 사용하는 방법

5. Embedding

 

RAG에서는 외부 데이터 및 질문에 대해서 embedding을 수행을 진행해야 그 두 가지의 유사성을 계산할 수 있다. 이때 임베딩 모델의 semantic representation 능력이 매우 중요하다. 주로 BM25 및 BERT 아키텍처 등을 활용할 수 있지만, 특정 모델들이 특정 task에 더 적합한 경향은 있다. 

 

6. Adapter

 

Fine-tuning model은 또 다른 challenge가 존재하는데, API나 로컬 컴퓨팅 리소스로 인한 제약 문제가 발생할 수 있다. 이로 인해 외부 어댑터를 통해서 모델을 align 하는 방법이 있다.

 

3. Generation

Retrieval 된 모든 정보를 LLM에 직접 입력하는 것은 좋은 방법이 아닐 수 있다. LLM도 사람처럼 처음과 끝을 중요하게 생각하기 때문이다. 따라서 이 중간 부분의 정보가 유실될 수 있다.  

 

1. Context curation

  • Reranking
    • Reranking은 chunk를 재정렬해서 가장 관련성이 높은 것을 먼저 강조하는 방식 
  • Context Selection/Compression
    • RAG 프로세스에서 가능한 많은 문서를 검색하고 긴 프롬프트를 만드는 것이 유리하다는 것은 오해다. 오히려 이 긴 context가 LLM의 능력을 저하시킬 수 있다. 
    • 따라서 이를 개선하기 위해서 프롬프트를 압축하거나, 문서의 수를 감소시키는 것도 유용하다

2. LLM fine-tuning

  • 특정 tak나 데이터에는 fine-tuning은 더 좋은 성능을 이끌어낼 수 있다.
  • 또한, Fine-tuning의 또 다른 장점은 모델의 입, 출력을 조정할 수 있다는 점이다.

4. Augmentation Process in RAG

Augmentation Process in RAG

 

RAG에서는 일반적으로 한 번의 검색 단계만을 거쳐 답변을 생성하는데, 이는 이는 충분하지 못한 정보만을 제공하기 때문에 만족스럽지 못한 output을 받을 수 있다. 따라서 이러한 문제를 해결하기 위해서 검색 과정 자체를 최적화하는 방법들을 연구했다. 

  • Iterative Retrieval
    • 초기 쿼리와 생성된 텍스트를 바탕으로 반복적으로 지식을 검색
    • 응답 생성의 품질 개선을 위한 것 
  • Recursive Retrieval
    • 이전 검색에서 얻은 결과를 분석하여 이를 수정하여 다시 쿼리를 검색하는 것을 반복하는 형식
    • 검색 자체의 정확도를 향상시키는 것

5. Task and Evaluation

NLP의 다양한 분야에서 RAG의 평가가 있다.

  • Downstream Task
    • RAG의 핵심 tak는 QA(Question Answering)이다.
    • single-hop/multi-hop(질문에 대한 답을 하나의 문단/여러 문단에서 정답을 찾는 것) QA, multiple chioce QA, domain-specific QA, long-form scenarios suitable QA를 포함하고 있다.
    • 또한 RAG는 IR, IE(Information Extration), Dialogue Generation, Code Search 등 다양한 다운스트림 작업으로 확장
    • 이와 관련된 데이터셋은 따로 Table 2에서 확인 가능
  • Evaluation Target (RAG 모델평가에서 집중해야할 주요 목표) 
    • RAG의 모델 평가는 다운스트림 테스크에 초저이 맞춰져 있으며 해당 task에 적합한 지표를 사용한다.
      • QA: EM(정확 매칭), F1 score
      • 사실 검증(Fact-checking): 정확도(Accuracy)
      • 생성 품질: BLEU, ROUGE
      • 자동화 도구: RALLE와 같은 평가 도구
    • 하지만, 그럼에도 RAG 모델 자체의 특성을 평가하는 도구가 부족하지만 이 특성을 평가한 연구가 있다. RAG 모델의 주요 평가 목표는 다음과 같다. 
      • 검색 품질 (Retrieval Quality): 검색된 문맥이 얼마나 효과적인지 평가
        • 사용 지표: Hit Rate, MRR(Mean Reciprocal Rank), NDCG
      • 생성 품질 (Generation Quality): 검색된 문맥을 활용한 답변 생성의 일관성과 관련성을 평가
        • 평가 요소: 정확성, 관련성, 무해성 등을 평가(라벨링이 없는 콘텐츠)  
        • 라벨링 된 데이터는 정확성(accuracy)을 중심으로 평가
  • Evaluation Aspects (Evaluation Target의 구체적인 구성 요소)
    • 현대의 RAG의 평가는 3개의 Quality score와 4개의 essential ablilty에 중점을 둔다. 이는 주 목표인 검색과 생성 평가에 대한 종합적 정보를 제공한다.
    • Quality Scores : Context Relevance(문맥 관련성), Answer Faithfulness(답변 신뢰성), Answer Relevance(답변 관련성)
      • 문맥 관련성(Context Relevance): 검색된 문맥이 질문에 얼마나 적합한지 평가
      • 답변 신뢰성(Answer Faithfulness): 생성된 답변이 검색된 문맥과 일치하는지 확인
      • 답변 관련성(Answer Relevance): 답변이 질문과 얼마나 직접적으로 관련 있는지 평가
    • Required Abilities
      • 노이즈 견고성(Noise Robustness): 불필요한 문서가 포함된 상황에서 성능 유지
      • 부정 응답 배제(Negative Rejection): 필요한 정보가 없을 경우 답변을 생략하는 능력
      • 정보 통합(Information Integration): 여러 문서에서 정보를 종합하여 복잡한 질문에 답변
      • 반사실적 견고성(Counterfactual Robustness): 잘못된 정보를 무시하는 능력
  • Evaluation Benchmarks and Tools
    • RAG 모델 평가를 위한 벤치마크와 도구가 다양하게 개발되었다.
      1. 주요 벤치마크:
        • RGB, RECALL, CRUD 등이 RAG의 핵심 능력을 평가
      2. 자동화 도구:
        • RAGAS, ARES, TruLens8 등이 품질 점수를 평가하기 위해 사용
        • 이 도구들은 평가를 체계화하는 데 기여하며, RAG 모델 성능을 다각도로 분석 가능

6. Discussion and Future prospects

RAG의 기술이 상당히 발전했음에도 불구하고 여전히 연구가 필요한 부분이 있다. RAG가 직면한 주요 도전 과제와 연구 방향을 소개한다. 

  • RAG vs Long Context
    • LLM이 긴 문맥을 처리할 수 있게 되었지만 효율성 부분에서 여전히 RAG가 필요하다.
    • 따라서 긴 문맥을 활용한 RAG의 새로운 활용 방식과 방법론 개발이 주요 연구 방향이 될 것이다.
  • RAG Robustness
    • 노이즈와 모순된 정보로 인한 품질 저하를 해결하는 연구도 중요
    • 관련 없는 문서가 품질을 오히려 향상하는 사례를 통해 RAG 모델의 통합 전략의 필요성이 강조
  • Hybrid Approaches
    • RAG와 fin-tuning을 함께 사용하는 방식이 떠오르고 있다.
    • 특정 기능의 sLM을 RAG에 도임하고 RAG의 결과를 다시 fine-tuning 하는 방식이 있다.
  • Scaling laws of RAG
    • End-to-End RAG 모델과 RAG 기반 사전 학습 모델에서 파라미터는 중요한 요소다. 파라미터 수의 증가와 역확장 법칙에 대한 연구가 필요하다.
  • Production-Ready RAG
    • 대규모 지식 베이스 검색 효율성 및 데이터 보안을 개선하고 기술 발전과 맞춤화 단순화도 중요한 방향성이다.
  • Multi-Modal RAG
    • 단순 텍스트를 넘어 이미지, 오디오, 비디오, 코드 등 다양한 데이터를 통합하는 멀티모달 모델이 발전 중이다.
    • 이미지 : RA-CM3, BLIP-2
    • 오디오와 비디오 : GSS
    • 코드 : RBPS

7. Conclusion

 

RAG는 LLM의 한계를 보완하고 다양한 응용 분야에서 실질적인 가치를 제공하며 학계와 산업계에 중요한 연구 및 개발 방향으로 자리 잡고 있다.

 

다시 정리하자면, 

 

RAG는 LLM의 내부지식과 외부 지식을 통합하여 성능을 확장하였으며, 3단계로 발전하고 성능과 유연성이 강화되었다. 

또한, RAG는 파인튜닝과 강화학습 같은 다른 방법론과의 기술적 융합으로 기능을 더욱 확장하고 있다.

 

하지만, 긴 문맥의 처리 능력을 개선하고 견고성을 향상하는 방향이 필요하며 멀티모달의 확장에서도 연구가 필요하다. 이뿐만 아니라 RAG 중심의 AI 애플리케이션 및 이를 지원하는 도구의 개발 등으로 RAG 생태계의 확장되고 있으며 RAG에 대한 평가 방법론에 대한 개선도 필요하다.