"RAG 핵심 학습 (20/26) — Dynamic Sparse/Dense Weighting"

시리즈 전체 안내: 시리즈 목차

모든 질문에 Dense 0.5, Sparse 0.5를 쓰는 순간, Hybrid는 곧 정체된다.

12편에서는 Hybrid Search의 기본을, 19편에서는 어느 검색기로 보낼지의 routing을 다뤘다. 그다음 자연스러운 질문은 "얼마나 Dense를 믿고, 얼마나 Sparse를 믿을 것인가?"다. Dynamic Weighting은 질문 유형, score distribution, retriever 간 합의 정도를 보고 sparse/dense 가중치를 조정하는 접근이다.


0. Prerequisites

  • 12편 Hybrid Search
  • 17편 query classification
  • 19편 query routing

1. 학습 목표

  1. 고정 가중치 hybrid의 한계를 설명한다.
  2. 질문별 가중치 조정이 왜 필요한지 이해한다.
  3. 어떤 신호로 가중치를 바꿀 수 있는지 안다.
  4. 21편 adaptive top-K와의 연결을 이해한다.

2. 핵심 요약

고정 가중치 hybrid는 단순하고 안정적이지만 질문별 편차를 반영하지 못한다. 고유명사 질문은 sparse 비중을 높이고, 정의형 질문은 dense 비중을 높이는 식의 동적 가중치가 성능을 더 끌어올릴 수 있다. 신호는 query type, sparse와 dense의 점수 분포, 두 검색기의 합의 정도, metadata 필터의 강도 등이 될 수 있다. 다만 동적 제어가 많아질수록 디버깅과 평가가 어려워지므로 trace와 eval이 필수다.


3. 직관 — 같은 alpha가 모든 질문에 맞을 수 없는 이유

Hybrid 식:

$$\text{score}(d) = \alpha \cdot \tilde{s}_{dense}(d) + (1-\alpha)\cdot \tilde{s}_{sparse}(d)$$

여기서 \(\alpha\)를 항상 0.5로 두면, - "SKU-2024-04" 같은 exact match 질의에서는 dense 비중이 과하다. - "왜 이런 정책이 생겼는가?" 같은 설명형 질의에서는 sparse 비중이 과할 수 있다.

즉 좋은 \(\alpha\)는 질문에 따라 달라진다.


4. 정의 — 어떤 신호를 볼 수 있는가

신호 의미
Query Type 질문 유형 분류 결과
Score Gap 상위 문서와 그다음 문서 점수 차이
Agreement dense와 sparse가 같은 문서를 얼마나 함께 상위에 두는가
Entropy 점수 분포가 날카로운가 퍼져 있는가
Filter Strength metadata filter가 검색 공간을 얼마나 줄였는가

5. 메커니즘 — 가중치를 고르는 세 가지 방식

  1. 규칙 기반: query type에 따라 alpha 고정
  2. 통계 기반: score gap, entropy, agreement로 조정
  3. 학습 기반: 과거 로그를 보고 alpha를 예측

실무에서 가장 먼저 쓰기 쉬운 것은 규칙 기반이다.


6. 원리 워크스루 — 규칙 기반 alpha 조정

6.1 질문 유형 기반

def choose_alpha(query_type):
    if query_type == "proper_noun":
        return 0.2
    if query_type == "definition":
        return 0.7
    if query_type == "comparison":
        return 0.5
    return 0.6

6.2 agreement 기반 보정

def adjust_alpha(base_alpha, dense_ids, sparse_ids):
    overlap = len(set(dense_ids[:5]) & set(sparse_ids[:5]))
    if overlap == 0:
        return base_alpha
    return min(0.8, base_alpha + 0.1)

6.3 score 분포가 주는 힌트

sparse top-1 점수가 유난히 높고 top-2와 격차가 크다면 exact match 가능성이 높다. 이때 sparse 쪽 비중을 키우는 전략이 자연스럽다.

자기 설명: 고정 alpha가 운영에서 한계를 보이는 이유를 한 문장으로 답해 보라.


