Dominando la clasificación de textos de disparo cero y de disparos escasos con SCIKIT-LLM

Como
Gustó

Fecha:

Nodo: 4214053

Analizar el sentimiento del cliente y los temas clave a partir de datos textuales siempre ha sido una tarea que requiere mucho tiempo, que requiere la recopilación de datos, el etiquetado manual y el ajuste fino de modelos especializados. Pero, ¿qué sucedería si pudiera evitar la molestia de entrenar un modelo y, aun así, lograr resultados precisos? Ingrese a la clasificación de texto de cero disparos, un enfoque innovador impulsado por Modelos de lenguaje grande (LLM). En este artículo, exploraremos cómo la clasificación de cero disparos 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 la 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.
  • Aprenda el concepto y las ventajas de la clasificación de texto zero-shot con LLM.
  • Explora la biblioteca SKLLM y su integración con scikit-aprender.
  • Clasifique los sentimientos en el conjunto de datos de reseñas de ropa de comercio electrónico para mujeres sin entrenamiento personalizado.
  • 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.

Tabla de contenidos.

¿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 los sentimientos o los temas clave. Tradicionalmente, las empresas:

  • Recopilar y limpiar datos de revisión.
  • Etiquetar manualmente miles de muestras (por ejemplo, “positivo”, “negativo”, “neutral”).
  • Ajuste un modelo de clasificación dedicado a estos datos etiquetados.

Si bien es eficaz, el ajuste fino requiere una cantidad considerable de tiempo, experiencia y recursos computacionales. En este caso, se utiliza la clasificación de texto de cero disparos: se utilizan modelos de lenguaje grandes (LLM) directamente para clasificar el texto con un mínimo esfuerzo. Simplemente se puede proporcionar un conjunto de etiquetas descriptivas (por ejemplo, “positivo”, “negativo”, “neutral”) y dejar que el modelo infiera la clase correcta, ¡sin necesidad de entrenamiento personalizado!

¿Por qué Zero-Shot es tan eficiente?

A continuación analizaremos los puntos para entender por qué el zero-shot es tan eficiente:

  • No se requiere ningún ajuste fino: Afinando los LLM Como GPT-4o, puede resultar costoso. No es necesario dedicar horas (o incluso días) a entrenar un clasificador de sentimientos en su conjunto de datos. En cambio, puede aprovechar los LLM previamente entrenados 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, se necesitan datos etiquetados para cada clase. La clasificación de cero disparos solo requiere que describa sus clases (etiquetas) en lenguaje naturalEsto 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

Utilizaremos 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 mujer.
  • El texto principal se encuentra en la columna “Texto de revisión”.
  • Otros metadatos como “Título”, “Calificación”, “IND recomendado” y más están disponibles, pero no siempre son necesarios para la clasificación de disparo cero.

Guía paso por paso

A continuación, aprenderemos cómo optimizar el análisis de sentimientos y la detección de temas con la clasificación de texto de disparo cero utilizando Modelos de lenguaje grande (LLM). En este tutorial, le mostraremos cómo 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úrate de tener Python 3.7+ e instala SKLLM:

pip install scikit-llm

 Además, asegúrese de tener una clave API válida para un proveedor de LLM (por ejemplo, API de Open AI). 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 puedes almacenarlo en un archivo .env o manejarlo dentro de tu 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 “Revisar texto" columna. Es posible que algunas filas tengan valores faltantes 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: Define tus etiquetas

Haremos una clasificación de sentimientos: [“positivo”, “negativo”, “neutral”].

¿Por qué estas tres? Son etiquetas de sentimiento comunes. Sin embargo, eres libre de cambiarlas o expandirlas: por ejemplo, [“positivo”, “negativo”, “neutral”, “mixto”].

Paso 4: Clasificación de disparo cero

Instanciar el Clasificador ZeroShotGPTElegiremos 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é ¿ajustar(Ninguno, etiquetas)? En un escenario de cero disparos puro, no se produce ningún entrenamiento real. La llamada a fit() le indica al clasificador qué etiquetas son posibles. El modelo puede elegir entre ellas para cada revisión.

Paso 5: Clasifique 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 revisión junto con el sentimiento previsto del clasificador de disparo cero.

Discusión de resultados

Con un enfoque de ML tradicional, necesitarías:

  • Etiquetado:Un gran subconjunto de estas reseñas están etiquetadas como positivas, negativas o neutrales.
  • Entrenamiento de modelos:Ajuste o entrenamiento de un clasificador desde cero (por ejemplo, un SVM, un modelo basado en BERT).
  • Modelo de validación:Verificación manual del rendimiento en un conjunto de validación.
  • Actualizaciones continuas:Si surgen nuevos sentimientos o categorías, necesitarás más datos etiquetados y capacitación adicional.

El disparo cero elimina la mayor parte de esa sobrecarga:

  • Inicio inmediato:Solo proporcionas 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 como para inferir el significado de las etiquetas descriptivas.
  • Fácil de refinar¿Necesitas nuevas categorías como “ligeramente positivo” o “ambivalente”? Solo tienes que añadirlas a la lista de etiquetas candidatas.

