Metode Perangkuman Teks menggunakan PaLM API Vertex AI

1. Pengantar

Ringkasan teks adalah proses pembuatan versi yang lebih pendek dari dokumen teks sambil tetap mempertahankan informasi penting. Proses ini dapat digunakan untuk membaca sekilas dokumen panjang dengan cepat, memahami inti dari sebuah artikel, atau membagikan ringkasan kepada pengguna. Meskipun meringkas paragraf pendek adalah tugas yang tidak sepele, ada beberapa tantangan yang harus diatasi jika Anda ingin meringkas dokumen besar. Misalnya, file PDF dengan beberapa halaman.

Dalam codelab ini, Anda akan mempelajari cara menggunakan model generatif untuk meringkas dokumen besar.

Yang akan Anda bangun

Dalam tutorial ini, Anda akan mempelajari cara menggunakan model generatif untuk meringkas informasi dari teks dengan mempelajari metode berikut:

  • Isian
  • MapReduce
  • MapReduce dengan Chunk yang Tumpang-Tindih
  • MapReduce dengan Ringkasan Bergulir

2. Persyaratan

  • Browser, seperti Chrome atau Firefox
  • Project Google Cloud yang mengaktifkan penagihan

3. Biaya

Tutorial ini menggunakan Vertex AI Generative AI Studio sebagai komponen Google Cloud yang dapat ditagih.

Pelajari harga Vertex AI, harga AI Generatif, dan gunakan Kalkulator Harga untuk membuat perkiraan biaya berdasarkan penggunaan yang Anda proyeksikan.

4. Memulai

  1. Instal Vertex AI SDK, paket lain, dan dependensinya menggunakan perintah berikut:
!pip install google-cloud-aiplatform PyPDF2 ratelimit backoff --upgrade --quiet --user
  • Untuk Colab, hapus komentar pada sel berikut untuk memulai ulang 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)
  • Untuk Vertex AI Workbench, Anda dapat memulai ulang terminal menggunakan tombol di bagian atas.
  1. Lakukan autentikasi lingkungan notebook Anda dengan salah satu cara berikut:
  • Untuk Colab, hapus komentar pada sel berikut.
from google.colab import auth
auth.authenticate_user()
  1. Impor library untuk melakukan inisialisasi Vertex AI SDK.
  • Untuk Colab, impor library dengan menghapus komentar pada sel berikut.
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. Impor model tempat Anda memuat model pembuatan teks terlatih yang disebut text-bison@001.
generation_model = TextGenerationModel.from_pretrained("text-bison@001")
  1. Siapkan file data tempat Anda mendownload file PDF untuk tugas meringkas.
# 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)

Berikut cara melihat beberapa halaman file PDF yang didownload.

# 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. Metode penyisipan

Cara paling sederhana untuk meneruskan data ke model bahasa adalah dengan "memasukkannya" ke dalam perintah sebagai konteks. Hal ini mencakup semua informasi yang relevan dalam perintah dan dalam urutan yang Anda inginkan agar model memprosesnya.

  1. Ekstrak teks dari halaman 2 saja dalam file 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. Buat template perintah yang dapat digunakan selanjutnya di 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. Gunakan LLM melalui API untuk meringkas teks yang diekstrak. Perhatikan bahwa LLM saat ini memiliki batas teks input dan memasukkan teks input yang besar mungkin tidak diterima. Untuk mempelajari kuota dan batas lebih lanjut, lihat Kuota dan batas.

Kode berikut menyebabkan pengecualian.

# 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 merespons dengan pesan error: 400 Permintaan berisi argumen yang tidak valid karena teks yang diekstrak terlalu panjang untuk diproses oleh model generatif.

Untuk menghindari masalah ini, Anda perlu memasukkan sebagian teks yang diekstrak, misalnya, 30.000 kata pertama.

# 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

Anda akan melihat hasil berikut dalam screenshot:

710efedd9f6dbc6d.png

Ringkasan

Meskipun teks lengkap terlalu besar untuk model, Anda telah berhasil membuat daftar ringkas berbutir-butir yang berisi informasi paling penting dari sebagian PDF menggunakan model.

Kelebihan

  • Metode ini hanya melakukan satu panggilan ke model.
  • Saat meringkas teks, model memiliki akses ke semua data sekaligus. Hal ini membuat hasilnya lebih baik.

Kekurangan

  • Sebagian besar model memiliki panjang konteks. Untuk dokumen besar (atau banyak dokumen), cara ini tidak berfungsi karena menghasilkan perintah yang lebih besar dari panjang konteks.
  • Metode ini hanya berfungsi pada potongan data yang lebih kecil dan tidak cocok untuk dokumen besar.

6. Metode MapReduce

Untuk mengatasi masalah penyelesaian ini untuk dokumen besar, kita akan melihat metode MapReduce. Metode ini pertama-tama membagi data besar menjadi bagian-bagian yang lebih kecil, lalu menjalankan perintah pada setiap bagian. Untuk tugas meringkas, output perintah pertama adalah ringkasan dari bagian tersebut. Setelah semua output awal dihasilkan, perintah lain dijalankan untuk menggabungkannya.

Buka link github ini untuk mengetahui detail penerapan metode ini.

7. Selamat

Selamat! Anda telah berhasil meringkas dokumen panjang. Anda telah mempelajari 2 metode untuk meringkas dokumen panjang, beserta kelebihan dan kekurangannya. Ada beberapa metode untuk meringkas dokumen besar. Cari 2 metode lainnya - MapReduce dengan potongan yang tumpang-tindih dan MapReduce dengan ringkasan bergulir di codelab lain.

Meringkas dokumen panjang bisa menjadi tantangan. Anda harus mengidentifikasi poin-poin utama dokumen, menyintesis informasi, dan menyajikannya secara ringkas dan koheren. Hal ini bisa menjadi sulit jika dokumennya kompleks atau teknis. Selain itu, meringkas dokumen panjang dapat memakan waktu karena Anda perlu membaca dan menganalisis teks dengan cermat untuk memastikan ringkasannya akurat dan lengkap.

Meskipun metode ini memungkinkan Anda berinteraksi dengan LLM dan meringkas dokumen panjang secara fleksibel, terkadang Anda mungkin ingin mempercepat prosesnya dengan menggunakan metode bootstrapping atau bawaan. Di sinilah kegunaan library seperti LangChain. Pelajari lebih lanjut dukungan LangChain di Vertex AI.