Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O Azure AI Search dá suporte à quantização escalar e binária para reduzir o tamanho dos vetores em um índice de pesquisa. A quantização é recomendada porque reduz a memória e o armazenamento em disco para incorporações float16 e float32. Para compensar os efeitos da compactação com perdas, pode-se adicionar sobreamostragem e reavaliação.
Para usar a quantização interna, siga estas etapas:
- Comece com campos vetoriais e uma
vectorSearch
configuração para um índice - Adicionar
vectorSearch.compressions
- Adicionar uma configuração
scalarQuantization
oubinaryQuantization
e dar-lhe um nome - Definir propriedades opcionais para atenuar os efeitos da indexação destrutiva
- Criar um novo perfil de vetor que usa a configuração nomeada
- Criar um novo campo vetorial com o novo perfil vetorial
- Carregue o índice com dados float32 ou float16 que são quantizados durante a indexação com a configuração que definiu.
- Opcionalmente, consulte dados quantificados usando o parâmetro de sobreamostragem. Se o campo de vetor não especificar a sobreamostragem em sua definição, você poderá adicioná-lo no momento da consulta.
Sugestão
Azure AI Search: Reduza os custos de vetor até 92,5% com novas técnicas de compressão compara estratégias de compressão e explica a economia em armazenamento e custos. Ele também inclui métricas para medir a relevância com base no ganho cumulativo descontado normalizado (NDCG), demonstrando que você pode compactar seus dados sem sacrificar a qualidade da pesquisa.
Pré-requisitos
-
Campos vetoriais em um índice de pesquisa, com uma
vectorSearch
configuração especificando o algoritmo Hierarchical Navigable Small Worlds (HNSW) ou o exaustivo K-Nearest Neighbor (KNN) e um novo perfil vetorial.
Técnicas de quantização suportadas
A quantização aplica-se a campos vetoriais que recebem vetores do tipo float. Nos exemplos deste artigo, o tipo de dados do campo é Collection(Edm.Single)
para incorporações float32 de entrada, mas float16 também é suportado. Quando os vetores são recebidos em um campo com compressão configurada, o mecanismo executa a quantização para reduzir a pegada dos dados vetoriais na memória e no disco.
Dois tipos de quantização são suportados:
A quantização escalar compacta valores flutuantes em tipos de dados mais estreitos. O AI Search atualmente suporta int8, que é de 8 bits, reduzindo o tamanho do índice vetorial quatro vezes.
A quantização binária converte flutuações em bits binários, que ocupam 1 bit. Isso resulta em uma redução do tamanho do índice vetorial em até 28 vezes.
Nota
Embora os serviços gratuitos ofereçam suporte à quantização, eles não demonstram a economia total de armazenamento devido à cota de armazenamento limitada.
Técnicas de reavaliação de pontuação recomendadas
Rescoring é uma técnica usada para compensar a perda de informações devido à compressão vetorial. Usa a sobreamostragem para obter vetores extras e informações suplementares para reavaliar os resultados iniciais encontrados pela consulta. As informações suplementares são vetores originais de precisão total não compactados ou, apenas para quantização binária, tem a opção de reavaliar usando os candidatos a documentos quantizados binariamente em relação ao vetor de consulta. As opções de repontuação são especificadas no índice, mas você pode invocar a repontuação no momento da consulta se o índice oferecer suporte a ela.
As versões da API determinam qual comportamento de reavaliação é operacional para o seu código. A API de visualização mais recente suporta uma nova abordagem de repontuação para quantização binária. Os índices criados com 2025-03-01-preview
podem usar os novos métodos de repontuação.
Versão da API | Tipo de quantização | Reclassificação de propriedades |
---|---|---|
2024-07-01 | Quantização escalar e binária, em índices vetoriais construídos usando gráficos Hierarchical Navigable Small World (HNSW) para pesquisa de similaridade | rerankWithOriginalVectors |
2024-11-01-pré-visualização | Quantização escalar e binária em gráficos HNSW |
rescoringOptions.enableRescoring e rescoreStorageMethod.preserveOriginals |
2025-03-01-pré-visualização | Quantização binária em gráficos HNSW | As combinações de parâmetros anteriores ainda são suportadas, mas a quantização binária agora pode ser reavaliada se os embeddings originais forem excluídos: rescoringOptions.enableRescoring e rescoringOptions.rescoreStorageMethod=discardOriginals |
Apenas os gráficos HNSW permitem a reavaliação de pontuação. O KNN exaustivo não suporta a reclassificação.
O processo generalizado de repontuação é:
- A consulta vetorial é executada sobre campos vetoriais compactados.
- A consulta vetorial retorna os k candidatos superamostrados mais relevantes.
- Os candidatos k sobreamostrados são repontuados usando os vetores originais não compactados ou o produto ponto da quantização binária. 1 Após a repontuação, os resultados são ajustados para que as correspondências mais relevantes apareçam primeiro.
Adicionar "compressões" a um índice de pesquisa
Esta seção explica como especificar uma vectorsSearch.compressions
seção no índice. O exemplo a seguir mostra uma definição de índice parcial com uma coleção fields que inclui um campo vetorial.
O exemplo de compactação inclui ambos scalarQuantization
e binaryQuantization
. Você pode especificar quantas configurações de compactação precisar e, em seguida, atribuir as que deseja a um perfil de vetor.
A sintaxe para vectorSearch.Compressions
varia entre APIs REST estáveis e de visualização, com a visualização adicionando mais opções para otimização de armazenamento, além de alterações na sintaxe existente. A compatibilidade com versões anteriores é preservada por meio de mapeamentos internos de API, mas recomendamos a adoção das propriedades mais recentes no código destinado a 2024-11-01-preview e versões futuras.
Utilize a API REST Criar Índice ou Criar ou Atualizar Índice para definir as configurações de compactação.
POST https://[servicename].search.windows.net/indexes?api-version=2024-07-01
{
"name": "my-index",
"fields": [
{ "name": "Id", "type": "Edm.String", "key": true, "retrievable": true, "searchable": true, "filterable": true },
{ "name": "content", "type": "Edm.String", "retrievable": true, "searchable": true },
{ "name": "vectorContent", "type": "Collection(Edm.Single)", "retrievable": false, "searchable": true, "dimensions": 1536,"vectorSearchProfile": "vector-profile-1"},
],
"vectorSearch": {
"profiles": [
{
"name": "vector-profile-1",
"algorithm": "use-hnsw",
"compression": "use-scalar"
}
],
"algorithms": [
{
"name": "use-hnsw",
"kind": "hnsw",
"hnswParameters": { },
"exhaustiveKnnParameters": null
}
],
"compressions": [
{
"name": "use-scalar",
"kind": "scalarQuantization",
"scalarQuantizationParameters": {
"quantizedDataType": "int8"
},
"rerankWithOriginalVectors": true,
"defaultOversampling": 10
},
{
"name": "use-binary",
"kind": "binaryQuantization",
"rerankWithOriginalVectors": true,
"defaultOversampling": 10
}
]
}
}
Pontos principais:
kind
deve ser definido comoscalarQuantization
oubinaryQuantization
.rerankWithOriginalVectors
usa os vetores não compactados originais para recalcular a semelhança e reclassificar os principais resultados retornados pela consulta de pesquisa inicial. Os vetores não compactados existem no índice de pesquisa, mesmo questored
seja falso. Esta propriedade é opcional. A predefinição é verdadeira.defaultOversampling
considera um conjunto mais amplo de resultados potenciais para compensar a redução da informação a partir da quantização. A fórmula para resultados potenciais consiste nok
na consulta, com um multiplicador de sobreamostragem. Por exemplo, se a consulta especificar umk
de 5 e a sobreamostragem for 20, a consulta solicitará efetivamente 100 documentos para uso na reclassificação, usando o vetor não compactado original para essa finalidade. Apenas osk
melhores resultados reclassificados são retornados. Esta propriedade é opcional. O padrão é 4.quantizedDataType
é opcional e aplica-se apenas à quantização escalar. Se o adicionar, deve ser definido comoint8
. Este é o único tipo de dados primitivo suportado para quantização escalar no momento. A predefinição éint8
.
Adicionar o algoritmo de pesquisa vetorial
Você pode usar o algoritmo HNSW ou eKNN na API REST 2024-11-01-preview ou posterior. Para a versão estável, use apenas HNSW. Caso queira rever a pontuação, deve escolher HNSW.
"vectorSearch": {
"profiles": [ ],
"algorithms": [
{
"name": "use-hnsw",
"kind": "hnsw",
"hnswParameters": {
"m": 4,
"efConstruction": 400,
"efSearch": 500,
"metric": "cosine"
}
}
],
"compressions": [ <see previous section>]
}
Criar e atribuir um novo perfil de vetor
Para usar uma nova configuração de quantização, você deve criar um novo perfil vetorial. A criação de um novo perfil vetorial é necessária para a construção de índices compactados na memória. Seu novo perfil usa HNSW.
Na mesma definição de índice, crie um novo perfil de vetor e adicione uma propriedade de compactação e um algoritmo. Aqui estão dois perfis, um para cada abordagem de quantização.
"vectorSearch": { "profiles": [ { "name": "vector-profile-hnsw-scalar", "compression": "use-scalar", "algorithm": "use-hnsw", "vectorizer": null }, { "name": "vector-profile-hnsw-binary", "compression": "use-binary", "algorithm": "use-hnsw", "vectorizer": null } ], "algorithms": [ <see previous section> ], "compressions": [ <see previous section> ] }
Atribua um perfil de vetor a um novo campo vetorial. O tipo de dados do campo é float32 ou float16.
No Azure AI Search, os equivalentes do Modelo de Dados de Entidade (EDM) dos tipos float32 e float16 são
Collection(Edm.Single)
eCollection(Edm.Half)
, respectivamente.{ "name": "vectorContent", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": true, "dimensions": 1536, "vectorSearchProfile": "vector-profile-hnsw-scalar", }
Carregue o índice usando indexadores para indexação de modelo pull ou APIs para indexação de modelo push.
Como funciona a quantização escalar na Pesquisa de IA do Azure
A quantização escalar reduz a resolução de cada número dentro de cada incorporação vetorial. Em vez de descrever cada número como um número de ponto flutuante de 16 bits ou 32 bits, ele usa um inteiro de 8 bits. Ele identifica um intervalo de números (tipicamente percentil 99 mínimo e máximo) e os divide em um número finito de níveis ou compartimento, atribuindo a cada compartimento um identificador. Na quantização escalar de 8 bits, existem 2^8, ou 256, compartimentos possíveis.
Cada componente do vetor é mapeado para o valor representativo mais próximo dentro deste conjunto de níveis de quantização em um processo semelhante ao arredondamento de um número real para o inteiro mais próximo. No vetor quantizado de 8 bits, o número identificador substitui o valor original. Após a quantização, cada vetor é representado por uma matriz de identificadores para os compartimentos aos quais seus componentes pertencem. Esses vetores quantizados exigem muito menos bits para armazenar em comparação com o vetor original, reduzindo assim os requisitos de armazenamento e o espaço ocupado pela memória.
Como funciona a quantização binária na Pesquisa de IA do Azure
A quantização binária comprime vetores de alta dimensão representando cada componente como um único bit, 0 ou 1. Esse método reduz drasticamente o espaço ocupado pela memória e acelera as operações de comparação de vetores, que são cruciais para tarefas de pesquisa e recuperação. Os testes de referência mostram até 96% de redução no tamanho do índice vetorial.
É particularmente eficaz para incorporações com dimensões superiores a 1024. Para dimensões menores, recomendamos testar a qualidade da quantização binária ou usar quantização escalar. Além disso, descobrimos que a quantização binária funciona muito bem quando as incorporações são centradas em zero. Os modelos de incorporação mais populares, como OpenAI, Cohere e Mistral, são centrados em torno de zero.
Consultar um campo vetorial quantizado usando sobreamostragem
A sintaxe de consulta para um campo vetorial compactado ou quantizado é a mesma que para campos vetoriais não compactados, a menos que você queira substituir os parâmetros associados à sobreamostragem e à repontuação. Você pode adicionar um parâmetro o para invocar sobreamostragem e repontuação no momento da consulta.
Lembre-se de que a definição de compressão vetorial no índice tem configurações para rerankWithOriginalVectors
e defaultOversampling
para mitigar os efeitos da compressão com perdas. Você pode substituir os valores padrão para variar o comportamento no momento da consulta. Por exemplo, se defaultOversampling
for 10.0, poderá alterá-lo para outro valor no pedido de consulta.
Você pode definir o parâmetro de sobreamostragem mesmo que o índice não tenha explicitamente uma definição rerankWithOriginalVectors
ou defaultOversampling
. Fornecer oversampling
no momento da consulta substitui as configurações de índice para essa consulta e executa a consulta com um rerankWithOriginalVectors
efetivo como verdadeiro.
POST https://[service-name].search.windows.net/indexes/demo-index/docs/search?api-version=2024-07-01
{
"vectorQueries": [
{
"kind": "vector",
"vector": [8, 2, 3, 4, 3, 5, 2, 1],
"fields": "myvector",
"oversampling": 12.0,
"k": 5
}
]
}
Pontos principais:
Aplica-se a campos vetoriais que sofrem compressão vetorial, de acordo com a atribuição de perfil vetorial.
Substitui o valor
defaultOversampling
ou introduz sobreamostragem durante a consulta, mesmo que a configuração de compactação do índice não especifique opções de sobreamostragem ou reclassificação.