7. 변형과 사례

7.1 Query-type Driven Weighting

질문 유형 분류를 직접 alpha 선택에 연결하는 방식이다. 구현이 쉬워 가장 먼저 시도하기 좋다.

7.2 Confidence-aware Weighting

한 검색기가 매우 확신 있을 때 비중을 더 주는 방식이다. 다만 "점수가 높은데 틀린 경우"에 약하다.

7.3 Learned Weighting

과거 질의 로그와 정답 라벨이 충분하면 alpha 자체를 예측하는 작은 모델을 둘 수 있다. 상한은 높지만 운영 복잡도가 커진다.


8. 한계와 실패 양상

8.1 과한 동적 제어는 블랙박스를 만든다

규칙이 너무 많아지면 왜 어떤 문서가 선택됐는지 설명하기 어려워진다.

8.2 잘못된 분류가 잘못된 가중치로 이어진다

query classification 오류가 dynamic weighting 오류로 증폭될 수 있다.

8.3 오프라인 성능이 온라인으로 그대로 이어지지 않을 수 있다

평가셋에서 좋아진 alpha 규칙이 실제 사용자 분포에서는 다르게 작동할 수 있다.

8.4 다음 단계 — 이제 몇 개를 가져올지도 동적으로 정해야 한다

가중치를 바꿨다면 그다음은 top-K 자체를 조정하는 문제다. 21편에서 adaptive top-K를 다룬다.


8.5 입문자가 자주 빠지는 함정 5선

# 함정 증상 빠른 점검
1 고정 alpha를 만능으로 사용 유형별 성능 편차 query type별 eval
2 동적 규칙 과도 추가 디버깅 난이도 상승 규칙 수 최소화
3 trace에 alpha 미기록 원인 분석 불가 selected alpha 저장
4 agreement만 맹신 둘 다 틀린 경우 간과 answer metric 병행
5 online 검증 없이 rollout 체감 악화 shadow traffic 검증

9. 정리된 결론 — 보지 않고 답해 보라

Q1. dynamic weighting의 핵심 아이디어는?

정답 질문마다 dense와 sparse를 같은 비율로 믿지 않는 것이다.
질문 유형과 점수 분포가 서로 다르기 때문이다.

Q2. 가장 쉬운 시작점은?

정답 query type 기반 규칙형 alpha 선택이다.
구현과 해석이 가장 단순하기 때문이다.

Q3. dynamic weighting이 위험해질 수 있는 이유는?

정답 규칙이 많아질수록 블랙박스처럼 변하고 오류 원인을 추적하기 어려워지기 때문이다.
질문 분류, 점수 해석, 가중치 선택이 연쇄적으로 얽히기 때문이다.


Cheat Sheet — 이 편의 식·정의 1페이지

- \(\text{score}(d) = \alpha \tilde{s}_{dense}(d) + (1-\alpha)\tilde{s}_{sparse}(d)\)

정의 - Dynamic Weighting: 질문별 alpha 조정 - Agreement: 두 검색기의 상위 문서 겹침 정도

최소 코드

alpha = choose_alpha(query_type)

언제 무엇을 | 질문 유형 | alpha 경향 | |---|---| | 고유명사형 | sparse 비중 확대 | | 정의형 | dense 비중 확대 | | 비교형 | 중간값 |


참고 자료

보조 자료

  • 사용자 노트 17장 dynamic weighting

다음 편으로 이어지는 흐름

가중치까지 바꿨다면 남은 조절 손잡이는 "몇 개를 가져올 것인가"다. 다음 21편에서는 adaptive top-K와 conditional reranking을 다룬다.

댓글

이 블로그의 인기 게시물

"LLM 핵심 학습 (1/6) — 기본: 토큰화·임베딩·어텐션·위치 인코딩"

"LLM 핵심 학습 (2/6) — 파인튜닝: LoRA·QLoRA·증류·Adapter"

"ML 기초 학습 (1/9) — 머신러닝과 sklearn: 학습의 좌표계"