Atribuir tipos de dados estreitos a campos de vetor na Pesquisa de IA do Azure
Uma maneira fácil de reduzir o tamanho do vetor é armazenar inserções em um formato de dados menor. A maioria dos modelos de inserção gera números de ponto flutuante de 32 bits, mas se você compartimentalizar seus vetores ou se o modelo de inserção der suporte nativamente, a saída poderá ser float16, int16 ou int8, que é significativamente menor que float32. Você pode acomodar esses tamanhos de vetor menores atribuindo um tipo de dados estreitos 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. É possível usar o portal do Azure, as APIs REST de Pesquisa ou um pacote do SDK do Azure que fornece o recurso.
Pré-requisitos
- Um modelo de inserção que gera formatos de dados pequenos, como modelos de inserção text-embedding-3 ou Cohere V3.
Tipos de dados estreitos com suporte
Examine 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 com sinal de 16 bits (estreito)Collection(Edm.SByte)
inteiro com sinal de 8 bits (estreito)Collection(Edm.Byte)
inteiro sem sinal de 8 bits (permitido somente com tipos de dados binários empacotados)
Dessa lista, determine qual tipo de dados é válido para a saída do modelo de inserção ou para vetores que passam por compartimentalização personalizada.
A tabela a seguir fornece links para vários modelos de inserção que podem usar um tipo de dados estreitos (
Collection(Edm.Half)
) sem compartimentalização adicional. Você pode converter de float32 para float16 (usandoCollection(Edm.Half)
) sem trabalho adicional.Modelo de inserção Saída nativa Atribuir esse tipo na Pesquisa de IA do Azure text-embedding-ada-002 Float32
Collection(Edm.Single)
ouCollection(Edm.Half)
text-embedding-3-small Float32
Collection(Edm.Single)
ouCollection(Edm.Half)
text-embedding-3-large Float32
Collection(Edm.Single)
ouCollection(Edm.Half)
Modelos de inserção do Cohere V3 com int8 embedding_type Int8
Collection(Edm.SByte)
Outros tipos de dados estreitos poderão ser usados se o modelo emitir inserções no formato de dados menor ou se você tiver uma compartimentalizaçã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 adicionais poderá levar a resultados inaceitáveis no momento da consulta, pois há menos detalhes que podem ser usados para distinguir vetores próximos.
Atribuir o tipo de dados
Definir e criar um índice. Você pode usar o portal do Azure, Criar ou atualizar índice (API REST) ou um pacote de SDK do Azure para esta etapa.
Essa definição de campo usa um tipo de dados estreito, Collection(Edm.Half)
, que pode aceitar uma inserção float32 armazenada como um valor float16. Como isso é verdadeiro para todos os campos de vetor, dimensions
e vectorSearchProfile
são definidos. As especificidades do vectorSearchProfile
são imateriais para o tipo de dados.
Recomendamos que você defina retrievable
e stored
como true se quiser verificar visualmente os valores do campo. Em uma recompilação subsequente, você pode alterar essas propriedades para false para requisitos de armazenamento reduzidos.
{
"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 de vetor não são filtráveis, classificáveis ou facetáveis. 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. Você não pode alterar o tipo de dados de um campo existente e não pode remover um campo sem recriar o índice. Para índices estabelecidos que já estão em produção, é comum contornar esse problema criando campos com as revisões desejadas e removendo campos obsoletos durante uma recompilação de índice planejada.
Verificar os resultados
Verifique se o conteúdo do campo corresponde ao tipo de dados. Supondo que o campo de vetor esteja marcado como
retrievable
, use o Explorador de Pesquisa ou Pesquisar – POST para retornar o conteúdo do campo de vetor.Para verificar o tamanho do índice de vetor, consulte a coluna de tamanho do índice de vetor na página Índices do 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.
Observação
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, remova e recompile o índice ou crie um segundo campo com a nova definição.