"RAG 핵심 학습 (17/26) — Query Classification: 질문 유형 분류"
"정의가 뭐냐"와 "최신 규정이 뭐냐"는 겉으로는 모두 질문이지만, 검색 전략은 같지 않다.
RAG가 흔들리는 중요한 이유 중 하나는 서로 다른 질문을 같은 파이프라인으로 처리하기 때문이다. 정의형 질문, 절차형 질문, 비교형 질문, 고유명사 질문, 시점 의존 질문은 필요한 문서와 검색 방식이 다르다. Query Classification은 질문을 먼저 분류해, 뒤의 retrieval, rewrite, routing을 더 알맞게 조정하려는 시도다.
0. Prerequisites
- 16편 실험 자동화
- 12편 hybrid search
- 7편 메타데이터 필터
1. 학습 목표
- 질문 유형 분류가 왜 필요한지 설명한다.
- 대표적인 질문 유형을 구분한다.
- 질문 유형에 따라 retrieval 전략이 어떻게 달라지는지 안다.
- 18편 rewrite, 19편 routing으로 이어지는 맥락을 이해한다.
2. 핵심 요약
질문 유형 분류는 "검색 전에 질문의 성격을 먼저 읽는 단계"다. 정의형은 의미 유사성이 중요하고, 고유명사형은 exact match가 중요하며, 최신성 질의는 metadata filter가 핵심이다. 절차형은 여러 문단이나 순서를 포함한 문서를 필요로 하고, 비교형은 두 개 이상의 후보 문서를 균형 있게 회수해야 한다. 따라서 분류는 단순 분석이 아니라 파이프라인 제어 신호다. 뒤의 rewrite, routing, dynamic weighting이 모두 이 분류를 활용한다.
3. 직관 — 같은 질문처럼 보여도 필요한 문서는 다르다
예시 질문들:
- "RAGAS가 무엇인가?" → 정의형
- "외부 공유 예외 신청 절차는?" → 절차형
- "Qdrant와 Weaviate 차이는?" → 비교형
- "PR-2024-Q3의 결론은?" → 고유명사형
- "현재 기준 최신 보안 정책은?" → 시점 의존형
이 다섯 질문에 같은 top-K, 같은 fusion, 같은 filter를 쓰면 비효율이 생긴다.
4. 정의 — 대표 질문 유형
| 유형 | 특징 | 주로 필요한 것 |
|---|---|---|
| 정의형 | 개념 설명 요구 | Dense, 설명 문서 |
| 절차형 | 단계와 순서 요구 | 구조화된 문서, 긴 context |
| 비교형 | 둘 이상의 항목 대비 | 다중 문서 회수 |
| 고유명사형 | 코드, 문서명, 사람명 | Sparse, exact match |
| 시점 의존형 | 최신/현재/과거 구분 | metadata filter, version filter |
| 권한형 | 누구에게 어떤 문서 보일지 중요 | security filter, source routing |
5. 메커니즘 — 분류 결과가 어디에 쓰이는가
분류 결과는 보통 다음 제어 신호가 된다.
- rewrite 여부
- dense/sparse 가중치
- metadata filter 선택
- collection routing
- top-K 크기
즉 query classification은 answer를 직접 만드는 모델이 아니라, 뒤 검색 파이프라인의 스위치보드에 가깝다.
6. 원리 워크스루 — 간단한 분류기에서 시작하기
6.1 룰 기반 분류
def classify_query(query: str) -> str:
if "최신" in query or "현재" in query:
return "time_sensitive"
if "차이" in query or "비교" in query:
return "comparison"
if any(token in query for token in ["코드", "문서", "보고서", "PR-"]):
return "proper_noun"
if "절차" in query or "방법" in query:
return "procedure"
return "definition"
6.2 분류 결과를 검색 설정으로 연결
query_type = classify_query(query)
if query_type == "proper_noun":
alpha = 0.2 # sparse 비중 확대
elif query_type == "definition":
alpha = 0.7 # dense 비중 확대
elif query_type == "time_sensitive":
filters["version"] = "latest"
6.3 작은 분류기여도 가치가 있다
정교한 classifier가 아니어도, 몇 가지 명확한 질문 유형만 잡아도 파이프라인 안정성이 올라간다.
자기 설명: query classification이 "검색 전 단계"여야 하는 이유를 한 문장으로 설명해 보라.
7. 변형과 사례
7.1 룰 기반 분류
무엇이 바뀌는가
정해진 키워드와 패턴으로 질문을 나눈다.
왜 등장했는가
가볍고 설명 가능하며 빠르게 도입할 수 있기 때문이다.
무엇이 가능해졌는가
최소한의 routing, filtering, weighting을 시작할 수 있다.
한계와 다음 단계
표현이 다양해지면 깨진다. 그래서 LLM 또는 classifier 모델을 붙이게 된다.
7.2 LLM 분류기
LLM에게 질문을 읽히고 미리 정의한 라벨 중 하나를 선택하게 할 수 있다. 유연하지만 latency와 비용, 분류 일관성 문제가 있다.
7.3 Multi-label classification
실제 질문은 "최신 정책 비교"처럼 여러 속성을 동시에 갖는다. 이때는 단일 라벨보다 multi-label 또는 슬롯 구조가 더 자연스럽다.
8. 한계와 실패 양상
8.1 분류 체계가 지나치게 복잡하면 유지가 어렵다
라벨이 20개를 넘어가면 사람도 해석하기 어려워지고, 분류기 성능도 흔들린다.
8.2 분류 오류가 뒤 단계를 망칠 수 있다
고유명사형 질문을 정의형으로 잘못 분류하면 sparse 비중이 줄어 핵심 문서를 놓칠 수 있다.
8.3 질문 유형은 고정되지 않는다
조직과 도메인이 바뀌면 "중요한 질문 유형" 자체가 달라진다. 따라서 분류 체계도 주기적으로 재점검해야 한다.
8.4 다음 단계 — 질문을 더 잘 찾는 형태로 바꿔야 한다
분류가 끝났으면, 다음은 질문 자체를 검색 친화적으로 바꾸는 단계다. 그게 18편 query rewrite다.
8.5 입문자가 자주 빠지는 함정 5선
| # | 함정 | 증상 | 빠른 점검 |
|---|---|---|---|
| 1 | 모든 질문을 단일 전략으로 처리 | 유형별 성능 편차 큼 | 질문 유형별 eval 분리 |
| 2 | 라벨 체계 과도 확장 | 유지보수 어려움 | 5~8개 핵심 유형부터 시작 |
| 3 | 분류 결과를 저장하지 않음 | 원인 분석 불가 | trace에 query_type 기록 |
| 4 | 질문 유형 정의가 모호함 | 라벨링 일관성 낮음 | 기준 예시 문서화 |
| 5 | 분류 후 파이프라인 연결 없음 | 효과 미미 | weighting/filtering 연동 |
9. 정리된 결론 — 보지 않고 답해 보라
Q1. query classification의 핵심 목적은?
정답 질문 유형에 맞게 뒤 검색 파이프라인을 조정하는 것이다.
왜 서로 다른 질문이 서로 다른 retrieval 전략을 필요로 하기 때문이다.
Q2. 고유명사형 질문에서 중요한 것은?
정답 exact match와 sparse 신호다.
왜 희귀 토큰과 문서명을 정확히 잡아야 하기 때문이다.
Q3. 시점 의존 질문에서 가장 중요한 제어는?
정답 최신 버전이나 유효 기간을 반영하는 metadata filter다.
왜 의미 유사성보다 문서 시점이 정답을 좌우하기 때문이다.
Q4. 분류기가 완벽해야만 도입 가치가 있는가?
정답 아니다. 몇 가지 명확한 유형만 잡아도 실무 효과가 있다.
왜 단순한 rule-based 분류도 weighting과 filtering을 개선할 수 있기 때문이다.
Cheat Sheet — 이 편의 식·정의 1페이지
정의 - Query Classification: 질문 유형 분류 - Proper-noun query: exact match 중심 질문 - Time-sensitive query: 최신성 필터가 중요한 질문
최소 코드
if "최신" in query:
query_type = "time_sensitive"
언제 무엇을 | 질문 유형 | 기본 전략 | |---|---| | 정의형 | dense 비중 확대 | | 고유명사형 | sparse 비중 확대 | | 시점 의존형 | version filter | | 비교형 | 다중 문서 회수 |
참고 자료
보조 자료
- 사용자 노트 14장 질문 유형 분류
- 사용자 노트 15장 query rewrite와 routing
다음 편으로 이어지는 흐름
질문 유형을 알았다면, 다음은 질문을 더 잘 찾히는 형태로 바꾸는 단계다. 18편에서는 HyDE, Step-back, Multi-query를 포함한 query rewrite와 expansion을 다룬다.
댓글
댓글 쓰기