원문 캡처 · weaviate.io
원문 캡처 · weaviate.io

Weaviate 1.40은 HNSW 인덱스의 필터 벡터 검색 전략으로 PathSeer를 지원한다. 기존 컬렉션도 재색인 없이 설정을 바꿀 수 있으며, 기본 전략은 계속 acorn이다.

PathSeer는 노드마다 필터 검사와 거리 계산의 순서를 동적으로 조합한다. Weaviate에 적용한 방식은 기존 HNSW 그래프를 그대로 사용하며, 검색 초반에는 필터를 통과하는 2홉 이웃을 추가하고 후보 힙이 찬 뒤에는 필터를 통과하지 않는 노드 사이의 불필요한 거리 계산을 건너뛴다.

Weaviate 측이 Weaviate 1.40을 GCP c4-standard-16 인스턴스에서 시험한 결과, PathSeer는 평가한 거의 모든 작업 부하에서 가장 빠른 필터 전략이었다. 다만 필터가 질의와 강하게 부정적으로 연관된 BEIR Cohere 1.1M 데이터셋에서는 ACORN이 더 빨랐다. 같은 조건에서 recall@10 0.90 기준 ACORN은 PathSeer보다 8.7배 빠르게 나타났다. 반면 ef를 2048로 높였을 때 PathSeer의 재현율은 0.998까지 올라 ACORN의 0.984를 넘어섰다.

기존 컬렉션은 HNSW의 filterStrategy 값을 pathseer로 바꾸면 된다. flatSearchCutoff는 모든 전략보다 먼저 적용되므로, 필터 결과가 설정한 기준보다 적으면 기존처럼 무차별 대입 검색을 수행한다. 기본 flatSearchCutoff는 40,000개 객체다.

"vectorIndexConfig": { "filterStrategy": "pathseer"}

Python 클라이언트에서는 컬렉션을 만들 때 VectorFilterStrategy.PATHSEER를 지정하거나, 기존 컬렉션 설정을 Reconfigure.VectorIndex.hnsw로 업데이트할 수 있다. 원문은 두 방법의 예시를 제공한다:

from weaviate.classes.config import Configure, VectorFilterStrategyclient.collections.create( "Article", vector_index_config=Configure.VectorIndex.hnsw( filter_strategy=VectorFilterStrategy.PATHSEER, ),)

from weaviate.classes.config import Reconfigure, VectorFilterStrategyarticles = client.collections.use("Article")articles.config.update( vector_index_config=Reconfigure.VectorIndex.hnsw( filter_strategy=VectorFilterStrategy.PATHSEER, ),)

평가에는 BEIR Cohere, Sphere DPR, wiki-dpr 10M 데이터셋이 쓰였다. 결과는 데이터셋과 필터의 선택도·질의와의 상관관계에 따라 달랐다. 특히 무작위 필터에서는 PathSeer가 대체로 sweeping과 비슷했고, 매우 낮은 선택도에서 개선을 보였다. 따라서 업체의 평가 결과는 다양한 필터 조건에서 확인한 성능이지, 모든 데이터에서 우세하다는 뜻은 아니다.