Desbloqueando LangChain y Flan-T5 XXL | Una guía para consultas eficientes de documentos

Desbloqueando LangChain y Flan-T5 XXL | Guía consultas eficientes documentos

Introducción

Una categoría específica de modelos de inteligencia artificial conocidos como modelos de lenguaje grandes (LLMs) están diseñados para entender y generar texto similar al humano. El término “grande” a menudo se cuantifica por el número de parámetros que poseen. Por ejemplo, el modelo GPT-3 de OpenAI tiene 175 mil millones de parámetros. Se utiliza para una variedad de tareas, como traducir texto, responder preguntas, escribir ensayos, resumir texto. A pesar de la abundancia de recursos que demuestran las capacidades de los LLMs y brindan orientación sobre cómo configurar aplicaciones de chat con ellos, hay pocas iniciativas que examinen a fondo su idoneidad para escenarios empresariales reales. En este artículo, aprenderás cómo crear un sistema de consulta de documentos utilizando LangChain y Flan-T5 XXL aprovechando en la construcción de aplicaciones basadas en lenguaje grande.

Objetivos de Aprendizaje

Antes de adentrarnos en las complejidades técnicas, establezcamos los objetivos de aprendizaje de este artículo:

  • Comprender cómo se puede aprovechar LangChain en la construcción de aplicaciones basadas en lenguaje grande
  • Una visión general concisa del marco de texto a texto y el modelo Flan-T5
  • Cómo crear un sistema de consulta de documentos utilizando LangChain y cualquier modelo LLM

Adentrémonos ahora en estas secciones para entender cada uno de estos conceptos.

Este artículo fue publicado como parte del Data Science Blogathon.

Papel de LangChain en la Construcción de Aplicaciones LLM

El marco LangChain ha sido diseñado para desarrollar diversas aplicaciones como chatbots, Generative Question-Answering (GQA) y resumen que aprovechan las capacidades de los modelos de lenguaje grande (LLMs). LangChain proporciona una solución integral para construir sistemas de consulta de documentos. Esto implica el preprocesamiento de un corpus a través de fragmentación, la conversión de estos fragmentos en un espacio vectorial, la identificación de fragmentos similares cuando se plantea una consulta y el aprovechamiento de un modelo de lenguaje para refinar los documentos recuperados en una respuesta adecuada.

Visión General del Modelo Flan-T5

Flan-T5 es un modelo LLM de código abierto disponible comercialmente desarrollado por investigadores de Google. Es una variante del modelo T5 (Text-To-Text Transfer Transformer). T5 es un modelo de lenguaje de última generación que se entrena en un marco de “texto a texto”. Se entrena para realizar una variedad de tareas de procesamiento de lenguaje natural convirtiendo las tareas en un formato basado en texto. FLAN es una abreviatura de Finetuned Language Net.

Sumergámonos en la Construcción del Sistema de Consulta de Documentos

Podemos construir este sistema de consulta de documentos aprovechando el modelo LangChain y Flan-T5 XXL en la Capa Gratuita de Google Colab. Para ejecutar el siguiente código en Google Colab, debemos elegir el “T4 GPU” como tiempo de ejecución. Sigue los siguientes pasos para construir el sistema de consulta de documentos:

1: Importar las Bibliotecas Necesarias

Necesitaremos importar las siguientes bibliotecas:

from langchain.document_loaders import TextLoader  #para archivos de texto
from langchain.text_splitter import CharacterTextSplitter #divisor de texto
from langchain.embeddings import HuggingFaceEmbeddings #para usar modelos de HuggingFace
from langchain.vectorstores import FAISS  
from langchain.chains.question_answering import load_qa_chain
from langchain.chains.question_answering import load_qa_chain
from langchain import HuggingFaceHub
from langchain.document_loaders import UnstructuredPDFLoader  #cargar pdf
from langchain.indexes import VectorstoreIndexCreator #indexar db vectorizada con chromadb
from langchain.chains import RetrievalQA
from langchain.document_loaders import UnstructuredURLLoader  #cargar urls en el cargador de documentos
from langchain.chains.question_answering import load_qa_chain
from langchain import HuggingFaceHub
import os
os.environ["HUGGINGFACEHUB_API_TOKEN"] = "xxxxx"

2: Cargando el PDF usando PyPDFLoader

