Methoden zur Textzusammenfassung mit der PaLM API von Vertex AI

1. Einführung

Bei der Textzusammenfassung wird eine kürzere Version eines Textdokuments erstellt, während wichtige Informationen erhalten bleiben. So können Sie schnell ein langes Dokument überfliegen, einen Überblick über einen Artikel verschaffen oder eine Zusammenfassung mit Nutzern teilen. Obwohl das Zusammenfassen eines kurzen Absatzes eine nicht triviale Aufgabe ist, müssen Sie einige Herausforderungen meistern, wenn Sie ein großes Dokument zusammenfassen möchten. Das kann beispielsweise eine PDF-Datei mit mehreren Seiten sein.

In diesem Codelab erfahren Sie, wie Sie mit generativen Modellen große Dokumente zusammenfassen.

Inhalt

In dieser Anleitung erfahren Sie, wie Sie generative Modelle verwenden, um Informationen aus Text zusammenzufassen. Gehen Sie dazu die folgenden Methoden durch:

  • Füllung
  • MapReduce
  • MapReduce mit sich überschneidenden Chunks
  • MapReduce mit rollierender Zusammenfassung

2. Voraussetzungen

  • Ein Browser wie Chrome oder Firefox
  • Ein Google Cloud-Projekt mit aktivierter Abrechnung

3. Kosten

In dieser Anleitung wird Generative AI Studio von Vertex AI als kostenpflichtige Komponente von Google Cloud verwendet.

Informieren Sie sich über die Preise für Vertex AI und die Preise für Generative AI. Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung erstellen.

4. Erste Schritte

  1. Installieren Sie das Vertex AI SDK und andere Pakete und deren Abhängigkeiten mit dem folgenden Befehl:
!pip install google-cloud-aiplatform PyPDF2 ratelimit backoff --upgrade --quiet --user
  • Entfernen Sie unter Colab die Kommentarzeichen für die folgende Zelle, um den Kernel neu zu starten.
# # 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)
  • In Vertex AI Workbench können Sie das Terminal über die Schaltfläche oben neu starten.
  1. Authentifizieren Sie Ihre Notebookumgebung auf eine der folgenden Arten:
  • Entfernen Sie unter Colab die Kommentarzeichen für die folgende Zelle.
from google.colab import auth
auth.authenticate_user()
  1. Importieren Sie Bibliotheken, um das Vertex AI SDK zu initialisieren.
  • Importieren Sie Bibliotheken in Colab, indem Sie die Kommentarzeichen der folgenden Zelle entfernen.
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. Importieren Sie Modelle, bei denen Sie das vortrainierte Textgenerierungsmodell namens text-bison@001 laden.
generation_model = TextGenerationModel.from_pretrained("text-bison@001")
  1. Bereiten Sie Datendateien vor, um eine PDF-Datei für die Zusammenfassungsaufgaben herunterzuladen.
# 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)

So können Sie einige Seiten der heruntergeladenen PDF-Datei aufrufen:

# 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. Füllmethode

Die einfachste Möglichkeit, Daten an ein Sprachmodell zu übergeben, besteht darin, als Kontext in den Prompt einfügen. Dazu gehören alle relevanten Informationen in der Aufforderung und in der Reihenfolge, in der das Modell sie verarbeiten soll.

  1. Extrahieren Sie den Text nur von Seite 2 der PDF-Datei.
# 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. Erstellen Sie eine Eingabeaufforderungsvorlage, die anschließend im Notebook verwendet werden kann.
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. Sie verwenden LLM über die API, um die extrahierten Texte zusammenzufassen. Beachten Sie, dass LLMs derzeit ein Limit für die Eingabe von Text haben. Überflüssige Textinhalte werden möglicherweise nicht akzeptiert. Weitere Informationen zu Kontingenten und Limits finden Sie unter Kontingente und Limits.

Der folgende Code löst eine Ausnahme aus.

# 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. Das Modell hat folgende Fehlermeldung zurückgegeben: 400 Request has an invalid argument, weil der extrahierte Text zu lang für die Verarbeitung durch das generative Modell ist.

Um dieses Problem zu vermeiden, müssen Sie einen Teil des extrahierten Textes eingeben, z. B. die ersten 30.000 Wörter.

# 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

Im Screenshot sollte das folgende Ergebnis angezeigt werden:

710efedd9f6dbc6d.png

Zusammenfassung

Obwohl der vollständige Text für das Modell zu groß ist, haben Sie es geschafft, mithilfe des Modells eine prägnante, Aufzählungsliste mit den wichtigsten Informationen aus einem Teil der PDF-Datei zu erstellen.

Vorteile

  • Bei dieser Methode wird das Modell nur einmal aufgerufen.
  • Bei der Zusammenfassung von Text hat das Modell Zugriff auf alle Daten gleichzeitig. Dadurch wird das Ergebnis verbessert.

Nachteile

  • Die meisten Modelle haben eine Kontextlänge. Bei großen Dokumenten (oder vielen Dokumenten) funktioniert dies nicht, da der Prompt größer als die Kontextlänge ist.
  • Diese Methode funktioniert nur mit kleineren Daten und ist für große Dokumente nicht geeignet.

6. MapReduce-Methode

Um dieses Problem bei großen Dokumenten zu lösen, schauen wir uns die MapReduce-Methode an. Diese Methode teilt zuerst die großen Daten in kleinere Teile auf und führt dann für jedes Teil einen Prompt aus. Bei Zusammenfassungsaufgaben ist die Ausgabe des ersten Prompts eine Zusammenfassung dieses Teils. Nachdem alle ersten Ausgaben generiert wurden, wird ein weiterer Prompt ausgeführt, um sie zu kombinieren.

Details zur Implementierung dieser Methode finden Sie in diesem GitHub-Link.

7. Glückwunsch

Glückwunsch! Sie haben ein langes Dokument zusammengefasst. Sie haben zwei Methoden zum Zusammenfassen langer Dokumente und ihre Vor- und Nachteile kennengelernt. Es gibt verschiedene Methoden, große Dokumente zusammenzufassen. In einem anderen Codelab gibt es zwei weitere Methoden: MapReduce mit sich überschneidenden Blöcken und MapReduce mit rollierender Zusammenfassung.

Es kann eine Herausforderung sein, lange Dokumente zusammenzufassen. Sie müssen die Hauptpunkte des Dokuments identifizieren, die Informationen zusammenführen und sie prägnant und kohärent präsentieren. Dies kann schwierig werden, wenn das Dokument komplex oder technisch ist. Darüber hinaus kann die Zusammenfassung eines langen Dokuments zeitaufwendig sein, da Sie den Text sorgfältig lesen und analysieren müssen, um sicherzustellen, dass die Zusammenfassung korrekt und vollständig ist.

Diese Methoden ermöglichen es Ihnen, mit LLMs zu interagieren und lange Dokumente auf flexible Weise zusammenzufassen. Manchmal möchten Sie den Prozess jedoch mit Bootstrapping oder vordefinierten Methoden beschleunigen. Hier kommen Bibliotheken wie LangChain ins Spiel. Weitere Informationen zur LangChain-Unterstützung in Vertex AI