paint-brush
Mejora de los LLM empresariales con recuperación de generación aumentada (RAG) e integración de bases de datos vectorialespor@vpenikal
4,037 lecturas
4,037 lecturas

Mejora de los LLM empresariales con recuperación de generación aumentada (RAG) e integración de bases de datos vectoriales

Demasiado Largo; Para Leer

Este blog explora la integración de recuperación-generación aumentada (RAG) con bases de datos vectoriales, particularmente Milvus, para mejorar los modelos de aprendizaje de idiomas (LLM) en aplicaciones empresariales. Cubre los desafíos de los LLM, presenta RAG y bases de datos vectoriales, y proporciona ejemplos prácticos y tutoriales. El blog detalla la configuración de un entorno local para RAG y Milvus, incluida la instalación y configuración, y concluye con el importante potencial de combinar estas tecnologías para mejorar las respuestas impulsadas por la IA y la comprensión contextual en las aplicaciones empresariales de IA.
featured image - Mejora de los LLM empresariales con recuperación de generación aumentada (RAG) e integración de bases de datos vectoriales
Venkata Karthik Penikalapati HackerNoon profile picture


Mejora de las aplicaciones LLM con tecnologías contextuales

Las aplicaciones de los modelos de lenguajes grandes han sido transformadoras en varios sectores y han dado forma a una nueva frontera en el procesamiento y la comprensión del lenguaje natural. Los LLM, reconocidos por generar texto similar a un humano, han revolucionado los chatbots, la creación de contenido e incluso las tareas complejas de resolución de problemas.


Sin embargo, a pesar de sus impresionantes capacidades, los LLM enfrentan desafíos notables, particularmente en el conocimiento del contexto y el mantenimiento de la precisión durante interacciones prolongadas. Un problema común es su tendencia a las " alucinaciones ", donde el contenido generado, aunque fluido, puede derivar en inexactitud o irrelevancia.


Aquí es donde tecnologías como la generación aumentada de recuperación (RAG) y las bases de datos vectoriales se vuelven fundamentales. Al integrar los LLM con RAG, que recupera dinámicamente información relevante de grandes conjuntos de datos, podemos mitigar significativamente estas limitaciones. La sinergia entre los LLM y las bases de datos vectoriales, capaces de manejar y recuperar de manera eficiente datos vectoriales estructurados, promete brindar un nuevo nivel de profundidad, contexto y confiabilidad a las aplicaciones LLM.


En este blog, los lectores pueden esperar:


  • Información integral sobre los desafíos de los LLM : comprensión de las limitaciones de los LLM, como el conocimiento del contexto y los problemas de precisión.
  • Introducción a RAG y bases de datos vectoriales : exploración de cómo estas técnicas abordan los inconvenientes de los LLM tradicionales.
  • Demostraciones prácticas y tutoriales : ejemplos prácticos que muestran la integración de RAG con bases de datos vectoriales para mejorar las aplicaciones LLM.
  • Aplicaciones del mundo real : exploración de cómo estas integraciones se pueden aplicar de manera efectiva en entornos empresariales.
  • Conocimiento práctico para diversos públicos : ya sea que sea un entusiasta de la tecnología, un practicante de inteligencia artificial o un profesional de negocios, el blog tiene como objetivo brindar información valiosa y conocimientos prácticos.



Comprensión de la generación aumentada de recuperación (RAG)

La recuperación-generación aumentada (RAG) es un paradigma innovador en el campo de la IA y el procesamiento del lenguaje natural. Marca un cambio significativo con respecto a los modelos de lenguaje convencionales al integrar la recuperación de información en el proceso de generación del lenguaje. Este enfoque híbrido mejora la capacidad de los modelos de IA para generar respuestas que no solo sean contextualmente precisas sino que también estén dotadas de conocimientos actualizados procedentes de fuentes de datos externas.


El origen de RAG se remonta a la búsqueda de superar las limitaciones de los modelos de lenguaje estándar, como GPT (Generative Pre-trained Transformer). Los modelos tradicionales, a pesar de su capacidad para generar texto coherente, a menudo tienen dificultades para proporcionar respuestas precisas y basadas en hechos, en particular para consultas que requieren conocimientos específicos en tiempo real.




flujo de trapo




