Partilhar via


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

  1. 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)
  2. 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 (usando Collection(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) ou Collection(Edm.Half)
    incorporação de texto-3-pequeno Float32 Collection(Edm.Single) ou Collection(Edm.Half)
    incorporação de texto-3-grande Float32 Collection(Edm.Single) ou Collection(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.

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

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

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