Crear datos sintéticos de calidad es una necesidad constante en proyectos de inteligencia artificial, analítica y desarrollo de software. Aprovechar modelos de lenguaje como GPT-4 para generar datasets personalizados abre posibilidades enormes: desde poblar bases de datos con información realista hasta entrenar otros modelos con instrucciones generadas automáticamente. A continuación se explica paso a paso cómo lograrlo usando Python y la API de OpenAI.
¿Por qué usar inteligencia artificial para generar datos?
La generación de datos es uno de los procesos más relevantes al entrenar modelos de IA o al necesitar datos dummy para ingesta y analítica [0:06]. Un caso real y notable es Alpaca de Stanford, un modelo que utilizó GPT-3.5 para generar instrucciones de forma continua y luego reutilizarlas como dataset de entrenamiento [0:18]. Es decir, inteligencia artificial generando texto e instrucciones para reentrenar otros modelos de inteligencia artificial.
Esta misma técnica se puede aplicar para llenar tablas en SQL, crear datos dummy en Python, R o cualquier otro lenguaje que se necesite.
¿Cómo configurar el entorno y conectarse a la API de OpenAI?
El primer paso es importar la librería de OpenAI, que permite conectarse a través de la API para consumir modelos LLM (Large Language Models) [1:03]. La autenticación se realiza con una llave almacenada en una variable de entorno, lo cual es una buena práctica de seguridad.
python
import openai
import os
openai.api_key = os.getenv("OPENAI_API_KEY")
¿Cómo diseñar el prompt para obtener datos estructurados?
Se construye un prompt que le indica al modelo qué debe generar [1:17]. En este caso se le pide:
- Una descripción breve de un producto.
- Un nombre de compañía ficticio asociado a ese producto.
- Que la salida sea en formato JSON.
Se incluye un ejemplo dentro del prompt, como el producto "auto" con la descripción "auto eléctrico de color rojo, amigable con el medio ambiente" y la compañía "EcoCar" [1:32]. Este enfoque se conoce como few-shot prompting: dar ejemplos concretos para que el modelo entienda el formato esperado.
¿Cómo crear la función generadora de datos?
Se define una función que recibe un producto como variable de entrada, lo envía al modelo GPT-4 junto con el prompt y retorna la respuesta en formato JSON [2:05].
python
def generar_datos(producto):
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": f"{prompt}\nInput: {producto}"}]
)
return response.choices[0].message.content
Al probar con el producto "silla", el modelo devuelve algo como: descripción "silla ergonómica, ajustable, de diseño moderno y cómodo", compañía "Comseat" [2:25]. La ventaja clave es que los textos no son exactamente iguales entre sí, gracias al motor de entendimiento del lenguaje que subyace.
¿Cómo escalar la generación a múltiples productos?
Primero se genera una lista de productos variados. En el ejemplo se crearon 10 elementos: silla, mesa, computadora, casa, cama, libro, cuaderno, pluma, entre otros [2:50].
Luego se itera sobre esa lista usando un bloque try/except para manejar excepciones si alguna petición falla [3:10]:
python
descripciones = []
productos_ok = []
for producto in productos:
try:
resultado = generar_datos(producto)
descripciones.append(resultado)
productos_ok.append(producto)
except:
pass
¿Cómo convertir los resultados en un DataFrame de pandas?
Una vez generado el dataset completo, se valida la información y se transforma en un DataFrame con pd.DataFrame [4:08]. Inicialmente se tienen dos columnas: producto y descripción en formato JSON.
Para separar la descripción y la compañía en columnas independientes, se aplica una función que parsea el JSON de cada fila [4:38]:
python
df["Descripcion"] = df["Descripciones"].apply(lambda x: json.loads(x)["descripcion"])
df["Compania"] = df["Descripciones"].apply(lambda x: json.loads(x)["compania"])
El resultado final es un DataFrame limpio con tres columnas: producto, descripción y compañía, todo generado por inteligencia artificial [4:50].
Lo más valioso de este enfoque es su flexibilidad: se puede modificar el prompt para obtener cualquier tipo de dato, en cualquier formato. Se usó JSON porque facilita la conversión a DataFrames o la conexión con APIs, pero podría generarse en CSV, en sentencias SQL para poblar bases de datos, o en cualquier estructura que se requiera.
¿Te animas a probarlo con un formato distinto? Genera un dataset en CSV o en estructura SQL y comparte tus resultados en los comentarios.