Krachtige taalmodellen + Scikit-learn = Scikit-LLM. Voer onderweg tekstanalysetaken uit met behulp van deze bibliotheek.
Scikit-LLM is een Python-pakket dat helpt bij het integreren van grote taalmodellen (LLM's) in het scikit-learn-framework. Het helpt bij het uitvoeren van tekstanalysetaken. Als u bekend bent met scikit-learn, kunt u gemakkelijker met Scikit-LLM werken.
Het is belangrijk op te merken dat Scikit-LLM scikit-learn niet vervangt. scikit-learn is een machine learning-bibliotheek voor algemene doeleinden, maar Scikit-LLM is specifiek ontworpen voor tekstanalysetaken.
Aan de slag met Scikit-LLM
Om mee te beginnen Scikit-LLM, moet u de bibliotheek installeren en uw API-sleutel configureren. Om de bibliotheek te installeren, opent u uw IDE en Creëer een nieuwe virtuele omgeving. Dit helpt eventuele conflicten met bibliotheekversies te voorkomen. Voer vervolgens de volgende opdracht uit in de terminal.
pip install scikit-llm
Met deze opdracht wordt Scikit-LLM en de vereiste afhankelijkheden geïnstalleerd.
Om uw API-sleutel te configureren, moet u er een aanschaffen bij uw LLM-provider. Volg deze stappen om de OpenAI API-sleutel te verkrijgen:
Ga verder naar de OpenAI API-pagina. Klik vervolgens op uw profiel in de rechterbovenhoek van het venster. Selecteer Bekijk API-sleutels. Hiermee gaat u naar de API-sleutels bladzijde.
Op de API-sleutels pagina, klik op de Maak een nieuwe geheime sleutel knop.
Geef uw API-sleutel een naam en klik op de Maak een geheime sleutel knop om de sleutel te genereren. Na het genereren moet u de sleutel kopiëren en op een veilige plaats bewaren, aangezien OpenAI de sleutel niet opnieuw zal weergeven. Als u deze kwijtraakt, moet u een nieuwe genereren.
De volledige broncode is beschikbaar in een GitHub-opslagplaats.
Nu u uw API-sleutel heeft, opent u uw IDE en importeert u deze SKLLMConfig klasse uit de Scikit-LLM-bibliotheek. Met deze klasse kunt u configuratieopties instellen die verband houden met het gebruik van grote taalmodellen.
from skllm.config import SKLLMConfig
Deze klasse verwacht dat u uw OpenAI API-sleutel en organisatiegegevens instelt.
# Set your OpenAI API key
SKLLMConfig.set_openai_key("Your API key")
# Set your OpenAI organization
SKLLMConfig.set_openai_org("Your organization ID")
Het organisatie-ID en de naam zijn niet hetzelfde. Organisatie-ID is een unieke identificatie van uw organisatie. Om uw organisatie-ID te verkrijgen, gaat u naar de OpenAI-organisatie instellingenpagina en kopieer deze. U hebt nu een verbinding tot stand gebracht tussen Scikit-LLM en het grote taalmodel.
Scikit-LLM vereist dat u een pay-as-you-go-plan heeft. Dit komt omdat het gratis proefaccount van OpenAI een snelheidslimiet heeft van drie verzoeken per minuut, wat niet voldoende is voor Scikit-LLM.
Als u probeert het gratis proefaccount te gebruiken, zal dit leiden tot een fout die vergelijkbaar is met de onderstaande fout tijdens het uitvoeren van tekstanalyse.
Voor meer informatie over tarieflimieten. Ga verder naar de Pagina OpenAI-tarieflimieten.
De LLM-provider is niet beperkt tot alleen OpenAI. U kunt ook andere LLM-aanbieders gebruiken.
Importeren van de vereiste bibliotheken en laden van de dataset
Importeer panda's die u gaat gebruiken om de dataset te laden. Importeer ook vanuit Scikit-LLM en scikit-learn de vereiste klassen.
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
Laad vervolgens de gegevensset waarop u tekstanalyse wilt uitvoeren. Deze code maakt gebruik van de IMDB-filmgegevensset. U kunt het echter aanpassen om uw eigen dataset te gebruiken.
# Load your dataset
data = pd.read_csv("imdb_movies_dataset.csv")
# Extract the first 100 rows
data = data.head(100)
Het is niet verplicht om alleen de eerste 100 rijen van de dataset te gebruiken. U kunt uw volledige dataset gebruiken.
Extraheer vervolgens de functies en labelkolommen. Splits vervolgens uw dataset in trein- en testsets.
# 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)
De Genre kolom bevat de labels die u wilt voorspellen.
Zero-Shot-tekstclassificatie met Scikit-LLM
Zero-shot-tekstclassificatie is een functie die wordt aangeboden door grote taalmodellen. Het classificeert tekst in vooraf gedefinieerde categorieën zonder dat expliciete training over gelabelde gegevens nodig is. Deze mogelijkheid is erg handig bij taken waarbij u tekst moet classificeren in categorieën die u tijdens de modeltraining niet had verwacht.
Om zero-shot-tekstclassificatie uit te voeren met behulp van Scikit-LLM, gebruikt u de ZeroShotGPTClassifier klas.
# 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))
De uitvoer is als volgt:
Het classificatierapport biedt metrische gegevens voor elk label dat het model probeert te voorspellen.
Zero-Shot-tekstclassificatie met meerdere labels met Scikit-LLM
In sommige scenario's kan een enkele tekst tegelijkertijd tot meerdere categorieën behoren. Traditionele classificatiemodellen hebben hier moeite mee. Scikit-LLM maakt deze classificatie daarentegen mogelijk. Zero-shot-tekstclassificatie met meerdere labels is van cruciaal belang bij het toewijzen van meerdere beschrijvende labels aan een enkel tekstvoorbeeld.
Gebruik MultiLabelZeroShotGPTClassifier om te voorspellen welke labels geschikt zijn voor elk tekstvoorbeeld.
# 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))
In de bovenstaande code definieert u de kandidaatlabels waartoe uw tekst zou kunnen behoren.
De uitvoer is zoals hieronder weergegeven:
Met dit rapport krijgt u inzicht in hoe goed uw model presteert voor elk label in classificatie met meerdere labels.
Tekstvectorisatie met Scikit-LLM
Bij tekstvectorisering worden tekstgegevens omgezet in een numeriek formaat dat machine learning-modellen kunnen begrijpen. Scikit-LLM biedt hiervoor de GPTVectorizer aan. Hiermee kunt u tekst omzetten in vectoren met vaste afmetingen met behulp van GPT-modellen.
U kunt dit bereiken met behulp van de term Frequentie-Inverse Documentfrequentie.
# 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
Hier is de uitvoer:
De uitvoer vertegenwoordigt de TF-IDF-gevectoriseerde kenmerken voor de eerste vijf monsters in de gegevensset.
Tekstsamenvatting met Scikit-LLM
Tekstsamenvatting helpt bij het condenseren van een stuk tekst terwijl de meest kritische informatie behouden blijft. Scikit-LLM biedt de GPTSummarizer, die gebruik maakt van de GPT-modellen om beknopte samenvattingen van tekst te genereren.
# Perform Text Summarization
summarizer = GPTSummarizer(openai_model="gpt-3.5-turbo", max_words=15)
summaries = summarizer.fit_transform(X_test)
print(summaries)
De uitvoer is als volgt:
Bovenstaande is een samenvatting van de testgegevens.
Bouw applicaties bovenop LLM's
Scikit-LLM opent een wereld van mogelijkheden voor tekstanalyse met grote taalmodellen. Het begrijpen van de technologie achter grote taalmodellen is cruciaal. Het zal u helpen hun sterke en zwakke punten te begrijpen, wat u kan helpen bij het bouwen van efficiënte applicaties bovenop deze geavanceerde technologie.