Cómo construir aplicaciones de LLM utilizando una base de datos vectorial?

Creando aplicaciones de LLM con una base de datos vectorial Una guía completa

Introducción

En el campo de la inteligencia artificial, los Modelos de Lenguaje Grande (LLMs, por sus siglas en inglés) y los modelos de IA generativa, como el GPT-4 de OpenAI, el Claude 2 de Anthropic, el Llama de Meta, el Falcon y el Palm de Google, entre otros, han revolucionado la forma en que resolvemos problemas. Los LLMs utilizan técnicas de aprendizaje profundo para realizar tareas de procesamiento del lenguaje natural. Este artículo te enseñará a construir aplicaciones de LLM utilizando una base de datos vectorial. Es posible que hayas interactuado con un chatbot como el servicio al cliente de Amazon o el Asistente de Decisiones de Flipkart. Generan texto similar al humano y brindan una experiencia de usuario interactiva casi indistinguible de las conversaciones reales. Sin embargo, estos LLMs necesitan ser optimizados para que produzcan resultados altamente relevantes y específicos y sean verdaderamente útiles para casos de uso específicos.

Por ejemplo, si preguntas “¿Cómo cambio el idioma en la aplicación de Android?” en la aplicación de servicio al cliente de Amazon, es posible que no haya sido entrenada con este texto específico y, por lo tanto, no pueda responder. Ahí es donde entra en juego una base de datos vectorial. Una base de datos vectorial almacena los textos de dominio (en este caso, documentos de ayuda) y las consultas anteriores de todos los usuarios, incluido el historial de pedidos, etc., como incrustaciones numéricas y proporciona una búsqueda de vectores similares en tiempo real. En este caso, codifica esta consulta en un vector numérico y lo utiliza para realizar una búsqueda de similitud en su base de datos de vectores y encontrar sus vecinos más cercanos. Con esta ayuda, el chatbot puede guiar al usuario correctamente a la sección “Cambiar tu preferencia de idioma” en la aplicación de Amazon.

Objetivos de aprendizaje

  • Cómo funcionan los LLMs, cuáles son sus limitaciones y por qué necesitan bases de datos vectoriales.
  • Introducción a los modelos de incrustación y cómo codificar y utilizarlos en aplicaciones.
  • Aprender qué es una base de datos vectorial y cómo forman parte de la arquitectura de aplicación de LLMs.
  • Aprender a codificar aplicaciones de LLM/IA generativa utilizando bases de datos vectoriales y TensorFlow.

Este artículo se publicó como parte del Data Science Blogathon.

¿Qué son los LLMs?

Los Modelos de Lenguaje Grande (LLMs) son modelos de aprendizaje automático fundamentales que utilizan algoritmos de aprendizaje profundo para procesar y comprender el lenguaje natural. Estos modelos se entrenan con grandes cantidades de datos de texto para aprender patrones y relaciones entre entidades en el lenguaje. Los LLMs pueden realizar muchos tipos de tareas lingüísticas, como traducción de idiomas, análisis de sentimientos, conversaciones de chatbot y más. Pueden entender datos textuales complejos, identificar entidades y relaciones entre ellas y generar nuevo texto que sea coherente y gramaticalmente correcto.

Lee más sobre los LLMs aquí.

¿Cómo funcionan los LLMs?

Los LLMs se entrenan utilizando una gran cantidad de datos, a menudo en terabytes, incluso petabytes, con miles de millones o billones de parámetros, lo que les permite predecir y generar respuestas relevantes basadas en las indicaciones o consultas del usuario. Procesan los datos de entrada a través de incrustaciones de palabras, capas de autoatención y redes de avance para generar texto significativo. Puedes leer más sobre las arquitecturas de LLMs aquí.

Limitaciones de los LLMs

