RAG(Retrieval Augmented Generation)
- 기존 언어 모델에 외부 데이터를 결합하여 성능을 향상시키는 기술
- 정보 검색(Retrieval)과 텍스트 생성(Generation)을 결합한 시스템
RAG의 장점
- 기존 LLM 모델을 재사용하므로 별도의 학습 비용이 들지 않음
- 모델 재학습 대신 외부 지식베이스를 활용하여 저렴한 비용으로 운영 가능
- 새로운 정보 추가 시 데이터베이스만 업데이트하면 되어 유지보수가 용이
속도 측면
- RAG는 검색 과정이 추가되어 순수 LLM보다 응답이 약간 느릴 수 있지만, 모델을 처음부터 학습시키는 것과 비교하면 효율적인 방법
RAG와 Fine-tuning의 차이
- RAG는 기존 LLM을 수정하지 않고 외부 데이터베이스를 연결하여 실시간으로 정보를 검색하고 활용
- Fine-tuning은 사전 학습된 LLM을 특정 작업이나 도메인에 맞게 추가 학습하는 과정. 모델의 가중치와 매개변수를 직접 조정하여 특정 도메인에 최적화
RAG 데이터 처리 파이프라인
Document Loader
- 다양한 형식(PDF, TXT, HTML 등)의 문서를 로드하는 컴포넌트
- 메타데이터 추출 및 문서 구조 보존
- LangChain에서 제공하는 표준화된 인터페이스
Text Splitter
- 문서를 적절한 크기의 청크로 분할
- 구조 기반 분할: 문단, 문장 단위로 분할
- 의미 기반 분할: 의미적 연관성을 고려한 분할
- 너무 크게 분할하면 관련 없는 정보가 포함되고, 반대로 너무 작으면 문맥에서 손실이 발생함(일반적으로 500-1000자 권장)
- 오버랩 설정으로 문맥 유지 가능
Retriever
- 분할된 문서를 벡터화하여 저장
- 벡터 스토어와 연동하여 효율적인 검색 수행
토큰(Token)
- 토큰은 텍스트를 LLM이 처리할 수 있는 가장 기본적인 의미 단위로 나누는 것
- 토큰화 과정은 LLM이 텍스트를 이해하고 처리하는 기본 단위가 되며, RAG 시스템에서도 중요한 역할
- 예: "ChatGPT is great!" → ["Chat", "G", "PT", "is", "great", "!"]
벡터(Vector)
- 토큰화 된 텍스트를 수백~수천 차원의 수치 배열로 변환하는 과정(임베딩)
- 유사한 의미를 가진 텍스트는 벡터 공간에서 가까이 위치
코사인 유사도로 텍스트 간 유사성 측정
RAG에서의 벡터 처리
- 질문과 문서를 벡터로 변환
- 유사도 비교를 통한 관련 문서 검색
- 청크 단위로 분할된 문서를 벡터화하여 저장
벡터 스토어
- 벡터화된 데이터의 저장과 검색을 위한 특수 데이터베이스
- FAISS(대규모 데이터), Chroma(로컬 개발), Pinecone(클라우드)
RetrievalQA
- LangChain에서 제공하는 RAG 구현을 위한 체인(Chain) 클래스
- RAG 시스템을 쉽게 구현할 수 있게 해주는 고수준 인터페이스
주요 기능
- 질문(Query)을 받아서 관련 문서를 검색
- 검색된 문서와 질문을 LLM에 전달
- LLM이 문서를 참고하여 답변 생성
체인 타입
- stuff: 모든 문서를 한 번에 처리
- map_reduce: 각 문서별로 처리 후 결합
- refine: 순차적으로 답변을 개선
- map_rerank: 각 문서별 답변 생성 후 순위화