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

Các mô hình ngôn ngữ mạnh mẽ + Scikit-learn = Scikit-LLM. Thư viện này sẽ giúp bạn triển khai các nhiệm vụ phân tích văn bản nhanh chóng.

Scikit-LLM

Scikit-LLM là một gói Python, giúp tích hợp các mô hình lớn (Large Language Models - LLM) vào framework 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 dùng scikit-learn, làm việc với Scikit-LLM sẽ dễ dàng hơn.

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

Hướng dẫn sử dụng Scikit-LLM

Để bắt đầu sử dụng Scikit-LLM, bạn cần cài đặt thư viện và cấu hình khóa API. Để cài đặt thư viện này, mở IDE và tạo môi trường ảo mới. Điều này giúp ngăn các 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 Scikit-LLM và các phần phụ thuộc cần thiết.

Để cấu hình key API, bạn cần lấy một từ key từ nhà cung cấp LLM. Để lấy key OpenAI API, hãy làm theo những bước này:

Tiếp tục tới trang OpenAI API. Sau đó, click vào profile nằm ở góc phải phía trên của cửa sổ. Chọn View API keys. Điều này sẽ đưa bạn tới trang API keys.

API key

Trên trang API keys, click nút Create new secret key.

Tạo khóa bí mật mới

Đặt tên khóa API và click nút Create secret key để tạo khóa. Sau khi tạo, bạn cần sao chép khóa và lưu trữ nó tại một nơi an toàn vì OpenAI sẽ không hiện lại key. Nếu làm mất nó, bạn cần tạo key mới.

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

from skllm.config import SKLLMConfig

Class này yêu cầu bạn đặt key OpenAI API và chi tiết tổ chức.

# Đặt key OpenAI API 
SKLLMConfig.set_openai_key("Your API key")
# Thiết lập tổ chức OpenAI 
SKLLMConfig.set_openai_org("Your organization ID")

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

Cố gắng sử dụng tài khoản dùng thử miễn phí sẽ sinh lỗi tương tự như hình bên dưới trong khi tiến hành phân tích dữ liệu.

Kết quả phân tích văn bản

Nhập các thư viện cần thiết và tải dataset

Nhập pandas bạn sẽ dùng để tải dataset. Ngoài ra, từ Scikit-LLM và scikit-learn, nhập các class đượ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 dataset bạn muốn để tiến hành phân tích. Code này dùng tập dữ liệu phim trên IMDB. Tuy nhiên, bạn có thể tinh chỉnh nó để dùng tập dữ liệu riêng.

# Tải dataset
data = pd.read_csv("imdb_movies_dataset.csv")
# Truy xuất 100 hàng đầu tiên
data = data.head(100)

Không bắt buộc chỉ dùng 100 hàng đầu tiên trong dataset. Bạn có thể dùng toàn bộ dataset.

Tiếp theo, truy xuất các tính năng và ghi nhãn các cột. Sau đó, tách dataset thành hai phần train và test.

# Truy xuất các cột liên quan
X = data['Description']
# Assuming 'Genre' contains the labels for classification

y = data['Genre'] 
# Tách dataset thành train và test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

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

Phân loại text zero-shot bằng Scikit-LLM

Phân loại text zero-shot là 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 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 nhiệm vụ mà bạn cần phân loại văn bản thành các mục đã không lường trước được trong quá trình đào tạo mô hình.

Để tiến hành phân loại text zero-shot bằng Scikit-LLM, hãy dùng class ZeroShotGPTClassifier.

# Tiến hành phân loại văn bản Zero-Shot 
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)

# In báo cáo phân loại text Zero-Shot 
print("Zero-Shot Text Classification Report:")
print(classification_report(y_test, zero_shot_predictions))

Kết quả như sau:

Kết quả báo cáo phân loại

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

Phân loại text zero-shot đa nhãn bằng Scikit-LLM

Trong một số trường hợp, một văn bản có thể thuộc về nhiều danh mục cùng lúc. Các mô hình phân loại truyền thống gặp khó khăn khi xử lý những trường hợp này. Mặt khác, Scikit-LLM giúp bạn có thể tiến hành phân loại chúng. Phân loại text zero-shot đa nhãn cực kỳ quan trọng trong việc gán nhiều nhãn mô tả cho một mẫu văn bản.

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

# Triển khai phân loại văn bản Zero-Shot đa nhãn
# Đảm bảo cung cấp danh sách các nhãn candidate 
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)

# Chuyển đổi nhãn sang định dạng mảng nhị phân bằng MultiLabelBinarizer
mlb = MultiLabelBinarizer()
y_test_binary = mlb.fit_transform(y_test)
multi_label_zero_shot_predictions_binary = mlb.transform(multi_label_zero_shot_predictions)

# In báo cáo phân loại văn bản Zero-Shot đa nhãn
print("Multi-Label Zero-Shot Text Classification Report:")
print(classification_report(y_test_binary, multi_label_zero_shot_predictions_binary))

Ở khối code trên, bạn xác định các nhãn candidate mà text thuộc về.

Kết quả như sau:

Kết quả

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

Text Vectorization với Scikit-LLM

Trong text vectorization, 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. Scikit-LLM cung cấp GPTVectorizer để thực thi nhiệm vụ này. Nó cho phép bạn chuyển đổi văn bản thành các vector cố định chiều bằng những mô hình GPT.

Bạn có thể đạt được điều này bằng cách dùng Term Frequency-Inverse Document Frequency.

# Thực hiện Vector hóa văn bản bằng TF-IDF
tfidf_vectorizer = TfidfVectorizer(max_features=1000)
X_train_tfidf = tfidf_vectorizer.fit_transform(X_train)
X_test_tfidf = tfidf_vectorizer.transform(X_test)

# In các đặc điểm vectơ TF-IDF cho một vài mẫu đầu tiên
print("TF-IDF Vectorized Features (First 5 samples):")
print(X_train_tfidf[:5]) # Change to X_test_tfidf if you want to print the test set

Kết quả:

Kết quả vector hóa văn bản

Kết quả này đại diện cho các tính năng vector hóa TF-IDF cho 5 mẫu đầu tiên trong dataset.

Tóm tắt văn bản bằng 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. Scikit-LLM cung cấp GPTSummarizer, mà dùng các mô hình GPT để tạo bản tóm tắt văn bản chính xác.

# Tiến hành tóm tắt văn bản
summarizer = GPTSummarizer(openai_model="gpt-3.5-turbo", max_words=15)
summaries = summarizer.fit_transform(X_test)
print(summaries)

Kết quả:

Tóm tắt văn bản

Trên đây là cách dùng Scikit-LLM phân tích văn bản với các mô hình ngôn ngữ lớn. Hi vọng bài viết hữu ích với bạn!

Thứ Bảy, 07/10/2023 11:33
51 👨 192
0 Bình luận
Sắp xếp theo