Aunque los LLMs parecen generar respuestas con una precisión bastante alta, incluso mejor que los humanos en muchas pruebas estandarizadas, estos modelos todavía tienen limitaciones. En primer lugar, se basan únicamente en sus datos de entrenamiento para construir su razonamiento y, por lo tanto, pueden carecer de información específica o actual en los datos. Esto hace que el modelo genere respuestas incorrectas o inusuales, también conocidas como “alucinaciones”. Ha habido un esfuerzo continuo por mitigar esto. En segundo lugar, el modelo puede no comportarse o responder de manera que se alinee con las expectativas del usuario.

Para abordar esto, las bases de datos vectoriales y los modelos de incrustación mejoran el conocimiento de los LLMs/IA generativa al proporcionar búsquedas adicionales en modalidades similares (texto, imagen, video, etc.) para las cuales el usuario busca información. Aquí tienes un ejemplo en el que los LLMs no tienen la respuesta que el usuario solicita y, en cambio, confían en una base de datos vectorial para encontrar esa información.

LLMs y Bases de Datos Vectoriales

Los Modelos de Lenguaje Grande (LLMs, por sus siglas en inglés) se utilizan o se integran en muchas partes de la industria, como el comercio electrónico, los viajes, la búsqueda, la creación de contenido y las finanzas. Estos modelos se basan en un tipo de base de datos relativamente nuevo, conocida como base de datos vectorial, que almacena una representación numérica de texto, imágenes, videos y otros datos en una representación binaria llamada embeddings. Esta sección destaca los fundamentos de las bases de datos vectoriales y los embeddings y, más significativamente, se centra en cómo utilizarlos para integrarlos con las aplicaciones de LLM.

Una base de datos vectorial es una base de datos que almacena y busca embeddings utilizando un espacio de alta dimensión. Estos vectores son representaciones numéricas de las características o atributos de los datos. Utilizando algoritmos que calculan la distancia o similitud entre vectores en un espacio de alta dimensión, las bases de datos vectoriales pueden recuperar datos similares de manera rápida y eficiente. A diferencia de las bases de datos tradicionales basadas en escalares que almacenan datos en filas o columnas y utilizan métodos de búsqueda basados en coincidencias exactas o palabras clave, las bases de datos vectoriales operan de manera diferente. Utilizan bases de datos vectoriales para buscar y comparar una gran colección de vectores en un período de tiempo muy corto (del orden de los milisegundos) utilizando técnicas como los Vecinos Más Cercanos Aproximados (ANN, por sus siglas en inglés).

Un Tutorial Rápido sobre Embeddings

Los modelos de IA generan embeddings introduciendo datos sin procesar, como texto, video e imágenes, en una biblioteca de embeddings vectoriales como word2vec. En el contexto de la IA y el aprendizaje automático, estas características representan diferentes dimensiones de los datos que son esenciales para comprender patrones, relaciones y estructuras subyacentes.

Aquí tienes un ejemplo de cómo generar embeddings de palabras utilizando word2vec.

1. Genera el modelo utilizando tu propio corpus de datos o utiliza un modelo preconstruido de Google o FastText. Si generas el tuyo propio, puedes guardarlo en tu sistema de archivos como un archivo “word2vec.model”.

import gensim# Crea un modelo word2vecmodel = gensim.models.Word2Vec(corpus)# Guarda el archivo de modelo.model.save('word2vec.model')

2. Carga el modelo, genera un embedding vectorial para una palabra de entrada y úsalo para obtener palabras similares en el espacio de embeddings vectoriales.

import gensimimport numpy as np# Carga el modelo word2vecmodel = gensim.models.Word2Vec.load('word2vec.model')# Obtiene el vector para la palabra "king"king_vector = model['king']# Obtiene los vectores más similares al vector kingsimilar_vectors = model.similar_by_vector(king_vector, topn=5)# Imprime los vectores más similaresfor vector in similar_vectors:    print(vector[0], vector[1])    

3. Estas son las 5 palabras principales cercanas a la palabra de entrada.

Resultado: hombre 0.85príncipe 0.78reina 0.75señor 0.74emperador 0.72

Arquitectura de Aplicación de LLM Utilizando Bases de Datos Vectoriales

