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 inserção binária do Cohere Embed v3 ou qualquer outro modelo de inserção ou processo que gera vetores como bytes binários.
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 um campo de vetor do tipo
Collection(Edm.Byte)
e atribuir a distância Hamming
Este artigo pressupõe que você esteja familiarizado com a criação de um índice na Pesquisa de IA do Azure e com a adição de campos de vetor. 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 ou no SDK do Azure.
O tipo de dados binário está geralmente disponível a partir da versão API 2024-07-01 e é atribuído 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, consulte Compactar usando a compartimentalização binária ou escalar e Atribuir tipos de dados estreitos.
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 compartimentalizando 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 Azure AI Foundry.
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.
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.No esquema do índice, adicione uma seção
vectorSearch
que especifique perfis e algoritmos.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.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
comopackedBit
para codificação binária. - Definir
dimensions
para1024
. 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.