Compartilhar via


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

  1. 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)
  2. 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 (usando Collection(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) ou Collection(Edm.Half)
    text-embedding-3-small Float32 Collection(Edm.Single) ou Collection(Edm.Half)
    text-embedding-3-large Float32 Collection(Edm.Single) ou Collection(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.

  3. 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

  1. 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.

  2. 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.