1. Giới thiệu
Tóm tắt văn bản là quá trình tạo một phiên bản ngắn hơn của tài liệu văn bản nhưng vẫn giữ lại thông tin quan trọng. Bạn có thể sử dụng quy trình này để nhanh chóng đọc lướt một tài liệu dài, nắm bắt ý chính của một bài viết hoặc chia sẻ bản tóm tắt với người dùng. Mặc dù việc tóm tắt một đoạn văn ngắn là một nhiệm vụ không hề đơn giản, nhưng bạn cần phải vượt qua một số thách thức nếu muốn tóm tắt một tài liệu lớn. Ví dụ: một tệp PDF có nhiều trang.
Trong lớp học lập trình này, bạn sẽ tìm hiểu cách sử dụng các mô hình tạo sinh để tóm tắt tài liệu lớn.
Sản phẩm bạn sẽ tạo ra
Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng các mô hình tạo sinh để tóm tắt thông tin từ văn bản bằng cách thực hiện theo các phương thức sau:
- Nhồi
- MapReduce
- MapReduce với các khối chồng chéo
- MapReduce với bản tóm tắt luân phiên
2. Yêu cầu
3. Chi phí
Hướng dẫn này sử dụng Vertex AI Generative AI Studio làm thành phần AI tạo sinh có tính phí của Google Cloud.
Tìm hiểu về giá của Vertex AI, giá của AI tạo sinh và sử dụng Trình tính giá để tạo bản ước tính chi phí dựa trên mức sử dụng dự kiến.
4. Bắt đầu
- Cài đặt Vertex AI SDK, các gói khác và phần phụ thuộc của chúng bằng lệnh sau:
!pip install google-cloud-aiplatform PyPDF2 ratelimit backoff --upgrade --quiet --user
- Đối với Colab, hãy bỏ ghi chú ô sau để khởi động lại 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)
- Đối với Vertex AI Workbench , bạn có thể khởi động lại thiết bị đầu cuối bằng nút ở trên cùng.
- Xác thực môi trường sổ tay của bạn theo một trong những cách sau:
- Đối với Colab, hãy bỏ ghi chú ô sau.
from google.colab import auth
auth.authenticate_user()
- Đối với Vertex AI Workbench, hãy xem hướng dẫn thiết lập.
- Nhập thư viện để khởi chạy Vertex AI SDK.
- Đối với Colab, hãy nhập thư viện bằng cách bỏ ghi chú ô sau.
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")
- Nhập các mô hình mà bạn tải mô hình tạo văn bản được huấn luyện trước có tên là text-bison@001.
generation_model = TextGenerationModel.from_pretrained("text-bison@001")
- Chuẩn bị tệp dữ liệu bằng cách tải một tệp PDF xuống cho các tác vụ tóm tắt.
# 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)
Sau đây là cách bạn có thể xem một vài trang của tệp PDF đã tải xuống.
# 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. Phương thức nhồi
Cách đơn giản nhất để truyền dữ liệu đến một mô hình ngôn ngữ là "nhồi" dữ liệu đó vào câu lệnh dưới dạng ngữ cảnh. Cách này bao gồm tất cả thông tin liên quan trong câu lệnh và theo thứ tự mà bạn muốn mô hình xử lý.
- Chỉ trích xuất văn bản từ trang 2 trong tệp 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")
- Tạo một mẫu câu lệnh có thể được sử dụng sau đó trong sổ tay.
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:
"""
- Sử dụng LLM thông qua API để tóm tắt văn bản đã trích xuất. Xin lưu ý rằng LLM (mô hình ngôn ngữ lớn) hiện có giới hạn về thông tin đầu vào và có thể không chấp nhận việc nhồi một thông tin đầu vào lớn. Để tìm hiểu thêm về hạn mức và giới hạn, hãy xem bài viết Hạn mức và giới hạn.
Mã sau đây gây ra một ngoại lệ.
# 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)
- Mô hình đã phản hồi bằng một thông báo lỗi: 400 Request contains an invalid argument (Yêu cầu chứa một đối số không hợp lệ) vì văn bản đã trích xuất quá dài để mô hình tạo sinh xử lý.
Để tránh vấn đề này, bạn cần nhập một khối văn bản đã trích xuất, chẳng hạn như 30.000 từ đầu tiên.
# 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
Bạn sẽ thấy kết quả sau trong ảnh chụp màn hình:

Tóm tắt
Mặc dù toàn bộ văn bản quá lớn đối với mô hình, nhưng bạn đã tạo được một danh sách có dấu đầu dòng, ngắn gọn về thông tin quan trọng nhất từ một phần của tệp PDF bằng mô hình.
Ưu điểm
- Phương thức này chỉ thực hiện một lệnh gọi đến mô hình.
- Khi tóm tắt văn bản, mô hình có quyền truy cập vào tất cả dữ liệu cùng một lúc. Điều này giúp kết quả tốt hơn.
Nhược điểm
- Hầu hết các mô hình đều có độ dài ngữ cảnh. Đối với các tài liệu lớn (hoặc nhiều tài liệu), cách này không hiệu quả vì sẽ tạo ra một câu lệnh lớn hơn độ dài ngữ cảnh.
- Phương thức này chỉ hoạt động trên các phần dữ liệu nhỏ hơn và không phù hợp với các tài liệu lớn.
6. Phương thức MapReduce
Để giải quyết vấn đề này đối với các tài liệu lớn, chúng ta sẽ xem xét phương thức MapReduce. Phương thức này trước tiên chia dữ liệu lớn thành các phần nhỏ hơn, sau đó chạy một câu lệnh trên mỗi phần. Đối với các tác vụ tóm tắt, kết quả của câu lệnh đầu tiên là bản tóm tắt của phần đó. Sau khi tất cả kết quả đầu ra ban đầu được tạo, một câu lệnh khác sẽ được chạy để kết hợp các kết quả đó.
Tham khảo đường liên kết github này để biết thông tin chi tiết về cách triển khai phương thức này.
7. Xin chúc mừng
Xin chúc mừng! Bạn đã tóm tắt thành công một tài liệu dài. Bạn đã tìm hiểu 2 phương thức tóm tắt tài liệu dài, cùng với ưu điểm và nhược điểm của chúng. Có một số phương thức để tóm tắt tài liệu lớn. Hãy tìm hiểu 2 phương thức khác – MapReduce với các khối chồng chéo và MapReduce với bản tóm tắt luân phiên trong một lớp học lập trình khác.
Việc tóm tắt một tài liệu dài có thể là một thách thức. Bạn cần xác định các điểm chính của tài liệu, tổng hợp thông tin và trình bày thông tin đó một cách ngắn gọn và mạch lạc. Việc này có thể trở nên khó khăn nếu tài liệu phức tạp hoặc mang tính kỹ thuật. Ngoài ra, việc tóm tắt một tài liệu dài có thể tốn thời gian vì bạn cần đọc và phân tích văn bản một cách cẩn thận để đảm bảo bản tóm tắt chính xác và đầy đủ.
Mặc dù các phương thức này cho phép bạn tương tác với LLM và tóm tắt tài liệu dài một cách linh hoạt, nhưng đôi khi bạn có thể muốn tăng tốc quá trình này bằng cách sử dụng phương thức khởi động hoặc các phương thức dựng sẵn. Đây là nơi các thư viện như LangChain được sử dụng. Tìm hiểu thêm về dịch vụ hỗ trợ LangChain trên Vertex AI.