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