Contents

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

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 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.

Cần phải thừa nhận rằng Scikit-LLM và scikit-learn phục vụ các mục đích riêng biệt, trong đó Scikit-LLM được thiết kế riêng cho các nhiệm vụ phân tích văn bản trong khi Scikit-LLM đóng vai trò là thư viện máy học có mục đích chung toàn diện hơ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
 

Việc thực hiện hướng dẫn này sẽ tạo điều kiện thuận lợi cho việc cài đặt Scikit-LLM, cùng với tất cả các điều kiện tiên quyết cần thiết.

Để thiết lập khóa API cho nhà cung cấp dịch vụ Mô hình ngôn ngữ lớn (LLM) của bạn, bạn cần phải mua một khóa từ họ. Đối với những người đang tìm kiếm khóa API OpenAI, vui lòng tuân thủ quy trình sau:

Tiếp tục 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.

/vi/images/introduction-to-langchain-api-key-page.jpeg

Để truy cập trang khóa API và tạo khóa bí mật mới, vui lòng thực hiện theo các bước sau một cách tinh vi:1. Điều hướng đến trang web được chỉ định nơi các khóa API được quản lý trong bảng thông tin hoặc bảng điều khiển của ứng dụng của bạn. Điều này có thể được truy cập thông qua menu chính trong “Cài đặt” hoặc “Tích hợp”. “2. Khi bạn đã truy cập vào trang thích hợp, hãy tìm phần dành riêng cho việc quản lý khóa API của bạn. Nó có thể nằm gần đầu trang hoặc được hiển thị dưới dạng tùy chọn trong menu thả xuống.3. Trong phần này, hãy tìm nút nổi bật có nhãn “Tạo khóa bí mật mới”, nút này sẽ bắt đầu quá trình tạo khóa API mới. Ngoài ra, nếu không có nút nào như vậy, hãy tìm kiếm bất kỳ lời nhắc hoặc hướng dẫn nào khác có thể hướng dẫn bạn

/vi/images/how-to-use-scikit-llm-for-text-analysis-with-large-language-models-api-keys.jpg

Vui lòng tạo khóa API bằng cách nhấp vào nút “Tạo khóa bí mật” để tạo thông tin xác thực cần thiết. Điều quan trọng là bạn phải lưu thông tin này một cách an toàn vì Open AI không cung cấp tùy chọn truy xuất thông tin đó sau này. Trong trường hợp bạn làm thất lạc chìa khóa, bạn phải tạo một cái mới thay thế.

Mã nguồn hoàn chỉnh có thể được truy cập thông qua kho lưu trữ aGitHub, nơi cung cấp khả năng truy cập và chia sẻ dễ dàng để các nhà phát triển cộng tác trong các dự án và đóng góp cho các nỗ lực phát triển phần mềm nguồn mở.

Khi bạn đã lấy được khóa API, hãy điều hướng đến Môi trường phát triển tích hợp (IDE) ưa thích của bạn và kết hợp mô-đun SKLLMConfig trong thư viện Scikit-LLM. Sự tích hợp này cho phép thao tác các tham số có thể định cấu hình liên quan đến việc sử dụng các mô hình ngôn ngữ mở rộng.

 from skllm.config import SKLLMConfig

Vui lòng đảm bảo rằng bạn đã cung cấp khóa API Open AI và thông tin tổ chức có liên quan cho khóa học này vì đây là điều kiện tiên quyết để hoàn thành thành công.

 # Set your OpenAI API key
SKLLMConfig.set_openai_key("Your API key")
# Set your OpenAI organization
 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 truy cập trang cài đặt Tổ chức OpenAI 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 đăng ký dịch vụ trả tiền khi bạn sử dụng, vì hạn ngạch giới hạn do tài khoản OpenAI miễn phí áp đặt, với hạn chế về ba yêu cầu mỗi phút, không đủ để có hiệu suất tối ưu với Scikit-LLM.

Việc sử dụng tài khoản dùng thử miễn phí có thể dẫn đến gặp phải lỗi tương tự như thông báo sau khi cố gắng thực hiện phân tích văn bản.

/vi/images/how-to-use-scikit-llm-for-text-analysis-with-large-language-models-error.jpg

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

Việc sử dụng nền tảng LLM vượt ra ngoài sự phụ thuộc duy nhất vào AI mở; tồn tại các nhà cung cấp dịch vụ LLM thay thế có thể được xem xét cho nhu cầu của bạn.

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

Sử dụng thư viện pandas để truy cập và xử lý tập dữ liệu. Ngoài ra, hãy nhập các lớp cần thiết từ cả thư viện Scikit-LLMscikit-learn.

 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
 

Để bắt đầu, hãy nhập và tải tập dữ liệu mà bạn định phân tích nội dung văn bản. Trong ví dụ này, chúng tôi sẽ sử dụng cơ sở dữ liệu phim IMDB làm tài liệu tham khảo; tuy nhiên, bạn có thể điều chỉnh nó để kết hợp tập dữ liệu ưa thích của mình.

 # Load your dataset
data = pd.read_csv("imdb_movies_dataset.csv")
# Extract the first 100 rows
data = data.head(100) 

Bạn có tùy chọn sử dụng tất cả dữ liệu trong tập dữ liệu của mình thay vì chỉ bị giới hạn ở 100 hàng đầu tiên.

Tiếp theo, chúng tôi sẽ tiến hành trích xuất các cột tính năng và nhãn từ tập dữ liệu của mình, sau đó chia nó thành tập huấn luyện và tập kiểm tra để phân tích thêm.

 # Extract relevant columns
