• Milvus 소개
  • 시작하기
  • 개념
  • 사용자 안내서
    • 컬렉션
    • 스키마 및 데이터 필드
    • 삽입 및 삭제
    • 색인
    • 검색
    • 함수 및 모델 추론
    • 저장소 최적화
    • 스냅샷
  • 데이터 가져오기
  • AI 도구
  • 관리 가이드
  • 도구
  • 연동 기능
  • 튜토리얼
  • 자주 묻는 질문
  • API Reference

SPARSE_INVERTED_INDEX

SPARSE_INVERTED_INDEX 인덱스는 Milvus에서 스파스 벡터를 효율적으로 저장하고 검색하기 위해 사용하는 인덱스 유형입니다. 이 인덱스는 스파스 벡터의 0이 아닌 차원을 기반으로 역색인 구조를 구축합니다. 이 인덱스는 BM25 전체 텍스트 검색 및 내적 기반의 스파스 임베딩 검색에 사용할 수 있습니다.

스파스 벡터 필드, 메트릭 유형 및 전체 텍스트 검색에 대한 자세한 내용은 ‘스파스 벡터’, ‘메트릭 유형’‘전체 텍스트 검색’을 참조하십시오.

인덱스 구축

Milvus에서 스파스 벡터 필드에 대해 ‘ SPARSE_INVERTED_INDEX ’ 인덱스를 생성하려면 ` add_index() ` 메서드를 사용하고 ` index_type`, ` metric_type` 및 인덱스 매개변수를 지정하십시오.

BM25 전체 텍스트 검색의 경우, BM25 함수에 의해 생성된 스파스 벡터 필드에 인덱스를 생성합니다. ` metric_type `을 ` BM25`으로 설정합니다.

from pymilvus import MilvusClient

client = MilvusClient(uri="http://localhost:19530")

# Prepare index building params
index_params = client.prepare_index_params()
index_params.add_index(
    field_name="sparse", # Name of the sparse vector field to index
    index_type="SPARSE_INVERTED_INDEX", # Type of the index to create
    index_name="sparse_bm25_index", # Name of the index to create
    metric_type="BM25", # Metric type used for full text search
    params={"inverted_index_algo": "DAAT_MAXSCORE"},
)

client.create_index(
    collection_name="your_collection_name",
    index_params=index_params,
)

스파스 임베딩 검색의 경우, 외부에서 생성된 스파스 벡터를 저장하는 스파스 벡터 필드를 기반으로 인덱스를 구축하십시오. metric_typeIP 로 설정하십시오.

# Prepare index building params
index_params = client.prepare_index_params()
index_params.add_index(
    field_name="sparse_vector", # Name of the sparse vector field to index
    index_type="SPARSE_INVERTED_INDEX", # Type of the index to create
    index_name="sparse_ip_index", # Name of the index to create
    metric_type="IP", # Metric type used to measure similarity
    params={"inverted_index_algo": "SINDI"},
)

client.create_index(
    collection_name="your_collection_name",
    index_params=index_params,
)

앞서 설명한 구성에서:

  • index_type: 생성할 인덱스의 유형입니다. 이 값을 SPARSE_INVERTED_INDEX 로 설정하십시오.

  • metric_type: 스파스 벡터 간의 유사도를 계산하는 데 사용되는 메트릭입니다. 유효한 값:

    • BM25: 전체 텍스트 검색에 BM25 관련도 점수 산정 방식을 사용합니다.

    • IP (내적): 내적을 사용하여 스파스 벡터의 유사도를 측정합니다.

    자세한 내용은 ‘메트릭 유형’‘전체 텍스트 검색’을 참조하십시오.

  • params.inverted_index_algo: 색인 구축 및 쿼리 처리에 사용되는 알고리즘입니다. 유효한 값:

    inverted_index_algo 를 지정하지 않으면, Milvus는 metric_type 에 따라 기본 알고리즘을 선택합니다: BM25 의 경우 DAAT_MAXSCORE, IP 의 경우 SINDI.

    SPARSE_INVERTED_INDEX 인덱스에 사용할 수 있는 인덱스 생성 매개변수에 대한 자세한 내용은 인덱스 생성 매개변수를 참조하십시오.

인덱스 매개변수 구성이 완료되면, ` create_index() ` 메서드를 직접 사용하거나 ` create_collection ` 메서드에 인덱스 매개변수를 전달하여 인덱스를 생성할 수 있습니다. 자세한 내용은 ‘컬렉션 생성’을 참조하십시오.

인덱스 검색

인덱스가 구축되고 엔티티가 삽입되면, 인덱스를 대상으로 유사도 검색을 수행할 수 있습니다.

BM25 전체 텍스트 검색의 경우, 쿼리로 원본 텍스트를 사용합니다. Milvus는 BM25 함수를 통해 쿼리 텍스트를 스파스 벡터로 변환합니다.

