벡터라이저와 벡터 인덱스 설정
벡터라이저와 벡터 인덱스 설정 (Vectorizer and vector index config)
컬렉션에 vectorizer(임베딩 모델)를 지정하면 검색 품질의 토대가 잡힙니다. 객체 속성 텍스트를 벡터로 바꿀지, 컬렉션 이름까지 벡터화에 포함할지, 벡터 인덱스를 어떤 방식으로 구성할지까지 이 페이지에서 조정할 수 있어요. 벡터 설정은 단순히 "모델 하나 고르는 일"이 아니라, 검색 성능과 메모리, 정확도의 균형을 잡는 작업입니다.
벡터라이저 지정과 파라미터
컬렉션별로 벡터라이저가 어떻게 동작할지(예: 어떤 모델을 쓸지)를 정하려면 벡터라이저 파라미터를 설정합니다.
from weaviate.classes.config import Configure
client.collections.create(
"Article",
vector_config=Configure.Vectors.text2vec_cohere(
model="embed-multilingual-v2.0",
vectorize_collection_name=True
),
)
네임드 벡터(Named vectors)
한 컬렉션에 여러 네임드 벡터를 정의할 수 있어요. 이렇게 하면 각 객체가 각자만의 벡터 인덱스를 가진 여러 벡터 임베딩으로 표현됩니다. 각 네임드 벡터는 고유한 벡터라이저와 벡터 인덱스 설정을 가질 수 있습니다.
from weaviate.classes.config import Configure, Property, DataType
client.collections.create(
"ArticleNV",
vector_config=[ # "text2vec-cohere" 벡터라이저로 네임드 벡터를 만듭니다
Configure.Vectors.text2vec_cohere(
name="title",
source_properties=["title"], # (선택) 소스 속성 지정
vector_index_config=Configure.VectorIndex.hnsw(), # (선택) 벡터 인덱스 옵션
),
# "text2vec-openai" 벡터라이저로 또 다른 네임드 벡터를 만듭니다
Configure.Vectors.text2vec_openai(
name="title_country",
source_properties=[
"title",
"country",
], # (선택) 소스 속성 지정
vector_index_config=Configure.VectorIndex.hnsw(), # (선택) 벡터 인덱스 옵션
),
# 직접 업로드한 벡터를 위한 네임드 벡터
Configure.Vectors.self_provided(
name="custom_vector",
vector_index_config=Configure.VectorIndex.hnsw(), # (선택) 벡터 인덱스 옵션
),
],
properties=[ # 속성 정의
Property(name="title", data_type=DataType.TEXT),
Property(name="country", data_type=DataType.TEXT),
],
)
v1.31부터는 네임드 벡터가 이미 있는 기존 컬렉션 정의에 네임드 벡터를 추가할 수 있습니다. (네임드 벡터가 없는 컬렉션에는 불가능합니다.)
from weaviate.classes.config import Configure
articles = client.collections.use("Article")
articles.config.add_vector(
vector_config=Configure.Vectors.text2vec_cohere(
name="body_vector",
source_properties=["body"],
)
)
멀티 벡터 임베딩(Multi-vectors)
v1.30부터 도입된 멀티 벡터는 단일 객체를 여러 벡터(즉 2차원 행렬)로 표현합니다. 멀티 벡터는 현재 네임드 벡터의 HNSW 인덱스에서만 사용할 수 있어요. 해당 네임드 벡터에서 활성화해야 합니다.
from weaviate.classes.config import Configure, Property, DataType
client.collections.create(
"DemoCollection",
vector_config=[
# 예제 1 - 모델 통합 사용
# 팩토리 함수가 HNSW 인덱스의 멀티 벡터 지원을 자동으로 켭니다
Configure.MultiVectors.text2vec_jinaai(
name="jina_colbert",
source_properties=["text"],
),
# 예제 2 - 사용자가 직접 제공한 멀티 벡터
# HNSW 인덱스의 멀티 벡터 지원을 명시적으로 켜야 합니다
Configure.MultiVectors.self_provided(
name="custom_multi_vector",
),
],
properties=[Property(name="text", data_type=DataType.TEXT)],
)
멀티 벡터는 단일 벡터보다 메모리를 더 씁니다. 벡터 양자화와 인코딩으로 압축해 메모리 사용을 줄일 수 있어요.
벡터 인덱스 타입
벡터 인덱스 타입은 컬렉션 생성 시점에 각 컬렉션별로 설정할 수 있으며 hnsw, flat, dynamic, hfresh 중 하나를 고릅니다.
from weaviate.classes.config import Configure, Property, DataType
client.collections.create(
"Article",
vector_config=Configure.Vectors.text2vec_openai(
name="default",
vector_index_config=Configure.VectorIndex.hnsw(), # HNSW 인덱스 사용
# vector_index_config=Configure.VectorIndex.flat(), # FLAT 인덱스 사용
# vector_index_config=Configure.VectorIndex.dynamic(), # DYNAMIC 인덱스 사용
# vector_index_config=Configure.VectorIndex.hfresh(), # HFRESH 인덱스 사용
),
properties=[
Property(name="title", data_type=DataType.TEXT),
Property(name="body", data_type=DataType.TEXT),
],
)
벡터 인덱스 파라미터
압축과 필터 전략 같은 벡터 인덱스 파라미터는 컬렉션 설정으로 지정합니다. 일부 파라미터는 컬렉션 생성 후에 나중에 업데이트할 수 있습니다.
from weaviate.classes.config import (
Configure,
Property,
DataType,
VectorDistances,
VectorFilterStrategy,
)
client.collections.create(
"Article",
vector_config=Configure.Vectors.text2vec_openai(
name="default",
vector_index_config=Configure.VectorIndex.hnsw(
ef_construction=300,
distance_metric=VectorDistances.COSINE,
filter_strategy=VectorFilterStrategy.ACORN,
),
),
)
속성별 설정
컬렉션의 개별 속성을 각각 구성할 수 있어요. 흔히 쓰는 설정은 다음과 같습니다.
- 속성을 벡터화할지
- 속성 이름을 벡터화에 포함할지
- 토큰화 타입 설정
from weaviate.classes.config import Configure, Property, DataType, Tokenization
client.collections.create(
"Article",
vector_config=Configure.Vectors.text2vec_cohere(),
properties=[
Property(
name="title",
data_type=DataType.TEXT,
vectorize_property_name=True, # 벡터화할 값에 "title"을 포함시킵니다
tokenization=Tokenization.LOWERCASE, # "lowercase" 토큰화 사용
description="The title of the article.", # (선택) 설명
),
Property(
name="body",
data_type=DataType.TEXT,
skip_vectorization=True, # 이 속성은 벡터화하지 않습니다
tokenization=Tokenization.WHITESPACE, # "whitespace" 토큰화 사용
),
],
)
직접 벡터를 가져올 때는 거리 척도 지정
자체 벡터(BYOV)를 쓰려면 distance metric(거리 척도)을 지정해야 합니다.
from weaviate.classes.config import Configure, VectorDistances
client.collections.create(
"Article",
vector_config=Configure.Vectors.text2vec_openai(
vector_index_config=Configure.VectorIndex.hnsw(
distance_metric=VectorDistances.COSINE
),
),
)