Potentes modelos de lenguaje + Scikit-learn = Scikit-LLM. Realice tareas de análisis de texto sobre la marcha con la ayuda de esta biblioteca.
Scikit-LLM es un paquete de Python que ayuda a integrar modelos de lenguajes grandes (LLM) en el marco de scikit-learn. Ayuda a realizar tareas de análisis de texto. Si está familiarizado con scikit-learn, le resultará más fácil trabajar con Scikit-LLM.
Es importante tener en cuenta que Scikit-LLM no reemplaza a scikit-learn. scikit-learn es una biblioteca de aprendizaje automático de uso general, pero Scikit-LLM está diseñada específicamente para tareas de análisis de texto.
Comenzando con Scikit-LLM
Para empezar Scikit-LLM, deberá instalar la biblioteca y configurar su clave API. Para instalar la biblioteca, abra su IDE y crear un nuevo entorno virtual. Esto ayudará a evitar posibles conflictos con la versión de la biblioteca. Luego, ejecute el siguiente comando en la terminal.
pip install scikit-llm
Este comando instalará Scikit-LLM y sus dependencias requeridas.
Para configurar su clave API, debe adquirir una de su proveedor de LLM. Para obtener la clave API de OpenAI, siga estos pasos:
Proceder al Página de la API de OpenAI. Luego haga clic en su perfil ubicado en la esquina superior derecha de la ventana. Seleccionar Ver claves API. Esto te llevará al Claves API página.
Sobre el Claves API página, haga clic en el Crear nueva clave secreta botón.
Asigne un nombre a su clave API y haga clic en Crear clave secreta botón para generar la clave. Después de la generación, debe copiar la clave y guardarla en un lugar seguro, ya que OpenAI no volverá a mostrar la clave. Si lo pierdes, tendrás que generar uno nuevo.
El código fuente completo está disponible en un repositorio de GitHub.
Ahora que tiene su clave API, abra su IDE e importe SKLLMConfig clase de la biblioteca Scikit-LLM. Esta clase le permite establecer opciones de configuración relacionadas con el uso de modelos de lenguaje grandes.
from skllm.config import SKLLMConfig
Esta clase espera que configure su clave API OpenAI y los detalles de su organización.
# Set your OpenAI API key
SKLLMConfig.set_openai_key("Your API key")
# Set your OpenAI organization
SKLLMConfig.set_openai_org("Your organization ID")
El ID de la organización y el nombre no son iguales. El ID de la organización es un identificador único de su organización. Para obtener el ID de su organización, vaya a la Organización OpenAI página de configuración y cópiela. Ahora ha establecido una conexión entre Scikit-LLM y el modelo de lenguaje grande.
Scikit-LLM requiere que tengas un plan de pago por uso. Esto se debe a que la cuenta de prueba gratuita de OpenAI tiene un límite de velocidad de tres solicitudes por minuto, lo que no es suficiente para Scikit-LLM.
Intentar utilizar la cuenta de prueba gratuita generará un error similar al siguiente al realizar el análisis de texto.
Para obtener más información sobre los límites de tarifas. Proceder al Página de límites de tasa de OpenAI.
El proveedor de LLM no se limita únicamente a OpenAI. También puede utilizar otros proveedores de LLM.
Importación de las bibliotecas necesarias y carga del conjunto de datos
Importa pandas que usarás para cargar el conjunto de datos.. Además, desde Scikit-LLM y scikit-learn, importe las clases requeridas.
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
A continuación, cargue el conjunto de datos en el que desea realizar el análisis de texto. Este código utiliza el conjunto de datos de películas IMDB. Sin embargo, puedes modificarlo para utilizar tu propio conjunto de datos.
# Load your dataset
data = pd.read_csv("imdb_movies_dataset.csv")
# Extract the first 100 rows
data = data.head(100)
No es obligatorio utilizar solo las primeras 100 filas del conjunto de datos. Puede utilizar todo su conjunto de datos.
A continuación, extraiga las características y las columnas de etiquetas. Luego divida su conjunto de datos en conjuntos de entrenamiento y de prueba.
# 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)
El Género La columna contiene las etiquetas que desea predecir.
Clasificación de texto Zero-Shot con Scikit-LLM
La clasificación de texto de disparo cero es una característica que ofrecen los modelos de lenguaje grandes. Clasifica texto en categorías predefinidas sin la necesidad de una formación explícita sobre datos etiquetados. Esta capacidad es muy útil cuando se trata de tareas en las que es necesario clasificar texto en categorías que no anticipó durante el entrenamiento del modelo.
Para realizar una clasificación de texto de disparo cero usando Scikit-LLM, use el Clasificador ZeroShotGPT clase.
# 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))
El resultado es el siguiente:
El informe de clasificación proporciona métricas para cada etiqueta que el modelo intenta predecir.
Clasificación de texto Zero-Shot de múltiples etiquetas con Scikit-LLM
En algunos escenarios, un único texto puede pertenecer a varias categorías simultáneamente. Los modelos de clasificación tradicionales luchan con esto. Scikit-LLM, por otro lado, hace posible esta clasificación. La clasificación de texto de disparo cero con múltiples etiquetas es crucial para asignar múltiples etiquetas descriptivas a una sola muestra de texto.
Usar Clasificador MultiLabelZeroShotGPT para predecir qué etiquetas son apropiadas para cada muestra de texto.
# 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))
En el código anterior, usted define las etiquetas candidatas a las que podría pertenecer su texto.
El resultado es el que se muestra a continuación:
Este informe le ayuda a comprender qué tan bien se está desempeñando su modelo para cada etiqueta en la clasificación de etiquetas múltiples.
Vectorización de texto con Scikit-LLM
En la vectorización de texto, los datos textuales se convierten a un formato numérico que los modelos de aprendizaje automático pueden comprender. Scikit-LLM ofrece GPTVectorizer para esto. Le permite transformar texto en vectores de dimensiones fijas utilizando modelos GPT.
Puede lograr esto utilizando el término Frecuencia-Frecuencia de 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
Aquí está el resultado:
El resultado representa las características vectorizadas de TF-IDF para las primeras 5 muestras del conjunto de datos.
Resumen de texto con Scikit-LLM
El resumen de texto ayuda a condensar un fragmento de texto preservando al mismo tiempo su información más crítica. Scikit-LLM ofrece GPTSummarizer, que utiliza los modelos GPT generar resúmenes concisos de texto.
# Perform Text Summarization
summarizer = GPTSummarizer(openai_model="gpt-3.5-turbo", max_words=15)
summaries = summarizer.fit_transform(X_test)
print(summaries)
El resultado es el siguiente:
Lo anterior es un resumen de los datos de la prueba.
Cree aplicaciones sobre los LLM
Scikit-LLM abre un mundo de posibilidades para el análisis de texto con grandes modelos de lenguaje. Comprender la tecnología detrás de los grandes modelos lingüísticos es crucial. Le ayudará a comprender sus fortalezas y debilidades que pueden ayudarlo a crear aplicaciones eficientes sobre esta tecnología de vanguardia.