-
Retrieval-Augmented Generation for Large Language Models: A Survey논문 2024. 12. 9. 21:30
대규모 언어 모델(LLMs)은 놀라운 역량을 보여주지만, 환각, 옛날 지식, 불투명한 추론 과정과 같은 문제를 가지고 있음
RAG은 외부 데이터베이스에서 지식을 통합함으로써 이러한 문제를 해결하기 위한 유망한 솔루션
지식 집약적 작업에서 생성의 정확성과 신뢰성을 향상시키며, 지속적인 지식 업데이트 및 도메인별 정보 통합을 가능
RAG는 LLM의 내재적 지식과 외부 데이터베이스의 방대한 동적 저장소를 시너지 효과로 결합
리뷰 논문은 RAG 패러다임의 발전 과정을 세세히 검토하며, Naive RAG, Advanced RAG, Modular RAG을 포함
RAG 프레임워크의 삼중 기초인 검색(Retrieval), 생성(Generation), 증강(Augmentation) 기술을 면밀히 분석
각 핵심 구성 요소에 내재된 최신 기술들을 조명하며, RAG 시스템의 발전에 대한 깊은 이해를 제공
더 나아가, 최신 평가 프레임워크와 벤치마크를 소개
LLMs은 놀라운 성공을 거두었지만, 도메인 특화 또는 지식 집약적 작업에서 특히 한계를 드러내고 있음
특히, 학습 데이터 범위를 벗어나거나 최신 정보가 필요한 쿼리를 처리할 때 hallucination을 발생시키는 문제
이러한 문제를 해결하기 위해 RAG은 외부 지식 기반에서 의미적 유사성 계산을 통해 관련 문서 조각을 검색하여 LLM의 성능을 향상
외부 지식을 참조함으로써 RAG는 사실적으로 부정확한 콘텐츠를 생성하는 문제를 효과적으로 줄이고, LLM의 채택을 촉진하며, 실제 애플리케이션에서 LLM의 적합성을 높이는 핵심 기술로 자리 잡음
대규모 모델 시대의 RAG 발전 궤적은 몇 가지 뚜렷한 단계를 보여줌
1) 초기 Transformer 아키텍처의 부상과 함께 RAG가 등장했으며, 추가 지식을 사전 학습 모델을 통해 언어 모델에 통합하는 데 초점
이 초기 단계는 사전 학습 기법을 개선하려는 기초적인 연구가 특징적
2) ChatGPT의 등장은 LLM이 맥락 학습(ICL) 능력을 강력하게 보여주는 결정적 순간이 되었으며, RAG 연구는 추론 단계에서 LLM이 더 복잡하고 지식 집약적인 작업에 더 나은 정보를 제공할 수 있도록 연구 방향을 전환하면서 급격히 발전하기 시작
연구가 진행됨에 따라, RAG의 개선은 더 이상 추론 단계에 국한되지 않고 LLM의 파인튜닝 기법과 점차 통합
논문은 기술적 패러다임과 연구 방법론 모두를 고려하며, 100건 이상의 RAG 연구를 통해 세 가지 주요 연구 패러다임(초보적인 RAG, 고급 RAG, 모듈형 RAG)을 요약하고, “검색”, “생성”, “증강”이라는 핵심 단계의 주요 기술을 분석
현재 연구는 방법론에 집중하는 경향이 있으며, RAG 평가 방법의 분석 및 요약이 부족한 상태
본 논문의 주요 기여점:
- RAG 연구를 초보적 RAG, 고급 RAG, 모듈형 RAG로 구분하여 진화 과정을 체계적이고 철저히 검토
이를 통해 LLM 연구의 맥락에서 RAG 연구의 광범위한 범위를 설명 - RAG 프로세스에서 중요한 “검색”, “생성”, “증강” 측면을 구체적으로 논의하며, 이 구성 요소들이 어떻게 상호작용하여 효과적인 RAG 프레임워크를 형성하는지 설명
- 현재 RAG 평가 방법을 요약하고, 26개의 작업, 약 50개의 데이터셋을 다루며, 평가 목표와 메트릭, 그리고 최신 평가 벤치마크와 도구를 정리
ChatGPT는 사전 학습 데이터에 의존하기 때문에 최신 개발 사항에 대한 정보를 제공할 수 있는 능력이 처음에는 부족
RAG는 외부 데이터베이스에서 지식을 검색하고 통합함으로써 이러한 정보 격차를 해소
사용자의 질문과 관련된 뉴스 기사를 수집하여 이를 원래 질문과 결합함으로써 LLM이 잘 정리된 답변을 생성할 수 있도록 지원RAG 연구 패러다임은 지속적으로 진화하고 있으며, Naive RAG, Advanced RAG, Modular RAG의 세 가지 단계로 분류할 수 있음
RAG 방식은 비용 효율적이고 기본 LLM의 성능을 능가하지만, 여전히 몇 가지 한계
Advanced RAG와 Modular RAG의 개발은 Naive RAG의 특정 단점을 해결하기 위해 이루어진 것A. Naive RAG
Naive RAG 연구 패러다임은 ChatGPT가 널리 사용된 직후 처음으로 주목받기 시작한 초기 방법론
Naive RAG는 색인화, 검색, 생성을 포함하는 전통적인 프로세스를 따르며, "Retrieve-Read" 프레임워크로도 특징
색인화(Indexing)
PDF, HTML, Word, Markdown과 같은 다양한 형식의 원시 데이터를 정리하고 추출하여 단일 텍스트 형식 변환언어 모델의 문맥 한계를 고려하여 텍스트를 더 작은 크기로 나누고, 임베딩 모델을 사용해 벡터로 변환한 후 벡터 데이터베이스에 저장
이는 이후 검색 단계에서 유사성을 효율적으로 검색하기 위해 필수적인 단계검색(Retrieval)
사용자의 쿼리를 수신하면, RAG 시스템은 색인화 단계에서 사용한 것과 동일한 임베딩 모델을 사용해 쿼리를 벡터 표현으로 변환
그런 다음 쿼리 벡터와 색인된 코퍼스 내의 벡터 간 유사도 점수를 계산하여, 가장 유사도가 높은 K개의 조각을 검색
이 조각들은 이후 프롬프트에서 확장된 문맥으로 사용생성(Generation)
쿼리와 선택된 문서를 결합하여 일관된 프롬프트를 생성한 뒤, 이를 기반으로 LLM이 응답을 생성하도록 함
모델의 응답 생성 접근 방식은 작업의 특정 기준에 따라 달라질 수 있으며, 내재된 파라미터 지식을 활용하거나 제공된 문서 정보에 제한된 응답을 생성할 수 있음
지속적인 대화의 경우, 이전 대화 이력을 프롬프트에 통합하여 다중 턴 대화도 효과적으로 처리할 수 있음
그러나 Naive RAG는 다음과 같은 한계가 있음- 검색의 어려움
검색 단계에서 정밀도와 재현율 문제로 인해 잘못된 또는 관련 없는 정보를 선택하거나 중요한 정보를 놓치는 경우가 많음 - 생성의 어려움
생성 단계에서 모델이 검색된 문맥에 의해 뒷받침되지 않는 내용을 생성하는 "환각" 문제가 발생할 수 있으며, 이 단계는 또한 부적절하거나 편향된 결과로 인해 응답 품질과 신뢰성을 저하시킬 수 있음 - 증강의 장애
검색된 정보를 작업에 통합하는 과정에서 단편적이거나 일관성 없는 결과를 초래할 수 있으며, 중복된 정보가 포함될 경우 반복적인 응답을 유발
다양한 텍스트의 중요성과 관련성을 판단하고, 스타일과 톤의 일관성을 유지하는 것은 추가적인 복잡성을 발생
또한 생성 모델이 증강된 정보에 지나치게 의존하여, 검색된 콘텐츠를 단순히 반영하고 통찰력이나 종합적인 정보를 추가하지 않는 출력물을 생성할 가능성이 존재
B. Advanced RAG
Advanced RAG는 Naive RAG의 한계를 극복하기 위해 특정 개선 사항을 도입
주로 검색 품질 향상에 초점을 맞추며, 사전 검색 및 사후 검색 전략을 활용
색인화 문제를 해결하기 위해 Advanced RAG는 슬라이딩 윈도우 접근법, 세분화된 텍스트 처리, 메타데이터 통합 등을 통해 색인화 기술을 개선
또한 검색 프로세스를 간소화하기 위한 여러 최적화 방법도 포함사전 검색 단계
이 단계에서는 색인 구조와 원래 쿼리를 최적화하는 데 초점
색인화 품질을 향상시키기 위해 데이터의 세분화, 색인 구조 최적화, 메타데이터 추가, 정렬 최적화, 혼합 검색과 같은 전략을 사용
쿼리 최적화의 목표는 사용자의 질문을 보다 명확하고 검색 작업에 적합하게 만드는 것
일반적인 방법에는 쿼리 재작성(query rewriting), 쿼리 변환, 쿼리 확장 등이 포함
사후 검색 단계
검색된 문맥을 쿼리와 효과적으로 통합하는 것이 중요
주요 방법으로는 rerank chunks과 context compressing이 존재
검색된 정보를 재정렬하여 가장 관련성이 높은 내용을 프롬프트의 가장자리에 배치하는 전략은 LlamaIndex, LangChain, HayStack[12]와 같은 프레임워크에서 구현
검색된 모든 문서를 LLM에 직접 입력하면 정보 과부하가 발생하여 중요 세부 사항에 대한 초점을 약화시킬 수 있음
이를 완화하기 위해 사후 검색 노력은 필수 정보를 선택하고 중요한 섹션을 강조하며, 처리해야 할 문맥을 단축하는 데 집중
C. Modular RAG
모듈형 RAG 아키텍처는 이전 두 RAG 패러다임을 넘어, 향상된 적응성과 다목적성을 제공
이는 구성 요소를 개선하기 위해 다양한 전략을 통합하며, 예를 들어 유사성 검색을 위한 검색 모듈 추가나 세부 조정을 위한 검색기(fine-tuning) 개선을 포함
특정 문제를 해결하기 위해 재구성된 RAG 모듈과 재배치된 RAG 파이프라인과 같은 혁신이 도입
모듈형 RAG 접근법으로의 전환은 점점 더 보편화되고 있으며, 구성 요소 간의 순차적 처리와 통합된 엔드투엔드(end-to-end) 학습을 모두 지원
모듈형 RAG는 독창적이긴 하지만, Advanced RAG와 Naive RAG의 기본 원칙을 기반으로 하여 RAG 패밀리 내에서의 발전과 세분화
- 새로운 모듈(New Modules):
모듈형 RAG 프레임워크는 검색 및 처리 기능을 향상시키기 위해 추가적인 특수 구성 요소를 도입
검색(Search) 모듈은 특정 시나리오에 적응하여 검색 엔진, 데이터베이스, 지식 그래프 등 다양한 데이터 소스에서 LLM이 생성한 코드와 쿼리 언어를 사용해 직접 검색을 가능하게 함
RAG-Fusion은 사용자의 쿼리를 다양한 관점으로 확장하고 병렬 벡터 검색 및 지능형 재정렬을 활용하여 명시적이고 변형된 지식을 모두 발견함으로써 전통적인 검색의 한계를 극복
메모리(Memory) 모듈은 LLM의 메모리를 활용하여 검색을 안내하며, 반복적 자기 개선을 통해 텍스트를 데이터 분포와 더 가깝게 정렬하는 무제한 메모리 풀을 생성
RAG 시스템의 라우팅(Routing)은 다양한 데이터 소스를 탐색하며, 요약, 특정 데이터베이스 검색, 서로 다른 정보 스트림 병합 등 쿼리에 최적화된 경로를 선택
Predict 모듈은 LLM을 통해 직접 컨텍스트를 생성함으로써 중복성과 노이즈를 줄이고, 관련성과 정확성을 보장
마지막으로, Task Adapter 모듈은 RAG를 다양한 다운스트림 작업에 맞추며, 제로샷 입력을 위한 프롬프트 검색을 자동화하고 몇 가지 샷 쿼리 생성을 통해 작업 특화 검색기를 구축
이 포괄적인 접근 방식은 검색 프로세스를 간소화할 뿐만 아니라 정보 검색의 품질과 관련성을 크게 향상시키며, 더 높은 정밀도와 유연성을 바탕으로 다양한 작업과 쿼리에 대응할 수 있음- 새로운 패턴(New Patterns):
모듈형 RAG는 특정 문제를 해결하기 위해 모듈 교체 또는 재구성을 허용하여 뛰어난 적응성을 제공
이는 단순한 "Retrieve" 및 "Read" 메커니즘으로 특징지어지는 Naive와 Advanced RAG의 고정된 구조를 넘어섬
또한, 모듈형 RAG는 새로운 모듈을 통합하거나 기존 모듈 간 상호작용 흐름을 조정하여 다양한 작업에 대한 적용성을 높임
예를 들어, Rewrite-Retrieve-Read 모델은 재작성 모듈과 LM-피드백 메커니즘을 통해 검색 쿼리를 정제함으로써 작업 성능을 향상시킴
유사하게, Generate-Read 접근법은 전통적인 검색을 LLM이 생성한 콘텐츠로 대체하며, Recite-Read는 모델 가중치에서 검색을 강조하여 지식 집약적 작업을 처리하는 모델의 능력을 향상시킴하이브리드 검색 전략은 키워드, 의미, 벡터 검색을 통합하여 다양한 쿼리에 대응합니다. 또한, 하위 쿼리(sub-query)와 가상 문서 임베딩(HyDE)[11]을 활용하여 생성된 답변과 실제 문서 간의 임베딩 유사성을 중심으로 검색 관련성을 개선하려 합니다.
모듈 구성 및 상호작용의 조정, 예를 들어 Demonstrate-Search-Predict(DSP)[23] 프레임워크와 ITER-RETGEN[14]의 반복적 Retrieve-Read-Retrieve-Read 흐름은 한 모듈의 출력을 다른 모듈의 기능을 강화하기 위해 동적으로 사용하는 것을 보여줍니다. FLARE[24] 및 Self-RAG[25]와 같은 기술을 통해 적응형 검색의 이점을 보여주는 모듈형 RAG 흐름의 유연한 조정은 다양한 시나리오에 따라 검색 필요성을 평가함으로써 고정된 RAG 검색 프로세스를 초월합니다.
유연한 아키텍처의 또 다른 이점은 RAG 시스템이 파인튜닝이나 강화 학습과 같은 다른 기술과 더 쉽게 통합될 수 있다는 점입니다[26]. 예를 들어, 검색 결과를 개선하기 위해 검색기를 파인튜닝하거나, 보다 개인화된 출력을 위해 생성기를 파인튜닝하거나, 협업 파인튜닝(collaborative fine-tuning)을 수행할 수 있습니다[27].
D. RAG와 파인튜닝(Fine-tuning)의 비교
LLMs의 활용도가 점점 더 높아지면서 이를 최적화하는 방법에 대한 관심도 상당히 증가했습니다. LLM 최적화 방법 중에서 RAG는 Fine-tuning(FT) 및 프롬프트 엔지니어링과 자주 비교됩니다. 각 방법은 그림 4에 표시된 두 가지 차원(외부 지식 요구사항 및 모델 적응 요구사항)에서 고유한 특성을 갖습니다. 프롬프트 엔지니어링은 외부 지식 및 모델 적응이 최소한으로 필요한 상태에서 모델의 고유한 역량을 활용합니다. RAG는 정보 검색 작업에 이상적인 맞춤형 교과서를 모델에 제공하는 것과 같으며, FT는 시간이 지나면서 지식을 내재화하는 학생과 비슷해 특정 구조, 스타일 또는 형식을 복제해야 하는 시나리오에 적합합니다.
RAG는 실시간 지식 업데이트와 높은 해석 가능성을 가진 외부 지식 소스의 효과적인 활용을 통해 동적 환경에서 뛰어난 성능을 발휘합니다. 그러나 RAG는 더 높은 지연(latency)과 데이터 검색과 관련된 윤리적 고려 사항을 수반할 수 있습니다. 반면 FT는 더 정적이며 업데이트를 위해 재학습이 필요하지만 모델의 동작과 스타일을 깊이 커스터마이징할 수 있습니다. 데이터셋 준비 및 학습에는 상당한 컴퓨팅 자원이 필요하며, 환각을 줄일 수 있지만 익숙하지 않은 데이터와 관련된 문제에 직면할 수 있습니다.
다양한 지식 집약적 작업에서 두 방법의 성능을 평가한 결과[28], 비지도 파인튜닝이 약간의 개선을 보여주었음에도 불구하고 RAG는 기존 학습된 지식과 완전히 새로운 지식 모두에서 일관되게 뛰어난 성능을 발휘했습니다. 또한, 비지도 파인튜닝을 통해 새로운 사실 정보를 학습하는 데 LLM이 어려움을 겪는 것으로 나타났습니다. RAG와 FT 중 어떤 방법을 선택할지는 애플리케이션 맥락에서 데이터 동적성, 커스터마이징, 컴퓨팅 역량에 대한 특정 요구사항에 따라 달라집니다. RAG와 FT는 상호 배타적이지 않으며, 서로를 보완하여 모델의 역량을 다양한 수준에서 향상시킬 수 있습니다. 경우에 따라 이 두 방법을 결합하여 최적의 성능을 얻을 수도 있습니다. RAG와 FT를 포함한 최적화 과정은 만족스러운 결과를 얻기 위해 여러 번의 반복이 필요할 수 있습니다.
III. 검색
RAG의 맥락에서, 데이터 소스에서 관련 문서를 효율적으로 검색하는 것이 매우 중요합니다. 검색에는 검색 소스, 검색 단위의 세분화, 검색의 전처리, 적합한 임베딩 모델의 선택과 같은 여러 핵심 문제가 포함됩니다.
A. 검색 소스(Retrieval Source)
RAG는 LLM을 강화하기 위해 외부 지식에 의존하며, 검색 소스의 유형과 검색 단위의 세분화는 최종 생성 결과에 영향을 미칩니다.
- 데이터 구조(Data Structure):
초기에는 텍스트가 주요 검색 소스였으나, 이후 PDF와 같은 반구조화 데이터(semi-structured data), 지식 그래프(Knowledge Graph, KG)와 같은 구조화 데이터(structured data)로 확장되었습니다. 원래 외부 소스에서 데이터를 검색하는 것 외에도, 최근 연구에서는 LLM이 생성한 콘텐츠를 검색 및 증강 목적으로 활용하려는 경향이 증가하고 있습니다.
- 비구조화 데이터(Unstructured Data):
텍스트와 같은 비구조화 데이터는 가장 널리 사용되는 검색 소스이며, 주로 코퍼스에서 수집됩니다. 오픈 도메인 질문응답(ODQA) 작업에서는 주요 검색 소스로 Wikipedia Dump가 사용되며, 주요 버전으로는 HotpotQA(2017년 10월 1일), DPR(2018년 12월 20일) 등이 있습니다. 백과사전 데이터 외에도, 일반적인 비구조화 데이터에는 다국어 텍스트와[19] 의료[67], 법률[29]과 같은 도메인 특화 데이터가 포함됩니다. - 반구조화 데이터(Semi-structured Data):
텍스트와 테이블 정보가 결합된 데이터를 말하며, PDF와 같은 형식이 이에 해당합니다. 반구조화 데이터를 처리하는 것은 두 가지 주요 이유로 기존 RAG 시스템에 어려움을 줍니다. 첫째, 텍스트 분할 과정에서 테이블이 분리되어 검색 중 데이터 손상이 발생할 수 있습니다. 둘째, 테이블을 데이터에 통합하면 의미적 유사성 검색이 복잡해질 수 있습니다. 이러한 데이터를 처리할 때, LLM의 코드 실행 능력을 활용하여 데이터베이스 내 테이블에서 Text-to-SQL 쿼리를 실행하거나(TableGPT[85]), 테이블을 텍스트 형식으로 변환하여 텍스트 기반 방법으로 분석하는 접근 방식이 있습니다[75]. 그러나 이 두 방법 모두 최적의 솔루션은 아니며, 이 분야에서 상당한 연구 기회가 있음을 나타냅니다. - 구조화 데이터(Structured Data):
지식 그래프(KG)와 같은 구조화 데이터는 일반적으로 검증되며 더 정밀한 정보를 제공합니다. KnowledGPT[15]는 KB 검색 쿼리를 생성하고, 지식을 개인화된 데이터베이스에 저장하여 RAG 모델의 지식 풍부함을 강화합니다. LLM이 텍스트 그래프를 이해하고 이에 대한 질문에 답하는 데 한계를 보이는 문제를 해결하기 위해, G-Retriever[84]는 그래프 신경망(GNN), LLM, RAG를 통합하여 소프트 프롬프팅을 통해 그래프 이해와 질문 응답 능력을 향상시키고, Prize-Collecting Steiner Tree(PCST) 최적화 문제를 활용하여 대상 그래프 검색을 수행합니다. 반면, 구조화된 데이터베이스를 구축, 검증 및 유지 관리하는 데 추가적인 노력이 필요합니다. - LLM 생성 콘텐츠(LLMs-Generated Content):
RAG의 외부 보조 정보의 한계를 해결하기 위해 일부 연구는 LLM의 내부 지식을 활용하는 데 초점을 맞추고 있습니다. SKR[58]은 질문을 알려진 것과 알려지지 않은 것으로 분류하고, 선택적으로 검색 증강을 적용합니다. GenRead[13]는 검색기를 LLM 생성기로 대체하여, LLM이 생성한 컨텍스트가 종종 더 정확한 답변을 포함한다는 것을 발견했으며, 이는 인과적 언어 모델링의 사전 학습 목표와 더 잘 맞아떨어지기 때문입니다. Selfmem[17]은 검색 증강 생성기를 사용하여 반복적으로 무제한 메모리 풀을 생성하고, 메모리 선택기를 사용해 원래 질문에 대한 이중 문제로 활용할 출력을 선택함으로써 생성 모델을 자체적으로 강화합니다. 이러한 방법론은 RAG에서 혁신적인 데이터 소스 활용의 폭을 강조하며, 모델 성능과 작업 효율성을 개선하기 위해 노력합니다.
- 검색 단위의 세분화(Retrieval Granularity):
검색 소스의 데이터 형식 외에도 검색된 데이터의 세분화 수준도 중요한 요소입니다. 거친(granular) 검색 단위는 문제에 더 관련 있는 정보를 제공할 수 있지만, 중복된 콘텐츠를 포함할 수 있어 검색기와 언어 모델이 다운스트림 작업에서 주의가 분산될 위험이 있습니다[50], [87]. 반면, 세분화된(fine-grained) 검색 단위는 검색 부담을 증가시키고, 의미적 완전성과 필요한 지식을 보장하지 못할 수도 있습니다. 적절한 검색 단위를 선택하는 것은 밀집 검색기의 검색 및 다운스트림 작업 성능을 향상시키는 간단하고 효과적인 전략이 될 수 있습니다.
텍스트에서 검색 단위는 세분화된 단위에서부터 거친 단위까지 다양하며, 토큰, 구, 문장, 명제, 청크, 문서 등이 포함됩니다. DenseX[30]는 명제를 검색 단위로 사용하는 개념을 제안했습니다. 명제는 텍스트에서 고유한 사실적 부분을 캡슐화한 원자 표현으로 정의되며, 간결하고 독립적인 자연어 형식으로 표현됩니다. 이 접근법은 검색의 정밀도와 관련성을 향상시키는 것을 목표로 합니다. 지식 그래프(KG)에서는 검색 단위로 엔터티(Entity), 삼중항(Triplet), 서브 그래프(sub-Graph)가 포함됩니다. 검색 단위는 추천 작업에서의 항목 ID[40] 검색 및 문장 쌍[38] 검색과 같은 다운스트림 작업에 맞게 조정될 수도 있습니다. 세부 정보는 표 I에 나와 있습니다.
B. 색인 최적화 (Indexing Optimization)
색인화 단계에서는 문서를 처리하고, 세분화하며, 임베딩으로 변환한 뒤 벡터 데이터베이스에 저장합니다. 색인의 품질은 검색 단계에서 올바른 문맥을 얻을 수 있는지를 결정짓는 중요한 요소입니다.
- 청킹 전략 (Chunking Strategy):
문서를 고정된 토큰 수(예: 100, 256, 512)로 나누는 것이 가장 일반적인 방법입니다[88]. 큰 청크는 더 많은 문맥을 포착할 수 있지만, 더 많은 노이즈를 생성하며 처리 시간이 길어지고 비용이 증가합니다. 반면, 작은 청크는 필요한 문맥을 완전히 전달하지 못할 수 있지만, 노이즈가 적습니다. 그러나 청크가 문장 내부에서 잘리는 문제로 인해, 재귀 분할 및 슬라이딩 윈도우 방법을 활용하여 여러 검색 프로세스를 통해 전역적으로 관련된 정보를 병합하는 계층적 검색이 최적화되고 있습니다[89]. 그럼에도 불구하고, 이러한 접근 방식은 여전히 의미적 완전성과 문맥 길이 간의 균형을 맞추지 못합니다. 이를 해결하기 위해 Small2Big과 같은 방법이 제안되었으며, 이 방법은 문장을 작은 단위로 검색하고 이전 및 이후 문장을 큰 문맥으로 제공하여 LLM에 전달합니다[90]. - 메타데이터 첨부 (Metadata Attachments):
청크는 페이지 번호, 파일 이름, 작성자, 카테고리, 타임스탬프 등의 메타데이터 정보를 추가하여 풍부하게 만들 수 있습니다. 이후 검색은 이 메타데이터를 기반으로 필터링되어 검색 범위를 제한할 수 있습니다. 예를 들어, 문서 타임스탬프에 다른 가중치를 부여함으로써 시간 인식 RAG를 구현하고, 지식의 최신성을 보장하며 구식 정보를 피할 수 있습니다.
원문 문서에서 메타데이터를 추출하는 것 외에도, 메타데이터를 인공적으로 생성할 수도 있습니다. 예를 들어, 문단 요약을 추가하거나 가설적 질문을 도입하는 방식입니다. 이러한 접근 방식은 Reverse HyDE로 알려져 있습니다. 특히, LLM을 사용하여 문서에서 답변할 수 있는 질문을 생성한 다음, 검색 중 원래 질문과 가설적 질문 간의 유사성을 계산하여 질문과 답변 간의 의미적 격차를 줄입니다.
- 구조적 색인 (Structural Index):
정보 검색을 강화하는 한 가지 효과적인 방법은 문서에 계층적 구조를 설정하는 것입니다. 구조를 구성함으로써, RAG 시스템은 관련 데이터를 신속하게 검색하고 처리할 수 있습니다.
- 계층적 색인 구조:
파일은 부모-자식 관계로 배열되며, 청크는 이에 연결됩니다. 데이터 요약은 각 노드에 저장되어 데이터의 빠른 탐색을 지원하고, RAG 시스템이 어떤 청크를 추출할지 결정하는 데 도움을 줍니다. 이 접근 방식은 블록 추출 문제로 인해 발생하는 환각 문제를 완화할 수도 있습니다. - 지식 그래프 색인:
문서의 계층적 구조를 구축하는 데 지식 그래프(KG)를 사용하는 것은 일관성을 유지하는 데 기여합니다. 이는 서로 다른 개념과 엔터티 간의 연결을 설명하여 환각 가능성을 현저히 줄입니다. 또 다른 이점은 정보 검색 과정을 LLM이 이해할 수 있는 명령으로 변환하여 지식 검색의 정확성을 높이고, 문맥적으로 일관된 응답을 생성할 수 있도록 하며, 결과적으로 RAG 시스템의 전반적인 효율성을 개선합니다. KGP[91]는 여러 문서 간에 KG를 사용하여 색인을 생성하는 방법을 제안했으며, 이는 문서의 내용과 구조 간의 논리적 관계를 포착합니다. 이 KG는 노드(문서의 단락 또는 페이지 및 테이블과 같은 구조를 나타냄)와 엣지(단락 간 의미적/어휘적 유사성을 나타냄)로 구성되어 다문서 환경에서 지식 검색 및 추론 문제를 효과적으로 해결합니다.
C. 쿼리 최적화 (Query Optimization)
Naive RAG의 주요 문제 중 하나는 사용자의 원래 쿼리에 직접 의존하여 검색을 수행한다는 점입니다. 명확하고 정밀한 질문을 작성하는 것은 어렵고, 부적절한 쿼리는 검색 효과를 저하시킵니다. 질문 자체가 복잡하거나 언어가 잘 정리되지 않을 때가 있습니다. 또 다른 어려움은 언어의 복잡성과 모호성에 있습니다. 언어 모델은 전문 용어 또는 여러 의미를 가진 약어를 처리할 때 종종 어려움을 겪습니다. 예를 들어, "LLM"이 대규모 언어 모델(Large Language Model)을 의미하는지, 법률 석사(Master of Laws)를 의미하는지 분간하지 못할 수 있습니다.
- 쿼리 확장 (Query Expansion):
단일 쿼리를 여러 쿼리로 확장하면 쿼리의 내용을 풍부하게 만들어 특정 세부사항의 부족을 해결하고, 생성된 답변의 최적의 관련성을 보장합니다.
- 다중 쿼리(Multi-Query):
프롬프트 엔지니어링을 사용하여 LLM을 통해 쿼리를 확장한 뒤, 이러한 쿼리를 병렬로 실행할 수 있습니다. 쿼리 확장은 무작위로 이루어지는 것이 아니라 신중하게 설계됩니다. - 하위 쿼리(Sub-Query):
하위 질문 계획은 복잡한 질문을 단순한 하위 질문 시리즈로 분해하는 과정을 나타냅니다. 이는 관련 문맥을 추가하는 과정으로, 쿼리 확장과 원칙적으로 유사합니다. 예를 들어, 복잡한 질문을 최소-최대 프롬프팅 방식으로 더 간단한 하위 질문으로 분해할 수 있습니다[92]. - 검증 체인(CoVe):
확장된 쿼리는 LLM을 통해 검증을 거쳐 환각을 줄이는 효과를 얻습니다. 검증된 확장 쿼리는 일반적으로 더 높은 신뢰성을 보입니다[93].
- 쿼리 변환 (Query Transformation):
핵심 개념은 사용자의 원래 쿼리가 아닌 변환된 쿼리를 기반으로 청크를 검색하는 것입니다.
- 쿼리 재작성(Query Rewrite):
원래 쿼리는 실제 환경에서 LLM 검색에 항상 최적화되지 않습니다. 따라서 LLM을 프롬프트하여 쿼리를 재작성할 수 있습니다. Taobao에서 구현된 BEQUE[9]와 같은 방법은 롱테일 쿼리에 대한 회상 효과를 향상시키고 GMV를 증가시켰습니다. - 가설 문서 생성(HyDE):
HyDE[11]는 원래 쿼리에 대한 가설적 답변을 생성한 뒤, 문제나 쿼리에 대한 임베딩 유사성을 찾는 대신 답변 간의 임베딩 유사성을 중심으로 작동합니다.
- 쿼리 라우팅 (Query Routing):
쿼리의 유형에 따라 다양한 RAG 파이프라인으로 라우팅하여 다양한 시나리오를 처리할 수 있도록 설계된 다목적 RAG 시스템에 적합합니다.
- 메타데이터 라우터/필터(Metadata Router/Filter):
쿼리에서 키워드(엔터티)를 추출한 후, 청크 내 키워드 및 메타데이터를 기반으로 필터링하여 검색 범위를 좁힙니다. - 의미적 라우터(Semantic Router):
쿼리의 의미적 정보를 활용하는 또 다른 라우팅 방법입니다. 하이브리드 라우팅 접근법은 메타데이터 기반 방법과 의미 기반 방법을 결합하여 쿼리 라우팅을 개선할 수도 있습니다.
D. 임베딩
RAG에서는 질문과 문서 조각의 임베딩 간 유사성(예: 코사인 유사도)을 계산하여 검색을 수행하며, 이 과정에서 임베딩 모델의 의미 표현 능력이 핵심적인 역할을 합니다. 이는 주로 희소 인코더(BM25)와 밀집 검색기(BERT 구조 사전 학습 언어 모델)를 포함합니다. 최근 연구에서는 AngIE, Voyage, BGE 등과 같은 뛰어난 임베딩 모델이 소개되었으며, 이는 멀티태스크 명령 튜닝의 이점을 활용하고 있습니다. Hugging Face의 MTEB 리더보드는 8개의 작업과 58개의 데이터셋을 다루며 임베딩 모델을 평가합니다. 추가적으로, C-MTEB는 6개의 작업과 35개의 데이터셋을 포함하여 중국어 능력을 집중적으로 평가합니다. "어떤 임베딩 모델을 사용할 것인가?"에 대한 명확한 답은 없지만, 특정 모델이 특정 용도에 더 적합한 경우가 있습니다.
- 혼합/하이브리드 검색
희소 및 밀집 임베딩 접근법은 상호보완적인 관련성 정보를 활용하여 서로 이점을 얻을 수 있습니다. 예를 들어, 희소 검색 모델은 밀집 검색 모델의 학습을 위한 초기 검색 결과를 제공하는 데 사용할 수 있습니다. 추가적으로, 사전 학습 언어 모델(PLM)은 희소 검색을 강화하기 위해 용어 가중치를 학습하는 데 사용할 수 있습니다. 특히, 희소 검색 모델은 밀집 검색 모델의 제로샷 검색 능력을 강화하고 드문 엔티티를 포함하는 쿼리를 처리할 수 있도록 도와줍니다. 이를 통해 모델의 견고성이 향상됩니다. - 임베딩 모델의 미세 조정
맥락이 사전 학습 코퍼스에서 크게 벗어나는 경우, 특히 의료, 법률 등의 전문 분야에서 고유 용어가 많이 포함된 상황에서는 도메인 데이터셋으로 임베딩 모델을 미세 조정하는 것이 필수적입니다.
도메인 지식을 보완하는 것 외에도, 또 다른 미세 조정의 목적은 검색기와 생성기를 정렬하는 것입니다. 예를 들어, LLM 결과를 감독 신호로 사용하여 미세 조정하는 LSR(LM-supervised Retriever)이 이에 해당합니다. PROMPTAGATOR는 LLM을 소량의 쿼리 생성기로 활용하여 작업별 검색기를 생성하며, 데이터 부족 환경에서 지도 미세 조정 문제를 해결합니다. 또 다른 접근법인 LLM-Embedder는 여러 다운스트림 작업에서 보상 신호를 생성하기 위해 LLM을 활용합니다. 검색기는 데이터셋의 하드 라벨과 LLM에서 생성된 소프트 리워드라는 두 가지 유형의 감독 신호로 미세 조정됩니다. 이 이중 신호 접근법은 미세 조정 과정을 보다 효과적으로 만들어 다양한 다운스트림 응용 프로그램에 맞게 임베딩 모델을 조정합니다. REPLUG는 검색기와 LLM을 활용하여 검색된 문서의 확률 분포를 계산하고, KL 발산을 통해 감독 학습을 수행합니다. 이 간단하면서도 효과적인 학습 방법은 특정 교차 주의 메커니즘 없이 LLM을 감독 신호로 사용하여 검색 모델의 성능을 향상시킵니다.
또한, RLHF(사람의 피드백을 활용한 강화 학습)에서 영감을 받아, LLM 기반 피드백을 활용해 강화 학습을 통해 검색기를 강화하는 방법도 있습니다.
IV. 생성 (Generation)검색 이후, 검색된 모든 정보를 LLM에 직접 입력하여 질문에 답변하는 것은 좋은 방법이 아닙니다. 따라서 검색된 내용을 조정하거나 LLM을 조정하는 두 가지 관점에서 최적화를 진행해야 합니다.
A. 컨텍스트 조정 (Context Curation)
중복된 정보는 LLM의 최종 생성 결과에 방해가 될 수 있으며, 지나치게 긴 컨텍스트는 LLM이 "가운데를 잃어버리는 문제(Lost in the middle)"를 야기할 수 있습니다【98】. LLM은 인간처럼 긴 텍스트의 시작과 끝에만 집중하고 중간 부분을 잊어버리기 때문에, RAG 시스템에서는 검색된 내용을 추가로 처리해야 합니다.
- 재정렬 (Reranking)
문서 조각을 재정렬하여 가장 관련성이 높은 결과를 먼저 강조함으로써 문서 풀을 효과적으로 축소하고, 검색과 언어 모델 처리를 동시에 개선할 수 있습니다【70】.- 규칙 기반 방법: 다양성(Diversity), 관련성(Relevance), MRR과 같은 사전 정의된 메트릭을 사용합니다.
- 모델 기반 접근법: BERT 시리즈(예: SpanBERT), Cohere rerank, bge-raranker-large와 같은 특화된 재정렬 모델 또는 GPT와 같은 대규모 언어 모델을 활용합니다【12】【99】.
- 컨텍스트 선택/압축 (Context Selection/Compression)
RAG 과정에서 가능한 많은 관련 문서를 검색하고 이를 길게 연결하는 것이 유리하다는 오해가 있습니다. 하지만 과도한 컨텍스트는 노이즈를 증가시켜 LLM이 핵심 정보를 인식하기 어렵게 만듭니다.- LLMLingua는 GPT-2 Small, LLaMA-7B와 같은 소형 언어 모델(SLM)을 활용하여 중요하지 않은 토큰을 제거하고, 인간에게는 이해하기 어렵지만 LLM에게는 적합한 형태로 변환합니다【100】【101】.
- PRCA는 정보 추출기를 학습시켜 이 문제를 해결하며【69】, RECOMP는 대조 학습을 통해 정보 응축기를 학습시킵니다【71】【102】.
- Filter-Reranker 패러다임은 SLM을 필터로, LLM을 재정렬 에이전트로 사용하여 정보 추출(IE) 작업의 성능을 향상시킵니다【103】.
- Chatlaw는 LLM이 검색된 내용을 스스로 평가하도록 하여 관련성이 낮은 문서를 필터링합니다【104】.
B. LLM 미세 조정 (LLM Fine-tuning)
특정 시나리오와 데이터 특성에 따라 LLM을 미세 조정하면 더 나은 결과를 얻을 수 있습니다. 이는 온프레미스 LLM을 사용하는 주요 이점 중 하나입니다.
- 도메인 지식 추가: 특정 도메인 데이터가 부족한 경우, 추가적인 지식을 학습시킬 수 있습니다.
- 입출력 조정: 특정 데이터 형식에 적응하고 지시된 스타일로 응답을 생성하도록 모델을 조정할 수 있습니다【37】.
- SANTA 프레임워크: 대조 학습을 통해 쿼리와 문서 임베딩을 정제하는 등 구조적, 의미적 뉘앙스를 효과적으로 캡슐화합니다【76】.
강화 학습을 통한 정렬 (Alignment through Reinforcement Learning)
- 사용자 선호도: 최종 생성된 답변에 수동 주석을 추가하고, 강화 학습을 통해 피드백을 제공할 수 있습니다.
- 모델 선호도: GPT-4와 같은 강력한 모델을 증류하여 더 작은 모델에 적용하거나, 검색기와 생성기의 선호도를 정렬하기 위해 KL 발산을 활용하는 RA-DIT 접근법을 사용할 수 있습니다【27】.
'논문' 카테고리의 다른 글
- RAG 연구를 초보적 RAG, 고급 RAG, 모듈형 RAG로 구분하여 진화 과정을 체계적이고 철저히 검토