Metody podsumowywania tekstu korzystające z interfejsu Vertex AI PaLM API

1. Wprowadzenie

Podsumowywanie tekstu to proces tworzenia krótszej wersji dokumentu tekstowego z zachowaniem ważnych informacji. Ten proces pozwala szybko przejrzeć długi dokument, uzyskać podstawowe informacje o artykule lub udostępnić streszczenie użytkownikom. Stworzenie podsumowania krótkiego akapitu nie jest łatwe, ale jeśli chcesz podsumować duży dokument, musisz pokonać kilka wyzwań. Na przykład plik PDF z kilkoma stronami.

Z tego ćwiczenia w Codelabs 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. Służą do tego te metody:

  • Wypchanie
  • MapReduce
  • MapReduce z nakładającymi się fragmentami
  • MapReduce z podsumowaniem kroczącym

2. Wymagania

  • przeglądarki, na przykład Chrome lub Firefox;
  • Projekt Google Cloud z włączonymi płatnościami

3. Koszty

W tym samouczku jako rozliczany komponent Google Cloud używane jest Vertex AI Generative AI Studio.

Dowiedz się więcej o cenach Vertex AI i ocenach generatywnej AI oraz o tym, jak za pomocą Kalkulatora cen wygenerować oszacowanie kosztów na podstawie przewidywanego wykorzystania.

4. Pierwsze kroki

  1. Zainstaluj pakiet Vertex AI SDK, inne pakiety i ich zależności, używając tego polecenia:
!pip install google-cloud-aiplatform PyPDF2 ratelimit backoff --upgrade --quiet --user
  • W przypadku Colab usuń znacznik komentarza z komórki poniżej, 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, klikając przycisk u góry.
  1. Uwierzytelnij środowisko notatnika na jeden z tych sposobów:
  • W przypadku Colab usuń komentarz do tej komórki.
from google.colab import auth
auth.authenticate_user()
  1. Zaimportuj biblioteki, aby zainicjować pakiet SDK Vertex AI.
  • W przypadku Colab zaimportuj biblioteki, usuwając komentarz do tej komórki.
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. Importuj modele, do których wczytujesz wytrenowany model generowania tekstu o nazwie text-bison@001.
generation_model = TextGenerationModel.from_pretrained("text-bison@001")
  1. Przygotuj pliki danych z pobranym plikiem PDF na potrzeby zadań podsumowujących.
# 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)

Aby 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 preparowania

Najprostszym sposobem na przekazanie danych do modelu językowego jest „upychanie” w prompcie jako kontekst. Obejmuje to wszystkie istotne informacje z promptu oraz w kolejności, w jakiej ma on być przetwarzany przez model.

  1. Wyodrębnij w pliku PDF tekst tylko z drugiej strony.
# 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. Utwórz szablon promptu, 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:
"""
  1. Użyj LLM za pomocą interfejsu API, aby podsumować wyodrębnione teksty. Pamiętaj, że duże modele językowe mają obecnie limit tekstu wejściowego i upychanie dużego tekstu wejściowego może nie być akceptowane. Więcej informacji o limitach znajdziesz w artykule Limity.

Poniższy 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)
  1. Model zwrócił komunikat o błędzie: 400 Request zawiera nieprawidłowy argument, ponieważ wyodrębniony tekst jest zbyt długi, aby model generatywny mógł go przetworzyć.

Aby uniknąć tego problemu, musisz wpisać fragment wyodrębnionego tekstu, na przykład pierwsze 30 000 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ę następujący wynik:

710efedd9f6dbc6d.png

Podsumowanie

Chociaż cały tekst jest za duży dla modelu, udało Ci się dzięki modelowi utworzyć zwięzłą, punktowaną listę najważniejszych informacji z części pliku PDF.

Zalety

  • Ta metoda wysyła do modelu tylko jedno wywołanie.
  • Podczas podsumowania tekstu model ma dostęp do wszystkich danych jednocześnie. Dzięki temu wynik będzie 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ż powoduje wyświetlenie promptu większego niż długość kontekstu.
  • Ta metoda działa tylko w przypadku mniejszych fragmentów danych i nie jest odpowiednia w przypadku dużych dokumentów.

6. Metoda MapReduce

Aby rozwiązać ten problem w przypadku dużych dokumentów, wybierzemy metodę MapReduce. Ta metoda najpierw dzieli duże dane na mniejsze części, a następnie uruchamia prompt w każdym fragmencie. W przypadku zadań podsumowania pierwszy prompt to podsumowanie danego fragmentu. Po wygenerowaniu wszystkich początkowych danych wyjściowych uruchamiany jest inny prompt w celu ich połączenia.

Szczegółowe informacje o implementacji tej metody znajdziesz pod tym linkiem na GitHubie.

7. Gratulacje

Gratulacje! Udało Ci się podsumować długi dokument. Znasz 2 metody podsumowywania długich dokumentów oraz ich zalety i wady. Istnieje kilka metod podsumowania dużych dokumentów. Zwróć uwagę na 2 inne metody – MapReduce z nakładającymi się fragmentami i MapReduce z podsumowaniem kroczącym w innym ćwiczeniu z programowania.

Streszczanie długiego dokumentu może być trudne. Wymaga wskazania głównych punktów dokumentu, syntetyzowania informacji oraz 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. Poza tym streszczanie długiego dokumentu może być czasochłonne, ponieważ trzeba dokładnie przeczytać i przeanalizować tekst, 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 warto przyspieszyć ten proces za pomocą wczytywania lub gotowych metod. Dlatego z pomocą przychodzą biblioteki takie jak LangChain. Dowiedz się więcej o obsłudze LangChain w Vertex AI.