A nivel general, las bases de datos vectoriales se basan en modelos de embedding para manejar tanto la creación como la consulta de embeddings. En el proceso de ingestión, el contenido del corpus se codifica en vectores utilizando el modelo de embedding y se almacena en bases de datos vectoriales como Pinecone, ChromaDB, Weaviate, etc. En el proceso de lectura, la aplicación realiza una consulta utilizando oraciones o palabras, y nuevamente se codifica mediante el modelo de embedding en un vector que luego se consulta en la base de datos vectorial para obtener los resultados.

Aplicaciones de LLM utilizando bases de datos vectoriales

LLM ayuda en tareas de lenguaje y se integra en una clase más amplia de modelos, como Inteligencia Artificial Generativa que puede generar imágenes y videos además de texto. En esta sección, aprenderemos cómo construir aplicaciones prácticas de LLM/Generative AI utilizando bases de datos vectoriales. Utilicé transformadores y bibliotecas de antorchas para los modelos de lenguaje y pinecone como base de datos vectorial. Puedes elegir cualquier modelo de lenguaje para LLM/embellecimiento y cualquier base de datos vectorial para almacenamiento y búsqueda.

Aplicación de chatbot

Para construir un chatbot utilizando una base de datos vectorial, puedes seguir estos pasos:

  1. Elige una base de datos vectorial como Pinecone, Chroma, Weaviate, AWS Kendra, etc.
  2. Crea un índice vectorial para tu chatbot.
  3. Entrena un modelo de lenguaje utilizando un corpus de texto grande de tu elección. Por ejemplo, para un chatbot de noticias, podrías incluir datos de noticias.
  4. Integra la base de datos vectorial y el modelo de lenguaje.

Aquí tienes un ejemplo simple de una aplicación de chatbot que utiliza una base de datos vectorial y un modelo de lenguaje:

import pineconeimport transformers# Crea un cliente de API para la base de datos vectorialclient = pinecone.Client(api_key="TU_CLAVE_API")# Carga el modelo de lenguajemodelo = transformers.AutoModelForCausalLM.from_pretrained("google/bigbird-roberta-base")# Define una función para generar textodef generar_texto(prompt):    inputs = modelo.prepare_inputs_for_generation(prompt, return_tensors="pt")    outputs = modelo.generate(inputs, max_length=100)    return outputs[0].decode("utf-8")# Define una función para recuperar los vectores más similares al vector de consulta del usuariodef recuperar_vectores_similares(query_vector):    resultados = client.search("mi_indice", query_vector)    return resultados# Define una función para generar una respuesta a la consulta del usuariodef generar_respuesta(consulta):    # Recupera los vectores más similares al vector de consulta del usuario    vectores_similares = recuperar_vectores_similares(consulta)    # Genera texto basado en los vectores recuperados    respuesta = generar_texto(vectores_similares[0])    return respuesta# Inicia el chatbotwhile True:    # Obtén la consulta del usuariopregunta = input("¿Cuál es tu pregunta? ")    # Genera una respuesta a la consulta del usuariorespuesta = generar_respuesta(pregunta)    # Imprime la respuestaimprimir(respuesta)

Esta aplicación de chatbot recuperará los vectores más similares al vector de consulta del usuario de la base de datos vectorial y luego generará texto utilizando el modelo de lenguaje basado en los vectores recuperados.

ChatBot > ¿Cuál es tu pregunta?Usuario_A> ¿Cuál es la altura de la Torre Eiffel?ChatBot>La altura de la Torre Eiffel mide 324 metros (1.063 pies) desde su base hasta la cima de su antena.

Aplicación generadora de imágenes

Exploremos cómo construir una aplicación generadora de imágenes que utiliza tanto Inteligencia Artificial Generativa como bibliotecas de LLM.

  1. Crea una base de datos vectorial para almacenar tus vectores de imagen.
  2. Extrae los vectores de imagen de tus datos de entrenamiento.
  3. Inserta los vectores de imagen en la base de datos vectorial.
  4. Entrena una red generativa adversaria (GAN). Lee aquí si necesitas una introducción a las GAN.
  5. Integra la base de datos vectorial y la GAN.

