728x90
최신 정보 활용을 통한 정확한 응답 생성
오늘은 RAG (검색 증강 생성) 알아보자.
오늘의 배움 |
|
1. RAG
- 정의: RAG구조는 벡터 데이터베이스(Vector DB)와 언어 모델(LLM)을 결합하여, 사용자가 입력한 질문을 바탕으로 검색된 데이터를 활용해 문맥에 맞는 자연어 응답을 생성하는 기술이다.
- 한 줄 요약: RAG는 최신 정보를 활용해 문맥에 맞는 정확한 답을 제공하는 시스템이다.
- 작동 원리
- 벡터화: 텍스트 데이터를 임베딩 벡터로 변환해 Vector DB에 저장
- 유사도 검색: 사용자의 질문을 벡터로 변환해 관련 데이터를 검색
- 응답 생성: 검색된 데이터를 컨텍스트로 사용해 LLM이 자연어 응답 생성
- 특징:
- 최신 정보 활용
- 정확도 높은 응답 생성
- 특정 도메인에 맞춘 응답 가능
- 필요성:
- 기존의 언어 모델은 학습 후 업데이트가 불가능하지만, RAG는 검색 기능을 통해 최신 데이터를 사용할 수 있어 정보의 최신성을 유지할 수 있다.
- 장점/단점:
- 장점: 최신 정보 반영, 정확한 답변 생성, 환각 현상 감소
- 단점: 데이터 품질이 중요, 검색 성능 최적화 필요
- RAG Workflow:
- 사용자 질문 입력
- Embedding 모델을 사용해 질문을 벡터화
- Vector DB에서 유사한 문서 검색
- 검색된 문서를 LLM이 응답 생성에 활용
- 사용자에게 응답 반환
2. 핵심 개념 정리
2-1. 벡터화 (Embedding)
- 정의: 텍스트를 고정된 길이의 벡터로 변환하는 과정
- 작동 원리: 텍스트를 수치 벡터로 변환하여 유사도를 계산하고, 이를 바탕으로 관련 데이터를 검색
- 특징: 유사도 기반 검색, 벡터 형태로 저장된 데이터 활용
- 장점/단점:
- 장점: 텍스트의 의미를 수치적으로 표현, 빠르고 효율적인 검색
- 단점: 벡터화된 데이터가 부족하면 정확도가 떨어질 수 있음
- 속도 문제 해결
- 캐싱(Cache) 활용: 동일한 질문이 반복될 경우, LLM 호출 없이 기존 응답을 반환하면 속도를 향상시킬 수 있다.
- 예제
from functools import lru_cache @lru_cache(maxsize=100) def retrieve_cached_answer(query): return qa_chain.run(query)
- 사전 연산(Pre-processing)
- 중요한 문서를 미리 벡터화하여 빠르게 검색할 수 있도록 준비한다.
- RAG 실행 전에 자주 검색되는 질문과 답변을 DB에 저장하여 속도를 개선한다.
- 중요한 문서를 미리 벡터화하여 빠르게 검색할 수 있도록 준비한다.
- 캐싱(Cache) 활용: 동일한 질문이 반복될 경우, LLM 호출 없이 기존 응답을 반환하면 속도를 향상시킬 수 있다.
- 데이터 품질 문제 해결
- 데이터 정제(Data Cleaning)
- OCR 문서, 웹스크래핑한 데이터 등에서 불필요한 공백, 특수 문자 등을 정리한다.
- 정제된 데이터만 벡터화하여 검색 정확도를 향상시킬 수 있다.
- 지식 그래프(Knowledge Graph) 연동
- RAG가 단순한 문서 검색을 넘어 개념 간의 관계를 파악하도록 지원한다.
- 예시: 의료 데이터 → 질병과 치료법 간의 연결 강화
- RAG가 단순한 문서 검색을 넘어 개념 간의 관계를 파악하도록 지원한다.
- 데이터 정제(Data Cleaning)
- 속도 문제 해결
- 예시: "RAG 모델을 위한 문서입니다..." 텍스트를 임베딩 벡터로 변환하여 저장
2-2. 검색 성능 최적화 기법
- 정의: 데이터 전처리, 임베딩 모델 선택, 검색 전략을 최적화하여 RAG의 성능을 향상시키는 기법
- 작동 원리: 문서를 일정 크기 단위로 분할하여 벡터화하거나, 더 적합한 임베딩 모델을 선택하여 검색 성능을 향상시킨다.
- 특징: Chunking 전략, 임베딩 모델 선택, 검색 전략
- Chunking 전략 (데이터 단위 분할)
- 문서를 일정 크기의 단위(Chunk)로 나누어 벡터화하면 검색 정확도가 향상된다.
- 일반적으로 문장 단위, 패러그래프 단위, 슬라이딩 윈도우 방식 등이 사용된다.
- 예제
- Chunking 전략 (데이터 단위 분할)
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
chunks = text_splitter.split_text("RAG 모델을 위한 문서입니다...")
- Embedding 모델 선택
- RAG에서 벡터화를 수행하는 모델 선택이 중요하다.
- 주요 임베딩 모델
모델 장점 단점 text-embedding-ada-002 OpenAI 제공, 높은 성능 API 비용 발생 Sentence-BERT 오픈소스, 빠른 검색 가능 LLM에 비해 정확도 낮을 수 있음 Cohere Embeddings 다국어 지원 설정이 다소 복잡
- Retrieval 전략 (검색 최적화)
- Top-K 검색: 관련성이 높은 상위 K개의 문서를 검색 한다. (일반적으로 K=3~5)
- Re-ranking 기법: 검색된 문서들을 다시 정렬하여 가장 관련성이 높은 문서만 활용한다.
- Hybrid Search: 벡터 검색 + 전통적인 키워드 검색 조합을 사용하는 전략이다.
- 장점/단점:
- 장점: 정확한 검색, 다양한 데이터 활용 가능
- 단점: 최적화 기법에 따라 구현이 복잡해질 수 있음
3. RAG 활용 사례
3-1. 기업 내 문서 검색 시스템
- ChatGPT Enterprise
- 기업 내 사내 문서(R&D 문서, 매뉴얼, 내부 보고서)를 검색하는 AI 챗봇 시스템
- 기존의 키워드 검색보다 문맥을 이해하는 응답 제공
- OpenAI의 API와 Pinecone을 활용하여 구축 가능
- 기업 내 사내 문서(R&D 문서, 매뉴얼, 내부 보고서)를 검색하는 AI 챗봇 시스템
3-2. 뉴스 및 연구 데이터 검색
- Google’s Gemini + RAG
- 최신 뉴스, 연구 논문을 검색하고 LLM을 활용하여 요약 및 분석 제공
- 예를 들어, 사용자가 "2024년 AI 관련 주요 연구"를 질문하면, 최신 논문을 검색 후 요약 응답
- 최신 뉴스, 연구 논문을 검색하고 LLM을 활용하여 요약 및 분석 제공
4. 비교분석표
구분 | 벡터화 (Embedding) | 검색 성능 최적화 | RAG 응답 생성 |
항목 | 텍스트 벡터화 | 데이터 전처리, 검색 전략 | 문맥에 맞는 자연어 응답 생성 |
특징 | 의미 있는 수치적 표현 | Chunking, 임베딩 모델, 검색 전략 | LLM과 데이터 결합 |
장점 | 빠르고 효율적인 검색 | 정확도 향상 | 정확도 높은 응답 생성 |
단점 | 벡터화 데이터 부족 시 정확도 하락 | 복잡한 최적화 필요 | 데이터 품질 의존성 |
작동 원리 | 텍스트 → 벡터 → 검색 | 데이터 분할, 모델 선택 | 검색된 데이터 → LLM 응답 생성 |
예시 코드 | embedding(text) | chunk_text(text) | generate_response(query, DB) |
활용사례 | 추천 시스템, 검색 엔진 | 기업 문서 검색 시스템 | 뉴스 및 연구 데이터 요약 |
728x90
'Develop > AI' 카테고리의 다른 글
파인튜닝을 알아보자. (0) | 2025.03.16 |
---|---|
프롬프트 엔지니어링 - Chain of Thought (CoT) 알아보자. (0) | 2025.03.16 |
LangChain을 알아보자. (0) | 2025.03.15 |
벡터 데이터베이스를 알아보자. (0) | 2025.03.15 |
ollama 사용 설정 (0) | 2025.03.15 |