Cách sử dụng Scikit-LLM để phân tích văn bản với các mô hình ngôn ngữ lớn

Spread the love

Scikit-LLM là gói Python giúp tích hợp các mô hình ngôn ngữ lớn (LLM) vào khung scikit-learn. Nó giúp hoàn thành các nhiệm vụ phân tích văn bản. Nếu bạn đã quen với scikit-learn, bạn sẽ làm việc với Scikit-LLM dễ dàng hơn.

Điều quan trọng cần lưu ý là Scikit-LLM không thay thế scikit-learn. scikit-learn là một thư viện máy học có mục đích chung nhưng Scikit-LLM được thiết kế đặc biệt cho các tác vụ phân tích văn bản.

Bắt đầu với Scikit-LLM

Để bắt đầu với Scikit-LLM, bạn sẽ cần cài đặt thư viện và định cấu hình khóa API của mình. Để cài đặt thư viện, hãy mở IDE của bạn và tạo một môi trường ảo mới. Điều này sẽ giúp ngăn chặn mọi xung đột phiên bản thư viện tiềm ẩn. Sau đó, chạy lệnh sau trong terminal.

 pip install scikit-llm 

Lệnh này sẽ cài đặt Scikit-LLM và các phần phụ thuộc cần thiết của nó.

Để định cấu hình khóa API, bạn cần lấy một khóa từ nhà cung cấp LLM của mình. Để lấy khóa API OpenAI, hãy làm theo các bước sau:

Tiến tới Trang API OpenAI. Sau đó nhấp vào hồ sơ của bạn nằm ở góc trên bên phải của cửa sổ. Chọn Xem khóa API. Thao tác này sẽ đưa bạn đến trang khóa API.

Trên trang khóa API, nhấp vào nút Tạo khóa bí mật mới.

Đặt tên cho khóa API của bạn và nhấp vào nút Tạo khóa bí mật để tạo khóa. Sau khi tạo, bạn cần sao chép khóa và lưu trữ ở nơi an toàn vì OpenAI sẽ không hiển thị lại khóa. Nếu bạn làm mất nó, bạn sẽ cần phải tạo một cái mới.

  Cách chỉnh sửa hình ảnh trong Google Trang trình bày

Bây giờ bạn đã có khóa API, hãy mở IDE và nhập lớp SKLLMConfig từ thư viện Scikit-LLM. Lớp này cho phép bạn đặt các tùy chọn cấu hình liên quan đến việc sử dụng các mô hình ngôn ngữ lớn.

 from skllm.config import SKLLMConfig

Lớp này yêu cầu bạn đặt chi tiết về tổ chức và khóa API OpenAI của mình.

 
SKLLMConfig.set_openai_key("Your API key")
SKLLMConfig.set_openai_org("Your organization ID")

ID tổ chức và tên không giống nhau. ID tổ chức là mã định danh duy nhất của tổ chức của bạn. Để lấy ID tổ chức của bạn, hãy tiếp tục đến Tổ chức OpenAI trang cài đặt và sao chép nó. Bây giờ bạn đã thiết lập kết nối giữa Scikit-LLM và mô hình ngôn ngữ lớn.

Scikit-LLM yêu cầu bạn phải có gói trả tiền theo mức sử dụng. Điều này là do tài khoản OpenAI dùng thử miễn phí có giới hạn tốc độ ba yêu cầu mỗi phút, không đủ cho Scikit-LLM.

Việc cố gắng sử dụng tài khoản dùng thử miễn phí sẽ dẫn đến lỗi tương tự như lỗi bên dưới khi thực hiện phân tích văn bản.

Để tìm hiểu thêm về giới hạn tỷ lệ. Tiến tới Trang giới hạn tỷ lệ OpenAI.

Nhà cung cấp LLM không chỉ giới hạn ở OpenAI. Bạn cũng có thể sử dụng các nhà cung cấp LLM khác.

Nhập các thư viện cần thiết và tải tập dữ liệu

Nhập gấu trúc mà bạn sẽ sử dụng để tải tập dữ liệu. Ngoài ra, từ Scikit-LLM và scikit-learn, hãy nhập các lớp được yêu cầu.

 import pandas as pd
from skllm import ZeroShotGPTClassifier, MultiLabelZeroShotGPTClassifier
from skllm.preprocessing import GPTSummarizer
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.preprocessing import MultiLabelBinarizer

Tiếp theo, tải tập dữ liệu bạn muốn thực hiện phân tích văn bản. Mã này sử dụng tập dữ liệu phim IMDB. Tuy nhiên, bạn có thể điều chỉnh nó để sử dụng tập dữ liệu của riêng bạn.

 
data = pd.read_csv("imdb_movies_dataset.csv")
data = data.head(100)

Chỉ sử dụng 100 hàng đầu tiên của tập dữ liệu là không bắt buộc. Bạn có thể sử dụng toàn bộ tập dữ liệu của mình.

  Tăng thu nhập trên blog của bạn với các công cụ tiếp thị liên kết này

Tiếp theo, trích xuất các tính năng và cột nhãn. Sau đó chia tập dữ liệu của bạn thành tập huấn luyện và tập kiểm tra.

 
X = data['Description']

