검색
검색 (Search)
수십억 규모 데이터셋에서도 원하는 데이터를 빠르게 찾아야 한다면? Weaviate의 검색은 유연하고 빠르며 확장 가능해요. 필요에 맞는 여러 검색 유형을 사용하고, 성능과 정확도를 최적화하도록 검색 설정을 구성할 수 있습니다.
출처: 공식문서
검색의 단계: Filter → Search → (RAG)
검색은 크게 세 단계로 이뤄져요.
| 단계 | 설명 | 필수 여부 |
|---|---|---|
| 1. 검색 이전(Retrieval) | Filter: 기준에 따라 결과 집합을 좁힘 | 선택 |
| 3. 생성 증강 검색 | 가져온 데이터와 프롬프트를 생성 AI 모델에 보냄. 검색 증강 생성(RAG)이라고도 함 | 선택 |
검색 이전: Filter
Weaviate에서 필터는 다른 랭킹이 적용되지 않으면 객체의 UUID 순서를 따라요. 필터는 기준에 따라 객체를 통과시키거나 차단할 뿐이므로, 결과 순서는 실질적으로 랜덤해요.
검색 이전: Search
한 문장으로: 검색은 쿼리에 대한 관련성을 기준으로 객체의 정렬된 목록을 만드는 것이에요. 검색은 가장 가깝거나 관련성 높은 데이터 객체를 찾는 일이고, Weaviate는 키워드 검색, 벡터 검색, 하이브리드 검색의 세 가지 기본 검색 유형을 지원해요.
| 검색 유형 | 설명 |
|---|---|
| 키워드 검색(Keyword) | "토큰(token)" 빈도를 사용하는 전통적인 텍스트 검색 |
| 벡터 검색(Vector) | 벡터 임베딩을 사용하는 유사도 기반 검색 |
| 하이브리드 검색(Hybrid) | 벡터와 키워드 검색 결과를 결합 |
검색 vs 필터: 필터는 기준에 따라 객체를 그냥 통과시키거나 차단할 뿐이라 결과 랭킹이 없어요. 반면 검색 결과는 쿼리에 대한 관련성을 기준으로 랭킹돼요.
키워드 검색
키워드 검색은 쿼리의 토큰이 각 데이터 객체에 얼마나 자주 등장하는지를 기반으로 한 "스코어"로 결과를 랭킹해요. 이 지표들은 BM25 알고리즘으로 결합되어 스코어를 만들어요.
예를 들어 "black"을 키워드 검색하면 검은색 속성을 가진 객체만 돌려주되, 이번엔 BM25 알고리즘으로 결과가 랭킹돼요.
{'description': 'black bear'}{'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)
- Weaviate 검색 원문: Search
- 각 검색 유형 상세: Vector search · Keyword search · Hybrid search
- 코드 예시: How-to: search