¡Bienvenido de nuevo a nuestra serie sobre el ajuste fino de modelos de lenguaje (LLMs)! En nuestra publicación anterior, exploramos el ajuste fino de LLMs utilizando Hugging Face (opens new window). Hoy, estamos cambiando nuestro enfoque a la plataforma de OpenAI. Si bien muchos asocian OpenAI principalmente con ChatGPT y el acceso a la clave de API para integrar capacidades de IA, hay otra característica poderosa: la capacidad de ajustar finamente modelos adaptados a tus necesidades específicas. Este proceso te permite utilizar la vasta base de conocimientos de modelos pre-entrenados mientras garantiza la compatibilidad y optimización con tu conjunto de datos específico.
En este blog, te guiaremos paso a paso sobre cómo ajustar finamente tu modelo utilizando la API de OpenAI. Ya sea que estés mejorando un chatbot, creando nuevos tipos de historias o configurando un sistema para responder preguntas, esta publicación te mostrará cómo aprovechar al máximo la función de ajuste fino de OpenAI.
# Prerrequisitos
Antes de comenzar, asegúrate de tener instalados los paquetes necesarios. Necesitarás el paquete datasets
para manejar nuestros datos y openai
para interactuar con la API de OpenAI. Abre tu terminal e ingresa el siguiente comando.
pip install datasets openai
La biblioteca datasets
es una herramienta versátil para cargar y manipular conjuntos de datos, especialmente útil para flujos de trabajo de aprendizaje automático.
Artículo relacionado: Cómo construir un modelo de recomendación (opens new window)
# Cargando el conjunto de datos
Comenzaremos cargando nuestro conjunto de datos. Con fines de demostración, estamos utilizando un conjunto de datos disponible en Hugging Face. Así es como puedes cargarlo:
from datasets import load_dataset
# Carga tu conjunto de datos desde Hugging Face
dataset = load_dataset("lamini/lamini_docs")
En este fragmento de código, cargamos nuestro conjunto de datos llamado "lamini/lamini_docs". Reemplaza esto con el nombre de tu conjunto de datos si es diferente.
# Explorando el conjunto de datos
Comprender tu conjunto de datos es crucial antes de continuar con el ajuste fino. Echemos un vistazo a la estructura de nuestro conjunto de datos:
dataset
Esto imprimirá resultados como estos:
DatasetDict({
train: Dataset({
features: ['question', 'answer', 'input_ids', 'attention_mask', 'labels'],
num_rows: 1260
})
test: Dataset({
features: ['question', 'answer', 'input_ids', 'attention_mask', 'labels'],
num_rows: 140
})
})
El siguiente paso es extraer los datos requeridos de este conjunto de datos y prepararlos para el entrenamiento.
Artículo relacionado: Construir una aplicación de búsqueda de imágenes (opens new window)
# Formateando los datos para el ajuste fino
El conjunto de datos se distribuye en divisiones de entrenamiento y prueba. Solo utilizaremos los datos de entrenamiento. Vamos a extraerlos.
import pandas as pd
train_dataset = dataset['train']
train_df = pd.DataFrame(train_dataset)
questions_answers = train_df[['question', 'answer']]
En este paso, solo extraeremos las preguntas y respuestas del marco de datos porque para el ajuste fino, principalmente necesitamos estos dos elementos.
OpenAI requiere que los datos estén en un formato JSONL específico para el ajuste fino. Cada línea debe ser un objeto JSON que represente un solo ejemplo de entrenamiento. Así es como puedes formatear tus datos:
with open('datos_ajuste_fino_formato_chat.jsonl', 'w') as jsonl_file:
for index, example in questions_answers.iterrows():
formatted_data = {
"messages": [
{"role": "system", "content": "Eres un asistente útil"},
{"role": "user", "content": example['question']},
{"role": "assistant", "content": example['answer']}
]
}
jsonl_file.write(json.dumps(formatted_data) + '\\n')
Nota: Nuestro objetivo es crear un chatbot y utilizar gpt-3.5-turbo para el ajuste fino, por eso estamos utilizando un formato de chat conversacional. Puedes ir a la página de formatos de chat (opens new window) de OpenAI para ver otros formatos.
# Subir tu conjunto de datos a OpenAI
Antes de realizar el ajuste fino, debes subir tu conjunto de datos formateado a OpenAI:
from openai import OpenAI
from pathlib import Path
client = OpenAI(api_key="tu_clave_api")
response = client.files.create(
file=Path('datos_ajuste_fino_formato_chat.jsonl'),
purpose='fine-tune'
)
Nota: Almacena de forma segura tu clave de API y nunca la expongas en bases de código compartidas o públicas. El parámetro purpose='fine-tune' indica que el archivo cargado está destinado al entrenamiento del modelo.
# Iniciar el proceso de ajuste fino
Con tus datos cargados, ahora puedes iniciar el proceso de ajuste fino:
fine_tune_response = client.fine_tuning.jobs.create(
training_file=response.id, # Utiliza el ID del archivo cargado
model="gpt-3.5-turbo" # Especifica el modelo que deseas ajustar finamente
)
print("Se ha iniciado el trabajo de ajuste fino con el ID:", fine_tune_response.id)
Esto comenzará el proceso de ajuste fino en el modelo seleccionado. El ID del trabajo te permitirá realizar un seguimiento del progreso de tu trabajo de ajuste fino.
Nota: Recibirás un correo electrónico con el nombre del modelo una vez que se haya completado el entrenamiento. Utilizarás ese nombre de modelo en la parte de prueba.
# Monitoreando el progreso del ajuste fino
Puedes monitorear el estado de tu trabajo de ajuste fino de la siguiente manera:
client.fine_tuning.jobs.retrieve("tu_id_de_trabajo_de_ajuste_fino")
Reemplaza "tu_id_de_trabajo_de_ajuste_fino" con el ID devuelto en el paso de creación del trabajo. Este comando proporciona información detallada sobre el estado y rendimiento del trabajo.
# Probando el modelo ajustado finamente
Después del ajuste fino, es hora de probar tu modelo. Así es como puedes generar completados utilizando tu modelo ajustado finamente:
completion = client.chat.completions.create(
model="tu_nombre_de_modelo_ajustado_finemente",
messages=[
{"role": "system", "content": "Eres un asistente útil."},
{"role": "user", "content": "Tu mensaje aquí"}
],
max_tokens=50
)
print(completion.choices[0].message.content)
Reemplaza "tu_nombre_de_modelo_ajustado_finemente"
y "Tu mensaje aquí"
con tu nombre de modelo y el mensaje de prueba, respectivamente.
A estas alturas, deberías tener un modelo ajustado finamente según tus necesidades, pero esto es solo el comienzo con OpenAI. Esta plataforma te permite entrenar modelos aún más avanzados y complejos, expandiendo tus posibilidades de IA.
# Comparación del ajuste fino de LLMs utilizando Hugging Face y OpenAI
Después de la descripción general y el funcionamiento de ambas técnicas, hagamos una comparación.
Factor | Hugging Face | OpenAI |
---|---|---|
Facilidad de uso | Interfaz fácil de usar. Documentación completa pero requiere un sólido conocimiento de aprendizaje automático. | Sencillo y requiere cierta familiaridad con el aprendizaje automático. |
Disponibilidad de modelos | Amplia gama de modelos pre-entrenados (BERT, GPT, etc.). | Se centra principalmente en variantes de GPT, con una alta optimización. También ofrece Jurassic-1 Jumbo (QA) y Codex (generación de código). |
Personalización | Amplias opciones de personalización para el ajuste fino. | Proceso de personalización simplificado, menos granular que Hugging Face. |
Privacidad de datos | Opciones sólidas: permite el procesamiento local o en la nube privada. | Sólido, principalmente basado en la nube. Puede no satisfacer todas las necesidades de sensibilidad de datos. |
Rendimiento | Varía según el modelo y la configuración, escalable con el hardware adecuado. | Alto rendimiento, especialmente en comprensión y generación de lenguaje. |
Escalabilidad | Escalabilidad gestionada por el usuario, según el hardware y el tamaño del conjunto de datos. | Gestionado por OpenAI, menos preocupación del usuario por la infraestructura. |
Costo | Niveles gratuitos y de pago, rentable con una buena gestión (especialmente el procesamiento local). | Precios basados en el uso, puede ser costoso a gran escala. |
Comunidad y soporte | Gran comunidad activa con foros, tutoriales y proyectos compartidos. | Fuertes canales y documentación oficiales, menos impulsado por la comunidad. |
Funciones adicionales | La biblioteca TRL simplifica el ajuste fino (SFT, RLHF) | API fácil de usar para la integración de aplicaciones |
Ambas técnicas de ajuste fino tienen sus ventajas y desventajas, pero depende principalmente de tu caso de uso. Si deseas privacidad de datos y tienes ciertos conocimientos técnicos, puedes optar por Hugging Face; de lo contrario, puedes adoptar OpenAI.
# Conclusión
El ajuste fino de LLMs utilizando la API de OpenAI te ofrece un enfoque eficiente y potente para personalizar modelos de lenguaje según tus necesidades específicas. Siguiendo los pasos descritos en este artículo, puedes ajustar finamente tu modelo de manera eficiente, asegurando que entregue resultados personalizados y de alta calidad. Recuerda que la efectividad del ajuste fino depende en gran medida de la calidad y relevancia de tus datos de entrenamiento. Invierte tiempo en curar y estructurar tu conjunto de datos para garantizar los mejores resultados de tus esfuerzos de ajuste fino.
El ajuste fino de un modelo puede implicar generar incrustaciones o vectores para los datos de entrada. En algunos casos, estas incrustaciones se pueden almacenar en una base de datos de vectores para una recuperación eficiente o una búsqueda de similitud. Por ejemplo, si ajustas finamente un modelo de lenguaje para una aplicación específica como la clasificación de documentos, MyScale (opens new window), una base de datos de vectores SQL, está diseñada para aplicaciones de IA y logra un rendimiento rápido en la recuperación o búsqueda de similitud. Es altamente accesible para los desarrolladores, ya que solo se requiere SQL para la interacción.
Para tus comentarios o sugerencias, puedes contactarnos en el Discord de MyScale (opens new window).