Vector Search
A busca vetorial encontra os embeddings armazenados mais próximos de um vetor de consulta, usando k-NN exato ou índices aproximados, como HNSW e IVF, para pesquisar milhões rapidamente.
A pesquisa vetorial recupera os itens cujos embeddings estão mais próximos de um embedding de consulta segundo uma medida de semelhança, como a similaridade do cosseno, o produto escalar ou a distância euclidiana. Um modelo de embeddings coloca itens com significado ou aparência semelhantes perto uns dos outros, pelo que os vetores mais próximos correspondem aos documentos, imagens ou produtos mais semelhantes, mesmo quando não partilham palavras-chave com a consulta. A pesquisa vetorial exata é uma consulta de k vizinhos mais próximos (k-NN) sobre todos os vetores armazenados. À escala, os sistemas usam índices de vizinhos mais próximos aproximados (ANN), que comparam a consulta com uma pequena fração dos vetores e, ainda assim, devolvem quase todos os verdadeiros vizinhos.
Como funciona a busca vetorial#
A consulta e os itens armazenados são convertidos em embeddings pelo mesmo modelo ou por um par treinado em conjunto: um codificador de frases para texto, CLIP para associar texto a imagens ou uma rede de base de visão para associar imagens a imagens. A métrica deve corresponder à forma como o modelo foi treinado. Para vetores unitários, a similaridade do cosseno é igual ao produto escalar, e a ordenação pela distância euclidiana produz a mesma classificação. A pesquisa exata custa uma comparação por vetor armazenado, para cada consulta; é rápida para dezenas de milhares de vetores, mas demasiado lenta para centenas de milhões, por isso os sistemas de grande escala usam uma de quatro famílias de índices ANN:
- Índices de grafos, como HNSW: Ligam cada vetor aos seus vizinhos próximos num grafo em camadas e respondem a uma consulta percorrendo-o de forma gulosa até ao destino.
- Índices de agrupamento (IVF): Agrupam os vetores com k-means e percorrem apenas os grupos cujos centroides estão mais próximos da consulta.
- Quantização vetorial: Comprime cada vetor em alguns bytes, como na quantização de produto, para que as distâncias sejam aproximadas a partir de códigos compactos mantidos na memória.
- Grafos baseados em disco: Mantêm um índice de grafo num SSD, como faz o DiskANN, para pesquisar milhares de milhões de vetores numa única máquina.
A ideia central de um índice IVF cabe num breve exemplo com NumPy e scikit-learn que o compara com a pesquisa exata:
import numpy as np
from sklearn.cluster import KMeans
# 20,000 embeddings grouped by topic, normalized so a dot product is cosine similarity
rng = np.random.default_rng(0)
topics = rng.normal(size=(200, 64))
vectors = topics[rng.integers(200, size=20000)] + 0.5 * rng.normal(size=(20000, 64))
vectors /= np.linalg.norm(vectors, axis=1, keepdims=True)
query = vectors[0] + 0.1 * rng.normal(size=64)
# Exact search: score every stored vector
exact = np.argsort(-(vectors @ query))[:10]
# IVF index: cluster the vectors, then scan only the lists of the 5 closest centroids
kmeans = KMeans(n_clusters=100, n_init=1, random_state=0).fit(vectors)
probed = np.argsort(-(kmeans.cluster_centers_ @ query))[:5]
candidates = np.flatnonzero(np.isin(kmeans.labels_, probed))
approx = candidates[np.argsort(-(vectors[candidates] @ query))[:10]]
print(f"scanned {len(candidates) / len(vectors):.1%} of vectors")
print(f"recall@10: {len(set(exact) & set(approx)) / 10:.0%}")Sondar 5 dos 100 grupos percorre 5,1% dos vetores e, ainda assim, encontra os 10 verdadeiros vizinhos mais próximos, com uma revocação@10 de 100%. Sondar mais grupos aumenta tanto a revocação como o custo, pelo que o número de sondagens é a principal definição a ajustar num índice IVF.
Pesquisa vetorial vs. termos relacionados#
- Pesquisa por palavras-chave: Procura termos exatos num índice invertido e classifica-os com fórmulas como BM25. É eficaz com nomes, códigos e palavras raras, mas não encontra sinónimos.
- Pesquisa semântica: Pesquisa por significado, o objetivo que a pesquisa vetorial serve com maior frequência. Os sistemas de pesquisa semântica costumam acrescentar reformulação da consulta ou um reordenador.
- Pesquisa híbrida: Executa em conjunto a pesquisa por palavras-chave e a pesquisa vetorial e combina as duas listas classificadas.
- Base de dados vetorial: O sistema que armazena vetores com metadados e disponibiliza pesquisa vetorial com filtragem, atualizações e persistência.
Aplicações no mundo real#
- Geração aumentada por recuperação (RAG): Encontra as passagens de documentos de que um modelo de linguagem precisa para responder a uma pergunta.
- Reidentificação de objetos: Compara o embedding da aparência de uma pessoa ou veículo com avistamentos anteriores para associar o mesmo objeto entre câmaras.
- Reconhecimento facial: Compara o embedding de um rosto com rostos registados e aceita o mais próximo quando a semelhança é suficiente.
- Sistemas de recomendação: Sugerem produtos, músicas ou vídeos cujos embeddings estão próximos das escolhas recentes de um utilizador.
A Ultralytics Platform usa pesquisa vetorial para expandir conjuntos de dados de treino. A ação Encontrar imagens semelhantes recebe uma imagem selecionada, pesquisa conjuntos de dados públicos e conjuntos do próprio utilizador e da equipa para encontrar as imagens mais próximas segundo o embedding, e mostra até 24 correspondências com as respetivas pontuações de semelhança, que podem ser adicionadas ao conjunto de dados como imagens de treino não anotadas.










