Partilhar via


Indexar vetores binários para pesquisa vetorial

O Azure AI Search dá suporte a 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 os modelos de incorporação binária Embed v3 da Cohere.

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

  • Adicionar um algoritmo de pesquisa vetorial que especifica 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 vetorial à sua definição de campo binário

Este artigo pressupõe que você esteja familiarizado com a criação de um índice no Azure AI Search. Ele 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 API versão 2024-07-01 e são atribuídos a campos usando as APIs Criar índice ou Criar ou atualizar índice .

Gorjeta

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

Pré-requisitos

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

Limitações

  • Não há suporte ao portal do Azure no assistente Importar e vetorizar 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 Azure AI Studio.

Adicionar um algoritmo de pesquisa vetorial e um perfil vetorial

Os algoritmos de pesquisa vetorial são usados para criar as estruturas de navegação de consulta durante a indexação. Para campos vetoriais binários, comparações vetoriais são realizadas usando a métrica de distância de Hamming.

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

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

  3. Adicione um ou mais algoritmos de pesquisa vetorial que tenham uma métrica de semelhança de hamming. É comum usar pequenos mundos navegáveis hierárquicos (HNSW), mas você também pode usar a distância de Hamming com vizinhos K-mais próximos exaustivos.

  4. Adicione um ou mais perfis vetoriais 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 vetoriais 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 incorporações em formato compactado. Por exemplo, se a dimensão de incorporação original for 1024, o comprimento do vetor binário compactado for ceiling(1024 / 8) = 128. Você obtém o formulário compactado definindo a vectorEncoding propriedade no campo.

  • Adicione um campo à coleção de campos e dê-lhe nome.
  • Defina o tipo de dados como Collection(Edm.Byte).
  • Definido vectorEncoding como packedBit para codificação binária.
  • Defina dimensions como 1024. Especifique a dimensão vetorial original (não compactada).
  • Defina vectorSearchProfile como um perfil definido na etapa anterior.
  • Torne o campo pesquisável.

A seguinte definição de campo é um exemplo das propriedades que você deve definir:

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

Consulte também

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á código de demonstração para Python, C# e JavaScript.