본문 바로가기
개발공부/RAG

Retriever

by 무황이 2025. 10. 20.

 

 

Retriever란

  • RAG 시스템에서 사용자의 질문과 관련된 문서를 벡터 데이터베이스(VectorStore) 로부터 신속하고 정확하게 문서를 찾아내는 역할을 한다
  • 이 과정은 RAG 시스템의 전반적인 성능을 결정짓는 단계이므로 정확한 정보 검색 -> 응답 품질 -> 사용자 경험으로 이어지는 전체 흐름에 직접적인 영향을 미친다
  • 상황에 따라 Sparse, Dense, Ensemble, Contextual 등 다양한 방식을 적절하게 조합하여 최적화하는 것이 중요하다

 

Retriever의 필요성

1. 정확한 정보 제공

  • 사용자의 질문과 가장 관련성 높은 문서를 검색하여 신뢰할 수 있는 컨텍스트를 기반으로 LLM이 답변을 생성하도록 유도한다
  • 검색 품질이 낮을 경우 모델이 비관련 문서를 참고하여 할루시네이션 문제가 발생할 수도 있다

2. 응답시간 단축

  • 효율적인 검색 알고리즘을 통해 데이터베이스에서 관련 정보를 빠르게 탐색함으로써 시스템 응답 속도를 향상 시킨다
  • 이는 사용자 경험 향상과 시스템 처리 효율성 개선으로 이어진다

3. 자원 최적화

  • 필요한 정보만 선택적으로 반환함으로써 불필요한 데이터 접근은 줄이고
  • 메모리 및 토큰 사용량을 최소화하여 시스템 자원을 효율적으로 활용한다

 

Retriever 동작의 방식

1. 질문 벡터화

  • 사용자의 자연어 질문을 임베딩 모델을 통해 벡터 형태로 변환된다
  • 이 벡터는 후속 단계에서 유사도 계산의 기준으로 사용된다

2. 유사도 계산

  • 데이터베이스에서 저장된 문서 벡터들과 질문 벡터간의 코사인 유사도 혹은 L2 거리를 계산한다

3. 상위 문서 선정

  • 계산된 유사도 점수를 기반으로 상위 문서를 K개로 반환한다

4. 문서 정보 반환

  • 선택된 문서를 llm 프롬프트에 전달하여 컨텍스트 기반 응답 생성 단계로 넘어간다

 

Retriever의 종류

1. Sparase Retriever

  • 문서와 쿼리를 단어 벡터(키워드 기반 벡터)로 변환하여 검색하는 방식
  • 대표적으로 사용되는 알고리즘

TF-IDF

  • 단어가 문서에 나타나는 빈도와 그 단어가 몇개의 문서에서 나타나는지를 반영하여 단어의 중요도 반영
  • TF : 단어의 빈도
  • IDF : 전체 문서에서 얼마나 드문지를 나타냄
  • 장점 : 직관적이며, 불용어의 영향을 줄임
  • 단점 : 의미 반영과 유사 의미어 구분 불가

BM25

  • TF-IDF를 개선한 확률적 정보 검색
  • 단어의 빈도와 문장의 길이를 고려하여 점수 계산
  • 장점 : 단어 빈도 포화 처리, 높은 실제 검색 정확도
  • 단점 : 의미 반영과 유사 의미어 구분 불가

 

2. Dense Retriever

  • 임베딩 모델을 사용하여 문서와 쿼리를 의미 벡터에 매핑한다
  • 이후 두 벡터 간의 거리를 기반으로 의미적 유사성을 계산한다
  • 장점 : 문맥 이해 가능, 자연어 질의에 강함
  • 단점 : 임베딩 모델의 품질과 가격에 의존적

Sparse vs Dense

1. 표현 방식 : Spares (키워드 기반) vs Dense (의미 기반)

2. 의미적 처리 능력

  • Sparse는 키워드 기반이기 때문에 키워드가 일치하지 않은 이상 같은 의미의 단어여도 동일하게 판단하지 않음
  • 하지만 Dense는 의미 기반이기 때문에 용어가 완전히 일치하지 않아도 의미적으로 관련/유사하면 관련 문서를 검색할 수 있음

3. 적용 범위

  • 복잡한 질문이나 자연어 쿼리에서는 Dense가 유용
  • 간단하고 명확한 키워드 검색에서는 Sparse가 더 유용

 

Vectorstore 기반 검색기

  • 유사도 검색, MMR 과 같은 검색 매서드를 사용하여 문서 검색

MMR 알고리즘이란?

  • 중복을 줄이고 다양성을 확보하기 위해 사용하는 알고리즘
  • 질문과 관련성이 높으면서도 이미 선택된 문서들과는 겹치지 않게 다양성을 확보하는 방식

동작 원리 : 문서간의 관련성과 중복도를 고려해 문서를 순차적으로 선택해 나감

  1. 모든 문서의 쿼리와 유사도 계산
  2. 이미 선택돈 문서들과의 중복도 계산
  3. 두 값을 적절히 조합하여 점수를 만든 후 그 점수가 높은 순대로 문서 선택

중복된 문서는 제거하고, 질문과 관련성이 높은 다른 관점의 문서들을 반환할 수 있다

즉, 검색의 다양성을 확보해 더 풍부하고 정확한 답변을 생성하도록 돕는다

 

 