y = data['Genre']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

Cột Thể loại chứa các nhãn bạn muốn dự đoán.

Phân loại văn bản Zero-Shot với Scikit-LLM

Phân loại văn bản Zero-shot là một tính năng được cung cấp bởi các mô hình ngôn ngữ lớn. Nó phân loại văn bản thành các danh mục được xác định trước mà không cần đào tạo rõ ràng về dữ liệu được gắn nhãn. Khả năng này rất hữu ích khi xử lý các tác vụ mà bạn cần phân loại văn bản thành các danh mục mà bạn không lường trước được trong quá trình đào tạo mô hình.

Để thực hiện phân loại văn bản zero-shot bằng Scikit-LLM, hãy sử dụng lớp ZeroShotGPTClassifier.

 
zero_shot_clf = ZeroShotGPTClassifier(openai_model="gpt-3.5-turbo")
zero_shot_clf.fit(X_train, y_train)
zero_shot_predictions = zero_shot_clf.predict(X_test)


print("Zero-Shot Text Classification Report:")
print(classification_report(y_test, zero_shot_predictions))

Đầu ra như sau:

Báo cáo phân loại cung cấp số liệu cho từng nhãn mà mô hình đang cố gắng dự đoán.

Phân loại văn bản Zero-Shot đa nhãn với Scikit-LLM

Trong một số trường hợp, một văn bản có thể thuộc nhiều danh mục cùng một lúc. Các mô hình phân loại truyền thống gặp khó khăn với điều này. Mặt khác, Scikit-LLM giúp việc phân loại này trở nên khả thi. Phân loại văn bản zero-shot nhiều nhãn là rất quan trọng trong việc gán nhiều nhãn mô tả cho một mẫu văn bản.

Sử dụng MultiLabelZeroShotGPTClassifier để dự đoán nhãn nào phù hợp cho từng mẫu văn bản.

 
candidate_labels = ["Action", "Comedy", "Drama", "Horror", "Sci-Fi"]
multi_label_zero_shot_clf = MultiLabelZeroShotGPTClassifier(max_labels=2)
multi_label_zero_shot_clf.fit(X_train, candidate_labels)
multi_label_zero_shot_predictions = multi_label_zero_shot_clf.predict(X_test)


mlb = MultiLabelBinarizer()
y_test_binary = mlb.fit_transform(y_test)
multi_label_zero_shot_predictions_binary = mlb.transform(multi_label_zero_shot_predictions)


print("Multi-Label Zero-Shot Text Classification Report:")
print(classification_report(y_test_binary, multi_label_zero_shot_predictions_binary))

Trong đoạn mã trên, bạn xác định các nhãn ứng viên mà văn bản của bạn có thể thuộc về.

  15 Plugin trình chỉnh sửa khối WP tuyệt vời để tạo trang đẹp

Đầu ra như hình dưới đây:

Báo cáo này giúp bạn hiểu mô hình của bạn đang hoạt động tốt như thế nào đối với từng nhãn trong phân loại nhiều nhãn.

Vector hóa văn bản với Scikit-LLM

Trong vector hóa văn bản, dữ liệu văn bản được chuyển đổi thành định dạng số mà các mô hình học máy có thể hiểu được. Scikit-LLM cung cấp GPTVectorizer cho việc này. Nó cho phép bạn chuyển đổi văn bản thành các vectơ có chiều cố định bằng mô hình GPT.

Bạn có thể đạt được điều này bằng cách sử dụng Tần suất tài liệu nghịch đảo tần số.

 
tfidf_vectorizer = TfidfVectorizer(max_features=1000)
X_train_tfidf = tfidf_vectorizer.fit_transform(X_train)
X_test_tfidf = tfidf_vectorizer.transform(X_test)


print("TF-IDF Vectorized Features (First 5 samples):")
print(X_train_tfidf[:5])

Đây là đầu ra:

Đầu ra biểu thị các tính năng được vectơ hóa TF-IDF cho 5 mẫu đầu tiên trong tập dữ liệu.

Tóm tắt văn bản với Scikit-LLM

Tóm tắt văn bản giúp cô đọng một đoạn văn bản trong khi vẫn lưu giữ được những thông tin quan trọng nhất của nó. Scikit-LLM cung cấp GPTSummarizer, sử dụng mô hình GPT để tạo các bản tóm tắt văn bản ngắn gọn.

 
summarizer = GPTSummarizer(openai_model="gpt-3.5-turbo", max_words=15)
summaries = summarizer.fit_transform(X_test)
print(summaries)

Đầu ra như sau:

Trên đây là bản tóm tắt dữ liệu thử nghiệm.

Xây dựng ứng dụng trên LLM

Scikit-LLM mở ra một thế giới khả năng phân tích văn bản với các mô hình ngôn ngữ lớn. Hiểu công nghệ đằng sau các mô hình ngôn ngữ lớn là rất quan trọng. Nó sẽ giúp bạn hiểu điểm mạnh và điểm yếu của họ để có thể hỗ trợ bạn xây dựng các ứng dụng hiệu quả dựa trên công nghệ tiên tiến này.

x