RAG Retriever 검색 방법 알아보기

RAG 를 사용하는 과정에서 벡터 스토어에 저장된 임베딩 데이터들을 검색하는 과정에서 검색 알고리즘을 통해 유사한 데이터를 가져오게 되는데 이때 벡터 스토어에 검색하는 과정에서 코사인 유사도를 계산해서 유사한 문서를 가져온다거나 MMR 검색 알고리즘을 사용해서 유사하지만 서로 다른 문서를 가져온다는 등 여러 방법을 통해서 데이터를 검색해서 가져오는 것으로 알고 있다.

 

RAG 에 대해서 하나씩 알아가는 과정에서 retriever 를 통해 검색을 할 때 어떠한 방식으로 가져오는지 retriever 에서 사용하는 검색 알고리즘에 대해서 알아보고 간단하게 정리해보려고 한다.

 

먼저, 각 검색 방법에 대해서 알아보자.

 

검색 방법

similarity

  • 기본값으로 사용되는 검색 방식이다.
  • 입력한 값과 벡터 스토어에 저장된 값을 코사인 유사도를 통해 계산해서 가장 유사한 값을 반환한다.
  • 빠르고 정확한 문서를 제공할 수 있지만 비슷한 내용이 나올 가능성이 증가한다.

MMR (Maximal Marginal Relevance)

  • 관련성과 다양성을 고려한 고급 검색 방식이다.
  • 질문과 유사하면서도 서로 다른 주제의 문서들을 가져오도록 설계되었다고 한다.
  • lambda_mult 라는 값을 사용하여 관련성과 다양성의 비율을 조절할 수 있다.
  • 더 다양한 관점에서의 데이터를 가져올 수 있지만 검색 속도가 느릴 수 있다.

similarity_score_threshold

  • similary 검색 방법과 유사하지만 추가적으로 유사도 점수 임계값이 있다.
  • 유사도 점수가 임계값 이상인 문서만 반환한다.
  • 불필요한 데이터를 제거할 수 있지만 조건이 너무 까다로우면 데이터가 아예 나오지 않을 수 있다.

 

검색 상황

그럼 언제 사용하면 좋을까?

similarity

  • 벡터 간의 거리를 계산해서 가져오기 때문에 단순한 질문에 사용하는 것이 좋다.

MMR (Maximal Marginal Relevance)

  • 관련이 있거나 다양한 내용을 가져오고 싶은 경우에 사용하면 좋다.
  • 주로 다양한 관점에서 요약을 하거나 랭킹을 정하거나 리서치하는 경우에 사용하면 좋다.

similarity_score_threshold

  • 특정 임계값 이하의 데이터를 걸러주기 때문에 불필요한 데이터를 제거하고 싶을 때 사용하면 좋다.
  • 예를 들어 벡터 스토어에 저장된 값에 노이즈가 많다거나 신뢰성이 낮은 경우 사용하면 좋을 것 같다.

 

이렇게 RAG 에서 사용하는 retriever 의 검색 방법 3가지에 대해서 간단하게 개념만 이해해보았는데 RAG 를 만드는 과정에서 Retriever 를 생성할 때 내가 정한 질문의 형식과 데이터의 종류에 따라 검색 방법을 달리해서 테스트를 해보면 좋을 것 같다.