문맥 압축 검색기 (contextual compression retriever)

  • 대규모 문서 내에서 질문과 관련된 정보만 압축하여 반환하는 검색기
  • 이는 비관련 텍스트로 인한 할루시네이션, 토큰 낭비를 줄이기 위해 사용됨
  • Base Retriever가 반환한 문서중에서 핵심만 추출
  • LLM 또는 임베딩 모델을 이용해 문맥 압축 수행
  • LLM 기반 압축 : 높은 정확도, 높은 비용
  • 임베딩 기반 압축 : 낮은 비용, 낮은 문맥 보존력
  • 상황에 따라 성능 vs 비용

앙상블 검색기 (ensemble retriever)

  • 여러 검색기를 결합하여 더 강력한 검색 결과를 제공하는 방법
  • 다양한 검색 알고리즘의 장점을 활용하여 단일 알고리즘보다 더 나은 성능을 달성할 수 있다
  1. 여러 검색기 통합 : 다양한 유형의 검색기를 입력으로 받아 결과를 결합
  2. 결과 재순위화 : rrf 알고리즘을 통해 결과 재순위함
  3. 하이브리드 검색 : 비슷한 기능을 가진 retriever보다는 다른 기능을 가진 retriever 해보는게 좋다

긴 문맥 재정렬

  • LLM은 문서의 처음과 끝 부분에 집중하는 경향이 있음
  • 따라서 긴 문서를 입력할때는 중요도 기반으로 재배치하여 모델의 주의 집중도를 최적화하는 전략을 사용할 수 있다
  • 중요 문서 : 하단 배치
  • 중간 중요도 문서 : 상단 배치
  • 덜 중요한 문서 : 중간 배치

 

 

상위 문서 검색기(Parent Document Retriever)

문서를 작은 단위(청크)로 나누면 아무리 overlap을 해도 의미 손실이 발생할 수 있다

Parent Document Retriever는 이를 보완하기 위해 다음을 수행한다

1. 문서를 여러 청크로 분할

2. 검색 시 청크 단위로 탐색

3. 선택딘 청크의 부모 문서를 함께 반환하여 문맥 복원

이때 부모 문서는 작은 문서의 원본 문서, 전체 문서일 수도 있고 문서의 일부(비교적 더 큰 문서)일수도 있음

 

 

다중 쿼리 검색 (MultiQuery Retriever)

  • 사용자 질문을 통해 llm을 통해 여러개의 질문을 만들어서 검색을 통해 답변을 생성
  • 사용자가 넣는 질문은 그렇게 친절하지 않다. 따라서 llm으로 만들어낸 성능이 더 좋을 수 도 있다

 

다중 벡터저장소 검색기(MultiVector Retriever)

  • 벡터 스토어를 여러개 사용하는 것이 아니라
  • vectorstore와 doc store를 함께 사용하는 것을 말한다
  • 문서를 여러 벡터로 저장하고 관리할 수 있어, 정보 검색의 정확도와 효율성을 대폭 향상시킬 수 있다

1. 작은 청크 생성

  • 문서를 더 작은 단위로 나눈 후 각 청크에 대해 별도의 임베딩을 생성
  • 이방식을 사용하면 문서의 특정 부분에 좀 더 세심한 주의를 기울일 수 있다. 
  • 이때 전체 문서에서 작은 부분만 가져와서 사용할것인지 아니면
  • 작은 문서의 전체 문서를 가져와서 쓸것인지 아니면 둘다 사용할것인지를 정할 수 있다

2. 요약 임베딩

  • 각 문서의 요약을 생성하고 이 요약을 임베딩으로 만든다.
  • 요약 임베딩은 문서의 핵심 내용을 신속하게 파악하는데 도움이 된다

 

3. 가설 질문 활용

  • 해당 문서에 대해 어떤 질문들이 들어올지 미리 저장하여 이를 임베딩한다. 
  • 특정 주제나 내용에 대해 깊이 있는 탐색을 원활때 이 방법이 유용하다
  • 가설 질문은 문서의 내용을 다양한 관점에서 접근하게 해준다

 

4. 수동 추가 방식

  • 사용자가 문색 검색시 고려해야할 특정 질문이나 아니면 쿼리를 추가할 수 있다.
  • 이 방법을 통해 사용자는 검색 과정에서 보다 세밀한 제어를 진행할 수 있다.

 

셀프 쿼리(SelfQueryRetriever)

  • LLM이 스스로 질의를 구조화하고 메타데이터 필터를 생성하는 검색기이다
  • 자연어 질의를 분석해 문서 메타데이터 기반을 추출하고 이를 벡터 검색과 결합하여 보다 정교한 결과를 반환한다
  • 즉, 단순 의미를 넘어 필터 기반 검색이 가능하다

 

시간 가중 벡터저장소 리트리버(TimeWeightedVectorStoreRetriever)

 

  • 의미론적 유사성과 시간에 따른 감쇠를 결합해 사용하는 검색 도구
  • 문서 또는 데이터의 신선함과 관련된성을 모두 고려하여 결과를 제공
  • 문서의 timestamp를 기준으로 시간이 지날수록 점수를 낮추면
  • 최근 생성된 문서를 더 높은 우선 점수로 반환한다

 

 

'개발공부 > RAG' 카테고리의 다른 글

밀도가 높은 문서 요약 방법  (0) 2025.11.03
ReRanker  (0) 2025.10.31
VectorDB  (0) 2025.10.13
Embedding (임베딩)  (0) 2025.10.10
Text Splitter (텍스트 분할)  (0) 2025.09.28