벡터 검색

벡터 검색은 벡터 임베딩(embedding)을 사용하는 유사도 기반 검색이에요. 의미상 유사한 객체를 찾아낼 수 있다는 점에서 "시맨틱 검색"이라고도 불러요. 다만 벡터 검색이 텍스트에만 국한되지는 않아요. 이미지, 비디오, 오디오 같은 다른 유형의 데이터에도 사용할 수 있어요.

출처: 공식문서

벡터 임베딩이란?

벡터 임베딩은 객체의 의미를 벡터 공간에 포착한 것이에요. 객체의 특징을 나타내는 숫자들의 집합으로 구성되며, 이를 위해 학습된 머신러닝 모델인 벡터라이저 모델(vectorizer model) 이 생성해요.

벡터 검색은 저장된 객체의 벡터를 쿼리 벡터와 비교해 가장 가까운 것을 찾은 뒤, 상위 n개 결과를 반환해요.

객체 벡터 (Object vectors)

벡터 검색을 하려면 각 객체가 대표 벡터 임베딩을 가져야 해요. 벡터를 만드는 모델을 벡터라이저 모델 또는 임베딩 모델이라고 해요. 사용자는 두 가지 방식 중 하나로 객체와 벡터를 채울 수 있어요.

  • Weaviate의 벡터라이저 모델 제공자 통합을 사용해 벡터 생성
  • Weaviate에 벡터를 직접 제공

모델 제공자 통합

Weaviate는 Cohere, Ollama, OpenAI 등 인기 있는 벡터라이저 모델 제공자와의 퍼스트파티 통합을 제공해요. 이 워크플로에서는 컬렉션에 벡터라이저를 구성하면 Weaviate가 객체 삽입이나 검색 시점에 필요할 때 벡터를 자동으로 생성해요.

컬렉션에 벡터라이저가 설정되면 나중에 바꿀 수 없어요. 이는 벡터가 일관되게 생성되고 호환성을 유지하도록 보장하기 위해서예요. 벡터라이저를 바꿔야 한다면 원하는 벡터라이저로 새 컬렉션을 만들고 데이터를 새 컬렉션으로 마이그레이션해야 해요.

나만의 벡터 가져오기 (Bring your own vector)

객체를 삽입할 때 벡터를 Weaviate에 직접 업로드할 수도 있어요. 이미 모델이 생성한 벡터가 있거나, Weaviate와의 통합이 없는 특정 벡터라이저 모델을 쓰고 싶을 때 유용해요.

쿼리 벡터 (Query vectors)

Weaviate에서 쿼리 벡터는 다음으로 지정할 수 있어요.

  • 쿼리 벡터 (nearVector)
  • 쿼리 객체 (nearObject)
  • 쿼리 텍스트 (nearText)
  • 쿼리 미디어 (nearImage 또는 nearVideo)

nearObject

nearObject 쿼리에서는 객체 ID를 Weaviate에 제공해요. Weaviate는 해당 객체의 벡터를 가져와 저장된 객체의 벡터와 비교해 가장 유사한 객체를 찾아요.

nearText (그리고 nearImage, nearVideo)

nearText 쿼리에서는 입력 텍스트를 Weaviate에 제공해요. Weaviate는 지정된 벡터라이저 모델을 사용해 그 텍스트의 벡터를 생성하고, 저장된 객체의 벡터와 비교해 가장 유사한 객체를 찾아요.

다중 타겟 벡터 검색에서는 Weaviate가 여러 개의 단일 타겟 벡터 검색을 동시에 수행해요. 이 검색들은 각각 벡터 거리 스코어를 가진 여러 결과 집합을 만들어 내요. Weaviate는 이 결과 집합들을 "조인 전략(join strategy)"을 사용해 결합해 각 결과에 최종 스코어를 매겨요.

벡터 인덱스와 검색

Weaviate는 효율적인 벡터 검색을 위해 벡터 인덱스를 사용해요. 다른 인덱스 유형과 마찬가지로 벡터 인덱스는 빠른 검색을 가능하게 하면서도 검색 품질(예: 재현율), 검색 처리량, 리소스 사용(예: 메모리) 같은 다른 요구를 최적화하도록 벡터 임베딩을 구성해요.

Weaviate에는 hnsw, flat, dynamic 등 여러 유형의 벡터 인덱스가 있어요. 각 컬렉션 또는 테넌트는 자신만의 벡터 인덱스를 가지며, 각각 다른 구성을 가진 여러 벡터 인덱스를 가질 수도 있어요.

거리 메트릭 (Distance metrics)

벡터 거리를 측정하는 방법은 여러 가지(코사인 거리, 내적, 유클리드 거리 등)가 있어요. Weaviate는 거리 메트릭 페이지에 나열된 다양한 거리 메트릭을 지원해요.

Weaviate는 벡터 검색의 기본 거리 메트릭으로 코사인 거리를 사용해요. 이는 벡터라이저 모델의 일반적인 거리 메트릭이기 때문이에요.

더 알아보기 (Learn more)