Phương pháp tóm tắt văn bản bằng Vertex AI PaLM API

1. Giới thiệu

Tóm tắt văn bản là quá trình tạo phiên bản ngắn hơn của một tài liệu văn bản trong khi vẫn giữ lại thông tin quan trọng. Người dùng có thể dùng quy trình này để nhanh chóng đọc lướt qua một tài liệu dài, nắm bắt nội dung chính của bài viết hoặc chia sẻ bản tóm tắt với người dùng. Mặc dù tóm tắt một đoạn văn ngắn là một nhiệm vụ không quan trọng, nhưng có một số thách thức cần vượt qua nếu bạn muốn tóm tắt một tài liệu lớn. Ví dụ: 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 các 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 thông qua các phương thức sau:

  • Nhồi
  • MapReduce
  • MapReduce có các đoạn trùng lặp
  • MapReduce (Giảm tốc độ) với Tóm tắt liên tục

2. Yêu cầu

  • Một trình duyệt, chẳng hạn như Chrome hoặc Firefox
  • Một dự án trên Google Cloud đã bật tính năng thanh toán

3. Chi phí

Hướng dẫn này sử dụng Vertex AI Generative AI Studio làm thành phần có thể tính phí của Google Cloud.

Tìm hiểu về mức giá của Vertex AI, mức giá của AI tạo sinh và sử dụng Công cụ tính giá để ước tính chi phí dựa trên mức sử dụng dự kiến của bạn.

4. Bắt đầu

  1. Dùng lệnh sau để cài đặt Vertex AI SDK cũng như các gói khác và phần phụ thuộc của chúng:
!pip install google-cloud-aiplatform PyPDF2 ratelimit backoff --upgrade --quiet --user
  • Đối với Colab, hãy bỏ nhận xét ô sau để khởi động lại nhân.
# # 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 cách sử dụng nút ở trên cùng.
  1. Xác thực môi trường sổ tay theo một trong những cách sau:
  • Đối với Colab, hãy bỏ nhận xét ô sau.
from google.colab import auth
auth.authenticate_user()
  1. Nhập thư viện để khởi chạy Vertex AI SDK.
  • Đối với Colab, hãy nhập các thư viện bằng cách huỷ nhận xét trong ô 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")
  1. Nhập các mô hình mà trong đó 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")
  1. Chuẩn bị tệp dữ liệu để tải tệp PDF xuống cho các nhiệm 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)

Dưới đây là cách bạn có thể xem một số 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 pháp nhồi

Cách đơn giản nhất để truyền dữ liệu sang một mô hình ngôn ngữ là "nhồi nhét" vào câu lệnh dưới dạng ngữ cảnh. Thông tin 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ý.

  1. Chỉ trích xuất văn bản ở 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")
  1. Tạo một mẫu câu lệnh để bạn có thể 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:
"""
  1. Sử dụng LLM (mô hình ngôn ngữ lớn) thông qua API để tóm tắt các văn bản đã trích xuất. Xin lưu ý rằng các LLM hiện có giới hạn về văn bản đầu vào và việc nhồi nhét một lượng lớn văn bản đầu vào có thể không được chấp nhận. Để tìm hiểu thêm về hạn mức và hạn mức, 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)
  1. Mô hình này đã phản hồi bằng một thông báo lỗi: Yêu cầu 400 chứa đối số không hợp lệ vì văn bản được trích xuất quá dài nên mô hình tạo sinh không xử lý được.

Để tránh vấn đề này, bạn cần nhập một đoạn văn bản được trích xuất, ví dụ: 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:

710efedd9f6dbc6d.png.

Tóm tắt

Mặc dù văn bản đầy đủ quá lớn đối với mô hình này, nhưng bạn đã có thể tạo được một danh sách ngắn gọn, có dấu đầu dòng, bao gồm các thông tin quan trọng nhất trong một phần của tệp PDF bằng cách sử dụng mô hình.

Ưu điểm

  • Phương thức này chỉ thực hiện một lệnh gọi duy nhất đến mô hình.
  • Khi tóm tắt văn bản, mô hình sẽ 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 cải thiện kết quả.

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ì dẫn đến câu lệnh lớn hơn độ dài của 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 tài liệu lớn.

6. Phương thức MapReduce

Để giải quyết vấn đề đối với các tài liệu lớn, chúng ta sẽ xem xét phương pháp MapReduce. Trước tiên, phương thức này chia dữ liệu lớn thành các phần nhỏ hơn, sau đó chạy lời nhắc trên từng phần. Đối với nhiệm vụ tóm tắt, kết quả của câu lệnh đầu tiên là bản tóm tắt phần đó. Sau khi tạo tất cả dữ liệu đầu ra ban đầu, một lời nhắc khác sẽ được chạy để kết hợp các dữ liệu đầu ra đó.

Tham khảo đường liên kết này trên github để biết thông tin chi tiết về cách triển khai của 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 pháp tóm tắt các tài liệu dài, cùng với ưu điểm và nhược điểm của các phương pháp đó. Có một số phương pháp để tóm tắt các tài liệu lớn. Hãy tìm 2 phương pháp khác: MapReduce có các phân đoạn chồng chéo và MapReduce (bản tóm tắt tổng hợp) 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ể không hề dễ dàng. Để làm được điều này, 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 rồi trình bày ngắn gọn và mạch lạc. Bạn có thể gặp khó khăn nếu giấy tờ 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 kỹ văn bản để đảm bảo bản tóm tắt chính xác và đầy đủ.

Mặc dù các phương pháp này cho phép bạn tương tác với các LLM và tóm tắt các tài liệu dài một cách linh hoạt, nhưng đôi khi bạn có thể muốn đẩy nhanh quá trình này bằng cách sử dụng các phương pháp tự khởi động hoặc tạo sẵn. Đây là nơi các thư viện như LangChain được sử dụng. Tìm hiểu thêm về tính năng hỗ trợ của LangChain trên Vertex AI.