Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Um banco de dados vetorial armazena e gerencia dados na forma de vetores, que são matrizes numéricas de pontos de dados.
O uso de vetores permite consultas e análises complexas, porque pode comparar e analisar vetores utilizando técnicas avançadas como pesquisa por similaridade vetorial, quantização e agrupamento. As bases de dados tradicionais não são adequadas para lidar com dados de alta dimensão que se estão a tornar cada vez mais comuns na análise de dados. No entanto, os bancos de dados vetoriais são projetados para lidar com dados de alta dimensão, como texto, imagens e áudio, representando-os como vetores. Os bancos de dados vetoriais são úteis para tarefas como aprendizado de máquina, processamento de linguagem natural e reconhecimento de imagens, onde o objetivo é identificar padrões ou semelhanças em grandes conjuntos de dados.
Este artigo fornece alguns antecedentes sobre bancos de dados vetoriais e explica conceitualmente como você pode usar uma Eventhouse como um banco de dados vetorial em Inteligência em Tempo Real no Microsoft Fabric. Para obter um exemplo prático, consulte Tutorial: Usar uma casa de eventos como um banco de dados vetorial.
Conceitos-chave
Os seguintes conceitos-chave são usados em bancos de dados vetoriais:
Semelhança vetorial
A semelhança vetorial é uma medida de quão diferentes (ou semelhantes) dois ou mais vetores são. A pesquisa de semelhança vetorial é uma técnica usada para encontrar vetores semelhantes em um conjunto de dados. Compara-se vetores usando uma métrica de distância, como distância euclidiana ou similaridade do cosseno. Quanto mais próximos estiverem os dois vetores, mais semelhantes eles são.
Incorporações
As incorporações são uma maneira comum de representar dados em um formato vetorial para uso em bancos de dados vetoriais. Uma incorporação é uma representação matemática de um pedaço de dados, como uma palavra, documento de texto ou uma imagem, que é projetado para capturar seu significado semântico. Os embeddings são criados usando algoritmos que analisam os dados e geram um conjunto de valores numéricos que representam as suas principais características. Por exemplo, uma incorporação de uma palavra pode representar seu significado, seu contexto e sua relação com outras palavras. O processo de criação de incorporações é simples. Embora possa criá-los usando pacotes Python padrão (por exemplo, spaCy, sent2vec, Gensim), os Grandes Modelos de Linguagem (LLM) geram embeddings da mais alta qualidade para pesquisa semântica de texto. Por exemplo, pode enviar texto para um modelo de embedding no Azure OpenAI, e ele gera uma representação vetorial que pode armazenar para análise. Para obter mais informações, consulte Compreender incorporações no Serviço OpenAI do Azure.
Fluxo de trabalho geral
O fluxo de trabalho geral para usar um banco de dados vetorial é o seguinte:
- Incorporar dados: converta dados em formato vetorial usando um modelo de incorporação. Por exemplo, você pode incorporar dados de texto usando um modelo OpenAI.
- Armazenar vetores: armazene os vetores incorporados em um banco de dados vetorial. Você pode enviar os dados incorporados para uma Eventhouse para armazenar e gerenciar os vetores.
- Incorporar consulta: converta os dados da consulta em formato vetorial usando o mesmo modelo de incorporação usado para incorporar os dados armazenados.
- Vetores de consulta: use a pesquisa de semelhança vetorial para localizar entradas no banco de dados semelhantes à consulta.
Eventhouse como base de dados vetorial
No cerne da pesquisa por similaridade vetorial está a capacidade de armazenar, indexar e consultar dados de vetores. As casas de eventos fornecem uma solução para lidar e analisar grandes volumes de dados, particularmente em cenários que exigem análise e exploração em tempo real. Esta capacidade torna o Eventhouse uma excelente escolha para armazenar e pesquisar vetores.
Os seguintes componentes do Eventhouse permitem-lhe utilizá-lo como uma base de dados vetorial:
- O tipo de dados dinâmico , que pode armazenar dados não estruturados, como matrizes e pacotes de propriedades. Use este tipo de dados para armazenar valores vetoriais. Você pode aumentar ainda mais o valor do vetor armazenando metadados relacionados ao objeto original como colunas separadas na tabela.
- O tipo
Vector16foi concebido para armazenar vetores de números em ponto flutuante com precisão de 16 bits. Esta codificação usa oBfloat16em vez dos predefinidos 64 bits. Use esta codificação para armazenar embeddings vetoriais de ML porque reduz os requisitos de armazenamento por um fator de quatro e acelera funções de processamento de vetores, como series_dot_product() e series_cosine_similarity(), por várias ordens de grandeza. - A função series_cosine_similarity , que podes usar para realizar pesquisas de similaridade vetorial por cima dos vetores armazenados no Eventhouse.
Otimizar para escalabilidade
Para mais informações sobre como otimizar a pesquisa por similaridade vetorial, consulte o blogue.
Para maximizar o desempenho e os tempos de pesquisa resultantes, siga estes passos:
- Defina a codificação da coluna de incorporações como Vetor16, a codificação de 16 bits dos coeficientes de vetores (em vez do padrão de 64 bits).
- Armazene a tabela de vetores de incorporação em todos os nós do cluster com pelo menos um shard por processador. Para atingir este objetivo, siga estes passos:
- Limite o número de vetores embebidos por fragmento alterando o ShardEngineMaxRowCount da política de fragmentação. A política de fragmentação equilibra os dados em todos os nós com várias extensões por nó para que a pesquisa possa usar todos os processadores disponíveis.
- Altere o RowCountUpperBoundForMerge da política de fusão. A política de fusão é necessária para suprimir as extensões de fusão após a ingestão.
Exemplo de etapas de otimização
No exemplo seguinte, defines uma tabela vetorial estática para armazenar vetores de 1M. Defines a política de embedding como Vector16 e defines as políticas de sharding e fusão para otimizar a tabela para pesquisa de similaridade vetorial. Neste exemplo, suponha que o cluster tem 20 nós e cada nó tem 16 processadores. Os fragmentos da tabela devem conter no máximo 1.000.000/(20*16)=3.125 linhas.
Execute os seguintes comandos KQL um a um para criar a tabela vazia e definir as políticas e codificação necessárias:
.create table embedding_vectors(vector_id:long, vector:dynamic) // This is a sample selection of columns, you can add more columns .alter column embedding_vectors.vector policy encoding type = 'Vector16' // Store the coefficients in 16 bits instead of 64 bits accelerating calculation of dot product, suppress redundant indexing .alter-merge table embedding_vectors policy sharding '{ "ShardEngineMaxRowCount" : 3125 }' // Balanced data on all nodes and, multiple extents per node so the search can use all processors .alter-merge table embedding_vectors policy merge '{ "RowCountUpperBoundForMerge" : 3125 }' // Suppress merging extents after ingestionIngerir os dados para a tabela criada e definida na etapa anterior.