1. Wprowadzenie
Streszczanie tekstu to proces tworzenia krótszej wersji dokumentu tekstowego przy jednoczesnym zachowaniu ważnych informacji. Możesz użyć tej funkcji, aby szybko przejrzeć długi dokument, poznać ogólny zarys artykułu lub udostępnić podsumowanie użytkownikom. Podsumowanie krótkiego akapitu to niełatwe zadanie, ale jeśli chcesz podsumować duży dokument, musisz pokonać kilka wyzwań. Może to być na przykład plik PDF z wieloma stronami.
Z tego ćwiczenia dowiesz się, jak używać modeli generatywnych do podsumowywania dużych dokumentów.
Co utworzysz
Z tego samouczka dowiesz się, jak używać modeli generatywnych do podsumowywania informacji z tekstu, korzystając z tych metod:
- Nadzienie
- MapReduce
- MapReduce z nakładającymi się fragmentami
- MapReduce z podsumowaniem kroczącym
2. Wymagania
3. Koszty
W tym samouczku jako płatny komponent Google Cloud używana jest usługa Vertex AI Generative AI Studio.
Dowiedz się więcej o cenniku Vertex AI i cenniku generatywnej AI oraz użyj kalkulatora cen, aby oszacować koszty na podstawie przewidywanego wykorzystania.
4. Pierwsze kroki
- Zainstaluj pakiet Vertex AI SDK, inne pakiety i ich zależności za pomocą tego polecenia:
!pip install google-cloud-aiplatform PyPDF2 ratelimit backoff --upgrade --quiet --user
- W Colab odkomentuj poniższą komórkę, aby ponownie uruchomić jądro.
# # 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)
- W przypadku Vertex AI Workbench możesz ponownie uruchomić terminal za pomocą przycisku u góry.
- Uwierzytelnij środowisko notatnika na jeden z tych sposobów:
- W przypadku Colab usuń komentarz z tej komórki.
from google.colab import auth
auth.authenticate_user()
- W przypadku Vertex AI Workbench zapoznaj się z instrukcjami konfiguracji.
- Zaimportuj biblioteki, aby zainicjować pakiet Vertex AI SDK.
- W Colab zaimportuj biblioteki, usuwając komentarz z komórki poniżej.
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")
- Importowanie modeli, w którym wczytujesz wytrenowany model generowania tekstu o nazwie text-bison@001.
generation_model = TextGenerationModel.from_pretrained("text-bison@001")
- Przygotuj pliki danych, w których pobierzesz plik PDF na potrzeby zadań podsumowywania.
# 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)
Oto jak wyświetlić kilka stron pobranego pliku PDF.
# 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. Metoda wypełniania
Najprostszym sposobem przekazywania danych do modelu językowego jest „wypełnienie” nimi promptu jako kontekstu. Obejmuje to wszystkie istotne informacje w prompcie i w kolejności, w jakiej chcesz, aby model je przetwarzał.
- Wyodrębnij tekst tylko ze strony 2 w pliku 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")
- Utwórz szablon prompta, którego można później użyć w notatniku.
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:
"""
- Użyj modelu LLM za pomocą interfejsu API, aby podsumować wyodrębnione teksty. Pamiętaj, że LLM mają obecnie limit tekstu wejściowego, więc wstawianie dużego tekstu wejściowego może nie być akceptowane. Więcej informacji o limitach znajdziesz w sekcji Limity.
Ten kod powoduje wyjątek.
# 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)
- Model odpowiedział komunikatem o błędzie: 400 Żądanie zawiera nieprawidłowy argument, ponieważ wyodrębniony tekst jest zbyt długi, aby model generatywny mógł go przetworzyć.
Aby tego uniknąć, musisz wprowadzić fragment wyodrębnionego tekstu, np. pierwsze 30 tys. słów.
# 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
Na zrzucie ekranu powinien pojawić się ten wynik:

Podsumowanie
Pełny tekst jest zbyt duży dla modelu, ale udało Ci się utworzyć zwięzłą, punktowaną listę najważniejszych informacji z fragmentu pliku PDF za pomocą modelu.
Zalety
- Ta metoda wykonuje tylko jedno wywołanie modelu.
- Podczas podsumowywania tekstu model ma dostęp do wszystkich danych jednocześnie. Dzięki temu wynik jest lepszy.
Wady
- Większość modeli ma długość kontekstu. W przypadku dużych dokumentów (lub wielu dokumentów) ta metoda nie działa, ponieważ prompt jest dłuższy niż długość kontekstu.
- Ta metoda działa tylko w przypadku mniejszych fragmentów danych i nie nadaje się do dużych dokumentów.
6. Metoda MapReduce
Aby rozwiązać problem z dużymi dokumentami, przyjrzymy się metodzie MapReduce. Ta metoda najpierw dzieli duże dane na mniejsze części, a następnie uruchamia prompt na każdej z nich. W przypadku zadań związanych z podsumowywaniem wynikiem pierwszego promptu jest podsumowanie danego fragmentu. Gdy wszystkie początkowe dane wyjściowe zostaną wygenerowane, uruchamiany jest inny prompt, aby je połączyć.
Szczegółowe informacje o implementacji tej metody znajdziesz pod tym linkiem na GitHubie.
7. Gratulacje
Gratulacje! Udało Ci się podsumować długi dokument. Poznaliśmy 2 metody podsumowywania długich dokumentów oraz ich zalety i wady. Istnieje kilka metod podsumowywania dużych dokumentów. W innych ćwiczeniach znajdziesz 2 inne metody: MapReduce z nakładającymi się fragmentami i MapReduce z podsumowaniem kroczącym.
Stworzenie podsumowania długiego dokumentu może być trudne. Wymaga to zidentyfikowania głównych punktów dokumentu, zsyntetyzowania informacji i przedstawienia ich w zwięzły i spójny sposób. Może to być trudne, jeśli dokument jest złożony lub techniczny. Podsumowanie długiego dokumentu może być czasochłonne, ponieważ wymaga uważnego przeczytania i przeanalizowania tekstu, aby mieć pewność, że podsumowanie jest dokładne i kompletne.
Te metody umożliwiają interakcję z LLM i elastyczne podsumowywanie długich dokumentów, ale czasami możesz chcieć przyspieszyć ten proces, korzystając z metod wstępnych lub gotowych. W tym przypadku przydają się biblioteki takie jak LangChain. Dowiedz się więcej o obsłudze LangChain w Vertex AI.