Compartilhar via


Quantização do produto para pesquisa de vetor no Azure DocumentDB

A PQ (quantização de produto) é uma técnica poderosa no Azure DocumentDB que compacta significativamente inserções de vetor de alta dimensão usadas na pesquisa de vetor. Essa compactação reduz o uso de memória e acelera as pesquisas de vizinhos mais próximos, melhorando a eficiência para grandes conjuntos de dados de vetor. Embora o PQ ofereça benefícios para velocidade e escala, ele pode vir às custas da precisão.

Benefícios

  • Armazenamento reduzido: O PQ reduz consideravelmente o armazenamento necessário para índices vetoriais em comparação com vetores de precisão total (float32), levando a uma economia substancial de custos para grandes conjuntos de dados.
  • Pesquisa mais rápida: Trabalhar com vetores compactados permite que o sistema calcule distâncias e encontre potenciais vizinhos mais próximos muito mais rápido do que com vetores de precisão total.
  • Escalabilidade aprimorada: A sobrecarga de memória mais baixa permite dimensionar a pesquisa de vetores para lidar com inserções maiores e dimensionais mais altas em seu cluster.

Como funciona

A quantização do produto divide o espaço de vetor de alta dimensão em vários subespaços de dimensão inferior. Cada subespaço é então quantificado de forma independente usando um algoritmo de clustering (normalmente k-means). O centro de cada cluster representa todos os vetores dentro dele. Cada vetor original é representado por um código curto das IDs de cluster às que pertence em cada subespaço.

Usando a quantização do produto

Para criar um índice de vetor com quantização de produto, use o createIndexes comando com cosmosSearchOptions especificando "compression": "pq" e "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
            }
        }
    ]
}
Campo Tipo Description
compression cadeia Defina "pq" para habilitar a quantização do produto.
pqCompressedDims inteiro Dimensões após a compactação PQ (devem ser menores que as dimensões originais). Se omitido, é calculado automaticamente. Intervalo: 1-8000.
pqSampleSize inteiro Número de vetores de exemplo para treinamento de centroides PQ. Valor mais alto significa melhor qualidade, mas tempo de build mais longo. Padrão: 1000. Intervalo: 1.000 - 100.000.

Observação

Atualmente, há suporte para a quantização do produto somente com o vector-diskann tipo de índice.

Observação

Para obter melhores resultados, crie um índice PQ depois que sua coleção tiver dados. Se a coleção estiver vazia, o sistema usará vetores aleatórios para centroides iniciais. Se o número de documentos for menor que pqSampleSize, os dados de treinamento são complementados por dados aleatórios dentro da faixa dos seus dados vetoriais existentes.

Como as dimensões compactadas são definidas

Se você não especificar pqCompressedDims, ele determinará automaticamente com base no vetor dimensionsoriginal:

Faixa de Dimensão Original pqCompressedDims
[0 - 32) dimensões/2
[32 - 64) 16
[64 - 128) 32
[128 - 512) 64
[512 - 1536) 96
acima de 1536 128

Criar um índice 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
            }
        }
    ]
} )

Aprimorando a pesquisa com superamostragem

A compactação PQ pode levar à perda de precisão nos cálculos de distância. Para reduzir isso, o Azure DocumentDB oferece o oversampling parâmetro no $search operador.

O fator oversampling (um float com um mínimo de 1) especifica a quantidade de vetores candidatos adicionais a serem recuperados do índice compactado em relação a k (o número de resultados desejados). Esses candidatos extras são usados para refinar a pesquisa usando os vetores originais de precisão total, melhorando a precisão superior k final. Por exemplo, para obter os 10 principais (k=10) vetores mais semelhantes, uma boa prática pode ser definir oversampling como um valor como 1,5 ou 2,0. Com "oversampling": 1.5, o sistema primeiro obteria 15 candidatos do índice e, em seguida, refinaria os 10 primeiros usando os dados de precisão total.

{
    "$search": {
        "cosmosSearch": {
            "vector": <vector_to_search>,
            "path": "<path_to_property>",
            "k": <num_results_to_return>,
            "oversampling": <float_value> 
        },
    }
}

Este trecho de código demonstra uma busca vetorial usando o $search operador com a quantização de produto. Ele recebe uma queryVector como entrada e pesquisa no campo v. A consulta solicita os 10 documentos mais semelhantes (k: 10), usando um oversampling fator de 2.0, que recupera 20 candidatos melhorando a precisão da pesquisa sobre o índice compactado.

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

Meia Precisão versus Quantização de Produto

Os índices de vetor de meia precisão e de produto (PQ) compactam índices de vetor no Azure DocumentDB, mas diferem em como eles alcançam a compactação e afetam a pesquisa:

Característica Precisão Semidobrada Quantização do produto (PQ)
Método de compactação Reduz cada dimensão de vetor para 16 bits. Divide o espaço de vetor em subespaços e quantifica cada um.
Dimensões máximas Até 4 mil Até 16.000
Alteração de precisão Leve perda devido à profundidade de bits mais baixa. Perda potencialmente maior, configurável por meio de pqCompressedDims.
Velocidade de Pesquisa Aumento de velocidade moderado devido ao índice menor. Aumento de velocidade significativo devido a vetores altamente compactados.
Tempo de compilação do índice Relativamente rápido. Pode ser mais longo devido ao treinamento de centroide (pqSampleSize).
Suporte ao índice HNSW, FIV. DiskANN.
Configuration Simples, habilite compression: "half". Mais parâmetros: pqCompressedDims, pqSampleSize.
Uso de Superamostragem Ajuda com a perda leve de precisão. Essencial para recuperar a precisão de uma compressão maior.
Casos de uso ideais Redução de memória moderada, dimensões aumentadas, compensação de precisão aceitável. Conjuntos de dados grandes, alta dimensionalidade, busca rápida priorizada, precisão gerenciada com sobreamostragem.

Considerações sobre a quantização do produto

  • Precisão vs. Compactação: Maior compactação de PQ leva a índices menores e pesquisa mais rápida, mas maior perda de precisão. Experimente com pqCompressedDims e oversampling para encontrar o equilíbrio certo.
  • Tempo de compilação do índice: A criação do índice PQ pode levar mais tempo devido ao processo de treinamento centralizado, influenciado por pqSampleSize.
  • Distribuição de dados: O PQ funciona melhor quando os dados de vetor têm uma estrutura de cluster clara.

Próximas etapas