검색 증강 생성
검색 증강 생성(Retrieval-Augmented Generation)
- LLM이 답변을 생성하기 전에 외부 지식(문서, DB, 검색 결과)을 먼저 검색(retrieval)하고, 그 결과를 프롬프트에 주입하여 생성(generation)하는 방식
- RAG가 필요한 이유:
- 환각(hallucination) 감소: 근거 문서를 기반으로 응답 생성
- 최신 정보 활용: 학습 시점 이후의 데이터 반영 가능
- 모델 재학습은 비용이 많이 들고, 대량의 데이터가 필요하지만 RAG는 근거 자료만 추가해주면 끝
- 검증 가능한 답변 구조
- 한계:
- 검색 품질이 전체 성능을 좌우
- 문서 전처리·임베딩 비용
- 긴 컨텍스트 관리 필요
RAG vs. 미세조정
| 특징 | RAG | 미세조정(Fine-Tuning) |
|---|---|---|
| 지식 업데이트 | 검색 지식 베이스를 직접 업데이트하여 현재 정보를 유지할 수 있으며, 빈번한 재학습이 필요 없어 동적 데이터 환경에 적합함 | 정적 데이터를 저장하며, 지식과 데이터 업데이트를 위해서는 재학습이 필요함 |
| 외부 지식 | 외부 리소스 활용에 능숙하며, 특히 문서나 기타 구조화/비구조화 데이터베이스 접근에 적합함 | 대규모 언어 모델의 사전학습된 지식과 정렬할 수 있으나, 자주 변경되는 데이터 소스에는 실용성이 떨어질 수 있음 |
| 데이터 처리 | 최소한의 데이터 처리와 핸들링만 필요함 | 고품질 데이터셋 생성에 의존하며, 제한된 데이터셋으로는 성능 향상이 제한될 수 있음 |
| 모델 커스터마이징 | 정보 검색과 외부 지식 통합에 중점을 두지만, 모델의 행동이나 작성 스타일을 완전히 커스터마이징하지 못할 수 있음 | LLM의 행동, 작성 스타일, 또는 특정 도메인 지식을 특정 톤이나 용어에 맞게 조정 가능 |
| 해석 가능성 | 응답을 특정 데이터 소스로 추적할 수 있어 높은 해석 가능성과 추적성을 제공 | 블랙박스와 유사하여 모델이 특정 방식으로 반응하는 이유가 명확하지 않을 수 있어 상대적으로 낮은 해석 가능성을 보임 |
| 컴퓨팅 리소스 | 데이터베이스 관련 검색 전략과 기술을 지원하기 위한 컴퓨팅 리소스가 필요함. 또한 외부 데이터 소스 통합과 업데이트 유지가 필요함 | 고품질 학습 데이터셋 준비와 미세조정 목표 정의, 그리고 관련 컴퓨팅 리소스 제공이 필요함 |
| 지연 시간 | 데이터 검색이 포함되어 더 높은 지연 시간이 발생할 수 있음 | 미세조정 후 LLM은 검색 없이 응답 가능하여 더 낮은 지연 시간을 보임 |
| 환각 감소 | 답변이 검색된 증거에 기반하므로 본질적으로 환각이 덜 발생함 | 특정 도메인 데이터로 모델을 학습시켜 환각을 줄일 수 있으나, 익숙하지 않은 입력에 대해서는 여전히 환각이 발생할 수 있음 |
| 윤리 및 개인정보 문제 | 외부 데이터베이스의 텍스트 저장 및 검색으로 인한 윤리적, 개인정보 문제가 발생할 수 있음 | 학습 데이터의 민감한 콘텐츠로 인해 윤리적, 개인정보 문제가 발생할 수 있음 |
청킹 Chunking
- 텍스트를 작은 조각으로 잘라서 저장하는 것
- LLM에 필요한 정보만을 전달하기 위한 목적
- 정해진 길이(토큰 수 백 개)로 텍스트를 자름(청크들끼리 조금씩 겹치게)
- BM25와 임베딩을 이용해서 검색
Contextual Retrieval
- 개별 청크에 충분한 앞뒤 맥락이 없는 경우 문제
- 예: "회사의 매출이 이전 분기 대비 3% 증가했습니다" (어느 분기인지 알 수 없음)
- Contextual Retrieval: LLM을 이용하여 청크마다 앞뒤 맥락을 설명으로 추가
Lost in the Middle 현상
- 프롬프트가 길어지면 중간에 있는 내용은 반영이 잘 안됨
- 중요한 내용은 맨 앞이나 끝에 배치
- 검색된 문서를 많이 제시해도 성능 저하
Long-Context Models
- Google Gemini, Anthropic Claude 는 100만 토큰 이상의 입력을 처리할 수 있음
- Long-Context Models의 장점:
- 여러 가지 출처의 정보들 사이의 복잡한 관계를 다룰 수 있음
- 시스템이 간소화(청킹, 임베딩, 검색 방법 등 불필요)
- 캐시를 이용한 계산을 절약하는 것도 가능
- RAG의 장점:
- 어떤 정보를 바탕으로 출력했는지 알기 쉽기 때문에, 디버깅이 쉬움
- 최신 정보를 모델에 제공하기 쉬움
- Lost-in-the-Middle 현상을 피할 수 있음
- 거의 무한한 데이터를 참고할 수 있음
- 계산량이 적고 효율적
HyDE Hypothetical Document Embeddings
- 질문에 대해 LM을 이용해서 가상의 답변을 먼저 생성
- 가상의 답변의 임베딩과 유사한 문서를 찾음
- 다른 방법과 달리 질문-답변 쌍의 임베딩 학습 과정이 따로 필요 없음
검색 방법의 성능 차이
- BEIR로 평가할 경우, HyDE가 대체로 우수한 성능
- → 별도의 임베딩 학습 방법이 필요X
- 일부 데이터에서는 다른 방법이 더 좋은 성능을 보임
- BM25: 키워드 검색에서 가장 많이 사용하는 방법
- 소수의 특정 문서에만 나오는 키워드에 많은 가중치
RAG 패러다임: Naïve RAG
- 사용자 입력을 사용하여 관련 문서를 검색 → 프롬프트와 결합하여 모델에 전달 → 최종 응답을 생성
- 문제점:
- 낮은 정밀도(관련 없는 문서가 검색됨)
- 낮은 재현도(관련 있는 문서가 검색 결과에서 누락됨)
- 더이상 유효하지 않은 오래된 정보가 검색될 수 있음
RAG 패러다임: Advanced RAG
- 검색 전후에 최적화
- 검색 전:
- Query Routing: 질의에 맞는 적절한 처리 경로를 설정
- Query Rewriting: 검색하기 좋게 질의를 다시 작성
- Query Expansion: 질의를 확장
- 검색 후:
- rerank: 검색 결과의 순위 재조정
- summary: 요약
- fusion: 여러 개의 검색 결과를 하나로 합침
rerank
- dense retriever(벡터 검색)의 장점:
- 동의어 등을 비롯한 단어/문장의 의미 반영
- sparse retriever(BM25 등)의 장점:
- 별도의 모델 및 훈련 과정이 필요 없음
- 검색 속도가 빠름
- 학습시키지 않은 분야(out-of-domain)에서 성능이 높음
- Rerank: 1차 검색 후 별도의 reranker 모델로 순위(rank)를 재(re)평가
- Re2G: 검색 증강 생성(RAG)에 rerank 단계를 추가, N의 검색 결과 중 상위 K개만 추려서 프롬프팅
- Reranker 모델: 일반적으로 질문과 후보 텍스트를 BERT에 함께 넣고 0/1로 예측
RAG 패러다임: Modular RAG
- Naïve & Advanced RAG를 포함하여 다양한 모듈로 구성된 유연한 RAG
- 모듈:
- 검색 모듈: RAG에 특화된 검색
- 메모리 모듈: LLM의 맥락을 확장
- 예측 모듈: LLM을 통해 직접 컨텍스트를 생성
- 태스크 어댑터 모듈: RAG를 다양한 다운스트림 작업에 맞춰 줌
- 패턴:
- Naïve & Advanced RAG
- DSP: LM이 수행해야할 작업의 예시를 검색하여 제시(DEMONSTRATE), 검색(SEARCH), 생성(PREDICT)
- ITER-RETGEN: 검색 → 생성 → 검색 → 생성 … 반복