Advanced_RAG

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
      • 문서 내용 기반 유사도 검색에 활용

 

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

  • 문서의 내용을 질문 형태로 변환함으로써, 사용자 쿼리와의 의미적 매칭을 향상
    1. 각 document에 맞는 가상의 질문을 생성
    2. 생성된 가상의 질문을 임베딩
    3. 사용자 쿼리와 가상 질문 임베딩 간의 유사도 계산

HyDE(Hypothetical Document Embeddings)

  • 생성된 답변이 직접 쿼리보다 임베딩 공간에 더 가깝다는 가정에 기초
    1. 사용자 쿼리에 대한 가상의 답변 생성
    2. 생성된 답변을 임베딩
    3. 답변과 답변 간의 임베딩 유사성을 강조

 

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(답변)

  • 모든 단계를 한 번에 다 잘해야 함
  • 이전 단계로 되돌아가기 어려움
    • 이전 과정의 결과물을 수정하기 어려움

 

출처