다음을 통해 공유


Azure DocumentDB의 벡터 검색에 대한 제품 수량화

PQ(제품 양자화)는 벡터 검색에 사용되는 고차원 벡터 포함을 크게 압축하는 Azure DocumentDB의 강력한 기술입니다. 이 압축은 메모리 사용을 줄이고 가장 가까운 인접 검색 속도를 높여 큰 벡터 데이터 세트의 효율성을 향상시킵니다. PQ는 속도와 규모에 대한 이점을 제공하지만 정확도를 희생할 수 있습니다.

혜택

  • 스토리지 감소: PQ는 전체 정밀도(float32) 벡터에 비해 벡터 인덱스에 필요한 스토리지를 크게 줄여 큰 데이터 세트의 비용을 크게 절감합니다.
  • 빠른 검색: 압축 벡터를 사용하면 시스템에서 전체 정밀도 벡터보다 거리를 계산하고 가장 가까운 인접 항목을 훨씬 빠르게 찾을 수 있습니다.
  • 향상된 확장성: 메모리 오버헤드를 줄이면 벡터 검색 크기를 조정하여 클러스터 내에서 더 크고 더 높은 차원의 임베딩을 처리할 수 있습니다.

작동 방식

제품 정량화는 고차원 벡터 공간을 여러 하위 차원 하위 영역으로 나눕니다. 그런 다음 각 하위 영역은 클러스터링 알고리즘(일반적으로 k-평균)을 사용하여 독립적으로 양자화됩니다. 각 클러스터의 중심은 클러스터 내의 모든 벡터를 나타냅니다. 그런 다음 각 원래 벡터는 각 하위 영역에 속한 클러스터 ID의 짧은 코드로 표시됩니다.

제품 정량화 사용

Product quantization을 사용하여 벡터 인덱스를 생성하기 위해 createIndexes 명령을 사용하고 cosmosSearchOptions"compression": "pq"을 지정하고 "kind" : "vector-diskann"을 입력합니다.

{
    "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
            }
        }
    ]
}
분야 유형 Description
compression 문자열 "pq"로 설정하여 제품 양자화를 사용하도록 합니다.
pqCompressedDims integer PQ 압축 이후의 차원(원래 차원보다 작아야 합니다). 생략하면 자동으로 계산됩니다. 범위: 1-8000.
pqSampleSize integer 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 DocumentDB는 oversampling 연산자에서 $search 매개 변수를 제공합니다.

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의 oversampling 팩터를 사용하여 k: 10 상위 10개의 가장 유사한 문서를 요청합니다. 이는 압축 인덱스를 통한 검색의 정확성을 향상시키기 위해 20개의 후보를 검색합니다.

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
        }
    }
])

하프-프리시전 대 제품 양자화

Azure DocumentDB에서 반정밀도 및 PQ(제품 양자화) 압축 벡터 인덱스는 모두 압축을 달성하고 검색에 영향을 미치는 방식이 다릅니다.

특징 반정밀도 제품 정량화(PQ)
Compression 메서드 각 벡터 차원을 16비트로 줄입니다. 벡터 공간을 하위 영역으로 나누고 각각을 정량화합니다.
최대 크기 최대 4,000 최대 16,000개
정밀도 변경 낮은 비트 깊이로 인해 약간의 손실이 발생합니다. pqCompressedDims을 통해 구성 가능한 잠재적으로 더 큰 손실.
검색 속도 더 작은 인덱스로 인해 속도가 증가했습니다. 고도로 압축된 벡터로 인해 속도가 크게 향상됩니다.
인덱스 빌드 시간 비교적 빠릅니다. 중심 학습(pqSampleSize)으로 인해 더 길어질 수 있습니다.
인덱스 지원 HNSW, IVF. DiskANN.
Configuration 간단히 compression: "half"을(를) 활성화하세요. 추가 매개 변수: pqCompressedDims, . pqSampleSize
오버샘플링 사용 경미한 정밀도 손실에 도움이 됩니다. 더 큰 압축에서 정확도를 복구하는 데 필수적입니다.
이상적인 사용 사례 적당한 메모리 감소, 증가된 차원, 허용되는 정밀도 절충. 큰 데이터 세트, 높은 차원, 우선 순위가 지정된 빠른 검색, 오버샘플링으로 관리되는 정밀도.

제품 정량화에 대한 고려 사항

  • 정밀도 대 압축: PQ 압축이 높을수록 인덱스가 더 작아지고 검색 속도가 빨라지지만 정밀도 손실이 커집니다. pqCompressedDimsoversampling을(를) 가지고 적절한 균형을 찾아 실험해 보세요.
  • 인덱스 빌드 시간: PQ 인덱스 생성은 중심 학습 프로세스 pqSampleSize로 인해 더 오래 걸릴 수 있습니다.
  • 데이터 배포: PQ는 벡터 데이터에 명확한 클러스터 구조가 있는 경우에 가장 적합합니다.

다음 단계