res = client.search(
    collection_name="your_collection_name",
    data=["what is information retrieval?"],
    anns_field="sparse",
    output_fields=["text"],
    limit=3,
)

스파스 임베딩 검색의 경우, 쿼리 벡터로 스파스 벡터 사전(dictionary)을 사용합니다.

# Prepare the query vector
query_vector = [{1: 0.2, 50: 0.4, 1000: 0.7}]

res = client.search(
    collection_name="your_collection_name",
    anns_field="sparse_vector",
    data=query_vector,
    limit=3,
    search_params={"metric_type": "IP"},
)

기본적으로 Milvus는 인덱스에 구성된 검색 알고리즘을 사용합니다.

SPARSE_INVERTED_INDEX 인덱스에서 사용할 수 있는 검색 매개변수에 대한 자세한 내용은 인덱스별 검색 매개변수를 참조하십시오.

인덱스 매개변수

이 섹션에서는 인덱스를 구축하고 인덱스에서 검색을 수행하는 데 사용되는 매개변수에 대한 개요를 제공합니다.

인덱스 생성 매개변수

다음 표에는 인덱스를 생성할params 에서 구성할 수 있는 매개 변수가 나열되어 있습니다.

매개 변수

설명

값 범위

조정 권장 사항

inverted_index_algo

인덱스 생성 및 쿼리에 사용되는 알고리즘입니다. 이 알고리즘은 인덱스가 쿼리를 처리하는 방식을 결정합니다.

"DAAT_MAXSCORE", "DAAT_WAND", "TAAT_NAIVE", "BLOCK_MAX_MAXSCORE", "BLOCK_MAX_WAND", "SINDI"

기본값: BM25 의 경우 "DAAT_MAXSCORE", IP 의 경우 "SINDI".

k 값이 높거나 검색어 수가 많은 쿼리가 포함된 BM25 전체 텍스트 검색 워크로드의 경우 "DAAT_MAXSCORE" 를 사용하십시오.

k 값이 작거나 쿼리가 짧은 BM25 워크로드의 경우 "DAAT_WAND" 를 사용하십시오.

"TAAT_NAIVE" 을 기준선으로 사용하거나, 평균 문서 길이 등 전체 컬렉션 통계에 따라 점수가 동적으로 조정되어야 하는 경우 이 알고리즘을 사용하십시오.

"BLOCK_MAX_MAXSCORE" 또는 "BLOCK_MAX_WAND" 을 사용하여 쿼리 프루닝에 블록 수준 최대 점수 메타데이터를 활용하십시오.

IP 와 함께 스파스 임베딩 검색을 수행하려면 "SINDI" 를 사용하십시오.

bm25_k1

BM25 스코어링에 대한 용어 빈도 포화도를 제어합니다. 이 매개변수는 metric_typeBM25 인 경우에만 적용됩니다.

권장 범위: [1.2, 2.0]

기본값: 1.2

문서 순위에서 용어 빈도에 더 큰 가중치를 부여하려면 이 값을 늘리십시오.

bm25_b

BM25 점수 산출 시 문서 길이 정규화의 강도를 제어합니다. 이 매개 변수는 metric_typeBM25 인 경우에만 적용됩니다.

범위: [0, 1]

기본값: 0.75

더 높은 값을 사용하면 길이 정규화가 더 강력하게 적용됩니다. 더 낮은 값을 사용하면 순위에 미치는 문서 길이의 영향을 줄일 수 있습니다.

인덱스별 검색 매개변수

다음 표에는 인덱스에서 검색할search_params.params 에서 구성할 수 있는 매개 변수가 나열되어 있습니다.

매개변수

설명

값 범위

조정 권장 사항

drop_ratio_search

검색 시 무시할 가장 작은 값의 비율로, 노이즈를 줄이는 데 도움이 됩니다.

범위: [0.0, 1.0) (예: 0.2는 가장 작은 값의 20%를 무시함)

쿼리 벡터의 희소성과 노이즈 수준에 따라 이 매개변수를 조정하십시오.

이 매개변수는 검색 과정에서 제외되는 절대값이 작은 값의 비율을 제어합니다. 이 값을 높이면(예: 0.2), 노이즈를 줄이고 더 중요한 구성 요소에 검색을 집중시켜 정밀도와 효율성을 향상시킬 수 있습니다. 그러나 더 많은 값을 제외하면 잠재적으로 관련성이 있는 신호를 배제함으로써 재현율이 낮아질 수도 있습니다. 워크로드에 맞춰 재현율과 정확도의 균형을 맞출 수 있는 값을 선택하십시오.

번역DeepL

관리형 Milvus를 무료로 사용해 보세요

Zilliz Cloud는 번거로움이 없으며, Milvus 기반으로 10배 더 빠릅니다.

시작하기
피드백

이 페이지가 도움이 되었나요?