Utilizamos aquí PyPDFLoader de la biblioteca LangChain para cargar nuestro archivo PDF – “Data-Analysis.pdf”. El objeto “loader” tiene un atributo llamado “load_and_split()” que divide el PDF en páginas.

#import csvfrom langchain.document_loaders import PyPDFLoader
# Cargar el archivo PDF desde el directorio de trabajo actual
loader = PyPDFLoader("Data-Analysis.pdf")
# Dividir el PDF en páginas
pages = loader.load_and_split()

3: Dividir el texto en fragmentos basados en un tamaño de fragmento

Los modelos utilizados para generar vectores de incrustación tienen límites máximos en los fragmentos de texto proporcionados como entrada. Si estamos utilizando estos modelos para generar incrustaciones para nuestros datos de texto, es importante dividir los datos en un tamaño específico antes de pasarlos a estos modelos. Aquí utilizamos RecursiveCharacterTextSplitter para dividir los datos, que funciona tomando un texto largo y dividiéndolo en función de un tamaño de fragmento especificado. Lo hace utilizando un conjunto de caracteres.

#import from langchain.text_splitter import RecursiveCharacterTextSplitter
# Definir el tamaño del fragmento, superposición y separadores
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1024,
    chunk_overlap=64,
    separators=['\n\n', '\n', '(?=>\. )', ' ', '']
)
docs  = text_splitter.split_documents(pages)

4: Obteniendo incrustaciones numéricas para el texto

Para representar numéricamente datos no estructurados como texto, documentos, imágenes, audio, etc., necesitamos incrustaciones. La forma numérica captura el significado contextual de lo que estamos incrustando. Aquí utilizamos el objeto HuggingFaceHubEmbeddings para crear incrustaciones para cada documento. Este objeto utiliza el modelo de transformador de oraciones “all-mpnet-base-v2” de HuggingFace para mapear oraciones y párrafos a un espacio vectorial denso de 768 dimensiones.

# Incrustaciones
from langchain.embeddings import HuggingFaceEmbeddings
embeddings = HuggingFaceEmbeddings()

5: Almacenando las incrustaciones en un Vector Store

Ahora necesitamos un Vector Store para nuestras incrustaciones. Aquí estamos utilizando FAISS. FAISS, abreviatura de Búsqueda de Similitud de IA de Facebook, es una poderosa biblioteca diseñada para la búsqueda y agrupación eficientes de vectores densos que ofrece una variedad de algoritmos que pueden buscar conjuntos de vectores de cualquier tamaño, incluso aquellos que pueden exceder la capacidad de RAM disponible.

# Crear la base de datos vectorizada
# Vectorstore: https://python.langchain.com/en/latest/modules/indexes/vectorstores.html
from langchain.vectorstores import FAISS
db = FAISS.from_documents(docs, embeddings)

6: Búsqueda de similitud con Flan-T5 XXL

Aquí nos conectamos al repositorio de Hugging Face para obtener el modelo Flan-T5 XXL.

Podemos definir una serie de configuraciones de modelo para el modelo, como la temperatura y la longitud máxima.

La función load_qa_chain proporciona un método sencillo para alimentar documentos a un LLM. Utilizando el tipo de cadena como “stuff”, la función toma una lista de documentos, los combina en un solo prompt y luego pasa ese prompt al LLM.

llm=HuggingFaceHub(repo_id="google/flan-t5-xxl", model_kwargs={"temperature":1, "max_length":1000000})
chain = load_qa_chain(llm, chain_type="stuff")

#CONSULTANDO
query = "Explica en detalle qué es el análisis de datos cuantitativos."
docs = db.similarity_search(query)
chain.run(input_documents=docs, question=query)

7: Creando una cadena de preguntas y respuestas con el modelo Flan-T5 XXL

Utilice RetrievalQAChain para recuperar documentos utilizando un recuperador y luego use una cadena de preguntas y respuestas para responder una pregunta basada en los documentos recuperados. Combina el modelo de lenguaje con las capacidades de recuperación de VectorDB.

from langchain.chains import RetrievalQA
qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", 
retriever=db.as_retriever(search_kwargs={"k": 3}))

8: Consultando nuestro PDF

query = "¿Cuáles son los diferentes tipos de análisis de datos?"
qa.run(query)

#Resultado
"Análisis de datos descriptivo Análisis de datos impulsado por la teoría Análisis de datos impulsado por datos o narrativa"

