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 12

Preguntas 5

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)
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`
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
Para poder cargar el archivo usando windows, es necesario subirlo al notebook en la secci贸n de Archivos: ![](https://static.platzi.com/media/user_upload/image-52bd963d-27f4-44fd-86db-2d0748b6478e.jpg)

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鈥檚) 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
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?**