AI

[AI] RAG 파이프라인 개념 - BM25, 백터, RRF 등

한비Skyla 2026. 6. 16. 14:19

1. 검색의 두 가지 방식

키워드 검색 (BM25)

"정확한 단어"를 찾는 방식

  • "Java Spring 오류" 검색 → Java, Spring, 오류 단어가 포함된 문서를 찾음
  • "스프링 에러" 라고 쓰면 못 찾을 수 있음

벡터 검색 (Semantic Search)

"의미"를 찾는 방식

  • 문서를 숫자 벡터로 변환해서 저장
  • "스프링 에러", "Spring 오류", "Java 예외" 다 비슷한 의미로 인식
  • 정확한 단어 매칭은 약함

2. Hybrid Search

두 방식을 같이 사용

키워드 검색 결과 → [문서A 1위, 문서B 2위, 문서C 5위]
벡터 검색 결과  → [문서C 1위, 문서A 3위, 문서D 2위]
                        ↓
              이 두 결과를 어떻게 합칠까?

3. RRF (Reciprocal Rank Fusion)

두 결과를 합치는 공식

각 문서의 순위를 점수로 변환해서 합산

점수 = 1/(순위 + 60)

문서A: 키워드 1위 → 1/61 = 0.0164
       벡터   3위 → 1/63 = 0.0159
       합계 = 0.0323  ← 최종 1위

문서C: 키워드 5위 → 1/65 = 0.0154
       벡터   1위 → 1/61 = 0.0164
       합계 = 0.0318  ← 최종 2위

4. Reranker

Hybrid Search가 뽑아온 후보들을 다시 한번 정밀 평가

Hybrid Search 결과 (상위 20개)
        ↓
  Reranker 모델이 질문과 각 문서를 쌍으로 비교
        ↓
진짜 관련성 높은 순서로 재정렬 (상위 5개 선택)

벡터 검색은 빠르지만 부정확할 수 있음.

Reranker는 느리지만 정확도가 높음.

>> "빠른 검색으로 후보 추리기 → 정확한 reranker로 최종 정렬" 패텬 사용


5. 질의 재작성 (Query Rewriting)

사용자 질문을 검색에 더 유리하게 변환

사용자 입력: "저번에 말한 그 오류 어떻게 고쳐?"
        ↓
LLM이 재작성: "Java Spring NullPointerException 해결 방법"
        ↓
이걸로 검색하면 훨씬 잘 찾아짐

 

 

또는 질문 하나를 여러 개로 분해

"Pub/Sub 메시지 중복이랑 ack deadline 설정법 알려줘"
        ↓
질문1: "GCP Pub/Sub 메시지 중복 처리"
질문2: "Pub/Sub ack deadline 설정 방법"

 

각각 검색 후 합치면 커버리지가 넓어짐


전체 파이프라인 요약

사용자 질문
    ↓
[질의 재작성] → 검색에 최적화된 쿼리로 변환
    ↓
[Hybrid Search] → 키워드 + 벡터 검색 동시 실행
    ↓
[RRF] → 두 결과를 하나로 합산 정렬
    ↓
[Reranker] → 상위 후보 정밀 재정렬
    ↓
최종 문서 → LLM에 전달 → 답변 생성

 

각 단계가 이전 단계의 약점을 보완하는 구조

'AI' 카테고리의 다른 글

[AI] 벡터 임베딩  (0) 2025.03.17