Chattez avec des PDF | Donnez du pouvoir à l’interaction textuelle avec Python et OpenAI
Chattez avec des PDF | Interaction textuelle avec Python et OpenAI
Introduction
Dans un monde rempli d’informations, les documents PDF sont devenus un élément essentiel pour partager et préserver des données précieuses. Cependant, extraire des informations des PDF n’a pas toujours été simple. C’est là que “Chat with PDFs” intervient – un projet innovant qui révolutionne notre façon d’interagir avec les PDF.
Dans cet article, nous vous présentons le fascinant projet “Chat with PDFs”, qui combine la puissance des bibliothèques de modèles linguistiques (LLMs) et la polyvalence de la bibliothèque Python PyPDF. Cette fusion unique vous permet d’avoir des conversations naturelles avec vos documents PDF, facilitant ainsi la possibilité de poser des questions et d’obtenir des réponses pertinentes sur le contexte.
Objectifs d’apprentissage
- Acquérir une compréhension des bibliothèques de modèles linguistiques (LLMs) en tant que modèles d’IA avancés capables de comprendre les schémas de langage humain et de générer des réponses significatives.
- Explorer PyPDF, une bibliothèque Python polyvalente, pour comprendre ses fonctionnalités d’extraction de texte, de fusion et de découpage dans la manipulation de PDF.
- Reconnaître l’intégration des bibliothèques de modèles linguistiques (LLMs) et de PyPDFs dans la création d’un chatbot interactif pour des conversations naturelles avec les PDF.
Cet article a été publié dans le cadre du Data Science Blogathon.
- Intelligence artificielle pour l’augmentation et la productivité
- Élagage de réseau neuronal avec optimisation combinatoire
- Un dispositif supraconducteur pourrait réduire considérablement la consommation d’énergie dans le domaine de l’informatique et d’autres applications
Comprendre les bibliothèques de modèles linguistiques (LLMs)
Le cœur de “Chat with PDFs” réside dans les bibliothèques de modèles linguistiques (LLMs), des modèles d’IA avancés entraînés sur de grandes quantités de données textuelles. Pensez à eux comme à des experts linguistiques capables de comprendre les schémas de langage humain et de générer des réponses significatives.
Pour notre projet, les LLMs jouent un rôle vital dans la création d’un chatbot interactif. Ce chatbot peut traiter vos questions et comprendre ce dont vous avez besoin à partir des PDF. Le chatbot peut fournir des réponses et des informations utiles en puisant dans la base de connaissances cachée dans les PDF.
PyPDFs – Votre super assistant PDF
PyPDF est une bibliothèque Python polyvalente qui simplifie les interactions avec les fichiers PDF. Elle offre aux utilisateurs diverses fonctionnalités telles que l’extraction de texte, la fusion et le découpage des documents PDF. Cette bibliothèque est un composant essentiel de notre projet, car elle permet une manipulation fluide des PDF et rationalise l’analyse ultérieure.
PyPDF nous aide à charger les fichiers PDF et à en extraire leur texte dans notre projet, préparant ainsi le terrain pour un traitement et une analyse efficaces. Avec cet assistant puissant, vous pouvez interagir avec les PDF sans effort.
Chat with PDFs libère les documents PDF de leur état statique en réunissant les bibliothèques de modèles linguistiques (LLMs) et PyPDFs. Désormais, vous pouvez explorer vos PDF comme jamais auparavant, extraire des informations précieuses et participer à des conversations significatives. Des articles académiques aux rapports commerciaux, “Chat with PDFs” rend l’interaction avec les PDFs une expérience délicieuse.
Alors, plongeons dans le monde fascinant du projet Chat with PDFs.
Projet
# Importation des bibliothèques nécessaires et configuration des clés 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
Le code ci-dessus lance le projet “Chat with PDFs” en important les bibliothèques essentielles et en configurant les clés API. Nous utilisons la bibliothèque ‘os’ pour interagir avec le système d’exploitation, ‘pandas’ pour la manipulation des données et ‘matplotlib’ pour tracer des graphiques. La bibliothèque ‘transformers’ fournit la classe ‘GPT2TokenizerFast’, essentielle pour la tokenisation du texte. Les modules ‘langchain’ comprennent les classes nécessaires pour charger les PDF (PyPDFLoader), diviser le texte (RecursiveCharacterTextSplitter), les embeddings (OpenAIEmbeddings), le stockage vectoriel (FAISS), les chaînes de question-réponse (load_qa_chain), les modèles linguistiques (OpenAI) et les chaînes de conversation (ConversationalRetrievalChain).
Chargeur PyPDF
Nous utilisons ensuite la classe ‘PyPDFLoader’ pour charger le fichier PDF et le diviser en pages séparées. Enfin, nous imprimons le contenu de la première page pour vérifier le chargement et la division réussis du PDF.
# Méthode simple - Division par pages
loader = PyPDFLoader("histoire.pdf")
# Nous créons une instance de 'PyPDFLoader' et passons le chemin du fichier PDF avec lequel nous voulons travailler.
pages = loader.load_and_split()
print(pages[0])
Cette section couvre le chargement et la division du document PDF. Deux méthodes sont présentées : la méthode simple qui divise le PDF par pages et la méthode avancée qui implique la conversion du PDF en texte et sa division en morceaux plus petits.
# Méthode avancée - Division par morceaux
# Étape 1 : Convertir le PDF en texte
import textract
doc = textract.process("histoire.pdf")
# Étape 2 : Enregistrer en .txt et réouvrir (pour éviter les problèmes)
with open('histoire.txt', 'w') as f:
f.write(doc.decode('utf-8'))
with open('histoire.txt', 'r') as f:
text = f.read()
# Étape 3 : Créer une fonction pour compter les jetons
tokenizer = GPT2TokenizerFast.from_pretrained("gpt2")
def count_tokens(text: str) -> int:
return len(tokenizer.encode(text))
# Étape 4 : Diviser le texte en morceaux
text_splitter = RecursiveCharacterTextSplitter(
# Définir une taille de morceau très petite, juste pour montrer.
chunk_size = 512,
chunk_overlap = 24,
length_function = count_tokens,
)
chunks = text_splitter.create_documents([text])
Étapes pour diviser le PDF
La méthode avancée divise le PDF en morceaux plus petits pour un traitement plus efficace. Nous y parvenons grâce aux étapes suivantes :
Étape 1 : Nous utilisons la bibliothèque ‘textract’ pour extraire le texte du fichier PDF et le stocker dans la variable ‘doc’.
Étape 2 : Nous enregistrons le texte extrait dans un fichier texte (‘histoire.txt’) pour éviter d’éventuels problèmes, puis nous le réouvrons en mode lecture. Le contenu est stocké dans la variable ‘texte’.
Étape 3 : Nous définissons une fonction appelée ‘count_tokens’ pour compter le nombre de jetons dans un texte donné. Cette fonction utilise la classe ‘GPT2TokenizerFast’ pour tokeniser le texte.
Étape 4 : À l’aide de la classe ‘RecursiveCharacterTextSplitter’, nous divisons le ‘texte’ en ‘morceaux’ plus petits pour assurer un traitement efficace, chaque morceau ayant une limite maximale de jetons.
# Incorporer le texte et stocker les embeddings
# Obtenir le modèle d'embedding
embeddings = OpenAIEmbeddings()
# Créer une base de données de vecteurs
db = FAISS.from_documents(chunks, embeddings)
Embeddings OpenAI
Dans cette section, nous incorporons le texte en utilisant la classe ‘OpenAIEmbeddings’, qui convertit le texte en représentations numériques (embeddings). Ces embeddings facilitent le stockage et l’analyse efficaces des données textuelles. Nous créons ensuite une base de données vectorielle en utilisant la classe ‘FAISS’, en incorporant les ‘morceaux’ de texte et leurs embeddings correspondants.
# Configuration de la fonction de recherche
# Vérifier que la recherche de similarité fonctionne
query = "Quel est le nom de l'auteur ?"
docs = db.similarity_search(query)
docs[0]
Configurez une fonction de recherche dans cette partie. Vous pouvez effectuer une recherche de similarité avec une requête d’exemple en utilisant la base de données vectorielle (‘db’). La variable ‘query’ contient la question que nous voulons poser au chatbot et la variable ‘docs’ stocke les documents pertinents contenant le contexte de la requête. Nous imprimons ensuite le premier document retourné par la recherche de similarité.
chain = load_qa_chain(OpenAI(temperature=0), chain_type="stuff")
query = "Quel est le nom de l'auteur ?"
docs = db.similarity_search(query)
chain.run(input_documents=docs, question=query)
Dans ce segment, nous créons une chaîne de questions-réponses (‘chain’) qui intègre la recherche de similarité avec les requêtes des utilisateurs. Nous chargeons le modèle de langage ‘OpenAI’ et réglons la température à 0 pour obtenir des réponses déterministes. Nous obtenons une réponse basée sur la base de connaissances en passant les documents récupérés (‘docs’) et la question de l’utilisateur (‘query’) à la chaîne.
# Créer un chatbot avec une mémoire de conversation
from IPython.display import display
import ipywidgets as widgets
qa = ConversationalRetrievalChain.from_llm(OpenAI(temperature=0.1), db.as_retriever())
historique_chat = []
def on_submit(_):
question = boite_saisie.value
boite_saisie.value = ""
if question.lower() == 'exit':
print("Merci d'avoir utilisé le chatbot Chat with PDFs!")
return
resultat = qa({"question": question, "chat_history": historique_chat})
historique_chat.append((question, resultat['answer']))
display(widgets.HTML(f'<b>Utilisateur:</b> {question}'))
display(widgets.HTML(f'<b><font color="blue">Chatbot:</font></b>{resultat["answer"]}'))
print("Bienvenue sur le chatbot Chat with PDFs! Tapez 'exit' pour arrêter.")
boite_saisie = widgets.Text(placeholder='Veuillez poser votre question:')
boite_saisie.on_submit(on_submit)
display(boite_saisie)
Dans la section finale, nous introduisons une fonctionnalité de chatbot où les utilisateurs peuvent interagir avec le chatbot en posant des questions et obtenir des réponses.
Conclusion
Cet article explore le fascinant projet “Chat with PDFs” et sa mise en œuvre étape par étape. Nous avons acquis une compréhension plus approfondie des bibliothèques de modèles de langage (LLMs) et de PyPDFs, deux composants essentiels qui alimentent cet outil innovant. Maintenant, vous pouvez traiter et analyser facilement des documents PDF, extraire des informations précieuses et engager des conversations interactives avec un chatbot compagnon. Que vous soyez chercheur, étudiant ou professionnel, “Chat with PDFs” a révolutionné notre façon d’interagir avec les PDF, donnant vie aux documents statiques grâce à la puissance de l’IA. Bonne exploration des PDFs !
Points clés
- Les LLM permettent au chatbot de fournir des réponses précises et contextuelles aux requêtes des utilisateurs.
- PyPDF simplifie la manipulation des PDF, facilitant ainsi le travail avec des documents complexes.
- La structure du code garantit une intégration fluide des fonctionnalités d’incorporation de texte et de recherche de similarité.
- PyPDF permet une manipulation, une extraction et une manipulation de texte PDF sans problème.
Questions fréquemment posées
Les médias présentés dans cet article n’appartiennent pas à Analytics Vidhya et sont utilisés à la discrétion de l’auteur.
We will continue to update IPGirl; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- Au-delà du stylo l’art de l’IA dans la génération de texte manuscrit à partir d’archétypes visuels
- Différence entre table de faits et table de dimensions
- Introduction au Contrôle de Version des Données
- Nouveau modèle de texte vers image de Metas – Explication du document CM3leon
- Cette semaine en IA, 18 août OpenAI en difficulté financière • Stability AI annonce StableCode
- Visualisations de New York City
- Rice et IIT Kanpur annoncent les lauréats du prix de recherche collaborative