Chat con PDFs | Potenciando la interacción textual con Python y OpenAI
Chat con PDFs | Interacción textual con Python y OpenAI
Introducción
En un mundo lleno de información, los documentos en PDF se han convertido en un elemento básico para compartir y preservar datos valiosos. Sin embargo, extraer información de los PDF no siempre ha sido sencillo. Ahí es donde entra en juego “Chat with PDFs” – un proyecto innovador que revoluciona la forma en que interactuamos con los PDF.
En este artículo, te presentamos el fascinante proyecto “Chat with PDFs”, que combina el poder de las Bibliotecas de Modelos de Lenguaje (LLMs, por sus siglas en inglés) y la versatilidad de la biblioteca Python PyPDF. Esta fusión única te permite tener conversaciones naturales con tus documentos en PDF, facilitando hacer preguntas y obtener respuestas contextualmente relevantes.
Objetivos de Aprendizaje
- Obtener conocimientos sobre las Bibliotecas de Modelos de Lenguaje (LLMs) como modelos de IA avanzados capaces de comprender los patrones del lenguaje humano y generar respuestas significativas.
- Explorar PyPDF, una biblioteca versátil de Python, para comprender sus funcionalidades de extracción, combinación y división de texto en la manipulación de PDFs.
- Reconocer la integración de las Bibliotecas de Modelos de Lenguaje (LLMs) y PyPDFs en la creación de un chatbot interactivo para conversaciones naturales con PDFs.
Este artículo fue publicado como parte del Data Science Blogathon.
- Podado de redes neuronales con optimización combinatoria
- Moderación de contenido a clasificación sin entrenamiento
- Introducción al Control de Versiones de Datos
Comprendiendo las Bibliotecas de Modelos de Lenguaje (LLMs)
El corazón de “Chat with PDFs” se encuentra en las Bibliotecas de Modelos de Lenguaje (LLMs), modelos avanzados de IA entrenados con grandes cantidades de datos de texto. Piensa en ellos como expertos en lenguaje, capaces de comprender los patrones del lenguaje humano y generar respuestas significativas.
Para nuestro proyecto, las LLMs desempeñan un papel vital en la creación de un chatbot interactivo. Este chatbot puede procesar tus preguntas y comprender lo que necesitas de los PDFs. El chatbot puede proporcionar respuestas e información útiles aprovechando la base de conocimientos oculta en los PDFs.
PyPDFs: Tu Super Asistente de PDF
PyPDF es una biblioteca versátil de Python que simplifica las interacciones con archivos PDF. Proporciona a los usuarios diversas funcionalidades, como la extracción de texto, la combinación y la división de documentos PDF. Esta biblioteca es un componente vital de nuestro proyecto, ya que permite el manejo sin problemas de los PDF y agiliza el análisis posterior.
PyPDF nos ayuda a cargar archivos PDF y extraer su texto dentro de nuestro proyecto, preparando el escenario para un procesamiento y análisis eficientes. Con esta poderosa asistente, puedes interactuar con los PDFs sin esfuerzo.
Chat with PDFs libera los documentos en PDF de su estado estático al combinar las Bibliotecas de Modelos de Lenguaje (LLMs) y PyPDFs. Ahora puedes explorar tus PDFs como nunca antes, extrayendo información valiosa y participando en conversaciones significativas. Desde artículos académicos hasta informes empresariales, “Chat with PDFs” hace que interactuar con los PDFs sea una experiencia encantadora.
Entonces, sumérgete en el fascinante mundo del proyecto Chat with PDFs.
Proyecto
# Importar bibliotecas necesarias y configurar claves de API
import os
import pandas as pd
import matplotlib.pyplot as plt
from transformers import GPT2TokenizerFast
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains.question_answering import load_qa_chain
from langchain.llms import OpenAI
from langchain.chains import ConversationalRetrievalChain
from key import openaiapi_key
os.environ["OPENAI_API_KEY"] = openaiapi_key
El código anterior inicia el proyecto “Chat with PDFs” importando bibliotecas esenciales y configurando las claves de la API. Utilizamos la biblioteca ‘os’ para interactuar con el sistema operativo, ‘pandas’ para la manipulación de datos y ‘matplotlib’ para trazar gráficos. La biblioteca ‘transformers’ proporciona la clase ‘GPT2TokenizerFast’, que es esencial para tokenizar texto. Los módulos ‘langchain’ incluyen clases necesarias para cargar PDFs (‘PyPDFLoader’), dividir texto (‘RecursiveCharacterTextSplitter’), generar embeddings (‘OpenAIEmbeddings’), almacenamiento de vectores (‘FAISS’), cadenas de preguntas y respuestas (‘load_qa_chain’), modelos de lenguaje (‘OpenAI’) y cadenas conversacionales (‘ConversationalRetrievalChain’).
Cargador de PyPDF
Luego utilizamos la clase ‘PyPDFLoader’ para cargar el archivo PDF y dividirlo en páginas separadas. Finalmente, imprimimos el contenido de la primera página para verificar la carga y división exitosa del PDF.
# Método simple - Dividir por páginas
loader = PyPDFLoader("story.pdf")
# Creamos una instancia de 'PyPDFLoader' y pasamos la ruta del archivo PDF con el que queremos trabajar.
pages = loader.load_and_split()
print(pages[0])
Esta sección cubre la carga y división del documento PDF. Se demuestran dos métodos: el método simple que divide el PDF por páginas y el método avanzado que implica convertir el PDF a texto y dividirlo en fragmentos más pequeños.
# Método avanzado - Dividir por fragmentos
# Paso 1: Convertir PDF a texto
import textract
doc = textract.process("story.pdf")
# Paso 2: Guardar como .txt y volver a abrir (ayuda a prevenir problemas)
with open('story.txt', 'w') as f:
f.write(doc.decode('utf-8'))
with open('story.txt', 'r') as f:
text = f.read()
# Paso 3: Crear función para contar tokens
tokenizer = GPT2TokenizerFast.from_pretrained("gpt2")
def count_tokens(texto: str) -> int:
return len(tokenizer.encode(texto))
# Paso 4: Dividir texto en fragmentos
text_splitter = RecursiveCharacterTextSplitter(
# Establecer un tamaño de fragmento muy pequeño, solo para mostrar.
tamaño_fragmento = 512,
superposición_fragmento = 24,
función_longitud = count_tokens,
)
fragmentos = text_splitter.create_documents([texto])
Pasos para dividir el PDF
El método avanzado divide el PDF en fragmentos más pequeños para un procesamiento más eficiente. Logramos esto a través de los siguientes pasos:
Paso 1: Utilizamos la biblioteca ‘textract’ para extraer el texto del archivo PDF y guardarlo en la variable ‘doc’.
Paso 2: Guardamos el texto extraído en un archivo de texto (‘story.txt’) para evitar posibles problemas y lo volvemos a abrir en modo de lectura. El contenido se almacena en la variable ‘texto’.
Paso 3: Definimos una función llamada ‘count_tokens’ para contar el número de tokens en un texto dado. Esta función utiliza la clase ‘GPT2TokenizerFast’ para tokenizar el texto.
Paso 4: Utilizando la clase ‘RecursiveCharacterTextSplitter’, dividimos el ‘texto’ en ‘fragmentos’ más pequeños para garantizar un procesamiento eficiente, con cada fragmento teniendo un límite máximo de tokens.
# Incrustar texto y almacenar incrustaciones
# Obtener modelo de incrustación
incrustaciones = OpenAIEmbeddings()
# Crear base de datos de vectores
db = FAISS.from_documents(fragmentos, incrustaciones)
Incrustaciones de OpenAI
En esta sección, incrustamos el texto utilizando la clase ‘OpenAIEmbeddings’, que convierte el texto en representaciones numéricas (incrustaciones). Estas incrustaciones facilitan el almacenamiento y análisis eficientes de datos textuales. Luego creamos una base de datos de vectores utilizando la clase ‘FAISS’, incorporando los ‘fragmentos’ de texto y sus incrustaciones correspondientes.
# Configurar función de recuperación
# Verificar que la búsqueda de similitud funcione
consulta = "¿Cuál es el nombre del autor?"
documentos = db.similarity_search(consulta)
documentos[0]
Configuramos una función de recuperación en esta parte. Puede realizar una búsqueda de similitud con una consulta de ejemplo utilizando la base de datos de vectores (‘db’). La variable consulta contiene la pregunta que queremos hacer al chatbot y la variable documentos almacena los documentos relevantes que contienen el contexto de la consulta. Luego imprimimos el primer documento devuelto por la búsqueda de similitud.
chain = load_qa_chain(OpenAI(temperature=0), chain_type="stuff")
consulta = "¿Cuál es el nombre del autor?"
documentos = db.similarity_search(consulta)
chain.run(input_documents=documentos, question=consulta)
En este segmento, creamos una cadena de preguntas y respuestas (‘chain’) que integra la búsqueda de similitud con las consultas del usuario. Cargamos el modelo de lenguaje ‘OpenAI’ y establecemos la temperatura en 0 para respuestas determinísticas. Obtenemos una respuesta basada en la base de conocimientos pasando los documentos recuperados (‘documentos’) y la pregunta del usuario (‘consulta’) a la cadena.
# Crear chatbot con memoria de conversación
from IPython.display import display
import ipywidgets as widgets
qa = ConversationalRetrievalChain.from_llm(OpenAI(temperature=0.1), db.as_retriever())
chat_history = []
def on_submit(_):
query = input_box.value
input_box.value = ""
if query.lower() == 'exit':
print("¡Gracias por usar el chatbot de Chat with PDFs!")
return
result = qa({"question": query, "chat_history": chat_history})
chat_history.append((query, result['answer']))
display(widgets.HTML(f'<b>Usuario:</b> {query}'))
display(widgets.HTML(f'<b><font color="blue">Chatbot:</font></b>{result["answer"]}'))
print("Bienvenido al chatbot de Chat with PDFs. Escribe 'exit' para detenerlo.")
input_box = widgets.Text(placeholder='Por favor, ingresa tu pregunta:')
input_box.on_submit(on_submit)
display(input_box)
En la sección final, introducimos una función de chatbot donde los usuarios pueden interactuar con el chatbot ingresando preguntas y obteniendo respuestas.
Conclusión
En este artículo exploramos el fascinante proyecto “Chat with PDFs” y su implementación paso a paso. Hemos adquirido una comprensión más profunda de los Language Model Libraries (LLMs) y PyPDFs, dos componentes esenciales que impulsan esta herramienta innovadora. Ahora puedes procesar y analizar documentos PDF sin esfuerzo, extrayendo información valiosa y participando en conversaciones interactivas con un chatbot compañero. Ya sea que seas investigador, estudiante o profesional, “Chat with PDFs” ha revolucionado la forma en que interactuamos con los PDFs, haciendo que los documentos estáticos cobren vida con el poder de la inteligencia artificial. ¡Feliz exploración de PDFs!
Puntos clave
- Los LLMs permiten que el chatbot entregue respuestas precisas y contextualmente relevantes a las consultas de los usuarios.
- PyPDF simplifica la manipulación de PDFs, facilitando el trabajo con documentos complejos.
- La estructura del código garantiza una integración fluida de las funcionalidades de incrustación de texto y búsqueda de similitud.
- PyPDF permite el manejo sin problemas de PDFs, extracción y manipulación de texto.
Preguntas frecuentes
Los medios mostrados en este artículo no son propiedad de Analytics Vidhya y se utilizan bajo discreción del autor.
We will continue to update Zepes; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- Rice e IIT Kanpur anuncian los ganadores del Premio de Investigación Colaborativa
- La importancia de los LLM específicos de dominio
- Usando LangChain y ChatGPT para explicar código de Python
- Comienza con NLP con nuestro nuevo curso de introducción a NLP
- Simplificando Transformers NLP de última generación utilizando palabras que comprendes – parte 2 – Entrada
- Deja de crear manualmente tu infraestructura en AWS. ¡Usa Terraform!
- Diversidad de Variables en Estadística Una Guía para Profesionales de Datos