Pesquisa vetorial no Azure Cosmos DB para NoSQL
O Azure Cosmos DB para NoSQL agora oferece indexação vetorial e pesquisa eficientes. Este recurso é projetado para lidar com vetores de alta dimensão, permitindo uma pesquisa vetorial eficiente e precisa em qualquer escala. Agora você pode armazenar vetores diretamente nos documentos ao lado de seus dados. Cada documento em seu banco de dados pode conter não apenas dados tradicionais sem esquema, mas também vetores de alta dimensão como outras propriedades dos documentos. Esta colocalização de dados e vetores permite uma indexação e pesquisa eficientes, uma vez que os vetores são armazenados na mesma unidade lógica que os dados que representam. Manter vetores e dados juntos simplifica o gerenciamento de dados, as arquiteturas de aplicativos de IA e a eficiência das operações baseadas em vetores.
O Azure Cosmos DB para NoSQL oferece a flexibilidade que oferece na escolha do método de indexação vetorial:
- Uma busca exata de vizinhos "planos" ou k-mais próximos (às vezes chamada de força bruta) pode fornecer 100% de recuperação para buscas vetoriais menores e focadas. especialmente quando combinado com filtros de consulta e chaves de partição.
- Um índice plano quantizado que comprime vetores usando métodos de quantização baseados em DiskANN para melhor eficiência na pesquisa kNN.
- DiskANN, um conjunto de algoritmos de indexação vetorial de última geração desenvolvidos pela Microsoft Research para realizar pesquisas vetoriais eficientes e de alta precisão em qualquer escala.
Saiba mais sobre indexação vetorial aqui
A pesquisa vetorial no Azure Cosmos DB pode ser combinada com todos os outros filtros e índices de consulta NoSQL do Azure Cosmos DB com suporte usando WHERE
cláusulas. Isso permite que suas pesquisas vetoriais sejam os dados mais relevantes para seus aplicativos.
Esse recurso aprimora os principais recursos do Azure Cosmos DB, tornando-o mais versátil para lidar com dados vetoriais e requisitos de pesquisa em aplicativos de IA.
O que é um repositório vetorial?
Um repositório vetorial ou banco de dados vetorial é um banco de dados projetado para armazenar e gerenciar incorporações vetoriais, que são representações matemáticas de dados em um espaço de alta dimensão. Neste espaço, cada dimensão corresponde a uma característica dos dados, e dezenas de milhares de dimensões podem ser usadas para representar dados sofisticados. A posição de um vetor neste espaço representa suas características. Palavras, frases ou documentos inteiros, imagens, áudio e outros tipos de dados podem ser vetorizados.
Como funciona uma loja vetorial?
Em um repositório vetorial, algoritmos de pesquisa vetorial são usados para indexar e consultar incorporações. Alguns algoritmos de pesquisa vetorial bem conhecidos incluem Hierarchical Navigable Small World (HNSW), Inverted File (IVF), DiskANN, etc. A pesquisa vetorial é um método que ajuda você a encontrar itens semelhantes com base em suas características de dados, em vez de correspondências exatas em um campo de propriedade. Esta técnica é útil em aplicações como procurar texto semelhante, encontrar imagens relacionadas, fazer recomendações ou até mesmo detetar anomalias. Ele é usado para consultar as incorporações vetoriais de seus dados que você criou usando um modelo de aprendizado de máquina usando uma API de incorporação. Exemplos de APIs de incorporação são Azure OpenAI Embeddings ou Hugging Face on Azure. A pesquisa vetorial mede a distância entre os vetores de dados e o vetor de consulta. Os vetores de dados mais próximos do vetor de consulta são os mais semelhantes semanticamente.
No Banco de Dados Vetorial Integrado no Azure Cosmos DB para NoSQL, as incorporações podem ser armazenadas, indexadas e consultadas junto com os dados originais. Essa abordagem elimina o custo extra de replicar dados em um banco de dados vetorial puro separado. Além disso, essa arquitetura mantém as incorporações vetoriais e os dados originais juntos, o que facilita melhor as operações de dados multimodais e permite maior consistência, escala e desempenho dos dados.
Habilitar o recurso de indexação vetorial e pesquisa
A indexação vetorial e a pesquisa no Azure Cosmos DB para NoSQL exigem a habilitação na página Recursos do seu Azure Cosmos DB. Siga os passos abaixo para se inscrever:
Navegue até a página de recursos do Azure Cosmos DB para NoSQL.
Selecione o painel "Recursos" no item de menu "Configurações".
Selecione o recurso "Pesquisa vetorial no Azure Cosmos DB para NoSQL".
Leia a descrição do recurso para confirmar que deseja ativá-lo.
Selecione "Ativar" para ativar a indexação vetorial e a capacidade de pesquisa.
Gorjeta
Como alternativa, use a CLI do Azure para atualizar os recursos da sua conta para dar suporte à pesquisa vetorial NoSQL.
az cosmosdb update \ --resource-group <resource-group-name> \ --name <account-name> \ --capabilities EnableNoSQLVectorSearch
Nota
O pedido de inscrição será autoaprovado; no entanto, pode levar 15 minutos para ativar totalmente na conta.
Políticas de vetores de contêiner
Executar pesquisa vetorial com o Azure Cosmos DB para NoSQL exige que você defina uma política de vetor para o contêiner. Isso fornece informações essenciais para que o mecanismo de banco de dados realize uma pesquisa eficiente de similaridade para vetores encontrados nos documentos do contêiner. Isso também informa a política de indexação vetorial das informações necessárias, caso você opte por especificar uma. As seguintes informações estão incluídas na política de vetores contidos:
- "caminho": a propriedade que contém o vetor (obrigatório).
- "datatype": o tipo de dados da propriedade vetor (padrão Float32).
- "dimensões": A dimensionalidade ou comprimento de cada vetor no caminho. Todos os vetores em um caminho devem ter o mesmo número de dimensões. (padrão 1536).
- "distanceFunction": A métrica usada para calcular distância/similaridade. As métricas suportadas são:
- cosseno, que tem valores de -1 (menos semelhante) a +1 (mais semelhante).
- produto ponto, que tem valores de -inf (menos semelhante) a +inf (mais semelhante).
- euclidiano, que tem valores de 0 (mais semelhantes) a +inf) (menos semelhantes).
Nota
Cada caminho único pode ter, no máximo, uma política. No entanto, várias políticas podem ser especificadas, desde que todas tenham como destino um caminho diferente.
A política de vetor de contêiner pode ser descrita como objetos JSON. Aqui estão dois exemplos de políticas de vetor de contêiner válidas:
Uma política com um único caminho vetorial
{
"vectorEmbeddings": [
{
"path":"/vector1",
"dataType":"float32",
"distanceFunction":"cosine",
"dimensions":1536
}
]
}
Uma política com dois caminhos vetoriais
{
"vectorEmbeddings": [
{
"path":"/vector1",
"dataType":"float32",
"distanceFunction":"cosine",
"dimensions":1536
},
{
"path":"/vector2",
"dataType":"int8",
"distanceFunction":"dotproduct",
"dimensions":100
}
]
}
Políticas de indexação vetorial
Os índices vetoriais aumentam a eficiência ao realizar pesquisas vetoriais usando a função do VectorDistance
sistema. As pesquisas de vetores têm menor latência, maior taxa de transferência e menor consumo de RU ao usar um índice vetorial. Você pode especificar os seguintes tipos de políticas de índice de vetor:
Tipo | Description | Dimensões máximas |
---|---|---|
flat |
Armazena vetores no mesmo índice que outras propriedades indexadas. | 505 |
quantizedFlat |
Quantifica (comprime) vetores antes de armazenar no índice. Isso pode melhorar a latência e a taxa de transferência ao custo de uma pequena quantidade de precisão. | 4096 |
diskANN |
Cria um índice baseado no DiskANN para uma pesquisa aproximada rápida e eficiente. | 4096 |
Nota
O quantizedFlat
e diskANN
índices requer que pelo menos 1.000 vetores sejam inseridos. Isso é para garantir a precisão do processo de quantização. Se houver menos de 1.000 vetores, uma verificação completa será executada em vez disso e levará a taxas de RU mais altas para uma consulta de pesquisa vetorial.
Alguns pontos a observar:
Os
flat
tipos de índice equantizedFlat
usam o índice do Azure Cosmos DB para armazenar e ler cada vetor ao executar uma pesquisa vetorial. As pesquisas vetoriais com umflat
índice são pesquisas de força bruta e produzem 100% de precisão ou recordação. Ou seja, é garantido encontrar os vetores mais semelhantes no conjunto de dados. No entanto, há uma limitação de505
dimensões para vetores em um índice plano.O
quantizedFlat
índice armazena vetores quantizados (compactados) no índice. Pesquisas vetoriais comquantizedFlat
índice também são pesquisas de força bruta, no entanto, sua precisão pode ser um pouco inferior a 100%, uma vez que os vetores são quantificados antes de adicionar ao índice. No entanto, as pesquisas vetoriais comquantized flat
devem ter menor latência, maior taxa de transferência e menor custo de RU do que as pesquisas vetoriais em umflat
índice. Essa é uma boa opção para cenários menores ou cenários em que você está usando filtros de consulta para restringir a pesquisa vetorial a um conjunto relativamente pequeno de vetores.quantizedFlat
é recomendado quando o número de vetores a serem indexados é algo em torno de 50.000 ou menos por partição física. No entanto, esta é apenas uma diretriz geral e o desempenho real deve ser testado, pois cada cenário pode ser diferente.O
diskANN
índice é um índice separado definido especificamente para vetores usando DiskANN, um conjunto de algoritmos de indexação vetorial de alto desempenho desenvolvidos pela Microsoft Research. Os índices DiskANN podem oferecer algumas das consultas de menor latência, maior taxa de transferência e menor custo de RU, mantendo alta precisão. Em geral, o DiskANN é o mais eficiente de todos os tipos de índice se houver mais de 50.000 vetores por partição física.
Aqui estão exemplos de políticas válidas de índice de vetor:
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
},
{
"path": "/vector1/*"
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "diskANN"
}
]
}
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
},
{
"path": "/vector1/*",
},
{
"path": "/vector2/*",
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "quantizedFlat"
},
{
"path": "/vector2",
"type": "diskANN"
}
]
}
Importante
O caminho do vetor adicionado à seção "excludedPaths" da política de indexação para garantir um desempenho otimizado para inserção. Não adicionar o caminho do vetor a "excludedPaths" resultará em maior carga de RU e latência para inserções vetoriais.
Importante
Atualmente, não há suporte para caracteres curinga (*, []) na política de vetores ou no índice de vetores.
Executar pesquisa vetorial com consultas usando VectorDistance()
Depois de criar um contêiner com a política de vetor desejada e inserir dados vetoriais no contêiner, você pode realizar uma pesquisa vetorial usando a função do sistema Distância vetorial em uma consulta. Um exemplo de uma consulta NoSQL que projeta a pontuação de semelhança como o alias SimilarityScore
e classifica em ordem de mais semelhante a menos semelhante:
SELECT TOP 10 c.title, VectorDistance(c.contentVector, [1,2,3]) AS SimilarityScore
FROM c
ORDER BY VectorDistance(c.contentVector, [1,2,3])
Importante
Sempre use uma TOP N
cláusula na SELECT
instrução de uma consulta. Caso contrário, a pesquisa vetorial tentará retornar muito mais resultados e a consulta custará mais RUs e terá latência maior do que o necessário.
Limitações atuais
A indexação vetorial e a pesquisa no Azure Cosmos DB para NoSQL têm algumas limitações.
quantizedFlat
ediskANN
os índices exigem que pelo menos 1.000 vetores sejam indexados para garantir que a quantização seja precisa. Se menos de 1.000 vetores forem indexados, uma verificação completa será usada em vez disso e as taxas de RU poderão ser maiores.- Os vetores indexados com o tipo de
flat
índice podem ter no máximo 505 dimensões. Os vetores indexados com oquantizedFlat
tipo ouDiskANN
índice podem ter no máximo 4.096 dimensões. - O
quantizedFlat
índice utiliza o mesmo método de quantização do DiskANN. - A taxa de inserções vetoriais deve ser limitada. Uma ingestão muito grande (superior a 5 milhões de vetores) pode exigir tempo adicional de construção do índice.
- Não há suporte para bancos de dados de taxa de transferência compartilhados.
- No momento, a indexação vetorial e a pesquisa não são suportadas em contas com Repositório Analítico (e Synapse Link) e Taxa de Transferência Compartilhada.
- Depois que a indexação vetorial e a pesquisa estiverem habilitadas em um contêiner, elas não poderão ser desabilitadas.
Conteúdos relacionados
- DiskANN + Azure Cosmos DB - Vídeo do Microsoft Mechanics
- .NET - Como indexar e consultar dados vetoriais
- Python - Como indexar e consultar dados vetoriais
- Java - Como indexar e consultar dados vetoriais
- Função do sistema VectorDistance
- Visão geral do índice vetorial
- Políticas de índice de vetores
- Gerenciar índice
- Integrações: