쿼리 분해
쿼리 분해(Query Decomposition)는 하나의 복잡한 질의를 독립적으로 답할 수 있는 여러 개의 단순한 하위 질문으로 쪼개는 기법입니다. 각 하위 질문별로 따로 검색·추론한 뒤 결과를 합쳐 최종 답을 만들기 때문에, 근거가 여러 문서에 흩어져 있는 멀티홉 질문에서 검색 정확도와 답변 품질을 끌어올립니다.
- 쿼리 분해는 답하기 어려운 복합 질의를 답하기 쉬운 여러 하위 질문으로 분할하는 기법입니다.
- 각 하위 질문을 따로 검색·추론한 뒤 결과를 합쳐서 원래 질문에 답하므로, 근거가 여러 문서에 흩어진 멀티홉(multi-hop) 질문에 특히 효과적입니다.
- LangChain·NVIDIA·Haystack 등 주요 RAG 프레임워크가 표준 기법으로 제공하며, 추가 학습 없이 LLM 프롬프트만으로 적용됩니다.
- arXiv 2025 연구에서 MultiHop-RAG·HotpotQA 기준 검색 지표(MRR@10) +36.7%, 답변 정확도(F1) +11.6% 향상이 보고되었습니다.
- 쿼리 팬아웃·쿼리 재작성과 인접하지만, 분해의 핵심은 '복잡한 질의를 하위 질문으로 쪼개는 것'입니다.
쿼리 분해란 무엇인가
쿼리 분해(Query Decomposition)는 하나의 복잡한 질의를 독립적으로 답할 수 있는 여러 개의 단순한 하위 질문(sub-question)으로 나누고, 각각을 따로 처리한 결과를 합쳐 최종 답을 만드는 기법입니다. 한 번의 검색으로는 충분한 근거를 모으기 어려운 질문을, 답하기 쉬운 단위로 쪼개서 해결한다는 발상입니다.
이 기법이 중요한 이유는 멀티홉(multi-hop) 질문 때문입니다. 멀티홉 질문은 답에 필요한 사실들이 하나의 문서에 모여 있지 않고 여러 문서에 흩어져 있는 질문을 말합니다. 예를 들어 "마이크로소프트와 구글 중 작년에 더 많이 번 곳은?"이라는 질문은, 두 회사의 매출이 같은 문서에 나란히 적혀 있는 경우가 거의 없습니다. 원문 그대로 검색하면 어느 한쪽 근거만 걸리거나 둘 다 놓치기 쉽습니다. 쿼리 분해는 이를 "구글은 작년에 얼마를 벌었나?"와 "마이크로소프트는 작년에 얼마를 벌었나?"라는 두 개의 단순 질문으로 나눠, 각각에 맞는 문서를 따로 가져온 뒤 합쳐서 비교합니다. LangChain 문서도 동일한 원리를 "Web Voyager와 reflection agents는 어떻게 다른가" 같은 비교 질문으로 설명합니다. 각각을 설명하는 문서는 있어도 둘을 직접 비교한 문서는 없을 때, "Web Voyager란 무엇인가"와 "reflection agents란 무엇인가"를 따로 검색해 합치는 편이 원문 검색보다 낫다는 것입니다.
인접 개념과의 차이
쿼리 분해는 검색 전 질의를 가공하는 여러 '쿼리 변환(query transformation)' 기법 중 하나입니다. 자주 혼동되는 인접 개념과 초점이 다르므로 구분이 필요합니다.
| 기법 | 핵심 동작 | 결과물 |
|---|---|---|
| 쿼리 분해 (Query Decomposition) | 복잡한 질의를 답하기 쉬운 하위 질문들로 분할 | 서로 다른 측면을 묻는 복수의 하위 질문 |
| 쿼리 재작성 (Query Rewriting) | 의미는 그대로 두고 검색에 유리하도록 표현을 다듬음 | 개선된 단일 질의 1개 |
| 쿼리 팬아웃 (Query Fan-out) | 하나의 질의에서 관련 변형·확장 질의를 여러 갈래로 펼침 | 병렬 실행되는 다수의 관련 질의 |
| 스텝백 프롬프팅 (Step-back) | 구체 질문을 더 상위의 개념적 질문으로 추상화 | 한 단계 높은 일반 질문 1개 |
핵심 구분은 이렇습니다. 쿼리 재작성은 같은 질문을 '더 잘 검색되게' 한 개의 질의로 바꾸는 데 그치고, 쿼리 팬아웃은 한 질의를 여러 관련 갈래로 '넓히는' 데 초점이 있습니다. 반면 쿼리 분해는 원래 질문을 풀기 위해 "먼저 무엇을 알아야 하는가"를 따져 의미적으로 독립된 하위 질문으로 쪼개는 것이 본질입니다. LangChain 블로그도 재작성을 '하나의 개선된 질의 생성', 분해를 '병렬로 실행되는 복수의 검색 질의 생성'으로 구분하고 있습니다.
동작 방식
RAG 파이프라인에서 쿼리 분해는 대체로 세 단계로 진행됩니다. NVIDIA RAG 문서와 arXiv 연구가 공통적으로 제시하는 흐름입니다.
- 하위 질문 생성: LLM이 원래 질의를 받아 독립적으로 답할 수 있는 여러 하위 질문으로 분해합니다.
- 하위 질문별 검색: 각 하위 질문마다 따로 문서(passage)를 검색해 근거를 모읍니다.
- 병합·재정렬·합성: 모인 후보 문서를 하나로 합치고 재정렬(rerank)해 노이즈를 줄인 뒤, 종합 답변을 생성합니다.
분해 구조에는 절충점이 있습니다. 하위 질문을 순차로 푸는 방식은 앞 단계 결과를 다음 단계에 넘겨 정보 흐름을 극대화하지만, 초반 오류가 뒤로 누적되는 '오류 연쇄'가 생길 수 있습니다. 반대로 병렬로 푸는 방식은 단계 간 오류가 격리되는 대신, 단계 사이의 의존 관계를 활용하지 못합니다. 따라서 질문이 '비교형'처럼 서로 독립적이면 병렬 분해가, '연쇄 추론형'이면 순차 분해가 유리합니다.
실제 근거와 사례
쿼리 분해의 효과는 학술 연구로 뒷받침됩니다. Ammann, Golde, Akbik의 "Question Decomposition for Retrieval-Augmented Generation"(arXiv:2507.00355, 2025)은 위 3단계 파이프라인(분해 → 하위 질문별 검색 → 병합·재정렬)을 MultiHop-RAG와 HotpotQA 벤치마크에서 평가했습니다. 그 결과 표준 RAG 대비 검색 지표 MRR@10이 +36.7%, 답변 정확도 F1이 +11.6% 향상되었다고 보고합니다. 저자들은 이 기법이 "추가 학습이나 특수 인덱싱 없이 바로 적용할 수 있는(drop-in) 개선"이며 "멀티홉 질문의 검색 공백을 메운다"고 설명합니다.
분해를 별도 학습 없이 적용한다는 점은 초기 연구부터 강조되었습니다. Perez 등의 "Unsupervised Question Decomposition for Question Answering"(arXiv:2002.09758)은 하나의 어려운 멀티홉 질문을 여러 개의 단순한 싱글홉 하위 질문으로 비지도 방식으로 매핑하는 접근(ONUS)을 제안해, 분해가 복잡한 질의응답 성능을 높일 수 있음을 보였습니다. 실무 측면에서는 NVIDIA RAG 문서가 "다단계·복합 질의"에 적합한 기법으로 분류하며, 하위 질문 생성 → 반복 처리 → 응답 합성의 3단계로 구현하는 예시를 제공합니다.
실행 체크리스트
- 질문이 멀티홉(여러 문서에 근거가 흩어짐)·비교형·다단계 추론형인지 먼저 판별해 분해 대상을 가립니다. 단순 단일 사실 질문에는 분해가 불필요합니다.
- LLM 분해 프롬프트에 "독립적으로 답할 수 있는 하위 질문으로 나누라"는 지시와 함께, 하위 질문 개수 상한을 두어 과도한 분할을 막습니다.
- 비교형 질문은 병렬 분해, 연쇄 추론형 질문은 순차 분해로 처리해 오류 연쇄와 의존성 손실의 균형을 맞춥니다.
- 하위 질문별 검색 결과를 병합한 뒤 재정렬(reranking)을 거쳐 중복·노이즈를 제거합니다.
- 분해 전/후의 검색 지표(MRR·Recall)와 답변 정확도(F1·EM)를 함께 측정해 실제 개선 여부를 검증합니다.
참고·출처
- Ammann, Golde, Akbik — Question Decomposition for Retrieval-Augmented Generation (arXiv:2507.00355, 2025)
- Perez et al. — Unsupervised Question Decomposition for Question Answering (arXiv:2002.09758)
- NVIDIA — Query Decomposition for NVIDIA RAG Blueprint
- LangChain Blog — Query Transformations
- Haystack (deepset) — Advanced RAG: Query Decomposition & Reasoning