Metodi di riassunto del testo con l'API Vertex AI PaLM

1. Introduzione

Il riassunto del testo è il processo di creazione di una versione più breve di un documento di testo pur conservando le informazioni importanti. Questa procedura può essere utilizzata per scorrere rapidamente un lungo documento, comprendere l'essenza di un articolo o condividere un riassunto con gli utenti. Anche se riassumere un breve paragrafo è un compito non di poco conto, è necessario superare alcune sfide se si vuole riassumere un documento di grandi dimensioni. ad esempio un file PDF con più pagine.

In questo codelab imparerai a utilizzare i modelli generativi per riassumere documenti di grandi dimensioni.

Cosa creerai

In questo tutorial imparerai a utilizzare i modelli generativi per riassumere le informazioni di un testo utilizzando i seguenti metodi:

  • Ripieno
  • MapReduce
  • MapReduce con blocchi sovrapposti
  • MapReduce con riepilogo in sequenza

2. Requisiti

  • Un browser, ad esempio Chrome o Firefox
  • Un progetto Google Cloud con fatturazione abilitata

3. Costi

Questo tutorial utilizza Vertex AI Generative AI Studio come componente fatturabile di Google Cloud.

Scopri di più sui prezzi di Vertex AI e sui prezzi dell'AI generativa e utilizza il Calcolatore prezzi per generare una stima dei costi in base all'utilizzo previsto.

4. Per iniziare

  1. Installa l'SDK Vertex AI, altri pacchetti e le relative dipendenze utilizzando il seguente comando:
!pip install google-cloud-aiplatform PyPDF2 ratelimit backoff --upgrade --quiet --user
  • Per Colab, rimuovi il commento dalla cella seguente per riavviare il kernel.
# # Automatically restart kernel after installs so that your environment can access the new packages
 import IPython

 app = IPython.Application.instance()
 app.kernel.do_shutdown(True)
  • Per Vertex AI Workbench, puoi riavviare il terminale utilizzando il pulsante in alto.
  1. Autentica l'ambiente del blocco note in uno dei seguenti modi:
  • Per Colab, rimuovi il commento dalla cella seguente.
from google.colab import auth
auth.authenticate_user()
  1. Importa le librerie per inizializzare l'SDK Vertex AI.
  • Per Colab, importa le librerie rimuovendo il commento dalla cella seguente.
import vertexai

 PROJECT_ID = "[your-project-id]"  # @param {type:"string"}
 vertexai.init(project=PROJECT_ID, location="us-central1")
import re
import urllib
import warnings
from pathlib import Path

import backoff
import pandas as pd
import PyPDF2
import ratelimit
from google.api_core import exceptions
from tqdm import tqdm
from vertexai.language_models import TextGenerationModel

warnings.filterwarnings("ignore")
  1. Importa i modelli in cui carichi il modello di generazione di testo preaddestrato denominato text-bison@001.
generation_model = TextGenerationModel.from_pretrained("text-bison@001")
  1. Prepara i file di dati in cui scaricare un file PDF per le attività di riepilogo.
# Define a folder to store the files
data_folder = "data"
Path(data_folder).mkdir(parents=True, exist_ok=True)

# Define a pdf link to download and place to store the download file
pdf_url = "https://services.google.com/fh/files/misc/practitioners_guide_to_mlops_whitepaper.pdf"
pdf_file = Path(data_folder, pdf_url.split("/")[-1])

# Download the file using `urllib` library
urllib.request.urlretrieve(pdf_url, pdf_file)

Di seguito viene spiegato come visualizzare alcune pagine del file PDF scaricato.

# Read the PDF file and create a list of pages
reader = PyPDF2.PdfReader(pdf_file)
pages = reader.pages

# Print three pages from the pdf
for i in range(3):
    text = pages[i].extract_text().strip()

print(f"Page {i}: {text} \n\n")

#text contains only the text from page 2

5. Metodo di riempimento

Il modo più semplice per passare dati a un modello linguistico è "stuff" nel prompt come contesto. Ciò include tutte le informazioni pertinenti nel prompt e nell'ordine in cui vuoi che il modello le elabori.

  1. Estrai il testo solo dalla pagina 2 nel file PDF.
