Analizar la opinión de los clientes y los temas clave a partir de datos textuales siempre ha sido una tarea que requiere mucho tiempo y requiere recopilación de datos, etiquetado manual y ajuste de modelos especializados. Pero, ¿qué pasaría si pudiera evitarse la molestia de entrenar un modelo y aun así lograr resultados precisos? Ingrese a la clasificación de texto inmediata, un enfoque innovador impulsado por modelos de lenguaje grandes (LLM). En este artículo, exploraremos cómo la clasificación de tiro cero simplifica el análisis de sentimientos utilizando la biblioteca SKLLM (una combinación de scikit-learn y LLM). En este tutorial, verá cómo utilizar el <a target="_blank" href="https://skllm.beastbyte.ai/docs/zero-shot-text-classification” target=”_blank” rel=”nofollow noopener”>Biblioteca SKLLM (scikit-learn + LLM) para clasificar el conjunto de datos de Reseñas de ropa de comercio electrónico para mujeres de Kaggle.
Objetivos de aprendizaje
- Comprender el proceso tradicional de análisis de sentimientos y sus desafíos.
- Conozca el concepto y las ventajas de la clasificación de texto cero con LLM.
- Explore la biblioteca SKLLM y su integración con scikit-learn.
- Clasifique sentimientos en el conjunto de datos de Reseñas de ropa de comercio electrónico para mujeres sin capacitación personalizada.
- Obtenga experiencia práctica con la clasificación de disparo cero para casos de uso prácticos.
Este artículo fue publicado como parte del Blogatón de ciencia de datos.
¿Qué es la clasificación de texto Zero-Shot?
Los minoristas en línea suelen recibir grandes volúmenes de reseñas de texto de los clientes, lo que dificulta el análisis rápido de las opiniones o los temas clave. Tradicionalmente, las empresas:
- Recopile y limpie los datos de revisión.
- Etiquete manualmente miles de muestras (p. ej., “positivas”, “negativas”, “neutrales”).
- Ajuste un modelo de clasificación dedicado a estos datos etiquetados.
Si bien es efectivo, el ajuste requiere tiempo, experiencia y recursos computacionales considerables. Ingrese a la clasificación de texto inmediata: use modelos de lenguaje grande (LLM) directamente para clasificar texto con el mínimo esfuerzo. Simplemente puede proporcionar un conjunto de etiquetas descriptivas (por ejemplo, “positivo”, “negativo”, “neutral”) y dejar que el modelo infiera la clase correcta, ¡no se requiere capacitación personalizada!
¿Por qué Zero-Shot es tan eficiente?
A continuación analizaremos los puntos para comprender por qué el disparo cero es tan eficiente:
- No se requieren ajustes finos: Ajustar los LLM como GPT-4o puede ser una tarea costosa. No necesita pasar horas (o incluso días) entrenando un clasificador de opiniones en su conjunto de datos. En su lugar, aprovecha los LLM previamente capacitados como GPT-4o, lo que le brinda un clasificador de alta calidad de inmediato.
- Fácil adaptación a nuevas etiquetas: Si su conjunto de etiquetas cambia (por ejemplo, de “positivo, negativo, neutral” a sentimientos más específicos como “feliz, frustrado, curioso, molesto”), simplemente actualice su lista de etiquetas. No es necesario volver a entrenar un modelo.
- Menos requisitos de datos: En el aprendizaje supervisado típico, necesita datos etiquetados para cada clase. La clasificación de tiro cero solo requiere que describas tus clases (etiquetas) en lenguaje natural. Esto es particularmente útil si tiene datos limitados o sin etiquetar.
- Velocidad de implementación: Al omitir los pasos de anotación de datos y entrenamiento del modelo, puede implementar su solución de clasificación mucho más rápido.
Descripción general del conjunto de datos
Usaremos el conjunto de datos de Reseñas de ropa de comercio electrónico para mujeres de Kaggle.
Haga clic aquí para acceder al conjunto de datos.
Puntos clave sobre el conjunto de datos:
- Contiene miles de reseñas de clientes sobre prendas de vestir para mujeres.
- El texto principal está en la columna “Revisar texto”.
- Otros metadatos como “Título”, “Clasificación”, “IND recomendado” y más están disponibles, pero no siempre son necesarios para la clasificación de tiro cero.
Guía paso a paso
A continuación, aprenderemos cómo optimizar el análisis de sentimientos y la detección de temas con una clasificación de texto inmediata utilizando modelos de lenguaje grande (LLM). En este tutorial, lo guiaremos para aprovechar la biblioteca SKLLM para clasificar datos del mundo real sin esfuerzo, ¡sin necesidad de capacitación personalizada!
Paso 1: instalación y configuración
Asegúrese de tener Python 3.7+ e instalar SKLLM:
pip install scikit-llm
Además, asegúrese de tener una clave API válida para un proveedor de LLM (p. ej., API de OpenAI). Configúrelo en su entorno:
from skllm.config import SKLLMConfig
# Replace with your actual OpenAI API key
SKLLMConfig.set_openai_key("your_openai_api_key")
(También puede almacenarlo en un archivo .env o manejarlo dentro de su código, pero las variables de entorno suelen ser más limpias).
Paso 2: importar bibliotecas y cargar el conjunto de datos
import pandas as pd
from skllm.models.gpt.classification.zero_shot import ZeroShotGPTClassifier
# Load dataset
df = pd.read_csv("Womens Clothing E-Commerce Reviews.csv")
# Inspect the first few rows
print(df.head())
Nos centraremos en el “Texto de revisión” columna. Es posible que a algunas filas les falten valores para las revisiones, así que eliminemos los NaN:
# Filter out rows without review text
df = df.dropna(subset=("Review Text")).reset_index(drop=True)
# Extract the review texts into x
x = df("Review Text").tolist()
Paso 3: Defina sus etiquetas
Haremos una clasificación de sentimientos: (“positivo”, “negativo”, “neutral”).
¿Por qué estos tres? Son etiquetas de sentimiento comunes. Sin embargo, eres libre de cambiarlos o ampliarlos: por ejemplo, (“positivo”, “negativo”, “neutral”, “mixto”).
Paso 4: Clasificación de disparo cero
Instanciar el Clasificador ZeroShotGPT. Elegiremos gpt-4o como modelo, pero puedes seleccionar un modelo diferente si lo deseas.
# Create a zero-shot classifier
clf = ZeroShotGPTClassifier(model="gpt-4o")
# Fit the classifier - here we pass `None` for x because we don't need training data
clf.fit(None, ("positive", "negative", "neutral"))
Por qué encajar(Ninguno, etiquetas)? En un escenario puro de tiro cero, no se produce ningún entrenamiento real. La llamada a fit() le dice efectivamente al clasificador qué etiquetas son posibles. Luego, el modelo puede elegir entre ellos para cada revisión.
Paso 5: clasificar las reseñas
# Predict labels for the entire dataset
predictions = clf.predict(x)
# Let’s see the first few results
for review_text, sentiment in zip(x(:5), predictions(:5)):
print(f"Review: {review_text}")
print(f"Predicted Sentiment: {sentiment}")
print("-" * 50)
Este bucle imprimirá cada reseña junto con el sentimiento previsto por el clasificador de tiro cero.
Discusión de resultados
Con un enfoque de ML tradicional, necesitaría:
- Etiquetado: Un gran subconjunto de estas reseñas se etiquetan como positivas, negativas y neutrales.
- Entrenamiento modelo: Ajustar o entrenar un clasificador desde cero (por ejemplo, un SVM, un modelo basado en BERT).
- Validación del modelo: Verificación manual del rendimiento en un conjunto de validación.
- Actualizaciones continuas: Si surgen nuevos sentimientos o categorías, necesitará más datos etiquetados y capacitación adicional.
Zero-shot elimina la mayor parte de esa sobrecarga:
- Inicio Inmediato: Solo proporciona una lista de etiquetas y un mensaje bien elaborado detrás de escena.
- No se requieren datos etiquetados: El LLM ha aprendido suficiente semántica sobre el lenguaje para inferir el significado a partir de etiquetas descriptivas.
- Fácil de refinar: ¿Necesita nuevas categorías como “ligeramente positiva” o “ambivalente”? Simplemente agréguelos a la lista de etiquetas candidatas.
Posibles limitaciones a tener en cuenta
- Variación de precisión: La calidad de la clasificación de tiro cero puede variar. Para un análisis de sentimiento simple, a menudo funciona sorprendentemente bien. Para dominios técnicos o altamente especializados, el modelo puede malinterpretar cierto texto o jerga del dominio.
- Costo: Usar un modelo grande como GPT-4o implica costos de API si llama a un servicio externo.
- Privacidad de datos: Debe asegurarse de que se permita el envío de datos a una API (especialmente si el texto es confidencial).
Clasificación de texto de pocas tomas
La clasificación de texto en pocas tomas es una tarea de clasificar un texto en una de las clases predefinidas en función de algunos ejemplos de cada clase. Por ejemplo, dados algunos ejemplos de las clases positivo, negativo y neutral, el modelo debería poder clasificar texto nuevo en una de estas categorías.
Nota: Los estimadores proporcionados por Scikit-LLM no seleccionan automáticamente un subconjunto de datos de entrenamiento; utilizan todo el conjunto de entrenamiento para construir ejemplos de pocas tomas. Si su conjunto de entrenamiento es grande, considere dividirlo en conjuntos de entrenamiento y validación manteniendo el conjunto de entrenamiento pequeño (idealmente no más de 10 ejemplos por clase). Además, asegúrese de permutar el orden de estas muestras para evitar cualquier sesgo de actualidad en la atención del LLM.
from skllm.models.gpt.classification.few_shot import (
FewShotGPTClassifier,
MultiLabelFewShotGPTClassifier,
)
from skllm.datasets import (
get_classification_dataset,
get_multilabel_classification_dataset,
)
# Single-label classification
x, y = get_classification_dataset()
clf = FewShotGPTClassifier(model="gpt-4o")
clf.fit(x, y)
labels = clf.predict(x)
# Multi-label classification
x, y = get_multilabel_classification_dataset()
clf = MultiLabelFewShotGPTClassifier(max_labels=2, model="gpt-4o")
clf.fit(x, y)
labels = clf.predict(x)
Clasificación de textos en cadena de pensamiento
La clasificación de texto en cadena de pensamiento es similar a la clasificación de tiro cero en el sentido de que no requiere datos etiquetados de antemano. La principal diferencia es que el modelo genera pasos de razonamiento intermedios junto con la etiqueta. Esta “cadena de pensamiento” adicional puede mejorar el rendimiento pero aumenta el uso de tokens (y, por lo tanto, el costo potencial).
from skllm.models.gpt.classification.zero_shot import CoTGPTClassifier
from skllm.datasets import get_classification_dataset
# Demo sentiment analysis dataset
# Labels: positive, negative, neutral
x, y = get_classification_dataset()
clf = CoTGPTClassifier(model="gpt-4o")
clf.fit(x, y)
predictions = clf.predict(x)
# Each prediction has (label, reasoning)
labels, reasoning = predictions(:, 0), predictions(:, 1)
Al probar un enfoque de pocos intentos o un enfoque de cadena de pensamiento, es posible que observe una mejora con respecto a los resultados de clasificación de cero intentos de referencia.
Conclusión
La biblioteca de Scikit-LLM es una alternativa rápida, flexible y sencilla para crear un canal de análisis de sentimientos personalizado. Sin la necesidad de etiquetar datos o ajustar un modelo, puede clasificar inmediatamente los comentarios de los clientes en categorías descriptivas.
En el caso del conjunto de datos de Reseñas de ropa de comercio electrónico para mujeres, puede desbloquear rápidamente información (como la opinión del cliente) sin la sobrecarga habitual de preparación del conjunto de datos, etiquetado y reentrenamiento del modelo. Esta ventaja es especialmente poderosa si necesita iterar o expandir sus etiquetas de clasificación con el tiempo.
A medida que el ecosistema de IA evolucione, las técnicas de disparo cero y de pocos disparos seguirán ganando importancia. Permiten la creación rápida de prototipos y aceleran los flujos de trabajo empresariales al aprovechar el conocimiento masivo ya integrado en grandes modelos de lenguaje.
Conclusiones clave
- La clasificación de disparo cero simplifica el análisis de sentimientos sin la necesidad de etiquetado manual o entrenamiento de modelos.
- La biblioteca SKLLM integra scikit-learn con LLM para una clasificación de texto eficiente.
- SCIKIT-LLM permite una clasificación de texto eficiente Zero-Shot y Few-Shot, eliminando la necesidad de etiquetado manual y entrenamiento de modelos.
- Los modelos de lenguaje grandes (LLM) como GPT-4 permiten resultados de clasificación inmediatos y de alta calidad.
- Con SCIKIT-LLM, puede implementar rápidamente soluciones de clasificación de texto utilizando modelos de lenguaje grande previamente entrenados, ahorrando tiempo y recursos.
- El conjunto de datos de Reseñas de ropa de comercio electrónico para mujeres proporciona un ejemplo práctico de clasificación de tiro cero en acción.
- La clasificación de texto de disparo cero es rápida, adaptable y requiere datos mínimos, lo que la hace ideal para una implementación rápida.
Preguntas frecuentes
R. Zero-shot es excelente para pruebas de concepto rápidas o cuando los datos etiquetados son escasos. Few-shot mejora la precisión al utilizar un pequeño conjunto de ejemplos por clase, lo que requiere un conjunto de datos etiquetados mínimo. La cadena de pensamiento mejora aún más el rendimiento al aprovechar el razonamiento intermedio, pero aumenta el uso de tokens y los costos.
R. Generalmente se recomienda incluir hasta 10 ejemplos por clase. Más allá de eso, el mensaje puede volverse demasiado largo o costoso de procesar, y las mejoras en el rendimiento pueden estabilizarse. Además, recuerde mezclar (permutar) los ejemplos para evitar el sesgo de actualidad del modelo.
R. No siempre. Si bien la cadena de pensamiento puede proporcionar al modelo una ruta de razonamiento estructurada, su eficacia depende de la complejidad de la tarea y de la claridad de las indicaciones. Puede conducir a mejores explicaciones y decisiones en muchos casos, pero también consume más tokens y aumenta el costo de la API.
R. El costo depende del uso del token, que varía según la elección del modelo, la duración del mensaje y el tamaño del conjunto de datos. Las indicaciones de disparo cero y de pocos disparos pueden ser relativamente breves, especialmente si mantiene al mínimo los ejemplos por clase. Los métodos de cadena de pensamiento aumentan la longitud de las indicaciones porque el modelo necesita generar explicaciones además de etiquetas.
Los medios que se muestran en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor.