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_type 를 IP 로 설정하십시오.
# 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: 색인 구축 및 쿼리 처리에 사용되는 알고리즘입니다. 유효한 값:"DAAT_MAXSCORE": Document-at-a-Time MaxScore 쿼리 처리. 이는BM25의 기본값입니다. 배경 정보는 ‘쿼리 평가: 전략 및 최적화’를 참조하십시오."DAAT_WAND": Document-at-a-Time WAND 쿼리 처리. 이 알고리즘은 topK 값이 작거나 쿼리 길이가 짧은 경우에 적합합니다. 배경 정보는 ‘2단계 검색 프로세스를 이용한 효율적인 쿼리 평가’를 참조하십시오."TAAT_NAIVE": 기본 Term-at-a-Time 쿼리 처리. 이 옵션을 기준선으로 사용하거나, 평균 문서 길이 등 전체 컬렉션 통계에 따라 점수가 동적으로 조정되어야 할 때 사용합니다."BLOCK_MAX_MAXSCORE": 블록 수준 최대 점수 메타데이터를 사용하는 MaxScore 쿼리 처리. 배경 정보는 ‘Block-Max 인덱스를 사용한 더 빠른 Top-k 문서 검색’을 참조하십시오."BLOCK_MAX_WAND": 블록 수준 최대 점수 메타데이터를 사용하는 WAND 쿼리 처리. 배경 정보는 “블록-맥스 인덱스를 사용한 더 빠른 Top-k 문서 검색”을 참조하십시오."SINDI": 고정된 문서 ID 윈도우를 기반으로 하며, 검색 시 SIMD 가속을 지원하는 스파스 역색인입니다. 이는 `IP`의 기본값입니다. 자세한 내용은 SINDI 논문을 참조하십시오.
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 에서 구성할 수 있는 매개 변수가 나열되어 있습니다.
매개 변수 |
설명 |
값 범위 |
조정 권장 사항 |
|---|---|---|---|
|
인덱스 생성 및 쿼리에 사용되는 알고리즘입니다. 이 알고리즘은 인덱스가 쿼리를 처리하는 방식을 결정합니다. |
기본값: |
k 값이 높거나 검색어 수가 많은 쿼리가 포함된 BM25 전체 텍스트 검색 워크로드의 경우 k 값이 작거나 쿼리가 짧은 BM25 워크로드의 경우
|
|
BM25 스코어링에 대한 용어 빈도 포화도를 제어합니다. 이 매개변수는 |
권장 범위: [1.2, 2.0] 기본값: 1.2 |
문서 순위에서 용어 빈도에 더 큰 가중치를 부여하려면 이 값을 늘리십시오. |
|
BM25 점수 산출 시 문서 길이 정규화의 강도를 제어합니다. 이 매개 변수는 |
범위: [0, 1] 기본값: 0.75 |
더 높은 값을 사용하면 길이 정규화가 더 강력하게 적용됩니다. 더 낮은 값을 사용하면 순위에 미치는 문서 길이의 영향을 줄일 수 있습니다. |
인덱스별 검색 매개변수
다음 표에는 인덱스에서 검색할 때 search_params.params 에서 구성할 수 있는 매개 변수가 나열되어 있습니다.
매개변수 |
설명 |
값 범위 |
조정 권장 사항 |
|---|---|---|---|
|
검색 시 무시할 가장 작은 값의 비율로, 노이즈를 줄이는 데 도움이 됩니다. |
범위: [0.0, 1.0) (예: 0.2는 가장 작은 값의 20%를 무시함) |
쿼리 벡터의 희소성과 노이즈 수준에 따라 이 매개변수를 조정하십시오. 이 매개변수는 검색 과정에서 제외되는 절대값이 작은 값의 비율을 제어합니다. 이 값을 높이면(예: |