# Entry string that contains the extacted text from page 2
print(f"There are {len(text)} characters in the second page of the pdf")
  1. Crea un modello di prompt che possa essere utilizzato successivamente nel blocco note.
prompt_template = """
    Write a concise summary of the following text.
    Return your response in bullet points which covers the key points of the text.

    ```{text}```

    BULLET POINT SUMMARY:
"""
  1. Utilizza l'LLM tramite l'API per riepilogare i testi estratti. Tieni presente che attualmente gli LLM hanno un limite di testo di input e l'inserimento di un testo di input di grandi dimensioni potrebbe non essere accettato. Per saperne di più su quote e limiti, consulta Quote e limiti.

Il seguente codice causa un'eccezione.

# Define the prompt using the prompt template
prompt = prompt_template.format(text=text)

# Use the model to summarize the text using the prompt
summary = generation_model.predict(prompt=prompt, max_output_tokens=1024).text

print(summary)
  1. Il modello ha risposto con il messaggio di errore La richiesta 400 contiene un argomento non valido perché il testo estratto è troppo lungo per essere elaborato dal modello generativo.

Per evitare questo problema, devi inserire un blocco del testo estratto, ad esempio le prime 30.000 parole.

# Define the prompt using the prompt template
prompt = prompt_template.format(text=text[:30000])

# Use the model to summarize the text using the prompt
summary = generation_model.predict(prompt=prompt, max_output_tokens=1024)

summary

Nello screenshot dovresti vedere il seguente risultato:

710efedd9f6dbc6d.png

Riepilogo

Anche se il testo completo è troppo grande per il modello, sei riuscito a creare un elenco puntato conciso delle informazioni più importanti da una parte del PDF utilizzando il modello.

Vantaggi

  • Questo metodo effettua una sola chiamata al modello.
  • Durante il riepilogo del testo, il modello ha accesso a tutti i dati contemporaneamente. Questo migliora il risultato.

Svantaggi

  • La maggior parte dei modelli ha una lunghezza del contesto. Per documenti di grandi dimensioni (o molti documenti) non funziona, in quanto determina la creazione di un prompt più lungo della lunghezza del contesto.
  • Questo metodo funziona solo su dati più piccoli e non è adatto per documenti di grandi dimensioni.

6. Metodo MapReduce

Per risolvere il problema della risoluzione di questo problema con documenti di grandi dimensioni, prenderemo in esame il metodo MapReduce. Questo metodo prima suddivide i dati di grandi dimensioni in parti più piccole, quindi esegue un prompt per ogni elemento. Per le attività di riepilogo, l'output del primo prompt fornisce un riepilogo di quel punto. Dopo aver generato tutti gli output iniziali, viene eseguito un prompt diverso per combinarli.

Per i dettagli di implementazione di questo metodo, consulta questo link GitHub.

7. Complimenti

Complimenti! Hai riassunto correttamente un documento lungo. Hai imparato 2 metodi per riassumere documenti lunghi, oltre ai loro vantaggi e svantaggi. Esistono diversi metodi per riepilogare documenti di grandi dimensioni. Cerca altri due metodi: MapReduce con blocchi sovrapposti e MapReduce con riepilogo in sequenza in un altro codelab.

Riassumere un documento lungo può essere difficile. Richiede di identificare i punti principali del documento, sintetizzare le informazioni e presentarle in modo conciso e coerente. Questo può diventare difficile se il documento è complesso o tecnico. Inoltre, riassumere un documento lungo può richiedere molto tempo perché è necessario leggere e analizzare attentamente il testo per assicurarsi che il riepilogo sia accurato e completo.

Sebbene questi metodi consentano di interagire con gli LLM e riassumere documenti lunghi in modo flessibile, a volte potresti voler accelerare il processo utilizzando metodi predefiniti o di bootstrap. È qui che entrano in uso librerie come LangChain. Scopri di più sul supporto di LangChain su Vertex AI.