Vetores binários de índice para pesquisa vetorial

Pesquisa de IA do Azure suporta o tipo binário empacotado Collection(Edm.Byte) para reduzir ainda mais o armazenamento e a pegada de memória dos dados vetoriais. Pode usar este tipo de dados para a saída de modelos como os modelos binários Embed v3 da Cohere , ou qualquer outro modelo ou processo de embedding que produza vetores como bytes binários.

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

  • Adicionar um algoritmo de pesquisa vetorial que especifica a distância de Hamming para comparação vetorial binária
  • Adicionar um perfil vetorial que aponte para o algoritmo
  • Adicione um campo vetorial de tipo Collection(Edm.Byte) e atribua a distância de Hamming

Este artigo utiliza as APIs REST para ilustração, mas também pode usar um SDK do Azure ou o portal Azure para adicionar um campo binário a um índice. Atribui o tipo de dados binário aos campos usando as APIs REST Indexes - Create ou Indexes - Create Or Update.

Dica

Se estiveres a investigar suporte a vetores binários para a sua pegada mais pequena, podes também considerar as funcionalidades de quantização vetorial e redução de armazenamento no Pesquisa de IA do Azure. As entradas são incorporações float32 ou float16. A saída é armazenada num formato significativamente menor. Para mais informações, consulte Comprimir usando quantização binária ou escalar e Atribuir tipos de dados restritos.

Pré-requisitos

  • Familiaridade com a criação de um índice e a adição de campos vetoriais.

  • Vetores binários, com um bit por dimensão, embalados em valores uint8 com oito bits por valor. Pode obter estes vetores usando modelos que geram diretamente vetores binários empacotados ou quantizando vetores em vetores binários na sua aplicação cliente durante a indexação e recuperação.

Limitações

  • Não há suporte para portais Azure no assistente Importar dados.

  • Não há suporte para campos binários na habilidade AML usada para vetorização integrada de modelos do catálogo de modelos Microsoft Foundry.

Adicionar um algoritmo de pesquisa vetorial e um perfil vetorial

Algoritmos de pesquisa vetorial criam as estruturas de navegação de consultas durante a indexação. Para campos vetoriais binários, o sistema utiliza a métrica de distância de Hamming para realizar comparações vetoriais.

Para configurar a pesquisa vetorial para vetores binários:

  1. Configurar um pedido Indexes - Criar ou Atualizar (API REST).

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

  3. Adicione um ou mais algoritmos de pesquisa vetorial que utilizem uma métrica de similaridade de hamming. O algoritmo Hierárquico de Pequenos Mundos Navegáveis (HNSW) é amplamente utilizado, mas também pode utilizar a distância de Hamming com K-Vizinhos Mais Próximos exaustivos (KNN).

  4. Adicione um ou mais perfis vetoriais que especifiquem o algoritmo.

O exemplo seguinte 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 que precise para cenários de pesquisa híbrida.

Os campos binários usam o tipo Collection(Edm.Byte) e contêm embeddings em formato compactado. Por exemplo, se a dimensão original de embedding for 1024, o comprimento do vetor binário empacotado é ceiling(1024 / 8) = 128. Obtém a forma compactada ao definir a propriedade vectorEncoding no campo.

Para adicionar um campo vetorial binário a um índice:

  1. Adiciona um campo à coleção de campos e dá-lhe um nome.

  2. Defina o tipo de dado para Collection(Edm.Byte).

  3. Defina vectorEncoding como packedBit para codificação binária.

  4. Definir dimensions para 1024. Especifique a dimensão vetorial original (não empacotada).

  5. Define vectorSearchProfile para um perfil que definiste no passo anterior.

  6. Definir searchable para true.

A seguinte definição de campo é um exemplo de campo vetorial binário num esquema de índice.

  "fields": [ 
    . . . 
    { 
      "name": "my-binary-vector-field", 
      "type": "Collection(Edm.Byte)", 
      "vectorEncoding": "packedBit", 
      "dimensions": 1024, 
      "vectorSearchProfile": "myHnswProfile",
      "searchable": true
    },
   . . . 
  ]
  • Consulte o repositório azure-search-vector-samples para fluxos de trabalho de ponta a ponta que incluem definição de esquemas, vetorização, indexação e consultas.

  • Revise o código demo de pesquisa vetorial para C#, Python e JavaScript.