Vector Search
La búsqueda vectorial encuentra los embeddings almacenados más cercanos a un vector de consulta mediante k-NN exacto o índices aproximados, como HNSW e IVF, para buscar rápidamente entre millones de elementos.
La búsqueda vectorial recupera los elementos cuyas incrustaciones están más cerca de una incrustación de consulta según una medida de similitud, como la similitud del coseno, el producto escalar o la distancia euclídea. Un modelo de incrustación sitúa cerca entre sí los elementos con un significado o aspecto similar, por lo que los vectores más próximos corresponden a los documentos, imágenes o productos más parecidos, aunque no compartan palabras clave con la consulta. La búsqueda vectorial exacta consiste en una consulta de k vecinos más cercanos (k-NN) que examina todos los vectores almacenados. A gran escala, los sistemas usan índices de vecinos más cercanos aproximados (ANN), que comparan la consulta con una pequeña fracción de los vectores y aun así devuelven casi todos los vecinos reales.
Cómo funciona la búsqueda vectorial#
La consulta y los elementos almacenados se convierten en incrustaciones con el mismo modelo o con dos modelos entrenados conjuntamente: un codificador de frases para texto, CLIP para relacionar texto e imágenes, o una red troncal de visión para relacionar imágenes entre sí. La métrica debe coincidir con la usada para entrenar el modelo. En vectores de longitud unitaria, la similitud del coseno equivale al producto escalar, y la clasificación por distancia euclídea produce el mismo orden. La búsqueda exacta requiere una comparación por cada vector almacenado y consulta; es rápida con decenas de miles de vectores, pero demasiado lenta con cientos de millones. Por eso, los sistemas grandes usan una de estas cuatro familias de índices ANN:
- Índices de grafos como HNSW: conectan cada vector con sus vecinos próximos en un grafo por capas y responden a una consulta recorriendo el grafo de forma voraz hacia ella.
- Índices de agrupación (IVF): agrupan los vectores mediante k-means y exploran solo los grupos cuyos centroides están más cerca de la consulta.
- Cuantización vectorial: comprime cada vector hasta ocupar unos pocos bytes, como en la cuantización de productos, de modo que las distancias se aproximan a partir de códigos compactos almacenados en memoria.
- Grafos basados en disco: mantienen un índice de grafo en un SSD, como hace DiskANN, para buscar miles de millones de vectores en una sola máquina.
La idea básica de un índice IVF se ilustra en un breve ejemplo con NumPy y scikit-learn que lo compara con la búsqueda exacta:
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%}")Sondear 5 de los 100 grupos examina el 5,1 % de los vectores y aun así encuentra los 10 vecinos más cercanos reales: una exhaustividad@10 del 100 %. Sondear más grupos aumenta tanto la exhaustividad como el coste, por lo que el número de sondeos es el principal parámetro que hay que ajustar en un índice IVF.
Búsqueda vectorial y términos relacionados#
- Búsqueda por palabras clave: busca términos exactos en un índice invertido y los clasifica con fórmulas como BM25. Destaca con nombres, códigos y palabras poco frecuentes, pero no encuentra sinónimos.
- Búsqueda semántica: busca por significado, el objetivo más habitual de la búsqueda vectorial. Los sistemas de búsqueda semántica suelen añadir reformulación de consultas o un reclasificador.
- Búsqueda híbrida: ejecuta conjuntamente búsquedas por palabras clave y vectoriales, y combina las dos listas clasificadas.
- Base de datos vectorial: sistema que almacena vectores con metadatos y ofrece búsqueda vectorial con filtros, actualizaciones y persistencia.
Aplicaciones en el mundo real#
- Generación aumentada por recuperación (RAG): encuentra los pasajes de documentos que necesita un modelo de lenguaje para responder a una pregunta.
- Reidentificación de objetos: compara la incrustación de apariencia de una persona o un vehículo con avistamientos anteriores para vincular el mismo objeto entre cámaras.
- Reconocimiento facial: compara la incrustación de un rostro con los rostros registrados y acepta el más cercano si está lo bastante cerca.
- Sistemas de recomendación: sugieren productos, canciones o vídeos cuyas incrustaciones están cerca de las elecciones recientes de un usuario.
Ultralytics Platform usa la búsqueda vectorial para ampliar los conjuntos de datos de entrenamiento. Su acción Buscar imágenes similares toma una imagen seleccionada, busca las imágenes más cercanas por incrustación en conjuntos de datos públicos y en los conjuntos de datos propios y del equipo del usuario, y muestra hasta 24 coincidencias con sus puntuaciones de similitud, que se pueden añadir al conjunto de datos como imágenes de entrenamiento sin etiquetar.










