Atribuir tipos de dados estreitos a campos vetoriais no Azure AI Search
Uma maneira fácil de reduzir o tamanho do vetor é armazenar incorporações em um formato de dados menor. A maioria dos modelos de incorporação produz números de ponto flutuante de 32 bits, mas se você quantificar seus vetores, ou se seu modelo de incorporação o suportar nativamente, a saída pode ser float16, int16 ou int8, que é significativamente menor do que float32. Você pode acomodar esses tamanhos de vetor menores atribuindo um tipo de dados estreito a um campo vetorial. No índice vetorial, tipos de dados estreitos consomem menos armazenamento.
Os tipos de dados são atribuídos a campos em uma definição de índice. Você pode usar o portal do Azure, as APIs REST de Pesquisa ou um pacote SDK do Azure que fornece o recurso.
Pré-requisitos
- Um modelo de incorporação que produz pequenos formatos de dados, como modelos de incorporação de texto-embedding-3 ou Cohere V3.
Tipos de dados estreitos suportados
Analise os tipos de dados usados para campos vetoriais para uso recomendado:
Collection(Edm.Single)
Ponto flutuante de 32 bits (padrão)Collection(Edm.Half)
Ponto flutuante de 16 bits (estreito)Collection(Edm.Int16)
Inteiro assinado de 16 bits (estreito)Collection(Edm.SByte)
Inteiro assinado de 8 bits (estreito)Collection(Edm.Byte)
Inteiro não assinado de 8 bits (permitido apenas com tipos de dados binários compactados)
Nessa lista, determine qual tipo de dados é válido para a saída do modelo de incorporação ou para vetores que passam por quantização personalizada.
A tabela a seguir fornece links para vários modelos de incorporação que podem usar um tipo de dados estreito (
Collection(Edm.Half)
) sem quantização extra. Você pode fundir de float32 para float16 (usandoCollection(Edm.Half)
) sem trabalho extra.Modelo de incorporação Saída nativa Atribuir este tipo na Pesquisa de IA do Azure incorporação de texto-ada-002 Float32
Collection(Edm.Single)
ouCollection(Edm.Half)
incorporação de texto-3-pequeno Float32
Collection(Edm.Single)
ouCollection(Edm.Half)
incorporação de texto-3-grande Float32
Collection(Edm.Single)
ouCollection(Edm.Half)
Modelos de incorporação Cohere V3 com int8 embedding_type Int8
Collection(Edm.SByte)
Outros tipos de dados estreitos podem ser usados se o modelo emitir incorporações no formato de dados menor ou se você tiver quantização personalizada que converte vetores em um formato menor.
Certifique-se de entender as compensações de um tipo de dados estreito.
Collection(Edm.Half)
tem menos informações, o que resulta em menor resolução. Se seus dados forem homogêneos ou densos, perder detalhes ou nuances extras pode levar a resultados inaceitáveis no momento da consulta, porque há menos detalhes que podem ser usados para distinguir vetores próximos.
Atribuir o tipo de dados
Defina e construa um índice. Você pode usar o portal do Azure, Criar ou Atualizar Índice (API REST) ou um pacote do SDK do Azure para esta etapa.
Esta definição de campo usa um tipo de dados estreito, Collection(Edm.Half)
, que pode aceitar uma incorporação float32 armazenada como um valor float16. Como é verdade para todos os campos vetoriais, dimensions
e vectorSearchProfile
são definidos. As especificidades do vectorSearchProfile
são irrelevantes para o tipo de dados.
Recomendamos que você defina retrievable
e stored
como true se quiser verificar visualmente os valores do campo. Em uma reconstrução subsequente, você pode alterar essas propriedades para false para reduzir os requisitos de armazenamento.
{
"name": "nameEmbedding",
"type": "Collection(Edm.Half)",
"searchable": true,
"filterable": false,
"retrievable": true,
"sortable": false,
"facetable": false,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": null,
"synonymMaps": [],
"dimensions": 1536,
"vectorSearchProfile": "myHnswProfile"
}
Lembre-se de que os campos vetoriais não são filtráveis, classificáveis ou faciais. Eles não podem ser usados como chaves e não usam analisadores ou mapas de sinônimos.
Trabalhar com um índice de produção
Os tipos de dados são atribuídos em novos campos quando são criados. Não é possível alterar o tipo de dados de um campo existente e não é possível soltar um campo sem reconstruir o índice. Para índices estabelecidos já em produção, é comum contornar esse problema criando novos campos com as revisões desejadas e, em seguida, removendo campos obsoletos durante uma reconstrução de índice planejada.
Ver resultados
Verifique se o conteúdo do campo corresponde ao tipo de dados. Supondo que o campo vetorial esteja marcado como
retrievable
, use o explorador de pesquisa ou Pesquisar - POST para retornar o conteúdo do campo vetorial.Para verificar o tamanho do índice vetorial, consulte a coluna de tamanho do índice de vetor na página Índices de gerenciamento > de pesquisa no portal do Azure ou use as Estatísticas GET (API REST) ou o método equivalente do SDK do Azure para obter o tamanho.
Nota
O tipo de dados do campo é usado para criar a estrutura de dados física. Se você quiser alterar um tipo de dados mais tarde, solte e reconstrua o índice ou crie um segundo campo com a nova definição.