PQ(제품 정량화)는 벡터 검색에 사용되는 고차원 벡터 포함을 크게 압축하는 Azure Cosmos DB for MongoDB vCore의 강력한 기술입니다. 이 압축은 메모리 사용을 줄이고 가장 가까운 인접 검색 속도를 높여 큰 벡터 데이터 세트의 효율성을 향상시킵니다. PQ는 속도와 규모에 대한 이점을 제공하지만 정확도를 희생할 수 있습니다.
혜택
- 스토리지 감소: PQ는 전체 정밀도(float32) 벡터에 비해 벡터 인덱스에 필요한 스토리지를 크게 줄여 큰 데이터 세트의 비용을 크게 절감합니다.
- 빠른 검색: 압축 벡터를 사용하면 시스템에서 전체 정밀도 벡터보다 거리를 계산하고 가장 가까운 인접 항목을 훨씬 빠르게 찾을 수 있습니다.
- 향상된 확장성: 메모리 오버헤드를 줄이면 벡터 검색 크기를 조정하여 클러스터 내에서 더 크고 더 높은 차원의 임베딩을 처리할 수 있습니다.
작동 방식
제품 정량화는 고차원 벡터 공간을 여러 하위 차원 하위 영역으로 나눕니다. 그런 다음 각 하위 영역은 클러스터링 알고리즘(일반적으로 k-평균)을 사용하여 독립적으로 양자화됩니다. 각 클러스터의 중심은 클러스터 내의 모든 벡터를 나타냅니다. 그런 다음 각 원래 벡터는 각 하위 영역에 속한 클러스터 ID의 짧은 코드로 표시됩니다.
제품 정량화 사용
Product quantization을 사용하여 벡터 인덱스를 만들려면, "compression": "pq"
및 "kind" : "vector-diskann"
을(를) 지정하여 createIndexes
명령을 사용하십시오.
{
"createIndexes": "<collection_name>",
"indexes": [
{
"name": "<index_name>",
"key": {
"<path_to_property>": "cosmosSearch"
},
"cosmosSearchOptions": {
"kind": "vector-diskann",
"similarity": "<string_value>", // "COS", "L2"
"dimensions": <integer_value>, // Max 16,000
"compression": "pq",
"pqCompressedDims": <integer_value>, // Dimensions after compression (< original)
"pqSampleSize": <integer_value> // Samples for centroid generation
}
}
]
}
분야 | 유형 | 설명 |
---|---|---|
compression |
문자열 |
"pq" 로 설정하여 제품 양자화를 활성화하십시오. |
pqCompressedDims |
정수 | PQ 압축 이후의 차원(원래 차원보다 작아야 합니다). 생략하면 자동으로 계산됩니다. 범위: 1-8000. |
pqSampleSize |
정수 | PQ 중심 학습을 위한 샘플 벡터 수입니다. 값이 높을수록 품질이 향상되지만 빌드 시간이 길어집니다. 기본값: 1000. 범위: 1000-100000. |
비고
제품 정량화는 현재 인덱스 형식에서 vector-diskann
만 지원됩니다.
비고
최상의 결과를 얻으려면 컬렉션에 데이터가 있는 후 PQ 인덱스 만들기 컬렉션이 비어 있으면 시스템은 초기 중심에서 임의 벡터를 사용합니다. 문서 수가 보다 pqSampleSize
작으면 학습 데이터는 기존 벡터 데이터의 범위 내에서 임의의 데이터로 채워집니다.
압축된 차원 설정 방법
지정 pqCompressedDims
하지 않으면 원래 벡터 dimensions
에 따라 자동으로 결정됩니다.
원래 차원 범위 | pqCompressedDims |
---|---|
[0 - 32) | 치수 / 2 |
[32 - 64) | 16 |
[64 - 128) | 32 |
[128 - 512) | 64 |
[512 - 1536) | 96 |
1536 이상 | 128 |
PQ 인덱스 만들기
db.runCommand(
{
"createIndexes": "your_vector_collection",
"indexes": [
{
"key": { "v": "cosmosSearch" },
"name": "diskann_pq_index",
"cosmosSearchOptions": {
"kind": "vector-diskann",
"similarity": "COS",
"dimensions": 1536,
"compression": "pq",
"pqCompressedDims": 96,
"pqSampleSize": 2000
}
}
]
} )
오버샘플링을 사용하여 검색 개선
PQ 압축은 거리 계산에서 정밀도 손실을 초래할 수 있습니다. 이를 줄이기 위해 Azure Cosmos DB for MongoDB(vCore)는 $search
연산자에서 oversampling
매개 변수를 제공합니다.
oversampling
요소(최소 1인 부동 소수점)는 압축된 인덱스에서 원하는 결과 수보다 더 많은 후보 벡터를 검색하도록 지정합니다. 이러한 추가 후보는 원래의 전체 정밀도 벡터를 사용하여 검색을 구체화하여 최종 최고 k
정확도를 향상시키는 데 사용됩니다. 예를 들어 가장 유사한 상위 10개(k
=10)를 얻으려면 1.5 또는 oversampling
과 같은 값으로 설정하는 것이 좋습니다. 이 "oversampling": 1.5
경우 시스템은 먼저 인덱스에서 15명의 후보를 얻고 전체 정밀도 데이터를 사용하여 상위 10개 후보를 구체화합니다.
{
"$search": {
"cosmosSearch": {
"vector": <vector_to_search>,
"path": "<path_to_property>",
"k": <num_results_to_return>,
"oversampling": <float_value>
},
}
}
이 코드 스니펫은 제품 양자화와 $search
연산자를 사용한 벡터 검색을 보여줍니다. 입력으로 queryVector
를 사용하고 v
필드를 검색합니다. 쿼리는 2.0의 계수를 적용하여 가장 유사한 상위 10개 문서(k: 10
)를 요청합니다. 이로 인해 압축된 인덱스를 통해 검색 정확도를 높이기 위해 20명의 후보자(oversampling
)를 검색합니다.
db.your_vector_collection.aggregate([
{
$search: {
"cosmosSearch": {
"vector": [0.1, 0.5, 0.9, ...],
"path": "v",
"k": 10,
"oversampling": 2.0 // Retrieve 2 * 10 = 20 candidates for reranking
},
"returnStoredSource": true
}
}
])
Half-Precision 및 제품 양자화
Azure Cosmos DB for MongoDB(vCore)의 반정밀도 및 PQ(제품 정량화) 압축 벡터 인덱스는 모두 압축을 달성하고 검색에 영향을 미치는 방식이 다릅니다.
특징 | Half-Precision | 제품 정량화(PQ) |
---|---|---|
Compression 메서드 | 각 벡터 차원을 16비트로 줄입니다. | 벡터 공간을 하위 영역으로 나누고 각각을 정량화합니다. |
최대 크기 | 최대 4,000 | 최대 16,000개 |
정밀도 변경 | 낮은 비트 깊이로 인해 약간의 손실이 발생합니다. | 잠재적으로 더 큰 손실, pqCompressedDims 를 통해 구성 가능함. |
검색 속도 | 더 작은 인덱스로 인해 속도가 적당히 증가했습니다. | 고도로 압축된 벡터로 인해 속도가 크게 향상됩니다. |
인덱스 빌드 시간 | 비교적 빠릅니다. | 중심점을 훈련시키면 더 길어질 수 있습니다 (pqSampleSize ). |
인덱스 지원 | HNSW, IVF. | DiskANN. |
설정 | 직접 compression: "half" 를 활성화하세요. |
추가 매개 변수: pqCompressedDims , . pqSampleSize |
오버샘플링 사용 | 경미한 정밀도 손실에 도움이 됩니다. | 더 큰 압축에서 정확도를 복구하는 데 필수적입니다. |
이상적인 사용 사례 | 적당한 메모리 감소, 증가된 차원, 허용 가능한 정밀도 절충. | 큰 데이터 세트, 높은 차원, 우선 순위가 지정된 빠른 검색, 오버샘플링으로 관리되는 정밀도. |
제품 정량화에 대한 고려 사항
-
정밀도 대 압축: PQ 압축률이 높아질수록 인덱스는 더 작아지고 검색 속도는 빨라지지만, 정밀도가 더 많이 손실됩니다.
pqCompressedDims
와oversampling
를 실험하여 적절한 균형을 찾으세요. -
인덱스 빌드 시간: PQ 인덱스 생성은 중심 학습 프로세스
pqSampleSize
로 인해 더 오래 걸릴 수 있습니다. - 데이터 배포: PQ는 벡터 데이터에 명확한 클러스터 구조가 있는 경우에 가장 적합합니다.