Modelli linguistici potenti + Scikit-learn = Scikit-LLM. Esegui attività di analisi del testo mentre sei in movimento con l'aiuto di questa libreria.

Scikit-LLM è un pacchetto Python che aiuta a integrare modelli linguistici di grandi dimensioni (LLM) nel framework scikit-learn. Aiuta a svolgere attività di analisi del testo. Se hai familiarità con scikit-learn, sarà più facile per te lavorare con Scikit-LLM.

È importante notare che Scikit-LLM non sostituisce scikit-learn. scikit-learn è una libreria di apprendimento automatico per scopi generici, ma Scikit-LLM è specificamente progettato per attività di analisi del testo.

Iniziare con Scikit-LLM

Per iniziare Scikit-LLM, dovrai installare la libreria e configurare la chiave API. Per installare la libreria, apri il tuo IDE e creare un nuovo ambiente virtuale. Ciò contribuirà a prevenire eventuali conflitti di versione della libreria. Quindi, esegui il seguente comando nel terminale.

pip install scikit-llm 

Questo comando installerà Scikit-LLM e le relative dipendenze richieste.

instagram viewer

Per configurare la tua chiave API, devi acquisirne una dal tuo provider LLM. Per ottenere la chiave API OpenAI, attenersi alla seguente procedura:

Procedi al Pagina dell'API OpenAI. Quindi fai clic sul tuo profilo situato nell'angolo in alto a destra della finestra. Selezionare Visualizza le chiavi API. Questo ti porterà al Chiavi API pagina.

Sul Chiavi API pagina, fare clic su Crea una nuova chiave segreta pulsante.

Assegna un nome alla chiave API e fai clic su Crea chiave segreta pulsante per generare la chiave. Dopo la generazione, è necessario copiare la chiave e conservarla in un luogo sicuro poiché OpenAI non la visualizzerà più. Se lo perdi, dovrai generarne uno nuovo.

Il codice sorgente completo è disponibile in a Repositorio GitHub.

Ora che hai la chiave API, apri il tuo IDE e importa SKLLMConfig classe dalla libreria Scikit-LLM. Questa classe consente di impostare le opzioni di configurazione relative all'utilizzo di modelli linguistici di grandi dimensioni.

from skllm.config import SKLLMConfig

Questa classe prevede che tu imposti la chiave API OpenAI e i dettagli dell'organizzazione.

# 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 dell'organizzazione e il nome non sono gli stessi. L'ID organizzazione è un identificatore univoco della tua organizzazione. Per ottenere l'ID della tua organizzazione, procedi al Organizzazione OpenAI pagina delle impostazioni e copiarla. Ora hai stabilito una connessione tra Scikit-LLM e il modello linguistico di grandi dimensioni.

Scikit-LLM richiede che tu abbia un piano con pagamento in base al consumo. Questo perché l'account OpenAI di prova gratuita ha un limite di velocità di tre richieste al minuto che non è sufficiente per Scikit-LLM.

Il tentativo di utilizzare l'account di prova gratuito porterà a un errore simile a quello riportato di seguito durante l'esecuzione dell'analisi del testo.

Per saperne di più sui limiti di tariffa. Procedi al Pagina dei limiti di velocità di OpenAI.

Il fornitore LLM non si limita solo a OpenAI. Puoi utilizzare anche altri fornitori LLM.

Importazione delle librerie richieste e caricamento del set di dati

Importa i panda che utilizzerai per caricare il set di dati. Inoltre, da Scikit-LLM e scikit-learn, importare le classi richieste.

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

Successivamente, carica il set di dati su cui desideri eseguire l'analisi del testo. Questo codice utilizza il set di dati dei film IMDB. Puoi tuttavia modificarlo per utilizzare il tuo set di dati.

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

L'utilizzo solo delle prime 100 righe del set di dati non è obbligatorio. Puoi utilizzare l'intero set di dati.

Successivamente, estrai le caratteristiche e le colonne delle etichette. Quindi dividi il tuo set di dati in set di training e 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)

IL Genere La colonna contiene le etichette che desideri prevedere.

Classificazione del testo Zero-Shot con Scikit-LLM

La classificazione del testo zero-shot è una funzionalità offerta da modelli linguistici di grandi dimensioni. Classifica il testo in categorie predefinite senza la necessità di un addestramento esplicito sui dati etichettati. Questa funzionalità è molto utile quando si gestiscono attività in cui è necessario classificare il testo in categorie non previste durante l'addestramento del modello.

Per eseguire la classificazione del testo zero-shot utilizzando Scikit-LLM, utilizzare il file Classificatore ZeroShotGPT 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))

L'output è il seguente:

Il report di classificazione fornisce metriche per ogni etichetta che il modello sta tentando di prevedere.

Classificazione del testo Zero-Shot multi-etichetta con Scikit-LLM

In alcuni scenari, un singolo testo può appartenere a più categorie contemporaneamente. I modelli di classificazione tradizionali si scontrano con questo. Scikit-LLM rende invece possibile questa classificazione. La classificazione zero-shot del testo con più etichette è fondamentale per assegnare più etichette descrittive a un singolo campione di testo.

Utilizzo MultiLabelZeroShotGPTClassificatore per prevedere quali etichette sono appropriate per ciascun campione di testo.

# 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))

Nel codice sopra, definisci le etichette candidate a cui potrebbe appartenere il tuo testo.

L'output è quello mostrato di seguito:

Questo rapporto ti aiuta a capire il rendimento del tuo modello per ciascuna etichetta nella classificazione multi-etichetta.

Vettorializzazione del testo con Scikit-LLM

Nella vettorizzazione del testo i dati testuali vengono convertiti in un formato numerico che i modelli di machine learning possono comprendere. Scikit-LLM offre a questo scopo il GPTVectorizer. Ti consente di trasformare il testo in vettori a dimensione fissa utilizzando modelli GPT.

È possibile ottenere ciò utilizzando il termine Frequenza-Frequenza del documento inversa.

# 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

Ecco l'output:

L'output rappresenta le caratteristiche vettorizzate TF-IDF per i primi 5 campioni nel set di dati.

Riepilogo del testo con Scikit-LLM

Il riepilogo del testo aiuta a condensare una parte di testo preservandone le informazioni più critiche. Scikit-LLM offre GPTSummarizer, che utilizza i modelli GPT generare riassunti concisi del testo.

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

L'output è il seguente:

Quanto sopra è un riepilogo dei dati del test.

Crea applicazioni su LLM

Scikit-LLM apre un mondo di possibilità per l'analisi del testo con modelli linguistici di grandi dimensioni. Comprendere la tecnologia alla base dei modelli linguistici di grandi dimensioni è fondamentale. Ti aiuterà a comprendere i loro punti di forza e di debolezza che possono aiutarti a creare applicazioni efficienti su questa tecnologia all'avanguardia.