Model bahasa yang kuat + Scikit-learn = Scikit-LLM. Lakukan tugas analisis teks saat bepergian dengan bantuan perpustakaan ini.
Scikit-LLM adalah paket Python yang membantu mengintegrasikan model bahasa besar (LLM) ke dalam kerangka scikit-learn. Ini membantu dalam menyelesaikan tugas analisis teks. Jika Anda sudah familiar dengan scikit-learn, akan lebih mudah bagi Anda untuk bekerja dengan Scikit-LLM.
Penting untuk dicatat bahwa Scikit-LLM tidak menggantikan scikit-learn. scikit-learn adalah perpustakaan pembelajaran mesin untuk tujuan umum tetapi Scikit-LLM dirancang khusus untuk tugas analisis teks.
Memulai Dengan Scikit-LLM
Untuk memulai Scikit-LLM, Anda harus menginstal perpustakaan dan mengonfigurasi kunci API Anda. Untuk menginstal perpustakaan, buka IDE Anda dan menciptakan lingkungan virtual baru. Ini akan membantu mencegah potensi konflik versi perpustakaan. Kemudian, jalankan perintah berikut di terminal.
pip install scikit-llm
Perintah ini akan menginstal Scikit-LLM dan dependensi yang diperlukan.
Untuk mengonfigurasi kunci API, Anda perlu mendapatkannya dari penyedia LLM Anda. Untuk mendapatkan kunci API OpenAI, ikuti langkah-langkah berikut:
Lanjutkan ke halaman API OpenAI. Kemudian klik profil Anda yang terletak di sudut kanan atas jendela. Pilih Lihat kunci API. Ini akan membawa Anda ke Kunci API halaman.
Di Kunci API halaman, klik pada Buat kunci rahasia baru tombol.
Beri nama kunci API Anda dan klik Buat kunci rahasia tombol untuk menghasilkan kunci. Setelah pembuatan, Anda perlu menyalin kunci dan menyimpannya di tempat yang aman karena OpenAI tidak akan menampilkan kunci tersebut lagi. Jika hilang, Anda perlu membuat yang baru.
Kode sumber lengkap tersedia di a Repositori GitHub.
Sekarang Anda memiliki kunci API, buka IDE Anda dan impor Konfigurasi SKLLM kelas dari perpustakaan Scikit-LLM. Kelas ini memungkinkan Anda mengatur opsi konfigurasi yang terkait dengan penggunaan model bahasa besar.
from skllm.config import SKLLMConfig
Kelas ini mengharapkan Anda menyetel kunci OpenAI API dan detail organisasi Anda.
# Set your OpenAI API key
SKLLMConfig.set_openai_key("Your API key")
# Set your OpenAI organization
SKLLMConfig.set_openai_org("Your organization ID")
ID organisasi dan namanya tidak sama. ID Organisasi adalah pengidentifikasi unik organisasi Anda. Untuk mendapatkan ID organisasi Anda, lanjutkan ke Organisasi OpenAI halaman pengaturan dan salin. Anda sekarang telah membuat koneksi antara Scikit-LLM dan model bahasa besar.
Scikit-LLM mengharuskan Anda memiliki paket bayar sesuai pemakaian. Ini karena akun uji coba gratis OpenAI memiliki batas kecepatan tiga permintaan per menit yang tidak cukup untuk Scikit-LLM.
Mencoba menggunakan akun uji coba gratis akan menghasilkan kesalahan seperti di bawah ini saat melakukan analisis teks.
Untuk mempelajari lebih lanjut tentang batas tarif. Lanjutkan ke Halaman batas kecepatan OpenAI.
Penyedia LLM tidak terbatas hanya pada OpenAI saja. Anda juga dapat menggunakan penyedia LLM lainnya.
Mengimpor Perpustakaan yang Diperlukan dan Memuat Kumpulan Data
Impor panda yang akan Anda gunakan untuk memuat kumpulan data. Juga, dari Scikit-LLM dan scikit-learn, impor kelas yang diperlukan.
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
Selanjutnya, muat kumpulan data tempat Anda ingin melakukan analisis teks. Kode ini menggunakan kumpulan data film IMDB. Namun Anda dapat mengubahnya untuk menggunakan kumpulan data Anda sendiri.
# Load your dataset
data = pd.read_csv("imdb_movies_dataset.csv")
# Extract the first 100 rows
data = data.head(100)
Hanya menggunakan 100 baris pertama dari kumpulan data tidaklah wajib. Anda dapat menggunakan seluruh kumpulan data Anda.
Selanjutnya, ekstrak kolom fitur dan label. Kemudian bagi kumpulan data Anda menjadi kumpulan pelatihan dan pengujian.
# 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)
Itu Genre kolom berisi label yang ingin Anda prediksi.
Klasifikasi Teks Zero-Shot Dengan Scikit-LLM
Klasifikasi teks zero-shot adalah fitur yang ditawarkan oleh model bahasa besar. Ini mengklasifikasikan teks ke dalam kategori yang telah ditentukan sebelumnya tanpa memerlukan pelatihan eksplisit pada data berlabel. Kemampuan ini sangat berguna saat menangani tugas yang mengharuskan Anda mengklasifikasikan teks ke dalam kategori yang tidak Anda antisipasi selama pelatihan model.
Untuk melakukan klasifikasi teks zero-shot menggunakan Scikit-LLM, gunakan Pengklasifikasi ZeroShotGPT kelas.
# 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))
Outputnya adalah sebagai berikut:
Laporan klasifikasi memberikan metrik untuk setiap label yang coba diprediksi oleh model.
Klasifikasi Teks Zero-Shot Multi-Label Dengan Scikit-LLM
Dalam beberapa skenario, satu teks mungkin termasuk dalam beberapa kategori secara bersamaan. Model klasifikasi tradisional kesulitan menghadapi hal ini. Scikit-LLM di sisi lain memungkinkan klasifikasi ini. Klasifikasi teks zero-shot multi-label sangat penting dalam menetapkan beberapa label deskriptif ke satu sampel teks.
Menggunakan Pengklasifikasi MultiLabelZeroShotGPT untuk memprediksi label mana yang sesuai untuk setiap sampel teks.
# 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))
Dalam kode di atas, Anda menentukan label kandidat yang mungkin dimiliki teks Anda.
Outputnya seperti gambar di bawah ini:
Laporan ini membantu Anda memahami seberapa baik performa model Anda untuk setiap label dalam klasifikasi multi-label.
Vektorisasi Teks Dengan Scikit-LLM
Dalam vektorisasi teks, data tekstual diubah menjadi format numerik yang dapat dipahami oleh model pembelajaran mesin. Scikit-LLM menawarkan GPTVectorizer untuk ini. Ini memungkinkan Anda mengubah teks menjadi vektor berdimensi tetap menggunakan model GPT.
Anda dapat mencapainya dengan menggunakan Term Frekuensi-Invers Dokumen Frekuensi.
# 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
Inilah hasilnya:
Outputnya mewakili fitur vektor TF-IDF untuk 5 sampel pertama dalam kumpulan data.
Peringkasan Teks Dengan Scikit-LLM
Peringkasan teks membantu memadatkan sepotong teks sekaligus menjaga informasi paling penting di dalamnya. Scikit-LLM menawarkan GPTSumarizer, yang menggunakan model GPT untuk menghasilkan ringkasan teks yang ringkas.
# Perform Text Summarization
summarizer = GPTSummarizer(openai_model="gpt-3.5-turbo", max_words=15)
summaries = summarizer.fit_transform(X_test)
print(summaries)
Outputnya adalah sebagai berikut:
Di atas adalah ringkasan data pengujian.
Bangun Aplikasi di Atas LLM
Scikit-LLM membuka banyak kemungkinan untuk analisis teks dengan model bahasa yang besar. Memahami teknologi di balik model bahasa besar sangatlah penting. Ini akan membantu Anda memahami kekuatan dan kelemahan mereka yang dapat membantu Anda dalam membangun aplikasi yang efisien berdasarkan teknologi mutakhir ini.