Métodos de resumo de texto usando a API Vertex AI PaLM

1. Introdução

O resumo de texto é o processo de criação de uma versão mais curta de um documento de texto, preservando informações importantes. Esse processo pode ser usado para analisar rapidamente um documento longo, entender a essência de um artigo ou compartilhar um resumo com os usuários. Embora resumir um parágrafo curto seja uma tarefa não trivial, há alguns desafios a serem superados se você quiser resumir um documento grande. Por exemplo, um arquivo PDF com várias páginas.

Neste codelab, você vai aprender a usar modelos generativos para resumir documentos grandes.

O que você vai criar

Neste tutorial, você vai aprender a usar modelos generativos para resumir informações de texto trabalhando com os seguintes métodos:

  • O recheio
  • MapReduce
  • MapReduce com blocos sobrepostos
  • MapReduce com resumo contínuo

2. Requisitos

  • Use um navegador, como o Chrome ou o Firefox.
  • Tenha um projeto na nuvem do Google Cloud com o faturamento ativado.

3. Custos

Neste tutorial, usamos o Vertex AI Generative AI Studio como o componente faturável do Google Cloud.

Saiba mais sobre os preços da Vertex AI e da IA generativa e use a calculadora de preços para gerar uma estimativa de custo com base no uso projetado.

4. Primeiros passos

  1. Instale o SDK da Vertex AI, outros pacotes e dependências usando o seguinte comando:
!pip install google-cloud-aiplatform PyPDF2 ratelimit backoff --upgrade --quiet --user
  • Para o Colab, remova o comentário da célula a seguir para reiniciar o kernel.
# # 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)
  • Para o Vertex AI Workbench , reinicie o terminal usando o botão na parte de cima.
  1. Autentique o ambiente do notebook de uma das seguintes maneiras:
  • Para o Colab, remova o comentário da célula a seguir.
from google.colab import auth
auth.authenticate_user()
  1. Importe bibliotecas para inicializar o SDK da Vertex AI.
  • Para o Colab, importe bibliotecas removendo o comentário da célula a seguir.
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. Importe modelos em que você carrega o modelo de geração de texto pré-treinado chamado text-bison@001.
generation_model = TextGenerationModel.from_pretrained("text-bison@001")
  1. Prepare arquivos de dados em que você baixa um arquivo PDF para as tarefas de resumo.
# 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)

Veja como visualizar algumas páginas do arquivo PDF baixado.

# 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. Método de recheio

A maneira mais simples de transmitir dados para um modelo de linguagem é "recheá-los" no comando como contexto. Isso inclui todas as informações relevantes no comando e na ordem em que você quer que o modelo as processe.

  1. Extraia o texto apenas da página 2 no arquivo 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. Crie um modelo de comando que possa ser usado posteriormente no notebook.
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. Use o LLM pela API para resumir os textos extraídos. Observe que os LLMs atualmente têm um limite de texto de entrada e inserir um texto de entrada grande pode não ser aceito. Para mais informações sobre cotas e limites, consulte Cotas e limites.

O código a seguir causa uma exceção.

# 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. O modelo respondeu com uma mensagem de erro: 400 Request contains an invalid argument porque o texto extraído é muito longo para o modelo generativo processar.

Para evitar esse problema, insira um bloco do texto extraído, por exemplo, as primeiras 30.000 palavras.

# 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

O resultado a seguir será exibido na captura de tela:

710efedd9f6dbc6d.png

Resumo

Embora o texto completo seja muito grande para o modelo, você conseguiu criar uma lista concisa e com marcadores das informações mais importantes de uma parte do PDF usando o modelo.

Vantagens

  • Esse método faz apenas uma única chamada para o modelo.
  • Ao resumir o texto, o modelo tem acesso a todos os dados de uma só vez. Isso melhora o resultado.

Desvantagens

  • A maioria dos modelos tem um tamanho do contexto. Para documentos grandes (ou muitos documentos), isso não funciona, porque resulta em um comando maior que o tamanho do contexto.
  • Esse método só funciona em partes menores de dados e não é adequado para documentos grandes.

6. Método MapReduce

Para resolver o problema de documentos grandes, vamos analisar o método MapReduce. Esse método primeiro divide os dados grandes em partes menores e, em seguida, executa um comando em cada parte. Para tarefas de resumo, a saída do primeiro comando é um resumo dessa parte. Depois que todas as saídas iniciais forem geradas, um comando diferente será executado para combiná-las.

Consulte este link do GitHub para detalhes de implementação desse método.

7. Parabéns

Parabéns! Você resumiu um documento longo. Você aprendeu dois métodos para resumir documentos longos, além das vantagens e desvantagens deles. Há alguns métodos para resumir documentos grandes. Confira outros dois métodos: MapReduce com blocos sobrepostos e MapReduce com resumo contínuo em outro codelab.

Resumir um documento longo pode ser desafiador. É necessário identificar os pontos principais do documento, sintetizar as informações e apresentá-las de maneira concisa e coerente. Isso pode ser difícil se o documento for complexo ou técnico. Além disso, resumir um documento longo pode levar muito tempo, já que é necessário ler e analisar o texto com cuidado para garantir que o resumo seja preciso e completo.

Embora esses métodos permitam interagir com LLMs e resumir documentos longos de maneira flexível, às vezes é possível acelerar o processo usando métodos de inicialização ou pré-criados. É aí que bibliotecas como o LangChain entram em uso. Saiba mais sobre o suporte do LangChain na Vertex AI.