Aquí hay una descripción de cómo funciona la generación aumentada de recuperación (RAG), integrándose con una base de datos vectorial:


  1. Ingestión e indexación : el flujo de trabajo comienza con una base de conocimientos integral, que es la base de la inteligencia del sistema. Esta base de conocimientos suele ser un gran corpus de documentos que contienen información que los usuarios pueden consultar. Estos documentos pueden ser cualquier cosa, desde hojas de preguntas frecuentes y artículos hasta bases de datos de información estructurada. Antes de que estos documentos puedan utilizarse, se someten a un proceso de ingestión en el que se preprocesan y se transforman en incrustaciones. Se emplea un modelo de incrustación , a menudo un sofisticado algoritmo de aprendizaje automático, para convertir la información textual en incrustaciones vectoriales. Estas incrustaciones representan numéricamente el contenido semántico de los documentos en un espacio multidimensional, que es óptimo para comparaciones de similitudes.


  2. Interacción con el cliente : todo comienza cuando un cliente interactúa con una aplicación y plantea una consulta. Esta consulta es una solicitud de información o una pregunta que el cliente espera que la IA responda.


  3. Incrustación de consultas : la consulta sin procesar del cliente luego se procesa mediante un modelo de incrustación. Este modelo convierte la consulta de texto en un vector, que es una representación numérica que captura el significado semántico de la consulta en un espacio de alta dimensión.


  4. Búsqueda de bases de datos de vectores : el vector de consulta se envía a una base de datos de vectores, una base de datos especializada diseñada para manejar datos vectoriales de alta dimensión. La base de datos realiza una búsqueda de similitud para recuperar las incrustaciones de documentos más relevantes. Estas incorporaciones representan conocimiento preprocesado de una base de conocimiento que se ha incorporado al sistema.


  5. Recuperación de contexto : las incrustaciones de documentos recuperados se combinan con la consulta original para formar un mensaje que incluye tanto la consulta como el contexto relevante.


  6. Generación de respuesta del modelo de lenguaje : este mensaje enriquecido luego se introduce en un modelo de aprendizaje de idiomas (LLM). El LLM utiliza el contexto de los documentos recuperados para generar una respuesta que sea precisa, informativa y contextualmente relevante para la consulta del cliente.


  7. Respuesta generativa : finalmente, el LLM produce una respuesta generativa, que se devuelve al cliente a través de la aplicación. Esta respuesta no solo se basa en el conocimiento previamente entrenado del modelo, sino que también se complementa con información específica recuperada de la base de conocimientos, lo que la hace muy relevante para la solicitud del usuario.

Bases de datos vectoriales

Las bases de datos vectoriales almacenan y administran datos que se han convertido en forma vectorial numérica, a menudo mediante procesos como la incorporación de modelos en el aprendizaje automático. Las incrustaciones son representaciones numéricas de datos, a menudo vectores de alta dimensión, que capturan las características semánticas o contextuales de la entrada original. En el caso de datos de texto, las incrustaciones convierten palabras, oraciones o documentos completos en un formato que una computadora puede procesar. Los modelos de aprendizaje automático, en particular las redes neuronales, se utilizan para generar estas incrustaciones de modo que significados similares estén cerca en el espacio vectorial. Estas bases de datos están diseñadas para realizar búsquedas de similitud de manera eficiente, que ubican los puntos de datos más cercanos a un vector de consulta determinado dentro del espacio vectorial.



fuente: https://www.sbert.net/examples/applications/semantic-search/README.html



Aquí hay una mirada más profunda al proceso:


  1. Almacenamiento de datos : cuando se incorporan documentos, un modelo de incrustación (como una red neuronal) transforma el texto en un vector de alta dimensión. Cada vector representa el significado semántico del documento en forma numérica. Estos vectores luego se almacenan en la base de datos de vectores.


  2. Indexación : para facilitar una recuperación rápida, la base de datos crea un índice en estos vectores utilizando algoritmos adecuados para espacios de alta dimensión, como el índice de archivos invertidos (IVF) o el mundo pequeño navegable jerárquico (HNSW). La elección del tipo de índice equilibra la velocidad y la precisión de la búsqueda.


  3. Búsqueda de similitud : cuando se realiza una consulta, también se convierte en un vector utilizando el mismo modelo de incrustación. Luego, la base de datos de vectores utiliza el índice para encontrar rápidamente los vectores más similares al vector de consulta. La similitud está determinada por métricas de distancia como la distancia euclidiana o la similitud del coseno.


Ventajas de las incrustaciones :


  1. Similitud semántica : las incrustaciones están diseñadas para que los elementos semánticamente similares estén más cerca en el espacio vectorial, lo que permite a los sistemas comprender el contexto y el significado. Por ejemplo, en el campo de la genómica, los datos de expresión genética se pueden codificar como incrustaciones para revelar patrones que indican relaciones entre diferentes genes y fenotipos. Esto puede ayudar a identificar biomarcadores de enfermedades que pueden no ser evidentes mediante el análisis tradicional.


  2. Relaciones complejas : pueden capturar relaciones complejas y matices en los datos que podrían pasarse por alto con las representaciones tradicionales. Una aplicación práctica se ve en los sistemas de recomendación, como los que utilizan servicios de streaming como Netflix o Spotify. Estas plataformas utilizan incrustaciones para comprender las preferencias del usuario y las características del contenido, recomendando así películas o canciones que comparten similitudes con las elecciones anteriores del usuario. A pesar de la diversidad de contenido, las incorporaciones permiten recomendaciones matizadas que van más allá del género o el artista, considerando patrones más profundos en el consumo de los usuarios.


  3. Uniformidad : las incrustaciones convierten diversos tipos de datos en un formato vectorial uniforme, simplificando operaciones como la comparación y la recuperación.


