Compartilhar via


Indexar vetores binários para a busca em vetores

Importante

Os tipos de dados binários estão em versão prévia pública em Termos de uso complementares. A API REST 2024-05-01-preview e as APIs de versão prévia posterior fornecem o novo tipo de dados.

A partir da API REST 2024-05-01-preview, a Pesquisa de IA do Azure dá suporte a um tipo de binário empacotado de Collection(Edm.Byte) para reduzir ainda mais o armazenamento e o volume de memória dos dados de vetores. 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.

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

  • Sem compressão escalar ou suporte à vetorização integrada.
  • 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 2024-05-01-preview ou o portal do Microsoft 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. Não é possível especificar a compactação escalar ou um vetorizador nessa versão prévia.

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.

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

A definição mínima de uma coleção de campos deve ser semelhante ao exemplo a seguir:

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

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.