검색

수십억 규모 데이터셋에서도 원하는 데이터를 빠르게 찾아야 한다면? Weaviate의 검색은 유연하고 빠르며 확장 가능해요. 필요에 맞는 여러 검색 유형을 사용하고, 성능과 정확도를 최적화하도록 검색 설정을 구성할 수 있습니다.

출처: 공식문서

검색의 단계: Filter → Search → (RAG)

검색은 크게 세 단계로 이뤄져요.

단계 설명 필수 여부
1. 검색 이전(Retrieval) Filter: 기준에 따라 결과 집합을 좁힘 선택
3. 생성 증강 검색 가져온 데이터와 프롬프트를 생성 AI 모델에 보냄. 검색 증강 생성(RAG)이라고도 함 선택

검색 이전: Filter

Weaviate에서 필터는 다른 랭킹이 적용되지 않으면 객체의 UUID 순서를 따라요. 필터는 기준에 따라 객체를 통과시키거나 차단할 뿐이므로, 결과 순서는 실질적으로 랜덤해요.

한 문장으로: 검색은 쿼리에 대한 관련성을 기준으로 객체의 정렬된 목록을 만드는 것이에요. 검색은 가장 가깝거나 관련성 높은 데이터 객체를 찾는 일이고, Weaviate는 키워드 검색, 벡터 검색, 하이브리드 검색의 세 가지 기본 검색 유형을 지원해요.

검색 유형 설명
키워드 검색(Keyword) "토큰(token)" 빈도를 사용하는 전통적인 텍스트 검색
벡터 검색(Vector) 벡터 임베딩을 사용하는 유사도 기반 검색
하이브리드 검색(Hybrid) 벡터와 키워드 검색 결과를 결합

검색 vs 필터: 필터는 기준에 따라 객체를 그냥 통과시키거나 차단할 뿐이라 결과 랭킹이 없어요. 반면 검색 결과는 쿼리에 대한 관련성을 기준으로 랭킹돼요.

키워드 검색

키워드 검색은 쿼리의 토큰이 각 데이터 객체에 얼마나 자주 등장하는지를 기반으로 한 "스코어"로 결과를 랭킹해요. 이 지표들은 BM25 알고리즘으로 결합되어 스코어를 만들어요.

예를 들어 "black"을 키워드 검색하면 검은색 속성을 가진 객체만 돌려주되, 이번엔 BM25 알고리즘으로 결과가 랭킹돼요.

  1. {'description': 'black bear'}
  2. {'description': 'small domestic black cat'}

벡터 검색

벡터 임베딩을 사용하는 유사도 기반 검색이에요. 쿼리의 벡터 임베딩을 저장된 객체의 임베딩과 비교해, 미리 정의된 거리 메트릭에 따라 가장 가까운 것을 찾아요.

Weaviate에서 벡터 검색은 여러 방식으로 수행할 수 있어요. 텍스트 입력, 벡터 입력, 기존 객체 기준으로 유사 객체를 찾을 수 있고, 이미지 같은 다른 모달리티로도 유사 객체를 검색할 수 있어요.

  • 의미론적 텍스트 검색: 다른 단어를 쓰더라도 의미가 비슷한 문서 찾기
  • 다국어 검색: 여러 언어에 걸쳐 관련 콘텐츠 찾기
  • 이미지 유사 검색: 대규모 DB에서 시각적으로 유사한 이미지 찾기

하이브리드 검색

벡터 검색과 키워드 검색을 결합해 두 방식의 장점을 활용해요. 두 검색을 모두 수행하고, 결합 방식(하이브리드 퓨전 방법, alpha 값 등)에 따라 결과를 합칩니다.

검색 이전: Unordered (정렬 없음)

정렬 없는 검색 요청의 경우 Weaviate는 객체를 UUID 순서로 가져와요. 이 방식은 실질적으로 랜덤하게 정렬된 객체 목록을 만들어요.

Rerank (재랭킹)

한 문장으로: 재랭커는 초기 검색 결과를 더 복잡한 모델 또는 다른 기준으로 재정렬해요. 재랭킹은 초기 결과를 재정렬해 검색 관련성을 높여요. 컬렉션이 reranker 통합으로 구성되면 Weaviate는 설정된 reranker 모델로 초기 검색 결과를 재정렬해요.

이렇게 하면 계산 비용이 더 높은 모델을 더 작은 결과 부분집합에 사용해 전체 검색 품질을 높일 수 있어요. 일반적으로 Cohere Rerank나 Hugging Face Reranker 같은 모델은 크로스-인코더 모델로, 텍스트를 더 미묘하게 이해할 수 있어요.

검색 증강 생성 (RAG)

검색 증강 생성(RAG, 생성형 검색)은 검색과 생성 AI 모델을 결합해 검색 결과를 바탕으로 새 콘텐츠를 만들어냅니다. AI 모델의 생성 능력과 Weaviate의 검색 능력을 함께 활용하는 강력한 기법이에요.

검색 스코어와 메트릭

  • 벡터 거리(Vector distance): 쿼리와 객체 사이의 벡터 거리 측정
  • BM25F 스코어: BM25F 알고리즘으로 계산된 키워드 검색 스코어
  • 하이브리드 스코어: 벡터와 키워드 검색의 결합 스코어

명명된 벡터 (Named vectors)

특정 명명 벡터 쿼리

명명 벡터를 가진 컬렉션에서 벡터 검색을 하려면 검색할 벡터 공간을 지정해요. 명명 벡터는 벡터 유사도 검색(near_text, near_object, near_vector, near_image)과 하이브리드 검색과 함께 사용할 수 있어요.

명명 벡터 컬렉션은 하이브리드 검색을 지원하지만, 한 번에 하나의 벡터에 대해서만 지원돼요.

더 알아보기 (Learn more)