Hybrid Retriever
밀집 검색(유사도)과 희소 검색(키워드) 두가지 방법을 융합하여 검색 정확도를 향상시키는 대표적인 기법
- 희소 검색: 정확한 검색 용이
- 밀집 검색: 맥락에 알맞는 검색 용이
Dense Vector(조밀 벡터)
- 의미적 유사성에 강함
- 대부분의 값이 0이 아닌 실수
- 예: "How to catch fish" -> "fishing techniques"매칭
Sparse Vector(희소 벡터)
- 정확한 키워드 매칭에 강함
- 대부분의 값이 0, 일부만 0이 아님
- BM25, TF-IDF 기반
- 예: "Alaskan Pollock" -> 정확히 "Alaskan Pollock" 매칭
어떻게 검색 결과를 합칠까?
두 검색 결과를 합치는 과정에서 다양한 알고리즘이 존재하지만 RRF 방식 가장 선호
Multi Query Retriever
-
하나의 질문으로 여러 관점의 검색을 동시에 수행하는 방식으로, LLM 기반 성능 향상 기법
-
LLM을 사용해 원본 쿼리에서 다양한 관점의 여러 쿼리를 자동 생성하는 기법
-
여러 쿼리를 자동생성하여 검색하면 놓칠 수 있는 관련 문서 추가 발견 가능하여 단일 쿼리 검색의 한계의 문제점 극복
-
랭체인에서 초기부터 사용했음 → 검색 성능을 높이는데 좋기 때문
-
멀티쿼리를 만들 때 LLM에 적절한 프롬프트를 주는게 가장 중요하다.
- 주어진 질문이 모호할 때 구체적으로!
- 복합한 쿼리를 단순하게
- 동일한 질문에 대해서 같은 용어들이 다르게 표현되는 것에 초점을 두고 다양한 표현방법으로 표현
왜 Multi-Query Retriever가 필요한가?
기존 RAG 시스템의 한계점
- 단일 쿼리의 제약: 사용자의 질문이 모호하거나 불완전할 때 관련 문서를 놓칠 수 있음
- 의미적 표현의 다양성: 같은 의마라도 다양한 표현 방식으로 인해 검색 성능이 제한됨
- 검색 범위의 한계: 하나의 쿼리로는 복합적인 정보 요구사항을 충족하기 어려움
Multi-Query Retriever 의 장점
- 검색 범위 확장: 여러 관점에서 동일한 정보를 검색하여 누락 방지
- 의미적 다양성: 다양한 표현으로 쿼리를 생성하여 검색 정확도 향상
- 컨텍스트 풍부화: 다각도의 검색 결과를 통합하여 더 완전한 답변 생성
- 견고성 증대: 단일 쿼리 실패 시에도 다른 쿼리들이 보완 역할 수행
- 검색이 실패하는 확률이 줄어든다!
- LLM모델은 가벼운 것을 쓰는게 좋다.
RAG Fusion
여러 쿼리를 통해 검색된 문서의 중복을 제거하고, 유사도 기준으로 재정렬하는 RAG Fusion 방식도 활용
- Reranker + Multiquery의 조합
Self Query Retriever
- 주어진 사용자의 질문을 벡터DB를 조회할 필터링 쿼리로 변환하여 검색하는 방식
- 자연어 쿼리 → 쿼리 구성 LLM이 쿼리 작성 → 벡터 저장소 검색 및 필터링에 활용
- 사용자의 질문만으로 벡터 DB 검색이 제대로 이뤄지지 않을 수 있는 메타데이터 중심 질문을 처리하기에 적합
- 핵심은 쿼리 생성기와 쿼리 번역기이다. 벡터 DB에 알맞은 필터링 쿼리 생성을 위해 번역이 필요하다.
- Agentic RAG일 경우, 여러 Retriever를 두고 LLM이 선택해서 쓸 수 있게 해줄 수 있다.
- 논문에 사용하기 좋을 듯 - '장르' 등 특정 키워드 등 메타데이터 중심의 질문에 사용