No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Preparar datos para fine-tuning

13/24
Recursos

Transformación de datos para Fine Tuning en OpenAI

La personalización de modelos de inteligencia artificial es una tarea claramente exigente pero crucial en la búsqueda de asistentes virtuales más eficientes y adaptados a necesidades específicas. Cuando nos referimos al fine tuning de modelos de OpenAI, se hace imperativo contar con una estructura de datos definida que permita entrenar de manera óptima a estos modelos. Hoy exploraremos cómo dar ese paso esencial mediante una herramienta automatizada que facilita el proceso.

¿Cuál es la estructura de datos requerida por OpenAI?

OpenAI demanda un formato particular denominado JSON-L para llevar a cabo el fine tuning de sus modelos. Este formato se organiza en registros que incluyen las partes "prompt" y "completion": el prompt representa la entrada proporcionada al modelo, y el completion es la respuesta deseada a esa entrada. Visualmente, estos registros se presentan entre llaves {}, clave en la preparación de los datos.

¿Cómo transformar datos al formato JSON-L?

Para transformar datos desde formatos comunes como CSV, TSV o JSON al formato JSON-L requerido, OpenAI ofrece herramientas convenientes dentro de su documentación, en la sección "Fine Tuning, Prepare Training Data." Es aquí donde el proceso se simplifica y deviene accesible incluso para aquellos con menos experiencia técnica.

El caso práctico de PlatziBot

Tomemos como ejemplo el ficticio "PlatziBot", un asistente pensado para interactuar con usuarios y recomendar cursos y rutas de aprendizaje de Platzi. Durante este ejercicio, se parte de un archivo CSV que contiene múltiples ejemplos, con prompts como "qué tipo de cursos o programas educativos ofrece Platzi" seguidos de su correspondiente completion. Este archivo con 1,955 ejemplos es el punto de partida para procesar los datos.

Pasos para la conversión de datos

  1. Análisis Preliminar: Es esencial revisar nuestros datos y conocer la cantidad exacta de ejemplos disponibles, así como identificar posibles duplicados o registros vacíos que no aportarían al entrenamiento.

  2. Ejecución del Comando: A través de la terminal, empleamos el comando proporcionado por OpenAI, adaptándolo al nombre de nuestro CSV, para iniciar la transformación hacia JSON-L.

  3. Limpieza de Datos: OpenAI asiste eliminando duplicados y registros vacíos automáticamente, asegurando que solo se utilicen datos idóneos para el entrenamiento del modelo.

  4. Ajustes Finales: El proceso incluye añadir sufijos específicos y espacios requeridos como parte de las reglas de OpenAI, para que los datos cumplan con los estándares necesarios.

Visualización y verificación de la transformación

Una vez realizado el proceso, es prudente revisar el nuevo archivo JSON-L, preferiblemente utilizando un editor de código como Visual Studio Code. De esta manera, podemos confirmar que la conversión se haya efectuado correctamente, verificando que cada prompt y completion poseen los caracteres y espacios añadidos que garantizan su compatibilidad con el modelo de OpenAI.

A medida que nos desarrollamos en este campo, se vuelve imperativo destacar la importancia de la calidad de los datos. Un modelo de IA será tan bueno como los datos con los que fue entrenado. Es por ello que no solo debemos concentrarnos en la transformación de formatos, sino también en el contexto, la extracción, transformación y limpieza de datos, elementos que juntos contribuirán al rendimiento óptimo del modelo personalizado. Continuaremos aprendiendo y profundizando en este proceso en nuestras próximas sesiones, siempre con datos precisos y métodos eficaces para alcanzar la excelencia en la personalización de IA.

Aportes 14

Preguntas 6

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

La limipieza de datos es fundamental para cualquier entrenamiento de algun modelo, esto se ve reflejado desde los fundamentos del pensamiento probabilistico.
Saber más de Garbage in,garbage out: https://platzi.com/clases/1841-probabilistica/26582-garbage-in-garbage-out/