Aquí tienes un ejemplo simple de un programa que integra una base de datos vectorial y una GAN para generar imágenes:

import pineconeimport torchfrom torchvision import transforms# Crea un cliente de API para la base de datos vectorialclient = pinecone.Client(api_key="TU_CLAVE_API")# Carga la GANgenerador = torch.load("generador.pt")# Define una función para generar una imagen a partir de un vectordef generar_imagen(vector):    # Convierte el vector a tensor    tensor = torch.from_numpy(vector).float()    # Genera la imagen    imagen = generador(tensor)    # Transforma la imagen a una imagen PIL    imagen = transforms.ToPILImage()(imagen)    return imagen# Inicia el generador de imágeneswhile True:    # Obtén la consulta del usuariopregunta = input("¿Qué tipo de imagen te gustaría generar? ")    # Recupera el vector más similar al vector de consulta del usuariovectores_similares = client.search("mi_indice", pregunta)    # Genera una imagen a partir del vector recuperadoimagen = generar_imagen(vectores_similares[0])    # Muestra la imagen    imagen.show()

Este programa recuperará el vector más similar al vector de consulta del usuario de la base de datos de vectores y luego generará una imagen utilizando el GAN basado en el vector recuperado.

ImageBot> ¿Qué tipo de imagen te gustaría generar?Yo> Una imagen idílica de una montaña con un río fluyendo.ImageBot> ¡Espera un minuto! Aquí tienes...
Imagen generada

Puedes personalizar este programa para satisfacer tus necesidades específicas. Por ejemplo, puedes entrenar un GAN especializado en generar un tipo particular de imagen, como retratos o paisajes.

Aplicación de recomendación de películas

Exploraremos cómo construir una aplicación de recomendación de películas a partir de un corpus de películas. Puedes utilizar una idea similar para construir un sistema de recomendación para productos u otras entidades.

  1. Crea una base de datos de vectores para almacenar los vectores de tus películas.
  2. Extrae los vectores de las películas de los metadatos de las películas.
  3. Inserta los vectores de las películas en la base de datos de vectores.
  4. Recomienda películas a los usuarios.

Aquí tienes un ejemplo de cómo utilizar la API de Pinecone para recomendar películas a los usuarios:

import pinecone# Crea un cliente de APIclient = pinecone.Client(api_key="TU_CLAVE_DE_API")# Obtén el vector del usuariouser_vector = client.get_vector("user_index", user_id)# Recomienda películas al usuarioresults = client.search("movie_index", user_vector)# Imprime los resultadosfor result in results:    print(result["title"])

Aquí tienes una recomendación de muestra para un usuario

The Shawshank RedemptionThe Dark KnightInceptionThe GodfatherPulp Fiction

Casos de uso reales de LLMs utilizando búsqueda de vectores/base de datos

  • Microsoft y TikTok utilizan bases de datos de vectores como Pinecone para la memoria a largo plazo y búsquedas más rápidas. Esto es algo que los LLM no pueden hacer solos sin una base de datos de vectores. Ayuda a los usuarios a guardar sus preguntas/respuestas anteriores y retomar su sesión. Por ejemplo, los usuarios pueden preguntar: “Cuéntame más sobre la receta de pasta que discutimos la semana pasada”. Lee aquí.

  • El Asistente de Decisiones de Flipkart recomienda productos a los usuarios codificando primero la consulta como una representación vectorial y realizando una búsqueda entre vectores que almacenan productos relevantes en un espacio de alta dimensionalidad. Por ejemplo, si buscas “chaqueta de cuero marrón Wrangler para hombres VoAGI”, recomienda productos relevantes al usuario utilizando una búsqueda de similitud de vectores. De lo contrario, los LLM no tendrían recomendaciones, ya que ningún catálogo de productos contendría títulos o detalles de productos similares. Puedes leerlo aquí.
  • Chipper Cash, una empresa fintech en África, utiliza una base de datos de vectores para reducir las inscripciones fraudulentas de usuarios en un 10x. Lo hace almacenando todas las imágenes de las inscripciones anteriores de usuarios como representaciones vectoriales. Luego, cuando un nuevo usuario se registra, lo codifica como un vector y lo compara con los usuarios existentes para detectar fraudes. Puedes leerlo aquí.
