쿼리 변환 기법
검색 성능을 높이는 쿼리 리라이팅과 확장 전략
쿼리 변환의 필요성
사용자 쿼리의 한계
사용자의 질문은 종종 모호하거나 불완전합니다. 쿼리 변환은 원래 질문을 검색에 최적화된 형태로 바꾸어 더 관련성 높은 문서를 찾도록 돕습니다.
- 어휘 불일치: 사용자 표현과 문서의 표현이 다름 (동의어 문제)
- 모호성: 짧거나 불분명한 질문
- 복합 질문: 여러 정보가 필요한 복잡한 질문
- 추상적 질문: 구체적인 키워드가 없는 질문
"Python 코드 속도 개선 방법"
쿼리 리라이팅
더 명확하고 검색에 적합한 형태로 다시 작성
LLM을 사용하여 원본 쿼리를 더 명확하고 검색에 적합한 형태로 다시 작성합니다.
Multi-Query Retrieval
여러 관점의 쿼리 생성
하나의 질문에서 여러 버전의 쿼리를 생성하여 각각 검색합니다. 다양한 관점에서 검색하면 더 포괄적인 결과를 얻을 수 있습니다.
- 어휘 불일치 문제 해결 (같은 개념, 다른 표현)
- 검색 재현율(Recall) 향상
- 다양한 관점의 문서 수집
HyDE
Hypothetical Document Embeddings
쿼리 대신 LLM이 생성한 "가상의 답변 문서"로 검색합니다. 질문보다 답변과 유사한 문서가 더 잘 검색됩니다.
"벡터 데이터베이스 선택 시 고려해야 할 주요 기준으로는 확장성, 검색 속도, ANN 알고리즘 지원 여부, 메타데이터 필터링 기능, 관리 편의성, 비용 구조, 클라우드 지원 여부 등이 있습니다..."
- LLM이 잘못된 가상 답변을 생성하면 검색 품질 저하
- 추가 LLM 호출로 인한 지연과 비용 증가
- 사실 기반 질문보다 개념적 질문에 더 효과적
Step-Back Prompting
한 걸음 물러서서 생각하기
구체적인 질문에서 더 일반적이고 추상적인 질문을 먼저 도출합니다. 상위 개념을 검색하여 더 넓은 맥락을 파악한 후 원래 질문에 답합니다.
- 전문적/기술적 질문에 배경 설명이 필요할 때
- 특정 사례에 대한 질문이지만 일반 원리가 중요할 때
- Why/How 질문에 답하기 위해 맥락이 필요할 때
쿼리 분해
Query Decomposition
복잡한 질문을 여러 개의 단순한 하위 질문으로 분해하여 각각 검색한 후 결과를 종합합니다.
"RAG와 파인튜닝 중 어떤 것이 더 나은지 비교하고, 각각 언제 사용해야 하는지 설명해주세요."
- Q1: RAG의 장점과 단점은 무엇인가?
- Q2: 파인튜닝의 장점과 단점은 무엇인가?
- Q3: RAG가 적합한 사용 사례는?
- Q4: 파인튜닝이 적합한 사용 사례는?
기법 비교 및 선택
상황에 맞는 최적의 기법 선택
| 기법 | 적합한 상황 | 오버헤드 | 효과 |
|---|---|---|---|
| 쿼리 리라이팅 | 구어체, 모호한 질문 | 낮음 | 기본적 개선 |
| Multi-Query | 어휘 불일치, 다양한 관점 | 중간 | Recall 향상 |
| HyDE | 개념적 질문, 추상적 쿼리 | 높음 | 의미 매칭 향상 |
| Step-Back | 전문적/기술적 질문 | 중간 | 맥락 이해 향상 |
| Query Decomposition | 복합 질문, 다중 정보 필요 | 높음 | 복잡한 질문 처리 |
- 단순한 경우: 쿼리 리라이팅만으로도 충분
- 검색 재현율이 낮을 때: Multi-Query 추가
- 개념적 질문: HyDE 시도
- 기법 조합: 여러 기법을 함께 사용 가능
핵심 요약
- 쿼리 리라이팅 - 모호한 질문을 명확하게 재작성
- Multi-Query - 여러 버전으로 검색 후 통합
- HyDE - 가상 답변 생성 후 검색
- Step-Back - 추상화된 질문으로 맥락 확보
- Query Decomposition - 복잡한 질문을 분해하여 처리