1. Pengantar
Peringkasan teks adalah proses membuat versi dokumen teks yang lebih pendek sambil tetap mempertahankan informasi penting. Proses ini dapat digunakan untuk membaca cepat dokumen yang panjang, mendapatkan inti artikel, atau membagikan ringkasan kepada pengguna. Meskipun meringkas paragraf pendek adalah tugas yang sulit, ada beberapa tantangan yang harus diatasi jika Anda ingin meringkas sebuah dokumen besar. Misalnya, file PDF dengan beberapa halaman.
Dalam codelab ini, Anda akan mempelajari cara menggunakan model generatif untuk meringkas dokumen berukuran besar.
Yang akan Anda bangun
Dalam tutorial ini, Anda akan mempelajari cara menggunakan model generatif untuk merangkum informasi dari teks dengan mengikuti metode berikut:
- Isian
- MapReduce
- MapReduce dengan Bagian yang Tumpang Tindih
- MapReduce dengan Rolling Summary
2. Persyaratan
3. Biaya
Tutorial ini menggunakan Generative AI Studio Vertex AI sebagai komponen Google Cloud yang dapat ditagih.
Pelajari harga Vertex AI, harga AI Generatif, dan gunakan Kalkulator Harga untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda.
4. Memulai
- 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 tanda 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.
- Autentikasi lingkungan notebook Anda dengan salah satu cara berikut:
- Untuk Colab, hapus tanda komentar pada sel berikut.
from google.colab import auth
auth.authenticate_user()
- Untuk Vertex AI Workbench, lihat petunjuk penyiapan.
- Impor library untuk melakukan inisialisasi Vertex AI SDK.
- Untuk Colab, impor library dengan menghapus tanda 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")
- Impor model tempat Anda memuat model pembuatan teks terlatih yang disebut text-bison@001.
generation_model = TextGenerationModel.from_pretrained("text-bison@001")
- Siapkan file data tempat Anda mendownload file PDF untuk membuat ringkasan tugas.
# 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 ini cara melihat beberapa halaman dari 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 penjejalan
Cara paling sederhana untuk meneruskan data ke model bahasa adalah dengan "mengisi" ke prompt sebagai konteks. Hal ini mencakup semua informasi yang relevan dalam perintah dan dalam urutan yang Anda inginkan untuk diproses oleh model.
- Ekstrak teks hanya dari halaman 2 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")
- Buat template prompt 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:
"""
- Menggunakan LLM melalui API untuk meringkas teks yang diekstrak. Perlu diperhatikan bahwa saat ini LLM memiliki batas teks input, dan penjejalan teks input yang besar mungkin tidak akan 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)
- Model merespons dengan pesan error: 400 Request berisi argumen yang tidak valid karena teks yang diekstrak terlalu panjang untuk diproses oleh model generatif.
Untuk menghindari masalah ini, Anda perlu memasukkan sepotong 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 di screenshot:
Ringkasan
Meskipun teks lengkap terlalu besar untuk model, Anda telah berhasil membuat daftar berbutir yang ringkas untuk informasi yang paling penting dari sebagian PDF menggunakan model tersebut.
Kelebihan
- Metode ini hanya melakukan satu panggilan ke model.
- Saat meringkas teks, model memiliki akses ke semua data sekaligus. Dengan begitu, hasilnya akan lebih baik.
Kekurangan
- Sebagian besar model memiliki panjang konteks. Untuk dokumen besar (atau banyak dokumen), ini tidak akan berfungsi karena akan menghasilkan perintah yang lebih besar dari panjang konteks.
- Metode ini hanya berfungsi pada data yang lebih kecil dan tidak cocok untuk dokumen besar.
6. Metode MapReduce
Untuk mengatasi masalah pemecahan 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 di setiap bagian. Untuk tugas ringkasan, output dari perintah pertama adalah ringkasan dari bagian tersebut. Setelah semua output awal dibuat, perintah yang berbeda akan dijalankan untuk menggabungkannya.
Lihat link github ini untuk mengetahui detail penerapan metode ini.
7. Selamat
Selamat! Anda telah berhasil meringkas sebuah dokumen panjang. Anda telah mempelajari 2 metode untuk meringkas dokumen yang panjang, beserta kelebihan dan kekurangannya. Ada beberapa metode untuk meringkas dokumen besar. Perhatikan 2 metode lain, yaitu MapReduce dengan potongan yang tumpang tindih, dan MapReduce dengan ringkasan bergilir di codelab lain.
Meringkas dokumen yang panjang bisa jadi sulit. Diagram ini mengharuskan Anda untuk mengidentifikasi poin-poin utama dari dokumen, menyintesis informasi, dan menyajikannya secara ringkas dan koheren. Proses ini bisa menjadi sulit jika dokumennya rumit atau teknis. Selain itu, meringkas dokumen yang panjang dapat memakan waktu karena Anda perlu membaca dan menganalisis teks dengan cermat untuk memastikan bahwa ringkasannya akurat dan lengkap.
Meskipun metode ini memungkinkan Anda berinteraksi dengan LLM dan meringkas dokumen yang panjang secara fleksibel, terkadang Anda mungkin ingin mempercepat prosesnya dengan menggunakan metode bootstrap atau yang telah dibangun sebelumnya. Di sinilah library seperti LangChain mulai digunakan. Pelajari lebih lanjut dukungan LangChain di Vertex AI.