Creación de datos sintéticos, un ejemplo práctico.

Generar datos sintéticos con GPT-4o-mini no se resuelve con un prompt: hay que definir estructura, rangos y separar reglas de lo que necesita el modelo.

Creación de datos sintéticos, un ejemplo práctico.

Creado: 2024-08-12 05:19


¿Qué son los datos sintéticos?

Los datos sintéticos son datos generados artificialmente que imitan las características de los datos reales sin replicar información sensible. Estos datos son creados mediante algoritmos y modelos estadísticos y pueden reproducir patrones y comportamientos que se dan en los datos reales.

Entre sus ventajas, podemos destacar:

  • No contienen información personal identificable, nos permiten usarlos sin comprometer la privacidad o la seguridad.
  • Pueden ser generados en grandes volúmenes.
  • Se adaptan para representar situaciones específicas o escenarios que podrían ser difíciles de observar en datos reales.

¿Para qué se usan los datos sintéticos?

Vale, pero ¿para qué podemos necesitar datos que no son reales? Pues hay un montón de aplicaciones en las que nos puede interesar disponer de una base de datos con las características que necesitamos. Algunos ejemplos:

  • Pruebas de software: Los podemos usar para probar sistemas en desarrollo sin exponer datos reales sensibles.
  • Entrenamiento de modelos de IA: Nos permiten entrenar algoritmos de machine learning sin comprometer la privacidad de los usuarios. Está habiendo mucho debate en estas semanas sobre si entrenar modelos de lenguaje con datos sintéticos degrada su calidad.
  • Investigación y desarrollo: Facilitan la investigación en áreas donde los datos reales son escasos o difíciles de conseguir.
  • Simulación de escenarios: Creación de entornos de prueba controlados para observar cómo un sistema reacciona ante diversas situaciones hipotéticas.

¿Cómo pueden ayudarnos los LLMs en esta tarea?

Hemos leído sobre la capacidad de los modelos de lenguaje para la generación de este tipo de datos. Os traigo una mala noticia, la cosa no es tan sencilla como decirle a ChatGPT que te genere 5000 filas con una estructura determinada. Sin embargo sí que podemos usar su capacidad de redacción, síntesis y clasificación para esta tarea.

Los LLMs pueden generar diálogos, descripciones y respuestas que imitan las interacciones humanas reales con bastante realismo, pueden producir una gran variedad de contenidos que reflejen diferentes niveles de complejidad, estilos y contextos y, sobre todo, nos permiten automatizar su generación, reduciendo el tiempo que necesitamos para preparar estos conjuntos de datos.

Ejemplo práctico: Datos sintéticos para probar una aplicación de educación online.

Pero vamos a ver cómo afrontaríamos la creación de un conjunto de datos. En este ejemplo, queremos crear una base de datos de contenidos para nutrir una aplicación de formación académica online.

Entender los datos

Como os decía, esto no se soluciona con un prompt y ya, salvo que queramos algo muy sencillo. Necesitaremos definir cómo son los datos que queremos y tener algunas nociones de programación. En mi caso lo he generado con Python pero, dependiendo de la complejidad, se podría hacer con Excel o con Google sheets.

En nuestro caso vamos a necesitar un número alto de contenidos con una estructura concreta. Estos serían los campos, o columnas de nuestra hoja de cálculo:

Campo Descripción id Identificador único del contenido formato Tipo de contenido: Reel o Vídeo título Título del contenido descripción Breve descripción del contenido duracion Duración en segundos url URL de Google Drive para el vídeo img URL de Google Drive para la imagen asociada puntuacion_media Puntuación promedio dada por los alumnos (1.00 - 5.00) Matemáticas True/False Ciencias Naturales True/False Historia True/False Lengua y Literatura True/False Inglés True/False fecha_publicacion Fecha de publicación (DD-MM-AAAA) popularidad Número de visualizaciones/interacciones etiquetas Palabras clave adicionales autor Autor o creador del contenido recomendado_para Grupo de alumnos para el que es más relevante

Como veis hemos definido unos campos con información sobre los contenidos. Como hay vídeos que pueden tocar varias asignaturas hemos definido un campo para cada una con los valores TRUE / FALSE.

También necesitaremos definir los parámetros entre los cuales se van a mover nuestros datos. Por ejemplo:

Formato :

Reel : Vídeos cortos con píldoras de información, de 15” a 30” de duración. Son un 75% de los contenidos

Vídeo : Videos más largos con contenido informativo específico. De 1’ a 2’ de duración. El 25% del contenido restante.

Categorías :

Matemáticas 10% del contenido Ciencias Naturales 20% del contenido Historia 30% del contenido Lengua y Literatura 20% del contenido Inglés 20% del contenido

Vemos claramente que hay dos tipos de contenido, contenido que podemos crear con reglas fijas, como el id, la duración, etc, y contenido para el que necesitaremos ayuda de un LLM en la redacción o clasificación. En nuestro caso no nos vamos a meter en la generación de imágenes para las miniaturas, sólo queremos una url ficticia, pero podríamos hacerlo usando un modelo de generación de vídeo.

Como os decía, para nuestra prueba hemos usado un notebook en Python. No voy a detenerme en detalle en el código, pero sí os explicaré algunos de los pasos.

Por ejemplo, definimos un diccionario con las categorías y los porcentajes de contenido que nuestra aplicación deberá generar y una lista con los grupos de alumnos para recomendar ese contenido. Aunque no sepas Python puedes intuir qué hace cada línea:

Crearemos una función que asigne aleatoriamente los valores de los campos para los que no necesitamos un modelo para su generación:

Y crearemos un prompt para los valores que tienen que generar el modelo:

En este caso usaremos el API de GPT4o-mini para generar nuestros contenidos y, más concretamente, la nueva funcionalidad “Structured outputs”, que nos permite que el modelo nos devuelva los datos en un formato que hemos definido previamente. Esto nos facilita enormemente el tratamiento programático de los datos y reduce alucinaciones en el modelo.

Para ello definimos una función con la que llamamos al modelo.

Y con esto, y algo más de código, podremos crear nuestros contenidos.

Que tendrían una pinta como esta