Half-Precision 벡터 인덱싱이란?
반정밀도 벡터 인덱싱을 사용하면 표준 32비트 부동 소수점 대신 16비트 부동 소수점 숫자를 사용하여 벡터 포함을 저장하고 인덱싱할 수 있습니다. 이러한 최적화로 인해 메모리 사용량과 스토리지 비용이 크게 감소하여 더 큰 데이터 세트 및 더 높은 차원 벡터로 작업하는 것이 더 적합합니다. 또한 데이터 밀도를 최적화하면 많은 벡터 검색 시나리오에서 쿼리 성능이 향상될 수 있습니다.
주요 이점
- 차원 지원 증가: 반정밀도를 사용하면 이제 최대 4,000개의 차원 으로 벡터를 인덱싱할 수 있습니다(이전 제한인 2,000개에서 증가).
- 스토리지 공간 감소: 벡터를 16비트 형식으로 저장하면 전체 정밀도 벡터에 비해 필요한 스토리지 양이 크게 줄어듭니다. 따라서 특히 대규모 벡터 데이터베이스의 경우 상당한 비용을 절감할 수 있습니다.
- 구성 가능한 성능 및 정밀도: 검색 결과를 미세 조정하기 위해 쿼리 실행 중에 오버샘플링 매개 변수를 제공합니다. 이렇게 하면 검색 속도와 정밀도 감소의 잠재적 영향 간의 균형을 제어할 수 있습니다.
Half-Precision 벡터 인덱스 만들기
컬렉션에 대한 벡터 인덱스를 정의할 때, "compression": "half"
내에서 cosmosSearchOptions
옵션을 지정하여 반정밀도 압축을 사용할 수 있습니다.
db.runCommand({
"createIndexes": "<vector_collection_name>",
"indexes": [
{
"key": { "<vector_field_name>": "cosmosSearch" },
"name": "<index_name>",
"cosmosSearchOptions": {
"kind": "vector-hnsw", // or vector-ivf
"similarity": "cos",
"dimensions": integer_value, // max 4000
"compression": "half"
}
}
]
});
오버샘플링을 사용하여 검색 개선
반정밀도 압축을 사용하는 벡터 인덱스를 쿼리할 때 oversampling
매개 변수를 $search
집계 단계에서 사용할 수 있습니다. 이 매개 변수는 16비트 표현에서 도입된 정밀도의 잠재적 손실을 완화하는 데 도움이 됩니다.
이 oversampling
인수를 사용하면 원하는 최종 결과 수(k
)보다 반정밀도 인덱스에서 가장 가까운 잠재적인 인접 항목을 검색할 수 있습니다. 그런 다음, 최종 순위가 지정된 결과에서 더 높은 정확도를 보장하기 위해 원래 전체 정밀도 벡터를 사용하여 이러한 후보를 비교합니다.
예를 들어 가장 유사한 상위 10개(k
=10)를 얻으려면 1.5 또는 oversampling
과 같은 값으로 설정하는 것이 좋습니다. 이를 통해 "oversampling": 1.5
시스템은 먼저 반정밀도 인덱스에서 15명의 후보를 구한 다음 전체 정밀도 데이터를 사용하여 상위 10개 후보를 구체화합니다.
db.collection.aggregate([
{
"$search": {
"cosmosSearch": {
"vector": query_vector,
"path": path_to_property,
"k": num_results_to_return,
"oversampling": double_value
}
}
},
{
"$project": {
"similarityScore": { "$meta": "searchScore" },
"_id": 0
}
}
]);
비고
oversampling
요소는 최소값이 인 1.0
이어야 합니다. 이 요소는 .을 사용하여 만든 벡터 인덱스와만 관련이 있습니다 "compression": "half"
.
Half-Precision 및 제품 양자화
azure Cosmos DB for MongoDB (vCore)의 Half-Precision 및 Product Quantization (PQ)는 벡터 인덱스를 압축하는 방법으로, 두 방법 모두 압축을 달성하고 검색에 영향을 미치는 부분에서 차이가 있습니다.
특징 | Half-Precision | 제품 양자화(PQ) |
---|---|---|
Compression 메서드 | 각 벡터 차원을 16비트로 줄입니다. | 벡터 공간을 하위 영역으로 나누고 각각을 정량화합니다. |
최대 크기 | 최대 4,000 | 최대 16,000개 |
정밀도 변경 | 낮은 비트 깊이로 인해 약간의 손실이 발생합니다. | 잠재적으로 더 큰 손실, pqCompressedDims 를 통해 구성 가능함. |
검색 속도 | 더 작은 인덱스로 인해 속도가 적당히 증가했습니다. | 고도로 압축된 벡터로 인해 속도가 크게 향상됩니다. |
인덱스 빌드 시간 | 비교적 빠릅니다. | 중심점을 훈련시키면 더 길어질 수 있습니다 (pqSampleSize ). |
인덱스 지원 | HNSW, IVF. | DiskANN. |
설정 | 직접 compression: "half" 를 활성화하세요. |
추가 매개 변수: pqCompressedDims , . pqSampleSize |
오버샘플링 사용 | 경미한 정밀도 손실에 도움이 됩니다. | 더 큰 압축에서 정확도를 복구하는 데 필수적입니다. |
이상적인 사용 사례 | 적당한 메모리 감소, 증가된 차원, 허용 가능한 정밀도 절충. | 큰 데이터 세트, 높은 차원, 우선 순위가 지정된 빠른 검색, 오버샘플링으로 관리되는 정밀도. |