Advanced RAG
이전의 Naive RAG가 가지고 있었던 한계를 극복하기 위한 다양한 고급 방법론
Indexing
- 계층적 구조의 Indexing
- Semantic Chunking
Pre-Retrieval
- Query Rewrite, Query Expansion
- Query Transformation
Retrieval
- Hybrid Search(키워드 검색 + 시맨틱 검색)
Post-Retrieval
- Reranker, Reorder
Indexing
Metadata
- metadata에 연도, 출처(파일명, URL) 등을 추가
- Self-Query Retriever: Query 문으로 데이터 필터링에 활용
Summary, Entity 등 추가 정보 생성 후 Indexing
- 추상적인 질문에는 Summary/Entity 활용
- 구체적인 질문에는 작은 Chunk 활용
*Share ID : 요약과 원본 데이터 청크 간의 연결을 위한 고유 식별자
Hierarchical Structure
- 계층적 구조로 검색 범위를 좁히고, 대신 검색 Depth를 늘림
- Multi-hop 질문의 경우 노드 간의 관계를 활용하여 정확도 향상
- Multi-hop Question
- 답변을 얻기 위해 여러 단계의 추론이나 정보 조합이 필요한 복잡한 질문 유형
Hybrid Indexing
- Relational Database + Vector Database
- RDB
- 구조화된 데이터를 저장
- 사용자의 질문 기반 필터링/대화 내용 저장
- Vector DB
- 문서 내용 기반 유사도 검색에 활용
- RDB
Chunking Strategy
Semantic Chunking
- 의미상 유사한 단락을 기준으로 Chunking
Small-to-Big
- 자식 - 부모 Document 구조
- 작은 Chunk 단위를 임베딩 한 뒤, Retrieval 단계에서 더 큰 Chunk 반환
- ParentDocument Retriever
Sentence Window
- 단일 문장 - 단일 문장 + 주변 문장을 저장
- 고정된 수(예를 들어 2~3 문장)의 주변 문장을 저장
- 이후 단일 문장이 Top-N 결과에 포함되면 주변 문장이 포함된 더 큰 Chunk를 반환
Pre-Retrieval
Query Rewrite
- Query의 의미를 보존하면서 모호성을 제거
- 원래 Query의 의미를 유지하면서 더 명확하고 정보가 풍부한 형태로 Query를 재작성
Query Expansion
- 원래 Query에 관련 용어나 동의어를 추가하여 검색 범위를 확장하는 기법
Query Transformation
- 쿼리의 구조나 형식을 변경
- 예시)
- 일반 질문을 SQL 쿼리문으로 변환
- 일반 질문을 검색에 용이한 구문으로 변환
Query: "서울 맛집 추천"
-----------------------------------------------
Query Rewrite
"서울에서 인기 있는 맛집 추천"
-----------------------------------------------
Query Expansion
"서울 맛집 추천 레스토랑 음식점 맛있는 곳 유명한"
-----------------------------------------------
Query Transformation
SELECT 식당이름, 주소, 평점
FROM 식당
WHERE 지역 = '서울' AND 평점 >= 4.5
ORDER BY 평점 DESC
LIMIT 10;
Retrieval
Hybrid Search
- 키워드 검색 + 시맨틱 검색
- 키워드 검색: 정확한 단어 매칭을 기반
- 시맨틱 검색: 의미와 문맥을 이해하여 관련 정보 검색
Hypothetical Question
- 문서의 내용을 질문 형태로 변환함으로써, 사용자 쿼리와의 의미적 매칭을 향상
- 각 document에 맞는 가상의 질문을 생성
- 생성된 가상의 질문을 임베딩
- 사용자 쿼리와 가상 질문 임베딩 간의 유사도 계산
HyDE(Hypothetical Document Embeddings)
- 생성된 답변이 직접 쿼리보다 임베딩 공간에 더 가깝다는 가정에 기초
- 사용자 쿼리에 대한 가상의 답변 생성
- 생성된 답변을 임베딩
- 답변과 답변 간의 임베딩 유사성을 강조
Post-Retrieval
Reranker
- 각 Query - Document 쌍의 관련성을 평가
- Retriever가 대규모 문서 집합에서 빠르게 후보를 추출하는 데 초점을 맞추는 반면, Reranker는 이미 추출된 소수의 후보에 대해 더 정교한 분석을 수행
- Retriever와 Reranker를 결합한 Two Stage Retrieval pipeline이 주를 이룸
Context Reorder
- Lost in the Middle
- LLM은 입력 텍스트의 초반부와 후반부에 있는 정보를 더 잘 활용함
- 덜 관련된 문서는 목록의 중간에 배치하고, 관련성이 높은 문서는 시작과 끝에 배치
Compressor
- 관련성이 낮은 정보를 제거하여 LLM에 입력되는 컨텍스트의 품질을 향상
- Context Precision: 검색된 정보 중에서 실제로 관련 있는 정보의 비율
- 할루시네이션 발생 가능성을 줄이는 데 도움
- 토큰 비용 효율화(답변의 품질을 유지하면서 입력 크기를 줄임)
- 처리속도 향상
주요 방법론
- LLMChainExtractor: 쿼리와 관련된 컨텍스트만 추출
- Lexical-based Compression
- LLMLingua
- 문맥(Context)에서 중요한 토큰을 선별한 뒤, 쿼리 기반 토큰 Classifier가 중요 토큰 선별
- Embedding-based COmpression
- 임베딩을 사용하여 관련성 높은 정보 필터
- COCOM(COntext COmpression Model)
- Compressor Model을 파인튜닝하여 압축에 활용
Advanced RAG의 한계
고급 RAG의 실용성이 개선되었음에도 불구
기능과 실제 애플리케이션 요구 사항 사이에는 여전히 격차가 존재
프로덕션(Production)의 어려움
- RAG 기술이 발전함에 따라 사용자의 기대치가 높아짐
- 요구 사항이 계속 진화, 애플리케이션이 더욱 복잡
- 다양한 형태의 데이터의 통합
- 파이프라인의 제어 및 유지보수의 어려움
단방향 구조의 RAG (Naive RAG, Advanced RAG)
Document Loader(데이터로드) -> Answer(답변)
- 모든 단계를 한 번에 다 잘해야 함
- 이전 단계로 되돌아가기 어려움
- 이전 과정의 결과물을 수정하기 어려움