X = data['Description']
# Assuming 'Genre' contains the labels for classification

y = data['Genre']
 # Split the dataset into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

Danh mục phân loại bao gồm các chỉ định nhằm mục đích dự đoán, được biểu thị bằng thuật ngữ “Thể loại” trong ngữ cảnh này.

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

Các mô hình ngôn ngữ lớn có khả năng phân loại văn bản không cần ghi nhãn, đòi hỏi phải phân loại dữ liệu chưa được gắn nhãn thành các lớp được xác định trước mà không cần đào tạo trước về thông tin được gắn nhãn. Cách tiếp cận này tỏ ra đặc biệt thuận lợi trong các tình huống liên quan đến việc phân loại văn bản thành các danh mục không xác định ngoài những mục được dự tính trong giai đoạn phát triển của mô hình.

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

 # Perform Zero-Shot Text Classification
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("Zero-Shot Text Classification Report:")
print(classification_report(y_test, zero_shot_predictions)) 

Đầu ra như sau:

/vi/images/how-to-use-scikit-llm-for-text-analysis-with-large-language-models-zero-shot-classification.jpg

Báo cáo phân loại cung cấp các phép đo định lượng liên quan đến từng nhãn mà mô hình nỗ lực phân loại.

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 nhất định, không có gì lạ khi một đoạn văn bản cụ thể thuộc nhiều danh mục cùng một lúc. Các phương pháp phân loại thông thường không được trang bị đầy đủ để xử lý những trường hợp như vậy một cách hiệu quả. Tuy nhiên, thông qua các khả năng nâng cao của mình, Scikit-LLM đã chứng tỏ khả năng thành thạo vượt trội trong việc giải quyết những vấn đề phức tạp này bằng cách cho phép phân loại văn bản không chụp nhiều nhãn. Cách tiếp cận này liên quan đến việc gắn nhiều nhãn mô tả vào một mẫu văn bản đơn độc, điều này có ý nghĩa quan trọng trong việc nắm bắt và phân loại chính xác thông tin trong các lĩnh vực khác nhau.

Sử dụng MultiLabelZeroShotGPTClassifier để xác định nhãn hoặc các nhãn nào có thể áp dụng cho từng đoạn trích văn bản nhất định.

 # Perform Multi-Label Zero-Shot Text Classification
# Make sure to provide a list of candidate labels
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)

# Convert the labels to binary array format using MultiLabelBinarizer
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("Multi-Label Zero-Shot Text Classification Report:")
print(classification_report(y_test_binary, multi_label_zero_shot_predictions_binary)) 

Ở trên, chúng tôi thiết lập các chỉ định tiềm năng mà văn bản của chúng tôi có thể được coi là đối thủ.

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

/vi/images/how-to-use-scikit-llm-for-text-analysis-with-large-language-models-multi-label-classification.jpg

Tài liệu hiện tại giúp làm sáng tỏ hiệu suất của mô hình của bạn trên nhiều nhãn khác nhau trong kịch bản phân loại nhiều nhãn, cung cấp những hiểu biết sâu sắc có giá trị về tính hiệu quả của mô hình đối với từng chỉ định riêng lẻ.

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

Scikit-LLM cung cấp GPTVectorizer, cho phép chuyển đổi dữ liệu văn bản thành dạng số có thể hiểu được bằng thuật toán học máy thông qua vector hóa văn bản. Quá trình chuyển đổi này bao gồm việc chuyển đổi văn bản thành các vectơ có chiều cố định bằng cách sử dụng mô hình GPT.

Một cách tiếp cận để thực hiện điều này là sử dụng phương pháp Tần số tài liệu nghịch đảo tần số thuật ngữ.

 # Perform Text Vectorization using 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)

# Print the TF-IDF vectorized features for the first few samples
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

Đây là đầu ra:

/vi/images/how-to-use-scikit-llm-for-text-analysis-with-large-language-models-vector-output.jpg

Thông tin nói trên liên quan đến cách biểu diễn thông minh về tính năng đã được chuyển đổi của năm trường hợp ban đầu trong tập dữ liệu, được biểu thị là kết quả vectơ hóa TF-IDF.

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

Tóm tắt văn bản là một quá trình bao gồm việc nén một tác phẩm bằng văn bản trong khi vẫn giữ lại nội dung thiết yếu của nó. GPTSummarizer, có sẵn thông qua thư viện Scikit-LLM, sử dụng các mô hình ngôn ngữ nâng cao dựa trên kiến ​​trúc GPT để tạo ra các bản tóm tắt ngắn gọn cho văn bản.

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

Đầu ra như sau:

/vi/images/how-to-use-scikit-llm-for-text-analysis-with-large-language-models-summarization.jpg

Những điều đã nói ở trên phục vụ như một cái nhìn tổng quan về những phát hiện thực nghiệm.

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

Scikit-LLM mang đến nhiều cơ hội mở rộng để kiểm tra toàn diện văn bản bằng các mô hình ngôn ngữ nâng cao. Việc nắm bắt các nguyên tắc cơ bản về nền tảng công nghệ của các mô hình này là điều cần thiết vì nó tạo điều kiện cho sự hiểu biết thấu đáo về các khả năng và hạn chế tiềm ẩn của chúng, là công cụ giúp xây dựng các giải pháp phần mềm hiệu suất cao dựa trên sự đổi mới tiên tiến này.