Compartilhar via


Indexar vetores binários para a busca em vetores

O Azure AI Search suporta um tipo binário compactado de Collection(Edm.Byte) para reduzir ainda mais o armazenamento e a pegada de memória dos dados vetoriais. Você pode usar esse tipo de dados para saída de modelos como Modelos de incorporação binária Embed v3 da Cohere.

Existem três etapas para configurar um índice para vetores binários:

  • Adicionar um algoritmo de busca em vetores que especifique a distância de Hamming para comparação de vetores binários
  • Adicionar um perfil de vetor que aponte para o algoritmo
  • Adicionar o perfil de vetor à sua definição de campo binário

Este artigo pressupõe que você esteja familiarizado com a criação de um índice na Pesquisa de IA do Azure. Ela usa as APIs REST para ilustrar cada etapa, mas você também pode adicionar um campo binário a um índice no portal do Azure.

Os tipos de dados binários estão geralmente disponíveis a partir da versão API 2024-07-01 e são atribuídos a campos usando as APIs Criar Índice ou Criar ou Atualizar Índice.

Dica

Se estiver investigando o suporte a vetores binários para sua pegada menor, você também poderá considerar os recursos de quantização de vetores e redução de armazenamento no IA do Azure Search. As entradas são incorporações float32 ou float16. A saída são dados armazenados em um formato muito menor. Para obter mais informações, veja Reduzir o tamanho do vetor por meio de quantização, tipos de dados restritos e opções de armazenamento.

Pré-requisitos

  • Vetores binários, com 1 bit por dimensão, empacotados em valores uint8 com 8 bits por valor. Estes podem ser obtidos pelo uso de modelos que geram vetores de "binários empacotados" diretamente ou quantificando vetores como vetores binários do lado do cliente durante a busca e indexação.

Limitações

  • Não há suporte para o portal do Microsoft Azure no assistente de importação e vetorização de dados.
  • Não há suporte para campos binários na habilidade AML usada para vetorização integrada de modelos no catálogo de modelos do IA do Azure Studio.

Adicionar um algoritmo de busca em vetores e um perfil de vetor

Algoritmos de busca em vetores são usados para criar as estruturas de navegação de consulta durante a indexação. Para campos de vetores binários, as comparações de vetores são realizadas usando a métrica de distância de Hamming.

  1. Para adicionar um campo binário a um índice, configure uma solicitação Create or Update Index usando a API REST ou o portal do Azure.

  2. No esquema do índice, adicione uma seção vectorSearch que especifique perfis e algoritmos.

  3. Adicione um ou mais algoritmos de busca em vetores que tenham uma métrica de similaridade de hamming. É comum usar Hierarchical Navigable Small Worlds (HNSW), mas você também pode usar a distância de Hamming com K-vizinhos mais próximos exaustivo.

  4. Adicione um ou mais perfis de vetor que especifiquem o algoritmo.

O exemplo a seguir mostra uma configuração básica vectorSearch:

  "vectorSearch": { 
    "profiles": [ 
      { 
        "name": "myHnswProfile", 
        "algorithm": "myHnsw", 
        "compression": null, 
        "vectorizer": null 
      } 
    ], 
    "algorithms": [ 
      { 
        "name": "myHnsw", 
        "kind": "hnsw", 
        "hnswParameters": { 
          "metric": "hamming" 
        } 
      }, 
      { 
        "name": "myExhaustiveKnn", 
        "kind": "exhaustiveKnn", 
        "exhaustiveKnnParameters": { 
          "metric": "hamming" 
        } 
      } 
    ] 
  }

Adicionar um campo binário a um índice

A coleção de campos de um índice deve incluir um campo para a chave do documento, campos de vetor e quaisquer outros campos necessários para cenários de pesquisa híbrida.

Os campos binários são do tipo Collection(Edm.Byte) e contêm inserções em formato empacotado. Por exemplo, se a dimensão de inserção original for 1024, o comprimento do vetor binário empacotado será ceiling(1024 / 8) = 128. Você obtém a forma empacotada definindo a propriedade vectorEncoding no campo.

  • Adicione um campo à coleção de campos e dê a ele um nome.
  • Defina o tipo de dados como Collection(Edm.Byte).
  • Defina vectorEncoding como packedBit para codificação binária.
  • Definir dimensions para 1024. Especifique a dimensão do vetor original (desempacotado).
  • Defina vectorSearchProfile como um perfil que você definiu na etapa anterior.
  • Torne o campo pesquisável.

A definição de campo a seguir é um exemplo das propriedades que você deve configurar:

  "fields": [ 
    . . . 
    { 
      "name": "my-binary-vector-field", 
      "type": "Collection(Edm.Byte)", 
      "vectorEncoding": "packedBit", 
      "dimensions": 1024, 
      "vectorSearchProfile": "myHnswProfile",
      "searchable": true
    },
   . . . 
  ]

Confira também

Os exemplos de código no repositório azure-search-vector-samples demonstram fluxos de trabalho de ponta a ponta que incluem definição de esquema, vetorização, indexação e consultas.

Há um código de demonstração para Python, C# e JavaScript.