Методы суммирования текста с использованием Vertex AI PaLM API

1. Введение

Обобщение текста — это процесс создания более короткой версии текстового документа с сохранением важной информации. Этот процесс можно использовать для быстрого просмотра длинного документа, понимания сути статьи или обмена кратким изложением с пользователями. Хотя суммирование короткого абзаца — нетривиальная задача, есть несколько проблем, которые необходимо преодолеть, если вы хотите резюмировать большой документ. Например, PDF-файл с несколькими страницами.

В этой лаборатории вы узнаете, как использовать генеративные модели для обобщения больших документов.

Что ты построишь

В этом уроке вы узнаете, как использовать генеративные модели для обобщения информации из текста, используя следующие методы:

  • Начинка
  • Уменьшение карты
  • MapReduce с перекрывающимися фрагментами
  • MapReduce с скользящей сводкой

2. Требования

  • Браузер, например Chrome или Firefox.
  • Проект Google Cloud с включенной оплатой

3. Затраты

В этом руководстве Vertex AI Generative AI Studio используется в качестве платного компонента Google Cloud.

Узнайте о ценах на Vertex AI , ценах на генеративный искусственный интеллект и воспользуйтесь калькулятором цен , чтобы составить смету затрат на основе прогнозируемого использования.

4. Начало работы

  1. Установите Vertex AI SDK, другие пакеты и их зависимости, используя следующую команду:
!pip install google-cloud-aiplatform PyPDF2 ratelimit backoff --upgrade --quiet --user
  • Для Colab раскомментируйте следующую ячейку, чтобы перезапустить ядро.
# # 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)
  • Для Vertex AI Workbench вы можете перезапустить терминал, используя кнопку сверху.
  1. Аутентифицируйте среду своего ноутбука одним из следующих способов:
  • Для Colab раскомментируйте следующую ячейку.
from google.colab import auth
auth.authenticate_user()
  1. Импортируйте библиотеки для инициализации Vertex AI SDK.
  • Для Colab импортируйте библиотеки, раскомментировав следующую ячейку.
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. Импортируйте модели, в которые вы загружаете предварительно обученную модель генерации текста под названием text-bison@001.
generation_model = TextGenerationModel.from_pretrained("text-bison@001")
  1. Подготовьте файлы данных, из которых вы загрузите PDF-файл для обобщающих задач.
# 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)

Вот как можно просмотреть несколько страниц загруженного 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. Способ начинки

Самый простой способ передать данные в языковую модель — «вставить» их в приглашение в качестве контекста. Сюда входит вся необходимая информация в приглашении и в том порядке, в котором вы хотите, чтобы модель ее обрабатывала.

  1. Извлеките текст только со второй страницы 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. Создайте шаблон приглашения, который впоследствии можно будет использовать в записной книжке.
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. Используйте LLM через API для обобщения извлеченных текстов. Обратите внимание, что LLM в настоящее время имеют ограничение на вводимый текст, и вставка большого входного текста может быть не принята. Дополнительную информацию о квотах и ​​ограничениях см. в разделе Квоты и ограничения .

Следующий код вызывает исключение.

# 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. Модель ответила сообщением об ошибке: 400 Запрос содержит недопустимый аргумент, поскольку извлеченный текст слишком длинный для обработки генеративной модели.

Чтобы избежать этой проблемы, вам необходимо ввести фрагмент извлеченного текста, например, первые 30 000 слов.

# 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

На скриншоте вы должны увидеть следующий результат:

710efedd9f6dbc6d.png

Краткое содержание

Хотя полный текст слишком велик для модели, вам удалось создать краткий маркированный список наиболее важной информации из части PDF-файла с помощью модели.

Преимущества

  • Этот метод выполняет только один вызов модели.
  • При суммировании текста модель имеет доступ ко всем данным сразу. Это делает результат лучше.

Недостатки

  • Большинство моделей имеют длину контекста. Для больших документов (или множества документов) это не работает, поскольку в результате длина приглашения превышает длину контекста.
  • Этот метод работает только с небольшими фрагментами данных и не подходит для больших документов.

6. Метод MapReduce

Чтобы решить проблему решения этой проблемы для больших документов, мы рассмотрим метод MapReduce. Этот метод сначала разбивает большие данные на более мелкие части, а затем запускает подсказку для каждой части. Для задач резюмирования вывод первой подсказки представляет собой краткое изложение этой части. После того, как все исходные выходные данные будут сгенерированы, запускается другое приглашение для их объединения.

Обратитесь к этой ссылке на github для получения подробной информации о реализации этого метода.

7. Поздравления

Поздравляем! Вы успешно резюмировали длинный документ. Вы узнали 2 метода резюмирования длинных документов, а также их преимущества и недостатки. Существует несколько методов суммирования больших документов. Обратите внимание на два других метода — MapReduce с перекрывающимися фрагментами и MapReduce с прокручиваемой сводкой в ​​другой кодовой лаборатории.

Подведение итогов длинного документа может оказаться сложной задачей. Он требует от вас определить основные моменты документа, обобщить информацию и представить ее кратко и связно. Это может оказаться затруднительным, если документ сложный или технический. Кроме того, обобщение длинного документа может занять много времени, поскольку вам необходимо внимательно прочитать и проанализировать текст, чтобы убедиться в точности и полноте резюме.

Хотя эти методы позволяют вам взаимодействовать с LLM и гибко резюмировать длинные документы, иногда вам может потребоваться ускорить процесс, используя начальную загрузку или готовые методы. Именно здесь используются такие библиотеки, как LangChain. Узнайте больше о поддержке LangChain в Vertex AI .