다중 벡터 임베딩

다중 벡터 임베딩 (ColBERT, ColPali 등)

일반적으로 임베딩은 객체 하나를 하나의 벡터로 표현하지만, 다중 벡터 임베딩은 ColBERT·ColPali·ColQwen 같은 모델로 객체나 쿼리를 여러 개의 벡터로 표현합니다. 이렇게 하면 검색의 정밀도를 훨씬 높일 수 있어요. 이 가이드에서는 Weaviate에서 다중 벡터 임베딩을 쓰는 법을 배웁니다.

출처: 공식문서

사전 준비

  • Weaviate 인스턴스 (v1.29 이상, Weaviate Cloud 또는 로컬)
  • 원하는 Weaviate 클라이언트 라이브러리 설치
  • Jina AI API 키 (무료 "toy" 키는 Jina AI에서 발급 가능)

Weaviate 1.29부터 다중 벡터 임베딩을 지원하며, ColBERT 모델 통합(JinaAI의 모델) 또는 사용자가 직접 제공한 임베딩으로 다중 벡터 임베딩을 저장·검색할 수 있어요.

Option 1: ColBERT 모델 통합

쿼리 수행하기

1.4.1. 근접 텍스트 검색

response = collection.query.near_text(
    query="A good database for AI app builders",
    target_vector="multi_vector",
)

for result in response.objects:
    print(result.properties)

1.4.3. 벡터 검색

수동 벡터 검색을 할 때는 쿼리 임베딩을 직접 지정해야 해요. 이 예시에서는 multi_vector 인덱스를 검색하므로 쿼리 벡터가 대응하는 다중 벡터여야 합니다. 통합에서 JinaAI의 jina-colbert-v2 모델을 쓰므로, 쿼리 임베딩이 객체 임베딩과 호환되도록 JinaAI API로 직접 임베딩을 얻어야 해요.

response = collection.query.near_vector(
    near_vector=get_colbert_embedding("A good database for AI app builders"),  # Raw ColBERT embedding, in [[e11, e12, e13, ...], [e21, e22, e23, ...], ...] shape
    target_vector="multi_vector",
)

for result in response.objects:
    print(result.properties)

1.4.4. 하이브리드 검색 (수동 벡터)

response = collection.query.hybrid(
    query="A good database for AI app builders",
    vector=get_colbert_embedding("A good database for AI app builders"),  # Or any other raw ColBERT embedding
    target_vector="multi_vector",
)

Option 2: 사용자 제공 임베딩

벡터 검색

객체 임베딩을 만드는 데 쓴 것과 같은 모델(JinaAI의 jina-colbert-v2)로 쿼리를 벡터로 변환해 수동 벡터 검색을 수행할 수 있어요. 그래야 쿼리 임베딩이 객체 임베딩과 호환됩니다.

response = collection.query.near_vector(
    near_vector=get_colbert_embedding("A good database for AI app builders"),  # Raw ColBERT embedding, in [[e11, e12, e13, ...], [e21, e22, e23, ...], ...] shape
    target_vector="multi_vector",
)

for result in response.objects:
    print(result.properties)

하이브리드 검색 (수동 벡터)

response = collection.query.hybrid(
    query="A good database for AI app builders",
    vector=get_colbert_embedding("A good database for AI app builders"),  # Or any other raw ColBERT embedding
    target_vector="multi_vector",
)

정리

Weaviate에서 다중 벡터 임베딩을 쓰는 법을 살펴봤어요. v1.29부터 ColBERT 모델 통합 또는 직접 제공한 임베딩으로 다중 벡터 임베딩을 저장·검색할 수 있습니다.

데이터를 가져온 뒤에는 시맨틱·하이브리드·벡터 검색을 평소처럼 수행하면 됩니다. 가장 큰 차이는 임베딩의 형태(shape) 로, 임베딩을 직접 제공할 때는 다중 벡터라는 점을 꼭 고려해야 해요.

더 알아보기 (Learn more)