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.

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

  1. Les LLM permettent au chatbot de fournir des réponses précises et contextuelles aux requêtes des utilisateurs.
  2. PyPDF simplifie la manipulation des PDF, facilitant ainsi le travail avec des documents complexes.
  3. La structure du code garantit une intégration fluide des fonctionnalités d’incorporation de texte et de recherche de similarité.
  4. 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!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

AI

Meta AI rend AudioCraft open source une bibliothèque PyTorch pour la recherche en apprentissage profond sur la génération audio

Pour permettre aux chercheurs et aux praticiens de former leurs modèles et de faire progresser l’état de l̵...

AI

Une nouvelle recherche en intelligence artificielle en provenance de Chine propose Meta-Transformer un cadre d'intelligence artificielle unifié pour l'apprentissage multimodal

Le cerveau humain, considéré comme le paradigme des théories des réseaux neuronaux, traite simultanément des informat...

AI

Comment devrions-nous stocker les images d'IA ? Les chercheurs de Google proposent une méthode de compression d'image utilisant des modèles génératifs basés sur les scores.

Il y a un an, générer des images réalistes avec l’IA était un rêve. Nous étions impressionnés de voir des visag...

AI

ChatGPT peut maintenant générer des images

OpenAI a intégré une nouvelle version de son générateur d'images DALL-E dans son chatbot en ligne ChatGPT.