Primeros pasos con VectorDB

La creación de un entorno de desarrollo local para RAG y Vector DB ( Milvus ) implica varios pasos clave.


Aquí hay una guía estructurada:


  1. Requisitos previos :

    • Asegúrese de que Python 3.6+ esté instalado en su sistema.

    • Se requiere Docker para ejecutar Milvus.


  2. Ambiente virtual :

    • Cree un nuevo entorno virtual y utilícelo:

       python3 -m venv rag-milvus-env source rag-milvus-env/bin/activate # Install supporting dependencies pip install transformers datasets faiss-cpu torch sentence-transformers pymilvus


  3. Milvus usando la ventana acoplable :

  • Extraiga y ejecute la imagen de Milvus Docker: (también puede utilizar otras bases de datos vectoriales)

  • Puede seguir los pasos a continuación o seguir la guía de introducción que se proporciona aquí .


     docker pull milvusdb/milvus:latest docker run -d --name milvus_cpu -p 19530:19530 -p 19121:19121 milvusdb/milvus:latest


  • Datos de configuración :

    Ahora intentemos descargar algunos datos de muestra, crear incrustaciones e insertarlas en una colección.

     import requests import csv url = "http://qim.fs.quoracdn.net/quora_duplicate_questions.tsv" # Download the file response = requests.get(url) response.raise_for_status() # This will raise an error if the download failed # Decode the content and split into lines lines = response.content.decode('utf-8').splitlines() questions = [] # Process the lines reader = csv.reader(lines, delimiter='\t') next(reader) # Skip the header row for row in reader: questions.extend([row[1], row[4]]) # Assuming the questions are in the 2nd and 3rd columns questions = questions[:10000]


  • Crear incrustaciones

     from sentence_transformers import SentenceTransformer # transformer to create embeddings model = SentenceTransformer('all-MiniLM-L6-v2') embeddings = model.encode(questions)


  • Insertar en la base de datos vectorial.

     # connect to db connections.connect() embedding_size = 384 # Prepare the collection schema fields = [ FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True), FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=embedding_size) ] schema = CollectionSchema(fields, "questions") collection = Collection("questions", schema) # Insert the document embeddings mr = collection.insert([embeddings]) # to get document, in practice this would be some external DB. id_to_question = {str(mr.primary_keys[i]): questions[i] for i in range(len(questions))} # List all collections collections = list_collections() print(collections)


  • Indexar la colección.

     from pymilvus import Collection index_params = { "metric_type": "L2", "index_type": "HNSW", # Index of type HNSW, refer to docs for other types. "params": { "M": 16, # Example value, adjust as needed "efConstruction": 200 } } collection = Collection("questions") collection.create_index( field_name="embedding", index_params=index_params )


  • Consultar documentos

     query = "What is artificial intelligence?" query_embedding = model.encode(query) collection.load() # Define search parameters search_params = {"metric_type": "L2", "params": {"nprobe": 10}} # Perform the search results = collection.search( data=[query_vector], anns_field="embedding", param=search_params, limit=10, expr=None, consistency_level="Strong" ) # Process results for result in results: milvus_id = str(result.id) # Convert ID to string for dictionary lookup original_question = id_to_question[milvus_id] print(f"Milvus ID: {milvus_id}, Similar Question: {original_question}")


Una vez que obtengamos documentos semánticamente similares de vector db., podríamos pasar este contexto + consulta de entrada a los LLM, lo que tendrá resultados mucho mejores ya que los LLM ahora tienen contexto.


Conclusión

En conclusión, la integración de RAG con bases de datos vectoriales como Milvus ofrece una potente solución a algunos de los desafíos más apremiantes en las aplicaciones LLM, particularmente aquellas que requieren una comprensión contextual profunda y una recuperación dinámica de información. Al combinar la destreza generativa de los LLM con la precisión y eficiencia de las bases de datos vectoriales, las empresas pueden mejorar enormemente la relevancia y precisión de las respuestas impulsadas por la IA, brindando a los usuarios interacciones valiosas y contextualmente ricas.


A medida que la IA continúa avanzando, la fusión de estas tecnologías representa no solo un paso, sino un salto adelante, que anuncia un futuro en el que la IA puede admitir aplicaciones más sofisticadas, variadas y matizadas en todos los sectores. Este blog ha sentado las bases para que innovadores y profesionales comiencen a experimentar con estas herramientas, ampliando los límites de lo que es posible en el ámbito de las aplicaciones empresariales de IA.