Del texto a las tablas: ingeniería de funciones con LLM para datos tabulares

En este artículo, aprenderá a utilizar un modelo de lenguaje grande previamente entrenado para extraer características estructuradas del texto y combinarlas con columnas numéricas para entrenar un clasificador supervisado.

Los temas que cubriremos incluyen:

Crear un conjunto de datos de juguete con texto mixto y campos numéricos para clasificación Usar un modelo LLaMA alojado en Groq para extraer características JSON del texto del ticket con un esquema Pydantic Entrenar y evaluar un clasificador scikit-learn en el conjunto de datos tabulares diseñado

No perdamos más tiempo.

Del texto a las tablas: ingeniería de funciones con LLM para datos tabulares
Imagen del editor

Introducción

Si bien los modelos de lenguaje grande (LLM) generalmente se usan con fines conversacionales en casos de uso que giran en torno a interacciones de lenguaje natural, también pueden ayudar con tareas como la ingeniería de funciones en conjuntos de datos complejos. Específicamente, puede aprovechar los LLM previamente capacitados de proveedores como Groq (por ejemplo, modelos de la familia Llama) para llevar a cabo tareas de preprocesamiento y transformación de datos, incluida la conversión de datos no estructurados, como texto, en datos tabulares completamente estructurados que pueden usarse para impulsar modelos predictivos de aprendizaje automático.

En este artículo, lo guiaré a través del proceso completo de aplicación de ingeniería de características al texto estructurado, convirtiéndolo en datos tabulares adecuados para un modelo de aprendizaje automático, es decir, un clasificador entrenado en características creadas a partir de texto mediante un LLM.

Configuración e importaciones

Primero, realizaremos todas las importaciones necesarias para este ejemplo práctico:

Tenga en cuenta que además de las bibliotecas comunes para el aprendizaje automático y el preprocesamiento de datos como scikit-learn, importamos la clase OpenAI, no porque usaremos directamente un modelo OpenAI, sino porque muchas API de LLM (incluidas las de Groq) han adoptado el mismo estilo de interfaz y especificaciones que OpenAI. Por lo tanto, esta clase lo ayuda a interactuar con una variedad de proveedores y acceder a una amplia gama de LLM a través de un solo cliente, incluidos los modelos Llama a través de Groq, como veremos en breve.

A continuación, configuramos un cliente Groq para permitir el acceso a un LLM previamente entrenado al que podemos llamar a través de API para realizar inferencias durante la ejecución:

Nota importante: para que el código anterior funcione, debe definir una clave secreta API para Groq. En Google Colab, puedes hacer esto a través del ícono "Secretos" en la barra lateral izquierda (este ícono parece una llave). Aquí, asigne a su clave el nombre 'GROQ_API_KEY', luego regístrese en el sitio web de Groq para obtener una clave real y péguela en el campo de valor.

Crear un conjunto de datos de boletos de juguete

El siguiente paso genera un conjunto de datos de juguetes sintéticos, parcialmente aleatorios, con fines ilustrativos. Si tiene su propio conjunto de datos de texto, no dude en adaptar el código en consecuencia y utilizar el suyo propio.

El conjunto de datos generado contiene tickets de atención al cliente, combinando descripciones de texto con características numéricas estructuradas como la antigüedad de la cuenta y la cantidad de tickets anteriores, así como una etiqueta de clase que abarca varias categorías de tickets. Estas etiquetas se utilizarán posteriormente para entrenar y evaluar un modelo de clasificación al final del proceso.

Extracción de características de LLM

A continuación, definimos las características tabulares deseadas que queremos extraer del texto. La elección de funciones depende del dominio y es totalmente personalizable, pero utilizará el LLM más adelante para extraer estos campos en un formato estructurado y coherente:

Por ejemplo, la urgencia y la frustración a menudo se correlacionan con tipos de tickets específicos (por ejemplo, los bloqueos e interrupciones del acceso tienden a ser más urgentes y cargados emocionalmente que las consultas generales), por lo que estas señales pueden ayudar a un clasificador posterior a separar categorías de manera más efectiva que el texto sin formato por sí solo.

La siguiente función es un elemento clave del proceso, ya que encapsula la integración LLM necesaria para transformar el texto de un ticket en un objeto JSON que coincida con nuestro esquema.

¿Por qué la función devuelve objetos JSON? Primero, JSON es una forma confiable de pedirle a un LLM que produzca resultados estructurados. En segundo lugar, los objetos JSON se pueden convertir fácilmente en objetos de la serie Pandas, que luego se pueden fusionar sin problemas con otras columnas de un DataFrame existente para convertirse en columnas nuevas. Las siguientes instrucciones funcionan y agregan las nuevas funciones, almacenadas en Engineered_features, al resto del conjunto de datos original:

Así es como se ven los datos tabulares resultantes:

Nota práctica sobre costo y latencia: llamar a un LLM una vez por fila puede resultar lento y costoso en conjuntos de datos más grandes. En producción, normalmente querrás (1) solicitudes por lotes (procesar muchos tickets por llamada, si tu proveedor y el diseño del mensaje lo permiten), (2) almacenar en caché los resultados codificados por un identificador estable (o un hash del texto del ticket) para que las repeticiones no vuelvan a facturar los mismos ejemplos, y (3) implementar reintentos con retroceso para manejar límites de tarifas transitorios y errores de red. Estas tres prácticas suelen hacer que el proceso sea más rápido, más económico y mucho más confiable.

Entrenamiento y evaluación del modelo

Finalmente, aquí viene el proceso de aprendizaje automático, donde el conjunto de datos actualizado y completamente tabular se escala, se divide en subconjuntos de entrenamiento y prueba, y se utiliza para entrenar y evaluar un clasificador de bosque aleatorio.

Aquí están los resultados del clasificador:

Si utilizó el código para generar un conjunto de datos de juguetes sintéticos, es posible que obtenga un resultado del clasificador bastante decepcionante en términos de exactitud, precisión, recuperación, etc. Esto es normal: en aras de la eficiencia y la simplicidad, utilizamos un conjunto pequeño, parcialmente aleatorio, de 100 instancias, que normalmente es demasiado pequeño (y posiblemente demasiado aleatorio) para funcionar bien. La clave aquí es el proceso de convertir texto sin formato en características significativas mediante el uso de un LLM previamente capacitado a través de API, que debería funcionar de manera confiable.

Resumen

Este artículo realiza un breve recorrido por el proceso de convertir texto sin formato en funciones totalmente tabulares para el modelado de aprendizaje automático posterior. El truco clave que se muestra a lo largo del camino es utilizar un LLM previamente capacitado para realizar inferencias y devolver resultados estructurados mediante indicaciones efectivas.