Posibles limitaciones a tener en cuenta

  • Variación de precisión:La calidad de la clasificación zero-shot puede variar. Para un análisis de sentimientos simple, suele funcionar sorprendentemente bien. Para dominios altamente especializados o técnicos, el modelo puede malinterpretar cierto texto o jerga del dominio.
  • Costo:El uso de un modelo grande como GPT-4o implica costos de API si se llama a un servicio externo.
  • Privacidad de datos:Debe asegurarse de que esté permitido enviar datos a una API (especialmente si el texto es confidencial).

Clasificación de texto de pocos disparos

La clasificación de textos con pocos ejemplos es una tarea que consiste en clasificar un texto en una de las clases predefinidas basándose en unos pocos ejemplos de cada clase. Por ejemplo, dados unos pocos ejemplos de las clases positiva, negativa y neutra, el modelo debería poder clasificar un texto nuevo en una de estas categorías.

Nota: Los estimadores proporcionados por Scikit-LLM no seleccionan automáticamente un subconjunto de los datos de entrenamiento; utilizan el conjunto de entrenamiento completo para generar los ejemplos de pocos ejemplos. Si su conjunto de entrenamiento es grande, considere dividirlo en conjuntos de entrenamiento y validación, manteniendo el conjunto de entrenamiento pequeño (lo ideal es que no supere los 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 según la cadena de pensamiento

La clasificación de texto por cadena de pensamiento es similar a la clasificación por cero disparos 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 disparos o un enfoque de cadena de pensamiento, puede ver una mejora con respecto a los resultados de clasificación de referencia de cero disparos.

Conclusión

La biblioteca de Scikit-LLM es una alternativa rápida, flexible y sencilla para crear un flujo de trabajo de análisis de opiniones personalizado. Sin necesidad de etiquetar datos ni 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 obtener rápidamente información (como la opinión de los clientes) 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 evoluciona, las técnicas zero-shot y few-shot seguirán adquiriendo importancia, ya que permiten la creación rápida de prototipos y aceleran los flujos de trabajo empresariales aprovechando el enorme conocimiento que ya está incorporado en los grandes modelos de lenguaje.

Puntos clave

  • La clasificación de disparo cero simplifica el análisis de sentimientos sin la necesidad de etiquetado manual o entrenamiento del modelo.
  • La biblioteca SKLLM integra scikit-learn con LLM para una clasificación de texto eficiente.
  • SCIKIT-LLM permite una clasificación de texto eficiente de 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 obtener 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 grandes 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 disparo cero en acción.
  • La clasificación de texto de disparo cero es rápida, adaptable y requiere un mínimo de datos, lo que la hace ideal para una implementación rápida.

Preguntas frecuentes

P1. ¿Cómo puedo decidir entre los métodos de clasificación de cero disparos, de pocos disparos y de cadena de pensamiento?

A. El método de cero disparos es ideal para pruebas de concepto rápidas o cuando los datos etiquetados son escasos. El método de pocos disparos mejora la precisión al utilizar un pequeño conjunto de ejemplos por clase, lo que requiere un conjunto de datos etiquetados mínimo. El método de cadena de pensamiento mejora aún más el rendimiento al aprovechar el razonamiento intermedio, pero aumenta el uso de tokens y los costos.

P2. ¿Cuántos ejemplos debo incluir para una configuración de pocas tomas?

A. 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 de rendimiento pueden estancarse. Además, recuerde mezclar (permutar) los ejemplos para evitar el sesgo de actualidad del modelo.

P3. ¿Añadir el razonamiento en cadena de pensamiento mejorará automáticamente la precisión?

A. No siempre. Si bien la cadena de pensamiento puede brindarle al modelo una ruta de razonamiento estructurada, su eficacia depende de la complejidad de la tarea y de la claridad de las indicaciones. Puede generar mejores explicaciones y decisiones en muchos casos, pero también consume más tokens y aumenta el costo de la API.

P4. ¿Es costoso ejecutar estas clasificaciones a gran escala?

A. El costo depende del uso de tokens, que varía según la elección del modelo, la longitud de la solicitud y el tamaño del conjunto de datos. Las solicitudes de cero disparos 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 la solicitud 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.

¡Hola! Soy Adarsh, un graduado en Análisis de Negocios de ISB, que actualmente está inmerso en la investigación y la exploración de nuevas fronteras. Me apasionan la ciencia de datos, la IA y todas las formas innovadoras en las que pueden transformar las industrias. Ya sea creando modelos, trabajando en canales de datos o sumergiéndome en el aprendizaje automático, me encanta experimentar con la última tecnología. La IA no es solo mi interés, es hacia donde veo que se dirige el futuro, ¡y siempre me entusiasma ser parte de ese viaje!

Artículos relacionados

punto_img

Artículos Recientes

punto_img