Modèles de langage puissants + Scikit-learn = Scikit-LLM. Effectuez des tâches d'analyse de texte en déplacement avec l'aide de cette bibliothèque.
Scikit-LLM est un package Python qui permet d'intégrer des modèles de langage étendus (LLM) dans le framework scikit-learn. Il aide à accomplir les tâches d’analyse de texte. Si vous connaissez scikit-learn, il vous sera plus facile de travailler avec Scikit-LLM.
Il est important de noter que Scikit-LLM ne remplace pas scikit-learn. scikit-learn est une bibliothèque d'apprentissage automatique à usage général, mais Scikit-LLM est spécifiquement conçu pour les tâches d'analyse de texte.
Premiers pas avec Scikit-LLM
Pour commencer Scikit-LLM, vous devrez installer la bibliothèque et configurer votre clé API. Pour installer la bibliothèque, ouvrez votre IDE et créer un nouvel environnement virtuel. Cela aidera à éviter tout conflit potentiel de version de bibliothèque. Ensuite, exécutez la commande suivante dans le terminal.
pip install scikit-llm
Cette commande installera Scikit-LLM et ses dépendances requises.
Pour configurer votre clé API, vous devez en acquérir une auprès de votre fournisseur LLM. Pour obtenir la clé API OpenAI, suivez ces étapes :
Passez à la Page API OpenAI. Cliquez ensuite sur votre profil situé dans le coin supérieur droit de la fenêtre. Sélectionner Afficher les clés API. Cela vous mènera au Clés API page.
Sur le Clés API page, cliquez sur Créer une nouvelle clé secrète bouton.
Nommez votre clé API et cliquez sur le Créer une clé secrète bouton pour générer la clé. Après la génération, vous devez copier la clé et la stocker dans un endroit sûr car OpenAI n'affichera plus la clé. Si vous le perdez, vous devrez en générer un nouveau.
Le code source complet est disponible dans un Dépôt GitHub.
Maintenant que vous avez votre clé API, ouvrez votre IDE et importez SKLLMConfig classe de la bibliothèque Scikit-LLM. Cette classe vous permet de définir des options de configuration liées à l'utilisation de grands modèles de langage.
from skllm.config import SKLLMConfig
Cette classe attend de vous que vous définissiez votre clé API OpenAI et les détails de votre organisation.
# Set your OpenAI API key
SKLLMConfig.set_openai_key("Your API key")
# Set your OpenAI organization
SKLLMConfig.set_openai_org("Your organization ID")
L'ID de l'organisation et le nom ne sont pas identiques. L’ID de l’organisation est un identifiant unique de votre organisation. Pour obtenir votre identifiant d'organisation, passez à la Organisation OpenAI page des paramètres et copiez-la. Vous avez maintenant établi une connexion entre Scikit-LLM et le grand modèle de langage.
Scikit-LLM exige que vous ayez un plan de paiement à l'utilisation. En effet, le compte d'essai gratuit OpenAI a une limite de débit de trois requêtes par minute, ce qui n'est pas suffisant pour Scikit-LLM.
Essayer d'utiliser le compte d'essai gratuit entraînera une erreur similaire à celle ci-dessous lors de l'analyse de texte.
Pour en savoir plus sur les limites de taux. Passez à la Page des limites de débit OpenAI.
Le fournisseur LLM ne se limite pas à OpenAI. Vous pouvez également utiliser d'autres fournisseurs LLM.
Importation des bibliothèques requises et chargement de l'ensemble de données
Importez les pandas que vous utiliserez pour charger l'ensemble de données. De plus, depuis Scikit-LLM et scikit-learn, importez les classes requises.
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
Ensuite, chargez l'ensemble de données sur lequel vous souhaitez effectuer une analyse de texte. Ce code utilise l'ensemble de données de films IMDB. Vous pouvez cependant le modifier pour utiliser votre propre ensemble de données.
# Load your dataset
data = pd.read_csv("imdb_movies_dataset.csv")
# Extract the first 100 rows
data = data.head(100)
Utiliser uniquement les 100 premières lignes de l’ensemble de données n’est pas obligatoire. Vous pouvez utiliser l’intégralité de votre ensemble de données.
Ensuite, extrayez les colonnes de fonctionnalités et d’étiquettes. Divisez ensuite votre ensemble de données en ensembles d’entraînement et de test.
# 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)
Le Genre La colonne contient les étiquettes que vous souhaitez prédire.
Classification de texte Zero-Shot avec Scikit-LLM
La classification de texte Zero-shot est une fonctionnalité offerte par les grands modèles de langage. Il classe le texte dans des catégories prédéfinies sans nécessiter de formation explicite sur les données étiquetées. Cette fonctionnalité est très utile lorsque vous traitez des tâches dans lesquelles vous devez classer du texte dans des catégories que vous n'aviez pas prévues lors de la formation du modèle.
Pour effectuer une classification de texte sans tir à l'aide de Scikit-LLM, utilisez le ZeroShotGPTClassificateur classe.
# 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))
Le résultat est le suivant :
Le rapport de classification fournit des métriques pour chaque étiquette que le modèle tente de prédire.
Classification de texte multi-étiquettes Zero-Shot avec Scikit-LLM
Dans certains scénarios, un seul texte peut appartenir simultanément à plusieurs catégories. Les modèles de classification traditionnels peinent à résoudre ce problème. Scikit-LLM rend en revanche cette classification possible. La classification de texte multi-étiquettes sans tir est cruciale pour attribuer plusieurs étiquettes descriptives à un seul échantillon de texte.
Utiliser MultiLabelZeroShotGPTClassifier pour prédire quelles étiquettes sont appropriées pour chaque échantillon de texte.
# 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))
Dans le code ci-dessus, vous définissez les étiquettes candidates auxquelles votre texte peut appartenir.
Le résultat est le suivant :
Ce rapport vous aide à comprendre les performances de votre modèle pour chaque étiquette dans la classification multi-étiquettes.
Vectorisation de texte avec Scikit-LLM
Dans la vectorisation de texte, les données textuelles sont converties dans un format numérique que les modèles d'apprentissage automatique peuvent comprendre. Scikit-LLM propose le GPTVectorizer pour cela. Il vous permet de transformer du texte en vecteurs de dimension fixe à l'aide de modèles GPT.
Vous pouvez y parvenir en utilisant la fréquence des documents Term Frequency-Inverse.
# 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
Voici le résultat :
La sortie représente les caractéristiques vectorisées TF-IDF pour les 5 premiers échantillons de l'ensemble de données.
Résumé de texte avec Scikit-LLM
Le résumé de texte aide à condenser un morceau de texte tout en préservant ses informations les plus critiques. Scikit-LLM propose le GPTSummarizer, qui utilise les modèles GPT pour générer des résumés concis de texte.
# Perform Text Summarization
summarizer = GPTSummarizer(openai_model="gpt-3.5-turbo", max_words=15)
summaries = summarizer.fit_transform(X_test)
print(summaries)
Le résultat est le suivant :
Ce qui précède est un résumé des données de test.
Créer des applications au-dessus des LLM
Scikit-LLM ouvre un monde de possibilités pour l'analyse de texte avec de grands modèles de langage. Comprendre la technologie derrière les grands modèles de langage est crucial. Il vous aidera à comprendre leurs forces et leurs faiblesses, ce qui pourra vous aider à créer des applications efficaces au-dessus de cette technologie de pointe.