Cómo las bases de datos vectoriales están revolucionando la búsqueda de datos no estructurados en aplicaciones de IA
Las bases de datos vectoriales se han vuelto fundamentales para revolucionar la búsqueda de datos no estructurados dentro de las aplicaciones de IA. Uno de sus roles ampliamente reconocidos es en la generación aumentada por recuperación (RAG), un proceso que conecta documentos relevantes con LLMs. Sin embargo, sus aplicaciones y capacidades se extienden mucho más allá de RAG; son aplicables de manera más amplia a una variedad de diferentes tipos de datos no estructurados, es decir, cualquier tipo de dato que no se ajuste a un modelo de datos predefinido, como texto, imágenes, audio, moléculas y grafos.
En el reciente Brazil Unstructured Data Meetup, Frank Liu, el jefe de inteligencia artificial y aprendizaje automático en Zilliz, habló sobre cómo las bases de datos vectoriales están transformando el panorama de la búsqueda de datos no estructurados en aplicaciones de IA. Sus perspectivas arrojaron luz sobre las amplias e impactantes capacidades de estas bases de datos.
Mira la repetición de la charla de Frank en el meetup Sigue la demo
¿Qué son los vectores?
Antes de abordar las bases de datos vectoriales y su papel en las aplicaciones de IA, es importante comprender qué son los vectores, ya que son los componentes básicos de las bases de datos vectoriales. Un vector es una lista de números que codifica información de una manera que las computadoras pueden procesar. Imagina que tienes una imagen, como la que se muestra a continuación:
Fig 1- Una imagen representada en formato vectorial
Para ti, es una hermosa flor, pero para una computadora, esta imagen debe convertirse a un formato que pueda entender. Aquí es donde entran en juego las incrustaciones vectoriales.
La imagen de la flor anterior se transforma en una incrustación vectorial: un arreglo estructurado de números. Cada número en el vector representa una característica particular de la imagen, como el color, la textura o la forma. La combinación de estos números proporciona una representación compacta y eficiente de la imagen que la computadora puede usar para varias tareas, como buscar imágenes similares, categorizar objetos o incluso generar nuevas imágenes. Aquí hay una visualización de cómo se generan y almacenan las incrustaciones vectoriales en una base de datos vectorial como Milvus.
Fig 2- Proceso de generación y almacenamiento de incrustaciones vectoriales
El proceso comienza con una base de conocimiento que contiene varios tipos de datos. Luego, los datos son procesados por modelos de incrustación, que los convierten en vectores. Finalmente, los vectores se almacenan en una base de datos vectorial como Milvus, listos para su recuperación.
La incrustación de datos no se limita a imágenes. El texto, el audio e incluso tipos de datos más complejos como moléculas y grafos pueden transformarse en incrustaciones vectoriales. Al representar los datos como vectores, podemos aprovechar el poder de las bases de datos vectoriales para realizar búsquedas eficientes y precisas.
Veamos cómo se están utilizando las bases de datos vectoriales en los diferentes campos.
Diferentes casos de uso impulsados por bases de datos vectoriales
Las bases de datos vectoriales están transformando la forma en que manejamos y buscamos datos no estructurados en una multitud de aplicaciones. Desde mejorar las capacidades de los sistemas de IA hasta hacer recomendaciones más efectivas, las posibilidades son vastas e impactantes. Profundicemos en algunos casos de uso específicos impulsados por bases de datos vectoriales.
Generación aumentada por recuperación (RAG)
Las bases de datos vectoriales están transformando RAG al permitir una recuperación más eficiente y semánticamente significativa de información relevante. Los métodos tradicionales de búsqueda basados en palabras clave a menudo se quedan cortos cuando tratan con consultas complejas o contextos matizados. Las bases de datos vectoriales abordan esta limitación almacenando y buscando datos basándose en la similitud semántica en lugar de coincidencias exactas.
En RAG, los documentos se convierten en vectores de alta dimensión que capturan su significado semántico. Cuando se recibe una consulta, también se convierte en un vector, y la base de datos vectorial encuentra rápidamente los documentos más similares semánticamente. Este enfoque permite una recuperación de información más matizada y consciente del contexto, lo cual es crucial para generar respuestas precisas y relevantes.
Considera un chatbot de atención al cliente para una empresa tecnológica. Cuando un usuario pregunta: "¿Cómo soluciono problemas de mi dispositivo que no enciende?", la base de datos vectorial puede recuperar documentos relevantes aunque no contengan esas palabras exactas. Podría extraer información sobre problemas de alimentación, problemas de batería y pasos generales de solución de problemas. Luego, el LLM utiliza esta información recuperada para generar una respuesta completa y contextualmente relevante, mejorando significativamente la calidad de la atención al cliente.
Sistema de recomendación
Las bases de datos vectoriales están revolucionando los sistemas de recomendación al permitir cálculos de similitud más sofisticados y eficientes. Los sistemas de recomendación tradicionales suelen tener dificultades con el problema del "arranque en frío" y pueden ser computacionalmente costosos al trabajar con grandes conjuntos de datos. Las bases de datos vectoriales abordan estos problemas al permitir búsquedas rápidas de vecinos más cercanos aproximados en espacios de alta dimensión.
En un sistema de recomendación impulsado por una base de datos vectorial, tanto los usuarios como los elementos se representan como vectores en un espacio de incrustación compartido. Estas incrustaciones capturan características y preferencias complejas, lo que permite recomendaciones más matizadas. La base de datos vectorial puede encontrar rápidamente usuarios o elementos similares, permitiendo la personalización en tiempo real incluso con conjuntos de datos masivos.
Por ejemplo, un servicio de streaming de música como Spotify utiliza bases de datos vectoriales para impulsar su motor de recomendaciones. Cada canción se representa como un vector, capturando diversos atributos como género, tempo, estado de ánimo y patrones de escucha. Las preferencias de los usuarios también se codifican como vectores. Cuando un usuario escucha una canción nueva, el sistema puede encontrar rápidamente canciones similares en el espacio vectorial, lo que permite descubrir nueva música que se alinea con el gusto del usuario, incluso si es de un artista o género desconocido.
Búsqueda de similitud molecular
Las bases de datos vectoriales están transformando la búsqueda de similitud molecular en el descubrimiento de fármacos al permitir una identificación más eficiente y precisa de compuestos similares. Los métodos tradicionales suelen basarse en la similitud de estructuras 2D, lo que puede pasar por alto similitudes conformacionales 3D importantes o relaciones entre grupos funcionales.
Con bases de datos vectoriales, las imágenes de moléculas se representan como vectores de alta dimensión que capturan propiedades estructurales y químicas complejas. Esto permite a los investigadores buscar moléculas con propiedades similares o posibles actividades biológicas, incluso si sus estructuras 2D parecen diferentes. La velocidad de las bases de datos vectoriales también permite el cribado rápido de vastas bibliotecas químicas.
Tomemos el ejemplo de una empresa farmacéutica que busca nuevos candidatos a antibióticos. Tienen una molécula antibiótica conocida que funciona bien pero tiene efectos secundarios graves. Usando una base de datos vectorial, pueden buscar rápidamente entre millones de compuestos para encontrar moléculas con propiedades antibacterianas similares pero potencialmente con perfiles de efectos secundarios diferentes. La representación vectorial podría capturar características como la distribución de carga, posibles sitios de unión y forma 3D, permitiendo el descubrimiento de moléculas estructuralmente diversas pero funcionalmente similares que las búsquedas tradicionales de similitud 2D podrían pasar por alto.
Búsqueda de similitud multimodal
Las bases de datos vectoriales están revolucionando la búsqueda multimodal al proporcionar una forma unificada de representar y buscar entre diferentes tipos de datos (texto, imágenes, audio, etc.). Los sistemas de búsqueda tradicionales suelen tener dificultades con las consultas intermodales o para encontrar relaciones entre diferentes tipos de datos.
En un sistema multimodal impulsado por bases de datos vectoriales, todos los tipos de datos se proyectan en un espacio compartido de alta dimensionalidad donde se pueden calcular similitudes independientemente del tipo de dato original. Esto permite capacidades de búsqueda más flexibles y potentes, lo que nos permite encontrar contenido relacionado entre diferentes modalidades.
Por ejemplo, una plataforma de comercio electrónico implementa un sistema de búsqueda multimodal utilizando bases de datos vectoriales. Un usuario puede subir una imagen de un mueble que le gusta y proporcionar una descripción de texto del color y el material deseados. El sistema convierte tanto la imagen como el texto en vectores en un espacio compartido. Luego busca en la base de datos vectorial para encontrar productos que coincidan tanto con el estilo visual de la imagen como con los atributos específicos de la descripción de texto. Esto permite a los usuarios encontrar exactamente lo que buscan, incluso si no pueden expresarlo completamente solo con palabras, mejorando enormemente la experiencia de compra.
Estos son solo algunos casos de uso que están siendo revolucionados por las bases de datos vectoriales. Frank compartió la siguiente diapositiva con aún más casos de uso.
Fig 3- Casos de uso de bases de datos vectoriales
La lista anterior no es exhaustiva. Es solo una representación de lo que es posible cuando se trata de mejorar la búsqueda de datos en aplicaciones de IA mediante bases de datos vectoriales.
Ahora que entiendes la importancia de las bases de datos vectoriales en varios campos. Implementemos uno de los casos de uso para que puedas verlas en acción. Utilizaremos Milvus, ya que es la base de datos vectorial más popular en términos de estrellas de GitHub.
Implementación de un sistema de búsqueda de similitud multimodal usando Milvus, Radient, ImageBind y Meta-Chameleon-7b
Para implementar un sistema de búsqueda de similitud multimodal usando las herramientas anteriores. Necesitas instalarlas en tu entorno e importarlas.
Configuración de tu entorno
Comienza instalando las bibliotecas requeridas y descargando los modelos necesarios.
!pip install -U radient
!pip install -U yt-dlp
!pip install pymilvus
!pip install -U git+https://github.com/facebookresearch/chameleon.git@main
!git clone https://huggingface.co/eastwind/meta-chameleon-7b
!yt-dlp "https://www.youtube.com/watch?v=wwk1QIDswcQ" -o ~/google_io_preshow.mp4
!pip install git+https://github.com/fzliu/ImageBind@main
Esto es lo que hace cada una de las bibliotecas anteriores:
Radient: Crea y ejecuta flujos de trabajo para procesar y analizar datos multimodales, integrando varios pasos de procesamiento de datos.
yt-dlp: Una herramienta de línea de comandos para descargar videos de YouTube. En este artículo, usaremos este video del pre-show de Google.
PyMilvus: El SDK de Python para interactuar con la base de datos vectorial Milvus y Milvus lite, permitiendo búsquedas de similitud y recuperación eficientes de datos a gran escala.
Chameleon: Un modelo de visión-lenguaje desarrollado por Meta AI, capaz de entender y generar texto basándose en entradas visuales, útil para integrar entradas de datos multimodales.
Meta-Chameleon-7b: Un modelo específico de la serie Chameleon, diseñado para tareas avanzadas de visión-lenguaje, que proporciona respuestas conscientes del contexto mediante la integración de datos visuales y textuales.
ImageBind: Un modelo de embeddings multimodal.
Después de instalar las bibliotecas, necesitamos importarlas en tu código para poder usar sus funciones.
from pathlib import Path
from radient import make_operator
from radient import Workflow
Observa que importamos solo radient. Esto se debe a que Radient maneja la integración y utilización del modelo de embeddings y PyMilvus dentro de sus flujos de trabajo. Por lo tanto, no necesitamos importarlos manualmente.
La función make_operator nos permite crear varios operadores que formarán los bloques de construcción de nuestro flujo de trabajo. La clase Workflow encadenará estos operadores en una secuencia lógica.
Después de las importaciones, estás listo para implementar el sistema de búsqueda de similitud multimodal.
Creación de operadores
Comience especificando las tareas específicas que realizará el flujo de trabajo.
path = Path('/content/google.mp4') // pass the youtube downloaded video path here
read = make_operator(optype="source", method="local", task_params={"path": str(path)})
demux = make_operator(optype="transform", method="video-demux", task_params={"interval": 5.8})
vectorize = make_operator (optype="vectorizer", method="imagebind", modality="multimodal", task_params={})
store = make_operator (optype="sink", method="milvus", task_params={"operation": "insert"})
Desglosemos cada operador en detalle:
read: Este es un operadorsourceque lee el archivo de video local. Toma la ruta del archivo como parámetro y es responsable de cargar los datos del video en nuestro flujo de trabajo.demux: Este es un operadortransformque demultiplexa (separa) el video en fotogramas a intervalos de 5,8 segundos. Este paso es crucial para descomponer el flujo de video continuo en imágenes discretas que se pueden procesar individualmente.vectorize: Este operador utiliza el modeloImageBindpara crear incrustaciones vectoriales para datos multimodales. ImageBind es un modelo potente que puede crear incrustaciones unificadas para diferentes modalidades (como imágenes, texto y audio), lo que nos permite representar nuestros fotogramas de video en un espacio vectorial de alta dimensionalidad.store: Este es un operador sink que inserta los datos vectorizados en Milvus lite. Una versión ligera de Milvus
Después de crear los operadores, el siguiente paso es crear un flujo de trabajo usándolos.
Construcción del flujo de trabajo de inserción
A continuación, construimos un flujo de trabajo para insertar nuestros datos de video procesados en la base de datos Milvus:
insert_wf = (Workflow()
.add(read, name="read")
.add(demux, name="demux")
.add(vectorize, name="vectorize")
.add(store, name="store")
)
insert_wf()
Este flujo de trabajo comienza leyendo el archivo de video y luego lo demultiplexa en fotogramas individuales. Cada fotograma se vectoriza posteriormente usando el modelo ImageBind. Los vectores resultantes se almacenan en la base de datos Milvus.
Si todo se ejecuta sin problemas, debería ver una salida similar a la siguiente:
Fig 4- Resultados de la operación de inserción
La salida muestra una confirmación de que su video fue procesado e insertado en Milvus. Muestra el resultado de la operación de inserción, indicando el número de registros insertados, sus ID y el costo computacional.
Configuración del flujo de trabajo de búsqueda
Después de insertar nuestros datos, necesitamos configurar un flujo de trabajo para la búsqueda. Este flujo de trabajo nos permitirá encontrar fotogramas de video relevantes basados en consultas de texto:
vectorize = make_operator("vectorizer", "imagebind", modality="text")
search = make_operator("sink", "milvus", task_params={"operation": "search", "output_fields": None})
search_wf = (Workflow()
.add(vectorize, name="vectorize")
.add(search, name="search")
)
Este flujo de trabajo de búsqueda consta de dos pasos principales:
El operador
vectorizetoma la entrada de texto y la convierte en una incrustación vectorial usando ImageBind. Esto nos permite representar nuestra consulta de texto en el mismo espacio vectorial que nuestros fotogramas de video.El operador
searchluego usa este vector para realizar una búsqueda por similitud en la base de datos Milvus, encontrando los fotogramas de video más similares a nuestra consulta.
Como tenemos el flujo de trabajo de búsqueda, realicemos una búsqueda.
Realización de una búsqueda multimodal
Esta es una búsqueda multimodal, ya que estamos usando texto para buscar en un video. Para ser precisos, estamos buscando en los fotogramas del video.
prompt = "What was unusual about the coffee mug?"
search_wf(data=prompt)
search_vars = {
"limit": 1, # top-k limit
"output_fields": ["*"] # output fields
}
results = search_wf(
extra_vars={"search": search_vars},
data=prompt
)
results[0][0][0]["entity"]["data"]
Aquí, definimos un prompt de búsqueda que pregunta sobre una taza de café inusual. El diccionario search_vars especifica que queremos el 1 resultado principal y todos los campos de salida.
Luego ejecutamos el flujo de trabajo de búsqueda con estas entradas. El flujo de trabajo vectoriza nuestro prompt de texto, busca vectores similares en Milvus y devuelve los resultados. La indexación anidada [0][0][0] accede al primer (y en este caso, único) resultado de búsqueda, y ["entity"]["data"] recupera los datos reales asociados con este resultado.
El código anterior devuelve la ruta del fotograma que mejor se ajusta a nuestra consulta.
/root/.radient/data/video_demux/6bc783e9-c789-4340-b45c-204621145f2b/frame_0001.png
Visualicemos este fotograma devuelto para ver qué tiene de inusual la taza.
from PIL import Image
image_path = "/root/.radient/data/video_demux/6bc783e9-c789-4340-b45c-204621145f2b/frame_0001.png"
image = Image.open(image_path)
import matplotlib.pyplot as plt
plt.imshow(image)
plt.show()
Este código abre el archivo de imagen correspondiente a nuestro resultado de búsqueda utilizando PIL (Python Imaging Library) y lo muestra usando matplotlib. Esta representación visual nos ayuda a entender qué encontró el sistema en respuesta a nuestra consulta sobre una taza de café inusual.
Aquí está el resultado:
Fig 5- Una persona saliendo de una taza
Como puedes ver, este fotograma muestra una taza inusual, ya que no puedes meter a una persona en una taza normal. La actividad inusual es que hay una persona saliendo de una taza.
Aprovechamiento de Meta-Chameleon-7b para la descripción de imágenes
Para mejorar aún más nuestro sistema de búsqueda multimodal, podemos usar el modelo Meta-Chameleon-7b para generar una descripción de la imagen:
from chameleon.inference.chameleon import ChameleonInferenceModel
import os
# Verify the file path and existence
image_path = '/root/.radient/data/video_demux/6bc783e9-c789-4340-b45c-204621145f2b/frame_0001.png'
print(f"Image path: {image_path}")
print(f"File exists: {os.path.exists(image_path)}")
print(f"File size: {os.path.getsize(image_path)} bytes")
# Initialize the model
model = ChameleonInferenceModel(
"./meta-chameleon-7b/models/7b/",
"./meta-chameleon-7b/tokenizer/text_tokenizer.json",
"./meta-chameleon-7b/tokenizer/vqgan.yaml",
"./meta-chameleon-7b/tokenizer/vqgan.ckpt",
)
try:
tokens = model.generate(
prompt_ui=[
{"type": "image", "value": f"file:{image_path}"}, # Remove the space after 'file:'
{"type": "text", "value": prompt},
{"type": "sentinel", "value": "<END-OF-TURN>"},
]
)
result = model.decode_text(tokens)[0]
print("Generated description:")
print(result)
except Exception as e:
print(f"Error: {e}")
import traceback
traceback.print_exc()
Este código inicializa el modelo Meta-Chameleon-7b, un modelo de visión-lenguaje capaz de entender y describir imágenes en contexto. Le proporcionamos tanto la imagen como nuestro prompt de texto original, lo que le permite generar una descripción relevante para nuestra consulta.
El método generate toma una lista de entradas, incluyendo la ruta del archivo de imagen, nuestro prompt de texto y un token centinela para marcar el final de la entrada. Luego el modelo genera una secuencia de tokens, que decodificamos en texto legible por humanos. Aquí hay un ejemplo de cómo debería verse la salida:
Fig 6- Salida de describir una imagen usando un modelo de visión-lenguaje
Esta implementación muestra cómo las bases de datos vectoriales como Milvus pueden integrarse en sistemas de IA más grandes, permitiendo una búsqueda eficiente por similitud en diferentes modalidades.
Conclusión
Frank hizo un buen trabajo al mostrarnos cómo las bases de datos vectoriales han surgido como una tecnología transformadora en el campo de la IA y el aprendizaje automático, particularmente para manejar datos no estructurados. Como se demostró, sus aplicaciones van mucho más allá de los sistemas simples de generación aumentada por recuperación (RAG), revolucionando diversos dominios, incluidos el soporte al cliente, los sistemas de recomendación, el descubrimiento de fármacos y la búsqueda multimodal. Adelante e implementa aplicaciones de IA aún más sofisticadas impulsadas por bases de datos vectoriales. Aquí tienes algunos recursos para tu referencia.
Para una comprensión más detallada, incluida la historia de los embeddings, mira la repetición de la charla del meetup.
Recursos adicionales
Sigue leyendo

Introducing Zilliz MCP Server: Natural Language Access to Your Vector Database
Developers can easily manage and query vector databases with natural language via Zilliz MCP Server in AI-native environments.

Our Journey to 35K+ GitHub Stars: The Real Story of Building Milvus from Scratch
Join us in celebrating Milvus, the vector database that hit 35.5K stars on GitHub. Discover our story and how we’re making AI solutions easier for developers.

Selecting the Right ETL Tools for Unstructured Data to Prepare for AI
Learn the right ETL tools for unstructured data to power AI. Explore key challenges, tool comparisons, and integrations with Milvus for vector search.


