Creación de un canal de análisis de sentimiento de un extremo a otro con Scikit-LLM

En este artículo, aprenderá cómo crear un canal de análisis de sentimientos de un extremo a otro utilizando Scikit-LLM y modelos de lenguaje grandes de código abierto servidos a través de la API de Groq.

Los temas que cubriremos incluyen:

Cómo Scikit-LLM une los canales clásicos de aprendizaje de scikit con llamadas API de modelos de lenguaje grandes modernos. Cómo configurar Scikit-LLM con un backend de Groq y preparar el conjunto de datos de IMDB Movie Reviews para inferencia. Cómo crear, ejecutar y evaluar una canalización de clasificación de sentimientos de disparo cero utilizando una sintaxis compatible con scikit-learn.

Creación de un canal de análisis de sentimiento de un extremo a otro con Scikit-LLM

Introducción

Los canales tradicionales de aprendizaje automático para tareas predictivas como la clasificación de texto generalmente se basan en la extracción de características numéricas estructuradas del texto sin formato (por ejemplo, frecuencias TF-IDF o incrustaciones de tokens) para alimentar modelos clásicos como la regresión logística, conjuntos o máquinas de vectores de soporte.

Con el surgimiento de los grandes modelos de lenguaje (LLM), las reglas del juego han cambiado un poco: ahora es posible aprovechar el razonamiento de cero o pocos intentos en modelos existentes previamente entrenados para tareas de lenguaje como parte de un marco de aprendizaje automático. Scikit-LLM es una biblioteca de Python que aborda esto: cierra la brecha entre el aprendizaje automático clásico y las llamadas API LLM modernas. En este artículo, utilizaremos Scikit-LLM junto con los modelos backend de Groq para crear un canal de extremo a extremo para el análisis de sentimientos (una forma de clasificación de texto específica de un dominio), logrando resultados de inferencia razonablemente rápidos con modelos de código abierto. Desde el preprocesamiento hasta la inferencia, utilizaremos un conjunto de datos grande y de tamaño realista: el conjunto de datos de reseñas de películas de IMDB.

Requisitos previos, configuración y obtención del conjunto de datos

Para que el código que se muestra en este tutorial funcione, deberá haber instalado la biblioteca Scikit-LLM:

Una vez instalado, el primer paso es instalarlo y configurar las credenciales de API. En otras palabras, necesitaremos "conectar" Scikit-LLM a un punto final, es decir, un repositorio API de LLM como Groq. Asegúrese de registrarse en Groq y generar una clave API aquí: deberá copiarla y pegarla en el siguiente código:

Scikit-LLM utiliza una función de punto final, set_gpt_url, que es compatible con OpenAI de forma predeterminada; lo hemos enrutado para realizar solicitudes internas a una URL de Groq personalizada: https://api.groq.com/openai/v1.

La siguiente etapa del proceso es importar el conjunto de datos de IMDB Movie Reviews, que tiene alrededor de 50.000 instancias, y prepararlo para el proceso de análisis de sentimiento que crearemos. Las instancias consisten en una reseña de texto etiquetada con un sentimiento, que puede ser positivo o negativo (este es un problema de clasificación binaria, que se puede resolver con modelos como la regresión logística, por ejemplo).

Para mayor comodidad, leemos el conjunto de datos de una versión del repositorio de GitHub disponible públicamente en formato CSV:

Tenga en cuenta que obtuvimos 500 filas solo con fines de demostración; de lo contrario, la inferencia puede llevar mucho tiempo sin suficientes recursos informáticos. Puedes cambiar libremente este tamaño de muestra, n=500, para adaptarlo a tus propias necesidades.

Construyendo el proceso de análisis de sentimiento

¡Aquí viene la parte más interesante del proceso! Un proceso de ciencia de datos se reduce a una serie de pasos de preprocesamiento, limpieza y preparación de datos seguidos de la configuración o entrenamiento del modelo, inferencia y evaluación. Para un escenario predictivo basado en texto como el nuestro, el preprocesamiento normalmente implica limpiar y normalizar el texto. Scikit-learn proporciona una clase elegante, FunctionTransformer, para definir y encapsular pasos de preprocesamiento basados ​​en una función personalizada:

Ahora juntamos este objeto de preprocesamiento con una instancia de modelo para crear Pipeline. Una vez definido, este canal organiza todo el proceso de preparación de los datos y su transferencia al modelo en las etapas de entrenamiento e inferencia; aunque usemos el término "entrenamiento", no se producirá ningún entrenamiento real basado en el peso, ya que estamos utilizando un modelo previamente entrenado de Groq para la clasificación de tiro cero. Ajustar el modelo sólo implica pasarle las etiquetas de clasificación a utilizar.

Una vez que hayamos ejecutado el proceso para "ajustarlo" al modelo, lo usaremos una vez más para realizar inferencias. Ambos pasos utilizan la sintaxis familiar de scikit-learn. Además de evaluar el rendimiento del canal del modelo, también mostramos algunos ejemplos de predicciones:

Aquí está el resultado detallado: la ejecución del código anterior puede tardar unos minutos en completarse:

Nuestro canal está haciendo un trabajo sólido al clasificar el sentimiento en las reseñas. ¡Bien hecho!

Concluyendo

Este artículo lo guió a través de la definición de una canalización de un extremo a otro para la clasificación de opiniones utilizando Scikit-LLM y LLM previamente capacitados y disponibles gratuitamente desde puntos finales de API como Groq. Este es un enfoque versátil para utilizar la sintaxis clásica de scikit-learn en aplicaciones novedosas de aprendizaje automático impulsadas por LLM.