1. Einführung
Bei der Textzusammenfassung wird eine kürzere Version eines Textdokuments erstellt, wobei wichtige Informationen erhalten bleiben. Dieser Prozess kann verwendet werden, um ein langes Dokument schnell zu überfliegen, die Kernaussage eines Artikels zu erfassen oder eine Zusammenfassung für Nutzer freizugeben. Das Zusammenfassen eines kurzen Absatzes ist keine triviale Aufgabe. Wenn Sie jedoch ein langes Dokument zusammenfassen möchten, müssen Sie einige Herausforderungen bewältigen. Beispielsweise eine mehrseitige PDF-Datei.
In diesem Codelab erfahren Sie, wie Sie generative Modelle verwenden können, um lange Dokumente zusammenzufassen.
Was Sie erstellen
In dieser Anleitung erfahren Sie, wie Sie generative Modelle verwenden, um Informationen aus Texten zusammenzufassen. Dazu arbeiten Sie die folgenden Methoden durch:
- Stuffing
- MapReduce
- MapReduce mit überlappenden Chunks
- MapReduce mit fortlaufender Zusammenfassung
2. Voraussetzungen
3. Kosten
In dieser Anleitung wird Vertex AI Generative AI Studio als kostenpflichtige Komponente von Google Cloud verwendet.
Informieren Sie sich über die Preise von Vertex AI und Generative AI. Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung generieren.
4. Erste Schritte
- Installieren Sie das Vertex AI SDK, andere Pakete und ihre Abhängigkeiten mit dem folgenden Befehl:
!pip install google-cloud-aiplatform PyPDF2 ratelimit backoff --upgrade --quiet --user
- Entfernen Sie für 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)
- Für Vertex AI Workbench können Sie das Terminal mit der Schaltfläche oben neu starten.
- Authentifizieren Sie Ihre Notebook-Umgebung auf eine der folgenden Arten:
- Entfernen Sie für Colab die Kommentarzeichen für die folgende Zelle.
from google.colab import auth
auth.authenticate_user()
- Informationen zu Vertex AI Workbench finden Sie in der Einrichtungsanleitung.
- Importieren Sie Bibliotheken, um das Vertex AI SDK zu initialisieren.
- Entfernen Sie für Colab die Kommentarzeichen für die folgende Zelle, um Bibliotheken zu importieren.
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")
- Importieren Sie Modelle, in denen Sie das vortrainierte Textgenerierungsmodell text-bison@001 laden.
generation_model = TextGenerationModel.from_pretrained("text-bison@001")
- Bereiten Sie Datendateien vor, in denen Sie eine PDF-Datei für die Zusammenfassungsaufgaben herunterladen.
# 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 ansehen.
# 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. Stuffing-Methode
Die einfachste Möglichkeit, Daten an ein Sprachmodell zu übergeben, besteht darin, sie als Kontext in den Prompt einzufügen. Dazu gehören alle relevanten Informationen im Prompt und in der Reihenfolge, in der das Modell sie verarbeiten soll.
- 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")
- Erstellen Sie eine Promptvorlage, die später 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:
"""
- Verwenden Sie LLM über die API, um die extrahierten Texte zusammenzufassen. Beachten Sie, dass LLMs derzeit ein Limit für Eingabetexte haben und das Einfügen eines großen Eingabetextes möglicherweise nicht akzeptiert wird. Weitere Informationen zu Kontingenten und Limits finden Sie unter Kontingente und Limits.
Der folgende Code verursacht eine Ausnahme.
# 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)
- Das Modell hat mit einer Fehlermeldung geantwortet: 400 Request contains an invalid argument , da der extrahierte Text zu lang ist, als dass das generative Modell ihn verarbeiten könnte.
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:

Zusammenfassung
Obwohl der vollständige Text zu lang für das Modell ist, konnten Sie mit dem Modell eine prägnante, nummerierte Liste der wichtigsten Informationen aus einem Teil der PDF-Datei erstellen.
Vorteile
- Bei dieser Methode wird nur ein einziger Aufruf an das Modell gesendet.
- Beim Zusammenfassen von Text hat das Modell gleichzeitig Zugriff auf alle Daten. Dadurch wird das Ergebnis besser.
Nachteile
- Die meisten Modelle haben eine Kontextlänge. Bei großen Dokumenten (oder vielen Dokumenten) funktioniert dies nicht, da der Prompt dann länger als die Kontextlänge ist.
- Diese Methode funktioniert nur bei kleineren Datenmengen und ist nicht für große Dokumente geeignet.
6. MapReduce-Methode
Um das Problem der Zusammenfassung großer Dokumente zu lösen, sehen wir uns die MapReduce-Methode an. Bei dieser Methode werden die großen Daten zuerst in kleinere Teile aufgeteilt und dann wird für jeden Teil ein Prompt ausgeführt. Bei Zusammenfassungsaufgaben ist die Ausgabe des ersten Prompts eine Zusammenfassung dieses Teils. Sobald alle anfänglichen Ausgaben generiert wurden, wird ein anderer Prompt ausgeführt, um sie zu kombinieren.
Implementierungsdetails zu dieser Methode finden Sie auf GitHub link.
7. Glückwunsch
Glückwunsch! Sie haben ein langes Dokument erfolgreich zusammengefasst. Sie haben zwei Methoden zum Zusammenfassen langer Dokumente kennengelernt, zusammen mit ihren Vor- und Nachteilen. Es gibt einige Methoden zum Zusammenfassen großer Dokumente. In einem anderen Codelab werden zwei weitere Methoden vorgestellt: MapReduce mit überlappenden Chunks und MapReduce mit fortlaufender Zusammenfassung.
Das Zusammenfassen eines langen Dokuments kann eine Herausforderung sein. Dazu müssen Sie die Hauptpunkte des Dokuments identifizieren, die Informationen zusammenfassen und sie prägnant und kohärent präsentieren. Das kann schwierig werden, wenn das Dokument komplex oder technisch ist. Außerdem kann das Zusammenfassen 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.
Mit diesen Methoden können Sie flexibel mit LLMs interagieren und lange Dokumente zusammenfassen. Manchmal möchten Sie den Prozess jedoch beschleunigen, indem Sie Bootstrapping oder vorgefertigte Methoden verwenden. Hier kommen Bibliotheken wie LangChain ins Spiel. Weitere Informationen zur LangChain-Unterstützung in Vertex AI.