query = "¿Cuál es el significado del Análisis de Datos Descriptivo?"
qa.run(query)#import csv

#Resultado
"El análisis de datos descriptivo solo se preocupa por procesar y resumir los datos."

Aplicaciones del Mundo Real

En la presente era de inundación de datos, existe un desafío constante de obtener información relevante de una cantidad abrumadora de datos textuales. Los motores de búsqueda tradicionales suelen fallar al proporcionar respuestas precisas y sensibles al contexto a consultas específicas de los usuarios. En consecuencia, ha surgido una creciente demanda de metodologías sofisticadas de procesamiento del lenguaje natural (PLN), con el objetivo de facilitar sistemas precisos de respuesta a preguntas de documentos (DQA). Un sistema de consulta de documentos, como el que construimos, podría ser extremadamente útil para automatizar la interacción con cualquier tipo de documento, como PDF, hojas de cálculo de Excel, archivos HTML, entre otros. Utilizando este enfoque, es posible extraer información valiosa consciente del contexto de extensas colecciones de documentos.

Conclusión

En este artículo, comenzamos discutiendo cómo podríamos aprovechar LangChain para cargar datos de un documento PDF. Extendimos esta capacidad a otros tipos de documentos, como CSV, HTML, JSON, Markdown y más. Además, aprendimos formas de dividir los datos en función de un tamaño de fragmento específico, que es un paso necesario antes de generar las incrustaciones para el texto. Luego, obtuvimos las incrustaciones de los documentos utilizando HuggingFaceHubEmbeddings. Después de almacenar las incrustaciones en un almacén de vectores, combinamos la recuperación con nuestro modelo LLM ‘Flan-T5 XXL’ en la respuesta a preguntas. Los documentos recuperados y una pregunta de entrada del usuario se pasaron al LLM para generar una respuesta a la pregunta realizada.

Puntos Clave

  • LangChain ofrece un marco integral para la interacción fluida con LLMs, fuentes de datos externas, indicaciones e interfaces de usuario. Permite la creación de aplicaciones únicas construidas en torno a un LLM mediante la “cadena” de componentes de múltiples módulos.
  • Flan-T5 es un LLM de código abierto disponible comercialmente. Es una variante del modelo T5 (Transformador de Transferencia de Texto a Texto) desarrollado por Google Research.
  • Un almacén de vectores almacena datos en forma de vectores de alta dimensionalidad. Estos vectores son representaciones matemáticas de diversas características o atributos. Los almacenes de vectores están diseñados para gestionar eficientemente vectores densos y proporcionar capacidades avanzadas de búsqueda de similitud.
  • El proceso de construir un sistema de preguntas y respuestas basado en documentos utilizando un modelo LLM y Langchain implica obtener y cargar un archivo de texto, dividir el documento en secciones manejables, convertir estas secciones en incrustaciones, almacenarlas en una base de datos de vectores y crear una cadena de preguntas y respuestas para permitir la respuesta a preguntas sobre el documento.

Preguntas Frecuentes

Los medios mostrados en este artículo no son propiedad de Analytics Vidhya y se utilizan a 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

Inteligencia Artificial

Conoce a Baichuan 2 Una serie de modelos de lenguaje multilingües a gran escala que contienen 7B y 13B de parámetros, entrenados desde cero, con 2.6T tokens.

Los modelos de lenguaje grandes han experimentado avances significativos y alentadores en los últimos años. Los model...

Inteligencia Artificial

Sobrevivencia del más apto Modelos generativos compactos de IA son el futuro para una IA a gran escala rentable

Después de una década de rápido crecimiento en la complejidad y capacidad de cálculo de los modelos de inteligencia a...

Inteligencia Artificial

Todo lo que necesitas saber sobre la serie de modelos de lenguaje (LLMs) Qwen Large

Los modelos de lenguaje grandes (LLMs) han remodelado significativamente el panorama de la Inteligencia Artificial (I...

Inteligencia Artificial

EE.UU. busca malware chino que podría interrumpir las operaciones militares

Funcionarios de seguridad de Estados Unidos dicen que la Casa Blanca está buscando malware supuestamente oculto por C...

Inteligencia Artificial

Nueva York planea invertir 1.000 millones de dólares para expandir la investigación de chips

La medida tiene como objetivo atraer $9 mil millones de inversión corporativa, ya que Nueva York lucha por ser sede d...