-
[AI] RAG(Retrieval Augmented Generation, 검색 증강 생성)란?AI 2024. 3. 12. 09:44반응형
RAG(Retrieval Augmented Generation, 검색 증강 생성) 등장배경
RAG는 LLM의 한계(1. 최근 지식의 부재, 2. Hallucination이라는 2가지 문제가 존재)를 보완해주는 개념이다.
LLM(Large Language Model)은 모델별로 특정시기까지 학습한 버전을 출시한다.
OpenAI의 GPT-4를 살펴보면, gpt-4-turbo의 경우 2023년 12월까지의 데이터를 학습했음을 확인할 수 있다.
그렇다면 현재와 2023년 12월 사이의 공백 내 발생한 이슈 등 데이터에 대한 학습은 어떻게 될까?
해당 기간 내 정보들이 업데이트 되지 않은 LLM은 관련 내용에 대한 그럴싸한 답변(Hallucination, 환각)을 내놓을 것이다.
이를 해결하기 위해 실시간으로 모델이 학습하고 이를 서비스할 수 있다면 좋겠지만, 그러기엔 서비스를 배포하는 시점을 잡기도 힘들 뿐만 아니라 비용적인 측면에서도 힘들 것이다.
그래서 이러한 한계를 보완하기 위해 RAG라는 개념이 등장했다.
RAG란?
RAG는 Retrieval Augmented Generation의 약자로, 번역하면 검색 증강 생성이 된다.
외부데이터(LLM이 학습한 데이터 외의 데이터)에서 검색하여, 사용자의 질문을 보강(증강)하고 더 좋은 답변을 생성한다.
이를 통해서 Hallucination을 줄일 수 있다.
즉, RAG를 통해 확실한 출처를 갖고 답변을 할 수 있게 된다.
RAG의 구성요소
RAG 구성요소는 크게 문서/데이터 가공, Embedding 모델, Vector DB, prompt, LLM로 볼 수 있다.
(외부)데이터 저장소는 Embedding 모델을 통해 문서나 데이터를 chunking 작업(load, split)과 embedding 작업하여 백터DB에 저장함으로써 구성할 수 있다.
사용자가 질문을 하면 이 질문에 대해서 Embedding작업을 진행하고 Embedding 작업이 완료되면 retrieve(검색)을 통해 원하는 내용을 문서에서 발췌해온다.
이 발췌한 내용을 사용자의 질문과 함께(증강) LLM에 전달하여 답변을 받아온다(생성).
cf. chunk: 문서/데이터를 쪼갰을 때 "하나로 묶인 정보"를 뜻한다.
고급 RAG
RAG는 위 이미지의 Enhanced Context에 따라 성능이 좌우된다.
그래서 최근에는 앞서 말한 Naive한 RAG보다 Retrieval을 더 정밀하게 하여 RAG 성능을 높이는 Advanced RAG(고급 RAG)에 대한 연구도 활발하다.
고급 RAG에 대한 내용은 아래 출처의 글에서 더 자세히 확인할 수 있다.
출처: https://www.gnict.org/blog/130/글/대규모-언어-모델을-위한-검색-증강-생성rag-기술-현황/
Advanced RAG에서는 Pre-Retrieval과 Post-Retrieval의 절차들을 더 설정하고 RAG 파이프라인을 최적화하는 데 중점을 둔다.
검색 전 절차(Pre-Retrieval Process)
데이터 인덱싱 최적화 및 Embedding을 통해 검색 결과의 관련성 및 정확성을 높인다.
1. 데이터 인덱싱 최적화(Optimizing Data Indexing)
데이터 인덱싱 최적화를 위해서 주로 5가지 전략들이 사용된다.
- 데이터 세분화 강화(Enhancing Data Granularity)
- 인덱스 구조 최적화(Optimizing Index Structures)
- 메타데이터 정보 추가(Adding Metadata Infomation)
- 정렬 최적화(Alignment Optimization)
- 혼합 검색(Mixed Retrieval)
2. Embedding
검색된 내용과 질문 간 관련성을 강화하고 최종 생성된 출력에 대한 영향을 최적화하는 것이 중요하다.
이를 위해 크게 2가지 전략이 있다.
- 정밀 조정 임베딩(Fine-tuning Embedding)
- 동적 임베딩(Dynamic Embedding)
검색 후 절차(Post-Retrieval Process)
이 절차는 고급 RAG에서 매우 중요한 단계이다.
검색 결과로 나온 문서들을 한 번에 LLM에 제공하는 것은 비효율적이고 LLM의 context window 크기를 초과할 수 있기 때문에 검색된 문서들에 대해 후처리가 필요하다.
이를 위해 크게 2가지 방법이 있다.
cf. context window(컨텍스트 윈도우, 문맥 창 등): 각 단어의 문맥을 판단하는 데 몇 개의 단어를 사용할 것인지를 나타냄
1. Rerank
검색 결과에 대해 가장 관련성 높은 정보를 prompt 앞 부분으로 재배치한다.
Langchain, LlamaIndex, HayStack 등 같은 프레임워크에 이미 구현되어 있는 개념이다.
2. 프롬프트 압축(Prompt Compression)
관련 연구들은 검색된 문서에서 발생하는 noise(잡음)이 RAG 성능에 부정적인 영향을 끼친다고 한다.
따라서 검색된 문서들 중 중요하지 않은 맥락을 압축하고 중요한 문단을 강조하여 전체 context 길이를 줄이는 데 중점을 둔다.
RAG 파이프라인 최적화(RAG Pipeline Optimization)
RAG 파이프라인 최적화 방법론들에는 5가지가 있다.
1. 하이브리드 검색(Hybrid Search)
키워드 기반 검색, 의미론적(semantic) 검색, 벡터 검색과 같은 다양한 기술을 혼합하여 검색하는 방법이다.
2. 재귀적 검색 및 쿼리 엔진(Recursive Retrieval and Query Engine)
초기 검색 단계에서 더 작은 문서 블록을 획득하여 주요 의미를 포착하고, 후반 단계에서 더 많은 맥락적 정보를 가진 더 큰 블록을 언어 모델에 제공하는 방법이다.
이는 효율성과 맥락적으로 풍부한 응답 사이의 균형을 이루는 데 도움이 된다.
3. 역추적 프롬프트(StepBack-prompt)
LLM이 특정 사례에서 벗어나 일반적인 개념이나 원리에 대해 추론하도록 장려하기 위한 방법이다.
4. 서브쿼리(Subqueries)
다양한 질의 전략을 다양한 시나리오에 적용할 수 있다.
LlamaIndex와 같은 프레임워크에서 제공하는 쿼리 엔진을 사용할 수 있다.
예를 들어 트리쿼리, 벡터 쿼리나 가장 기본적인 순차적 청크 쿼리 등에서 사용할 수 있어, 다양한 질의 전략을 통해 효율적인 검색을 도모할 수 있다.
5. HyDE(Hypothetical Document Embeddings, 가상 문서 임베딩)
LLM이 생성한 문장이 사용자의 질의보다 임베딩 공간에서 더 가까울 수 있다는 가정에 기반한 방법론이다.
LLM을 사용하여 가상의 문서(=LLM 답변)를 생성하고 이를 임베딩한다.
이 임베딩을 사용하여 실제 문서를 검색하는 방법이다.
이 방법은 질의 기반의 임베딩 유사성을 추구하는 것과 다르게 답변 간 임베딩 유사성에 중점을 둔다.
728x90