¿Por qué y cuándo se necesita una base de datos vectorial específica?
Este artículo se publicó originalmente en AIAI y se publica aquí con permiso.
La creciente popularidad de ChatGPT y otros grandes modelos lingüísticos (LLM) ha impulsado el auge de las tecnologías de búsqueda vectorial, entre las que se incluyen bases de datos vectoriales específicas como Milvus y Zilliz Cloud, bibliotecas de búsqueda vectorial como FAISS y plugins de búsqueda vectorial integrados con bases de datos tradicionales. Sin embargo, elegir la mejor solución para sus necesidades puede ser todo un reto. Al igual que elegir entre un restaurante de alta gama y una cadena de comida rápida, la selección de la tecnología de búsqueda vectorial adecuada depende de sus necesidades y expectativas.
En este post, le ofreceré una visión general de la búsqueda vectorial y su funcionamiento, compararé diferentes tecnologías de búsqueda vectorial y le explicaré por qué es crucial optar por una base de datos vectorial creada específicamente para este fin.
¿Qué es la búsqueda vectorial y cómo funciona?
La búsquedavectorial, también conocida como búsqueda de similitud vectorial, es una técnica para recuperar los resultados top-k más similares o semánticamente relacionados con un vector de consulta dado entre una extensa colección de datos vectoriales densos.
Antes de realizar búsquedas de similitud, aprovechamos las redes neuronales para transformar datos no estructurados, como texto, imágenes, vídeos y audio, en vectores numéricos de alta dimensión denominados vectores de incrustación. Por ejemplo, podemos utilizar la red neuronal convolucional preentrenada ResNet-50 para transformar una imagen de un pájaro en una colección de incrustaciones con 2.048 dimensiones. Enumeramos aquí los tres primeros y los tres últimos elementos del vector: [0.1392, 0.3572, 0.1988, ..., 0.2888, 0.6611, 0.2909]
.
Imagen de un pájaro de Patrice Bouchard
Tras generar los vectores de incrustación, los motores de búsqueda vectorial comparan la distancia espacial entre el vector de consulta de entrada y los vectores de los almacenes de vectores. Cuanto más cerca estén en el espacio, más parecidos serán.
Aritmética de la incrustación
Tecnologías populares de búsqueda vectorial
Existen múltiples tecnologías de búsqueda vectorial en el mercado, incluyendo bibliotecas de aprendizaje automático como NumPy de Python, bibliotecas de búsqueda vectorial como FAISS, plugins de búsqueda vectorial construidos sobre bases de datos tradicionales y bases de datos vectoriales especializadas como Milvus y Zilliz Cloud.
Bibliotecas de aprendizaje automático
El uso de bibliotecas de aprendizaje automático es la forma más sencilla de implementar búsquedas vectoriales. Por ejemplo, podemos utilizar NumPy de Python para implementar un algoritmo de vecino más cercano en menos de 20 líneas de código.
import numpy as np
# Function to calculate euclidean distance
def euclidean_distance(a, b):
return np.linalg.norm(a - b)
# Function to perform knn
def knn(data, target, k):
# Calculate distances between target and all points in the data
distances = [euclidean_distance(d, target) for d in data]
# Combine distances with data indices
distances = np.array(list(zip(distances, np.arange(len(data)))))
# Sort by distance
sorted_distances = distances[distances[:, 0].argsort()]
# Get the top k closest indices
closest_k_indices = sorted_distances[:k, 1].astype(int)
# Return the top k closest vectors
return data[closest_k_indices]
Podemos generar 100 vectores bidimensionales y encontrar el vecino más cercano al vector [0,5, 0,5].
# Define some 2D vectors
data = np.random.rand(100, 2)
# Define a target vector
target = np.array([0.5, 0.5])
# Define k
k = 3
# Perform knn
closest_vectors = knn(data, target, k)
# Print the result
print("The closest vectors are:")
print(closest_vectors)
Las bibliotecas de aprendizaje automático, como NumPy de Python, ofrecen una gran flexibilidad a bajo coste. Sin embargo, tienen algunas limitaciones. Por ejemplo, sólo pueden manejar una pequeña cantidad de datos y no garantizan la persistencia de los datos.
Sólo recomiendo utilizar NumPy u otras bibliotecas de aprendizaje automático para la búsqueda vectorial cuando:
- Necesitas prototipado rápido.
- No te importa la persistencia de los datos.
- El tamaño de tus datos es inferior a un millón y no necesitas filtrado escalar.
- No necesita un alto rendimiento.
Bibliotecas de búsqueda vectorial
Las bibliotecas de búsqueda vectorial pueden ayudarle a crear rápidamente un prototipo de sistema de búsqueda vectorial de alto rendimiento. FAISS es un ejemplo típico. Es de código abierto y ha sido desarrollada por Meta para la búsqueda eficiente de similitudes y la agrupación de vectores densos. FAISS puede manejar colecciones de vectores de cualquier tamaño, incluso aquellas que no pueden cargarse completamente en memoria. Además, FAISS ofrece herramientas de evaluación y ajuste de parámetros. Aunque está escrito en C++, FAISS proporciona una interfaz Python/NumPy.
A continuación se muestra el código de un ejemplo de búsqueda vectorial basado en FAISS:
import numpy as np
import faiss
# Generate some example data
dimension = 64 # dimension of the vector space
database_size = 10000 # size of the database
query_size = 100 # number of queries to perform
np.random.seed(123) # make the random numbers predictable
# Generating vectors to index in the database (db_vectors)
db_vectors = np.random.random((database_size, dimension)).astype('float32')
# Generating vectors for query (query_vectors)
query_vectors = np.random.random((query_size, dimension)).astype('float32')
# Building the index
index = faiss.IndexFlatL2(dimension) # using the L2 distance metric
print(index.is_trained) # should return True
# Adding vectors to the index
index.add(db_vectors)
print(index.ntotal) # should return database_size (10000)
# Perform a search
k = 4 # we want to see 4 nearest neighbors
distances, indices = index.search(query_vectors, k)
# Print the results
print("Indices of nearest neighbors: \n", indices)
print("\nL2 distances to the nearest neighbors: \n", distances)
Las bibliotecas de búsqueda vectorial como FAISS son fáciles de usar y lo suficientemente rápidas como para manejar entornos de producción a pequeña escala con millones de vectores. Se puede mejorar su rendimiento de consulta utilizando la cuantización y las GPU y reduciendo las dimensiones de los datos.
Sin embargo, estas bibliotecas tienen algunas limitaciones cuando se utilizan en producción. Por ejemplo, FAISS no admite la adición y eliminación de datos en tiempo real, las llamadas remotas, los lenguajes múltiples, el filtrado escalar, la escalabilidad o la recuperación ante desastres.
Diferentes tipos de bases de datos vectoriales
Las bases de datos vectoriales han surgido para hacer frente a las limitaciones de las bibliotecas anteriores, proporcionando una solución más completa y práctica para las aplicaciones de producción.
Existen cuatro tipos de bases de datos vectoriales:
- Bases de datos relacionales o columnares existentes que incorporan un complemento de búsqueda vectorial. PG Vector es un ejemplo.
- Motores de búsqueda tradicionales de índice invertido con soporte para indexación vectorial densa. ElasticSearch es un ejemplo.
- Bases de datos vectoriales ligeras construidas sobre bibliotecas de búsqueda vectorial. Chroma es un ejemplo.
- Bases de datos vectoriales específicas. Este tipo de base de datos está específicamente diseñada y optimizada para la búsqueda vectorial desde la base. Las bases de datos vectoriales específicas suelen ofrecer características más avanzadas, como computación distribuida, recuperación ante desastres y persistencia de datos. Milvus es uno de los principales ejemplos.
No todas las bases de datos vectoriales son iguales. Cada pila tiene ventajas y limitaciones únicas, lo que las hace más o menos adecuadas para diferentes aplicaciones.
Yo prefiero las bases de datos vectoriales especializadas a otras soluciones porque son la opción más eficiente y conveniente, y ofrecen numerosas ventajas únicas. En las secciones siguientes, utilizaré Milvus como ejemplo para explicar las razones de mi preferencia.
Principales ventajas de las bases de datos vectoriales específicas
Milvus es una base de datos vectorial de código abierto, distribuida y creada específicamente para almacenar, indexar, gestionar y recuperar miles de millones de vectores de incrustación. También es una de las bases de datos vectoriales más populares para la generación aumentada de recuperación LLM. Como instancia ejemplar de bases de datos vectoriales construidas a propósito, Milvus comparte muchas ventajas únicas con sus homólogas.
Persistencia de datos y almacenamiento rentable
Aunque evitar la pérdida de datos es el requisito mínimo para una base de datos, muchas bases de datos vectoriales ligeras y de una sola máquina no dan prioridad a la fiabilidad de los datos. Por el contrario, las bases de datos vectoriales distribuidas creadas específicamente, como Milvus, dan prioridad a la resistencia del sistema, la escalabilidad y la persistencia de los datos mediante la separación del almacenamiento y el cálculo.
Además, la mayoría de las bases de datos vectoriales que utilizan índices de aproximación al vecino más cercano (RNA) necesitan mucha memoria para realizar búsquedas vectoriales, ya que cargan los índices RNA exclusivamente en memoria. Sin embargo, Milvus admite índices en disco, lo que hace que el almacenamiento sea más de diez veces más rentable que los índices en memoria.
Rendimiento óptimo de las consultas
Una base de datos vectorial especializada proporciona un rendimiento de consulta óptimo en comparación con otras opciones de búsqueda vectorial. Por ejemplo, Milvus es diez veces más rápido en el manejo de consultas que los plugins de búsqueda vectorial. Milvus utiliza el algoritmo ANN en lugar del algoritmo de búsqueda brutal KNN para una búsqueda vectorial más rápida. Además, fragmenta sus índices, reduciendo el tiempo que se tarda en construir un índice a medida que aumenta el volumen de datos. Este enfoque permite a Milvus manejar fácilmente miles de millones de vectores con adiciones y supresiones de datos en tiempo real. Por el contrario, otros complementos de búsqueda vectorial sólo son adecuados para escenarios con menos de decenas de millones de datos y adiciones y supresiones poco frecuentes.
Milvus también es compatible con la aceleración por GPU. Las pruebas internas demuestran que la indexación vectorial acelerada en la GPU puede alcanzar más de 10.000 QPS cuando se buscan decenas de millones de datos, lo que es al menos diez veces más rápido que la indexación tradicional en la CPU para el rendimiento de las consultas en una sola máquina.
Fiabilidad del sistema
Muchas aplicaciones utilizan bases de datos vectoriales para consultas en línea que requieren baja latencia de consulta y alto rendimiento. Estas aplicaciones exigen la conmutación por error de una sola máquina a nivel de minutos, y algunas incluso requieren la recuperación de desastres entre regiones para escenarios críticos. Las estrategias de replicación tradicionales basadas en Raft/Paxos sufren un grave despilfarro de recursos y necesitan ayuda para separar previamente los datos, lo que da lugar a una escasa fiabilidad. Por el contrario, Milvus tiene una arquitectura distribuida que aprovecha las colas de mensajes K8s para una alta disponibilidad, reduciendo el tiempo de recuperación y ahorrando recursos.
Operabilidad y observabilidad
Para prestar un mejor servicio a los usuarios empresariales, las bases de datos vectoriales deben ofrecer una serie de características de nivel empresarial para una mejor operabilidad y observabilidad. Milvus soporta múltiples métodos de despliegue, incluyendo K8s Operator y Helm chart, docker-compose, y pip install, haciéndolo accesible a usuarios con diferentes necesidades. Milvus también proporciona un sistema de monitorización y alarma basado en Grafana, Prometheus y Loki, mejorando su observabilidad. Con una arquitectura distribuida nativa de la nube, Milvus es la primera base de datos vectorial de la industria que admite aislamiento multitenant, RBAC, limitación de cuotas y actualizaciones continuas. Todos estos enfoques simplifican enormemente la gestión y supervisión de Milvus.
Empezar a utilizar Milvus en 3 sencillos pasos en 10 minutos
Construir una base de datos vectorial es una tarea compleja, pero utilizar una es tan sencillo como usar Numpy y FAISS. Incluso los estudiantes no familiarizados con la IA pueden implementar la búsqueda vectorial basada en Milvus en sólo diez minutos. Para experimentar servicios de búsqueda vectorial altamente escalables y de alto rendimiento, siga estos tres pasos:
- Despliegue Milvus en su servidor con la ayuda del documento de despliegue de Milvus.
- Implemente la búsqueda vectorial con sólo 50 líneas de código consultando el documento Hello Milvus.
- Explore los documentos de ejemplo de Towhee para conocer casos de uso populares de bases de datos vectoriales.
- ¿Qué es la búsqueda vectorial y cómo funciona?
- Tecnologías populares de búsqueda vectorial
- Principales ventajas de las bases de datos vectoriales específicas
- Empezar a utilizar Milvus en 3 sencillos pasos en 10 minutos
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word