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

1. Introduzione

La riassunzione del testo è il processo di creazione di una versione più breve di un documento di testo, mantenendo comunque le informazioni importanti. Questo processo può essere utilizzato per scorrere rapidamente un documento lungo, cogliere l'essenza di un articolo o condividere un riassunto con gli utenti. Sebbene riassumere un breve paragrafo sia un'attività non banale, ci sono alcune sfide da superare se vuoi 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 dal testo seguendo questi metodi:

  • Ripieno
  • MapReduce
  • MapReduce con blocchi sovrapposti
  • MapReduce con riassunto progressivo

2. Requisiti

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

3. Costi

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

Scopri i prezzi di Vertex AI, i prezzi di 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 notebook 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 pre-addestrato denominato text-bison@001.
generation_model = TextGenerationModel.from_pretrained("text-bison@001")
  1. Prepara i file di dati in cui scarichi un file PDF per le attività di riassunzione.
# 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)

Ecco 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 i dati a un modello linguistico è "riempirli" 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 del 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 può essere utilizzato in seguito nel notebook.
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 riassumere i testi estratti. Tieni presente che gli LLM attualmente hanno un limite di testo di input e il riempimento 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 genera 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 un messaggio di errore: 400 La richiesta 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

Dovresti vedere il seguente risultato nello screenshot:

710efedd9f6dbc6d.png

Riepilogo

Sebbene il testo completo sia troppo grande per il modello, sei riuscito a creare un elenco puntato conciso delle informazioni più importanti di una parte del PDF utilizzando il modello.

Vantaggi

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

Svantaggi

  • La maggior parte dei modelli ha una finestra contestuale. Per i documenti di grandi dimensioni (o molti documenti), questo non funziona perché il prompt risultante è più lungo della finestra contestuale.
  • Questo metodo funziona solo su piccoli blocchi di dati e non è adatto a documenti di grandi dimensioni.

6. Metodo MapReduce

Per risolvere il problema della riassunzione di documenti di grandi dimensioni, esamineremo il metodo MapReduce. Questo metodo suddivide innanzitutto i dati di grandi dimensioni in blocchi più piccoli, quindi esegue un prompt su ogni blocco. Per le attività di riassunzione, l'output del primo prompt è un riassunto del blocco. Una volta generati tutti gli output iniziali, viene eseguito un prompt diverso per combinarli.

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

7. Complimenti

Complimenti! Hai riassunto correttamente un documento lungo. Hai imparato due metodi per riassumere documenti lunghi, insieme ai relativi vantaggi e svantaggi. Esistono alcuni metodi per riassumere documenti di grandi dimensioni. In un altro codelab troverai altri due metodi: MapReduce con blocchi sovrapposti e MapReduce con riassunto progressivo.

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, in quanto è necessario leggere e analizzare attentamente il testo per assicurarsi che il riassunto sia accurato e completo.

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