openai tools fine_tunes.prepare_data -f file_name.csv
Esto cambió. Ahora se genera un archivo jsonl para interactuar con el modelo gpt-3.5-turbo Este es el formato: ```js {"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already."}]} {"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?"}]} {"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters."}]} ```Como mínimo debes usar 10 ejemplos. Y puedes generar el modelo directamente desde la web ![](https://static.platzi.com/media/user_upload/image-254a3bcd-b619-442b-b119-951bfd797d84.jpg)
Los tokens que usará el data\_val.jsonl son ~109116 y el costo en openAI hoy en día cambió y ahora es 8USD/1M... entonces sería así 109.116/1.000.000 = 0,109116 0,109116\*8 = 0,87 UDS
Cree este codigo para mi proyecto para importar desde excel las preguntas y respuestas. Al que le sirva, bien pueda. import pandas as pd while True: try: archivo = "./Documentos/data.xlsx" break except: continue sistema = input("Indicame el rol: ")puntero = open("./Documentos/finetunning.jsonl", "w")dataframe = pd.read\_excel(archivo) for index, row in dataframe.iterrows(): pregunta = row\["pregunta"] respuesta = row\["respuesta"] mensaje = '{"messages":\[{"role":"system","content":"' + sistema + '"},{"role":"user","content":"' + pregunta +'"},{"role":"assistant","content":"' + respuesta + '"}]}\n' puntero.write(mensaje) puntero.close()
Si en lugar de hacerlo en una maquina local, prefieren usar Google Colab es posible. El `.csv` lo tienen que arrastrar dentro de la carpeta "Archivos" en Google Colab y ponerle un nombre simple, en mi caso `data.csv`. Luego en el Colab, crean una nueva linea de código y ponen `!` al principio para indicar que es comando de bash y no python. El comando es el siguiente: ```bash !yes | openai tools fine\_tunes.prepare\_data -f data.csv ``` `yes` es un programa que responde siempre "yes" al output de un programa de consola. Como Colab no soporta responder, de otra forma quedaríamos trabados. Luego ejecutamos el comando de openai para `fine_tunes` y listo, en menos de un minuto se genera `data_prepared.jsonl`

Si no tienes datos, te recomiendo este curso: Curso de Web Scraping: Extracción de Datos en la Web

Así aprendes más (a scrapear web’s) y ya tienes tus datos

Si estan en linux o wsl2 y les aparece este error:

PermissionError: [Errno 13] Permission denied: 'data_prepared.jsonl'

Acuerdense de habiliatar las propiedades de lectura y escritura del archivo csv usando

cmod
Una asesoria cual es la mejor forma de convertir archivos a formato jsonl, ya que en el finetunning me ha arorjado error en el formato.
Los tokens que usará el data\_val.jsonl son 109116 y el costo en openAI hoy en día cambió y si utilizamos el modelo gpt-4o-mini su valor a hoy es 3USD/1M training tokens, entonces sería así: 109.116/1.000.000 = 0,109116 0,109116\*3 = 0,33 UDS
Dataset has ~36372 tokens that will be charged for during training By default, you'll train for 3 epochs on this dataset By default, you'll be charged for ~109116 tokens
En caso que no les lea la ruta les recomiendo esta opciòn: from google.colab import filesuploaded = files.upload() import json \# Nombre del archivo cargadodata\_path = 'data\_train.jsonl' \# Cargar datasetwith open(data\_path, 'r', encoding='utf-8') as f:    dataset = \[json.loads(line) for line in f] \# Análisis inicial del datasetprint("Num examples:", len(dataset))print("First example:")for message in dataset\[0]\["messages"]:    print(message)
Hay una web donde pueden encontrar diferentes datasets. Yo voy a tomar dos datasets de esa web para hacer fine tunning buscando que el modelo responda como en una conversaión de whatsapp y añadirle una personalidad al modelo <https://www.kaggle.com/>
**¿Cómo funciona el Fine-tuning para permitir el entrenamiento en más ejemplos de los que caben en un prompt?**