Observação: para informações básicas importantes sobre pesquisa vetorial, consulte a parte 1 da nossa Introdução à Pesquisa Semântica: De palavras-chave a vetores.
Ao criar um aplicativo de pesquisa de vetores, você acabará gerenciando muitos vetores, também conhecidos como Incorporações. E uma das operações mais comuns nesses aplicativos é encontrar outros vetores próximos. Um banco de dados de vetores não apenas armazena embeddings, mas também facilita essas operações de busca comuns sobre eles.
A razão pela qual encontrar vetores próximos é útil é que itens semanticamente similares acabam próximos uns dos outros no espaço de incorporação. Em outras palavras, encontrar os vizinhos mais próximos é a operação usada para encontrar itens similares. Com esquemas de incorporação disponíveis para texto multilíngue, imagens, sons, dados e muitos outros casos de uso, esse é um recurso atraente.
Gerando Embeddings
Um ponto de decisão importante no desenvolvimento de um aplicativo de pesquisa semântica que usa vetores é escolher qual serviço de incorporação usar. Cada merchandise que você deseja pesquisar precisará ser processado para produzir uma incorporação, assim como cada consulta. Dependendo da sua carga de trabalho, pode haver uma sobrecarga significativa envolvida na preparação dessas incorporações. Se o provedor de incorporação estiver na nuvem, a disponibilidade do seu sistema — mesmo para consultas — dependerá da disponibilidade do provedor.
Esta é uma decisão que deve ser devidamente considerada, uma vez que alterar embeddings normalmente implicará em repovoar todo o banco de dados, uma proposta cara. Diferentes modelos produzem embeddings em um espaço de embedding diferente, então embeddings normalmente não são comparáveis quando gerados com modelos diferentes. Alguns bancos de dados de vetores, no entanto, permitirão que múltiplos embeddings sejam armazenados para um determinado merchandise.
Um serviço well-liked de incorporação de texto hospedado na nuvem é Ada v2 da OpenAI. Custa alguns centavos para processar um milhão de tokens e é amplamente usado em diferentes setores. Google, Microsoft, HuggingFace e outros também fornecem opções on-line.
Se seus dados forem muito sensíveis para enviar para fora de suas paredes, ou se a disponibilidade do sistema for uma preocupação primordial, é possível produzir embeddings localmente. Algumas bibliotecas populares para fazer isso incluem Transformadores de Frases, GenSime várias estruturas de Processamento de Linguagem Pure (PLN).
Para conteúdo diferente de texto, há uma grande variedade de modelos de incorporação possíveis. Por exemplo, o SentenceTransfomers permite que imagens e texto estejam no mesmo espaço de incorporação, para que um aplicativo possa encontrar imagens semelhantes a palavras e vice-versa. Uma série de modelos diferentes estão disponíveis, e esta é uma área de desenvolvimento em rápido crescimento.
Pesquisa de vizinho mais próximo
O que significa precisamente vetores “próximos”? Para determinar se os vetores são semanticamente semelhantes (ou diferentes), você precisará calcular distâncias, com uma função conhecida como medida de distância. (Você pode ver isso também chamado de métricaque tem uma definição mais rigorosa; na prática, os termos são frequentemente usados de forma intercambiável.) Normalmente, um banco de dados vetorial terá índices otimizados com base em um conjunto de medidas disponíveis. Aqui estão algumas das mais comuns:
Uma distância direta e em linha reta entre dois pontos é chamada de Métrica de distância euclidianaou às vezes L2e é amplamente suportado. O cálculo em duas dimensões, usando x e y para representar a mudança ao longo de um eixo, é sqrt(x^2 + y^2)—mas tenha em mente que vetores reais podem ter milhares de dimensões ou mais, e todos esses termos precisam ser computados.
Outro é o Métrica de distância de Manhattanàs vezes chamado L1. Isso é como Euclidiano se você pular todas as multiplicações e raiz quadrada, em outras palavras, na mesma notação de antes, simplesmente abs(x) + abs(y). Pense nisso como a distância que você precisaria andar, seguindo apenas caminhos em ângulo reto em uma grade.
Em alguns casos, o ângulo entre dois vetores pode ser usado como uma medida. A produto escalarou produto internoé a ferramenta matemática usada neste caso, e algum {hardware} é especialmente otimizado para esses cálculos. Ele incorpora o ângulo entre vetores, bem como seus comprimentos. Em contraste, um medida de cosseno ou similaridade de cosseno considera apenas os ângulos, produzindo um valor entre 1,0 (vetores apontando na mesma direção) a 0 (vetores ortogonais) a -1,0 (vetores com 180 graus de distância).
Existem algumas métricas de distância especializadas, mas elas são menos comumente implementadas “prontas para uso”. Muitos bancos de dados vetoriais permitem que métricas de distância personalizadas sejam conectadas ao sistema.
Qual medida de distância você deve escolher? Frequentemente, a documentação de um modelo de incorporação dirá o que usar — você deve seguir esse conselho. Caso contrário, Euclidean é um bom ponto de partida, a menos que você tenha razões específicas para pensar o contrário. Pode valer a pena experimentar diferentes medidas de distância para ver qual delas funciona melhor em sua aplicação.
Sem alguns truques inteligentes, para encontrar o ponto mais próximo no espaço de incorporação, no pior caso, o banco de dados precisaria calcular a medida de distância entre um vetor alvo e todos os outros vetores no sistema e, em seguida, classificar a lista resultante. Isso rapidamente sai do controle conforme o tamanho do banco de dados cresce. Como resultado, todos os bancos de dados de nível de produção incluem vizinho mais próximo aproximado (ANN). Eles trocam um pouquinho de precisão por um desempenho muito melhor. A pesquisa em algoritmos de ANN continua sendo um tópico quente, e uma implementação forte de um pode ser um fator-chave na escolha de um banco de dados vetorial.
Selecionando um banco de dados vetorial
Agora que discutimos alguns dos principais elementos suportados pelos bancos de dados vetoriais — armazenamento de incorporações e computação de similaridade de vetores — como você deve selecionar um banco de dados para seu aplicativo?
O desempenho da pesquisa, medido pelo tempo necessário para resolver consultas em índices de vetores, é uma consideração primária aqui. Vale a pena entender como um banco de dados implementa a indexação e a correspondência aproximadas do vizinho mais próximo, pois isso afetará o desempenho e a escala do seu aplicativo. Mas também investigue o desempenho da atualização, a latência entre adicionar novos vetores e fazê-los aparecer nos resultados. Consultar e ingerir dados de vetores ao mesmo tempo também pode ter implicações de desempenho, portanto, certifique-se de testar isso se você espera fazer as duas coisas simultaneamente.
Tenha uma boa ideia da escala do seu projeto e quão rápido você espera que seus usuários e dados vetoriais cresçam. Quantos embeddings você precisará armazenar? A pesquisa vetorial em escala de bilhões certamente é viável hoje. Seu banco de dados vetorial pode ser dimensionado para lidar com os requisitos de QPS do seu aplicativo? O desempenho diminui conforme a escala dos dados vetoriais aumenta? Embora importe menos qual banco de dados é usado para prototipagem, você vai querer considerar mais profundamente o que seria necessário para colocar seu aplicativo de pesquisa vetorial em produção.
Os aplicativos de pesquisa de vetores geralmente precisam de filtragem de metadados também, então é uma boa ideia entender como essa filtragem é realizada e quão eficiente ela é ao pesquisar bancos de dados de vetores. O banco de dados pré-filtra, pós-filtra ou pesquisa e filtra em uma única etapa para filtrar os resultados da pesquisa de vetores usando metadados? Abordagens diferentes terão implicações diferentes para a eficiência da sua pesquisa de vetores.
Uma coisa frequentemente esquecida sobre bancos de dados vetoriais é que eles também precisam ser bons bancos de dados! Aqueles que fazem um bom trabalho lidando com conteúdo e metadados na escala necessária devem estar no topo da sua lista. Sua análise precisa incluir preocupações comuns a todos os bancos de dados, como controles de acesso, facilidade de administração, confiabilidade e disponibilidade e custos operacionais.
Conclusão
Provavelmente, o caso de uso mais comum hoje para bancos de dados vetoriais é complementar Giant Language Fashions (LLMs) como parte de um fluxo de trabalho orientado por IA. Essas são ferramentas poderosas, para as quais a indústria está apenas arranhando a superfície do que é possível. Esteja avisado: essa tecnologia incrível provavelmente o inspirará com novas ideias sobre novos aplicativos e possibilidades para sua pilha de pesquisa e seu negócio.
Aprenda como o Rockset oferece suporte à pesquisa vetorial aqui.