🔍 RAG란 무엇일까?
최근 대규모 언어 모델(LLM, Large Language Model)을 활용한 서비스가 늘어나고 있다. 하지만 LLM을 단독으로 사용할 경우, 모델 학습 시점 이후 새롭게 발생한 정보를 반영하기 어렵고, 특정 전문 지식을 커버하기가 힘들며, 때때로 근거 없는 잘못된 정보를 생성하는 “환각(Hallucination)” 문제가 발생한다.
이러한 문제를 해결하고자 등장한 접근 방식이 바로 RAG(Retrieval-Augmented Generation)이다.
RAG는 질의 응답 시점에 외부 데이터베이스나 문서에서 필요한 정보를 검색(Retrieval)하고, 이를 모델에 전달해 답변(Generation)을 생성하는 프레임워크다. 즉, 모델이 단순히 “내재된 지식”에만 의존하지 않고, 최신 정보나 전문 지식을 유연하게 참조할 수 있게 해준다.
RAG의 기본 흐름은 다음과 같다.
1. 쿼리 입력: 사용자의 질문을 받는다.
2. 정보 검색(Retrieval): 벡터 검색 엔진 등을 통해 질문과 관련성이 높은 문서나 패시지를 조회한다.
3. 결과 융합(Augmentation): 검색한 문서를 모델 프롬프트에 추가한다.
4. 응답 생성(Generation): LLM이 해당 문서를 참조하면서 정확하고 신뢰성 높은 답변을 생성한다.
⚖️ 기존 방식의 한계
RAG 이전의 전통적인 접근 방식은 주로 다음과 같았다.
• 모델 단독 사용: 학습된 파라미터에 의존한 답변 제공
• 파인튜닝(Fine-tuning): 새로운 정보나 특정 도메인 지식을 반영하기 위해 모델 재학습 필요
• 장문 프롬프트(Prepending Context): 긴 문서나 정보들을 프롬프트에 직접 포함하려 하지만 컨텍스트 윈도우 한계로 충분한 정보 제공이 어려움
이러한 접근들의 한계는 명확하다.
1. 시점 한계: 학습 이후 발생한 최신 정보를 제대로 반영하기 어렵다.
2. 사실 검증 어려움: 근거 없이 잘못된 정보를 생성하는 환각 문제 발생.
3. 전문 지식 반영의 번거로움: 특정 도메인 지식을 모델에 반영하려면 별도의 파인튜닝 필요.
4. 컨텍스트 윈도우 제한: 대량의 정보나 문서 참조에 제약 존재.
RAG는 이러한 문제를 해결함으로써, 모델 성능은 물론 사용자가 느끼는 신뢰성과 만족도를 높일 수 있다.
💡 RAG의 구체적 적용 방법
RAG를 실제로 적용하기 위해서는 검색과 모델 생성 단계의 결합이 필수적이다.
1. 문서 전처리 및 임베딩(Embedding) 생성:
• 서비스에서 참조할 문서를 문장 또는 패시지 단위로 나누고, 각 패시지에 대해 임베딩 모델(예: Sentence Transformers, OpenAI Embeddings)을 활용해 벡터를 생성한다.
• 이러한 벡터를 Faiss, Pinecone, Weaviate 등 벡터 데이터베이스에 저장한다.
2. 질의 시 벡터 검색:
• 사용자의 쿼리를 동일한 임베딩 모델로 벡터화한 뒤, 벡터 데이터베이스에 쿼리하여 의미적으로 유사한 문서 상위 N개를 가져온다.
3. 결과 융합(Augmentation):
• 검색된 문서 패시지를 쿼리와 함께 LLM 프롬프트에 포함한다.
4. 응답 생성(Generation):
• LLM은 제공된 문서 내용을 참조하며 답변을 생성한다. 이 과정에서 최신 정보나 전문가 수준의 도메인 지식을 유연하게 반영할 수 있다.
🎉
여기까지 RAG의 기본 개념과 기존 접근 방식의 한계를 살펴보았다. 다음 포스트에서는 실제 사례, 구현 예제, 성능 비교 및 평가 방법, 미래 전망 등을 살펴보며 내용을 더욱 풍성하게 만들어볼 예정이다.
'기술' 카테고리의 다른 글
RAG 활용 (0) | 2024.12.18 |
---|---|
MOSFET이란 (0) | 2024.11.21 |
트랜지스터 Transistor (0) | 2024.11.20 |
CUDA 기본 (0) | 2024.11.12 |
반도체 패키징 - CoWoS (0) | 2024.11.11 |