Fuente: Chipper Cash
  • Facebook ha estado utilizando su biblioteca de búsqueda vectorial llamada FAISS (blog) en muchos productos internamente, incluyendo Instagram Reels y Facebook Stories, para buscar rápidamente cualquier multimedia y encontrar candidatos similares para mejores sugerencias que se mostrarán al usuario.

Conclusión

Las bases de datos de vectores son útiles para construir varias aplicaciones de LLM, como generación de imágenes, recomendaciones de películas o productos y chatbots. Proporcionan a los LLM información adicional o similar en la que los LLM no han sido entrenados. Almacenan las representaciones vectoriales de manera eficiente en un espacio de alta dimensionalidad y utilizan búsquedas de vecinos más cercanos para encontrar representaciones similares con alta precisión.

Principales conclusiones

Las principales conclusiones de este artículo son que las bases de datos vectoriales son altamente adecuadas para aplicaciones LLM y ofrecen las siguientes características significativas para que los usuarios las integren:

  • Rendimiento: Las bases de datos vectoriales están diseñadas específicamente para almacenar y recuperar de manera eficiente datos vectoriales, lo cual es importante para desarrollar aplicaciones LLM de alto rendimiento.
  • Precisión: Las bases de datos vectoriales pueden hacer coincidir con precisión vectores similares, incluso si presentan ligeras variaciones. Utilizan algoritmos de vecino más cercano para calcular vectores similares.
  • Multi-modal: Las bases de datos vectoriales pueden alojar diversos datos multi-modales, incluyendo texto, imágenes y sonido. Esta versatilidad las convierte en una elección ideal para aplicaciones LLM/Generative AI que requieren trabajar con diferentes tipos de datos.
  • Amigable para desarrolladores: Las bases de datos vectoriales son relativamente fáciles de usar, incluso para desarrolladores que no poseen un amplio conocimiento de técnicas de aprendizaje automático.

Además, me gustaría resaltar que muchas soluciones existentes de SQL/NoSQL ya agregan almacenamiento de incrustación vectorial, indexación y funciones de búsqueda de similitud más rápidas, por ejemplo, PostgreSQL y Redis. Este es un espacio en constante evolución, por lo que los desarrolladores de aplicaciones tendrán muchas opciones disponibles en el futuro cercano para crear aplicaciones innovadoras.

Preguntas frecuentes

Los medios mostrados en este artículo no pertenecen a Analytics Vidhya y se utilizan por discreción del autor.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Ciencia de Datos

Aprendizaje Profundo en Sistemas de Recomendación Una introducción.

Los sistemas de recomendación se encuentran entre las aplicaciones de Aprendizaje Automático industrial de más rápido...

Inteligencia Artificial

Limpieza con TidyBot

Un equipo multinstitucional de ingenieros acopló un brazo robótico móvil a un modelo de visión y a un gran modelo de ...

Inteligencia Artificial

Conoce Universal Simulator (UniSim) Un simulador interactivo de la interacción del mundo real a través del modelado generativo

Los modelos generativos han transformado la creación de contenido en texto, imágenes y videos. La próxima frontera es...

Inteligencia Artificial

Calculadora de números determina si las ballenas están actuando de manera extraña

Los investigadores aplicaron técnicas estadísticas para diferenciar el comportamiento natural del afectado entre las ...

Inteligencia Artificial

Utilizando cámaras en los autobuses de transporte público para monitorear el tráfico

Investigadores de la Universidad Estatal de Ohio monitorearon el tráfico utilizando cámaras ya instaladas en los auto...

Inteligencia Artificial

Libre de Limitaciones La Validación de las Alucinaciones de la Máquina en el MoMA

El científico de datos principal en Refik Anadol Studio, Christian Burke, relata su experiencia trabajando en la exhi...