Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A quantização de produtos (PQ) é uma técnica poderosa no Azure DocumentDB que comprime significativamente embeddings vetoriais de alta dimensão usados na pesquisa vetorial. Esta compressão reduz o uso de memória e acelera as pesquisas por vizinhos mais próximos, melhorando a eficiência para grandes conjuntos de dados vetoriais. Embora o PQ ofereça benefícios em termos de velocidade e escala, pode vir à custa da precisão.
Benefícios
- Armazenamento Reduzido: O PQ reduz significativamente o armazenamento necessário para índices vetoriais em comparação com vetores de precisão total (float32), levando a poupanças substanciais de custos para conjuntos de dados grandes.
- Pesquisa Rápida: Trabalhar com vetores comprimidos permite ao sistema calcular distâncias e encontrar potenciais vizinhos mais próximos muito mais rapidamente do que com vetores de total precisão.
- Escalabilidade Melhorada: Uma menor sobrecarga de memória permite a pesquisa vetorial de escalabilidade para lidar com embeddings maiores e de maior dimensão dentro do seu cluster.
Como funciona
A quantização do produto divide o espaço vetorial de alta dimensão em vários subespaços de dimensão inferior. Cada subespaço é então quantizado independentemente usando um algoritmo de agrupamento (tipicamente k-médias). O centro de cada aglomerado representa todos os vetores dentro dele. Cada vetor original é então representado por um pequeno código com os IDs de cluster a que pertence em cada subespaço.
Utilização da quantização do produto
Para criar um índice vetorial com quantização por 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 (de caracteres) | Definir para "pq" para ativar a quantização do produto. |
pqCompressedDims |
número inteiro | Dimensões após compressão PQ (devem ser inferiores às dimensões originais). Calculado automaticamente caso seja omitido. Alcance: 1-8000. |
pqSampleSize |
número inteiro | Número de vetores amostrais para o treinamento do centróide PQ. Maior valor significa melhor qualidade mas tempo de construção mais longo. Padrão: 1000. Alcance: 1.000 - 100.000. |
Observação
A quantização do produto é atualmente suportada apenas com o vector-diskann tipo de índice.
Observação
Para melhores resultados, crie um índice PQ depois de a sua coleção ter dados. Se a coleção estiver vazia, o sistema usa vetores aleatórios para os centroides iniciais. Se o número de documentos for inferior a pqSampleSize, os dados de treino são preenchidos com dados aleatórios dentro do intervalo dos dados vetoriais existentes.
Como as dimensões comprimidas são definidas
Se não especificar pqCompressedDims, determina automaticamente com base no vetor dimensionsoriginal :
| Gama Dimensional 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
}
}
]
} )
Melhoria da pesquisa com sobreamostragem
A compressão PQ pode levar a perda de precisão nos cálculos de distância. Para reduzir isto, o Azure DocumentDB disponibiliza o oversampling parâmetro no $search operador.
O fator oversampling (um número flutuante com mínimo de 1) especifica quantos vetores candidatos a mais devem ser recuperados do índice comprimido em comparação com k (o número de resultados desejados). Estes candidatos extra são usados para refinar a pesquisa usando os vetores originais de total precisão, melhorando a precisão final superior k . Por exemplo, para obter os 10k (=10) vetores mais semelhantes, uma boa prática pode ser definir oversampling para um valor como 1,5 ou 2,0. Com "oversampling": 1.5, o sistema primeiro obteria 15 candidatos do índice e depois refinaria os 10 melhores usando os dados de total precisão.
{
"$search": {
"cosmosSearch": {
"vector": <vector_to_search>,
"path": "<path_to_property>",
"k": <num_results_to_return>,
"oversampling": <float_value>
},
}
}
Este excerto de código demonstra uma pesquisa vetorial usando o $search operador com quantização do Produto. Aceita uma entrada queryVector e pesquisa o 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 em relação ao índice comprimido.
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 vs. quantização do produto
Tanto a Meia-Precisão como a quantização de produto (PQ) comprimem os índices vetoriais no Azure DocumentDB, mas diferem na forma como alcançam compressão e afetam a pesquisa:
| Característica | Meia Precisão | Quantização do produto (PQ) |
|---|---|---|
| Método de Compressão | Reduz cada dimensão vetorial para 16 bits. | Divide o espaço vetorial em subespaços e quantiza cada um. |
| Dimensões Máximas | Até 4.000 | Até 16.000 |
| Mudança de Precisão | Perda ligeira devido à menor profundidade de bits. | Perda potencialmente maior, configurável via pqCompressedDims. |
| Velocidade de Pesquisa | Aumento moderado de velocidade devido ao índice menor. | Aumento significativo de velocidade devido a vetores altamente comprimidos. |
| Tempo de Construção do Índice | Relativamente rápido. | Pode ser mais longo devido ao treino do centroide (pqSampleSize). |
| Suporte ao Índice | HNSW, IVF. | DiskANN. |
| Configuration | Basta ativar compression: "half". |
Mais parâmetros: pqCompressedDims, pqSampleSize. |
| Uso de Sobreamostragem | Ajuda com ligeiras perdas de precisão. | Essencial para recuperar a precisão a partir de uma compressão mais extensa. |
| Casos de Uso Ideais | Redução moderada de memória, dimensões aumentadas, compromisso de precisão aceitável. | Grandes conjuntos de dados, alta dimensionalidade, a prioridade é dada à pesquisa rápida, precisão gerida com sobreamostragem. |
Considerações para a quantização do produto
-
Precisão vs. Compressão: Uma maior compressão PQ leva a índices mais pequenos e pesquisa mais rápida, mas maior perda de precisão. Experimenta com
pqCompressedDimseoversamplingpara encontrar o equilíbrio certo. -
Tempo de Construção do Índice: A criação do índice PQ pode demorar mais devido ao processo de treino do centroide, influenciado por
pqSampleSize. - Distribuição de Dados: O PQ funciona melhor quando os dados vetoriais têm uma estrutura clara de cluster.