Saltar al contenido principal
InicioTutorialesInteligencia Artificial (IA)

Guía introductoria para perfeccionar los LLM

La puesta a punto de grandes modelos lingüísticos (LLM) ha revolucionado el Procesamiento del Lenguaje Natural (PLN), ofreciendo capacidades sin precedentes en tareas como la traducción de idiomas, el análisis de sentimientos y la generación de textos. Este enfoque transformador aprovecha modelos preentrenados como GPT-2, mejorando su rendimiento en dominios específicos mediante el proceso de ajuste fino.
may 2024  · 12 min leer

En el último año y medio, el campo del procesamiento del lenguaje natural (PLN) ha experimentado una importante transformación debido a la popularización de los modelos de lenguaje de gran tamaño (LLM). Las habilidades de lenguaje natural que presentan estos modelos han permitido aplicaciones que parecían imposibles de conseguir hace unos años.

Los LLM están superando los límites de lo que antes se consideraba factible, con capacidades que van desde la traducción de idiomas hasta el análisis de sentimientos y la generación de textos.

Sin embargo, todos sabemos que entrenar esos modelos lleva mucho tiempo y es caro. Por eso, el ajuste fino de los grandes modelos lingüísticos es importante para adaptar estos algoritmos avanzados a tareas o dominios específicos.

Este proceso mejora el rendimiento del modelo en tareas especializadas y amplía considerablemente su aplicabilidad en diversos campos. Esto significa que podemos aprovechar la capacidad de procesamiento del lenguaje natural de los LLM preentrenados y seguir entrenándolos para que realicen nuestras tareas específicas.

Hoy exploraremos la esencia de los modelos lingüísticos preformados y profundizaremos en el proceso de ajuste.

Naveguemos, pues, por los pasos prácticos para afinar un modelo como GPT-2 utilizando Hugging Face.

Cómo funcionan los modelos lingüísticos preformados

El modelo lingüístico es un tipo de algoritmo de aprendizaje automático diseñado para predecir la palabra siguiente de una frase, a partir de sus segmentos precedentes. Se basa en la arquitectura Transformers, que se explica en profundidad en nuestro artículo sobre Cómo funcionan los Transformers.

Los modelos lingüísticos preformados, como GPT (Generative Pre-trained Transformer), se entrenan con grandes cantidades de datos de texto. Esto permite a los LLM comprender los principios fundamentales que rigen el uso de las palabras y su disposición en el lenguaje natural.

Imagen del autor. Entrada y salida de LLM.

Imagen del autor. Entrada y salida de LLM.

Lo más importante es que estos modelos no sólo son buenos comprendiendo el lenguaje natural, sino también generando textos similares a los humanos a partir de la información que reciben.

¿Y lo mejor de todo?

Estos modelos ya están abiertos a las masas mediante API. Si quieres aprender a sacar partido de los LLM más potentes de OpenAI, puedes aprender a hacerlo siguiendo esta hoja de trucos sobre la API de OpenAI.

¿Qué es el ajuste fino y por qué es importante?

El ajuste fino es el proceso de tomar un modelo preentrenado y seguir entrenándolo en un conjunto de datos específicos del dominio.

La mayoría de los modelos LLM actuales tienen un rendimiento global muy bueno, pero fallan en problemas orientados a tareas específicas. El proceso de ajuste ofrece ventajas considerables, como la reducción de los gastos de cálculo y la posibilidad de aprovechar modelos de vanguardia sin necesidad de construir uno desde cero.

Los transformadores permiten acceder a una amplia colección de modelos preentrenados adecuados para diversas tareas. El ajuste de estos modelos es un paso crucial para mejorar su capacidad de realizar tareas específicas, como el análisis de sentimientos, la respuesta a preguntas o el resumen de documentos, con mayor precisión.

Imagen del autor. Visualización del proceso de ajuste.

Imagen del autor. Visualización del proceso de ajuste.

El ajuste fino adapta el modelo para que tenga un mejor rendimiento en tareas específicas, lo que lo hace más eficaz y versátil en aplicaciones del mundo real. Este proceso es esencial para adaptar un modelo existente a una tarea o dominio concretos.

La decisión de realizar un ajuste fino depende de sus objetivos, que suelen variar en función del ámbito o la tarea específicos.

Los distintos tipos de ajuste fino

La puesta a punto puede enfocarse de varias maneras, dependiendo principalmente de su enfoque principal y sus objetivos específicos.

Ajuste fino supervisado

El método de ajuste más sencillo y habitual. Además, el modelo se entrena en un conjunto de datos etiquetados específicos de la tarea que se va a realizar, como la clasificación de textos o el reconocimiento de entidades con nombre.

Por ejemplo, podríamos entrenar nuestro modelo en un conjunto de datos que contenga muestras de texto etiquetadas con su sentimiento correspondiente para el análisis de sentimientos.

Aprendizaje con pocos disparos

En algunos casos, no resulta práctico recopilar un gran conjunto de datos etiquetados. El aprendizaje con pocas imágenes intenta solucionar este problema proporcionando algunos ejemplos (o imágenes) de la tarea requerida al principio de las instrucciones de entrada. Esto ayuda al modelo a tener un mejor contexto de la tarea sin un extenso proceso de ajuste.

Aprendizaje por transferencia

Aunque todas las técnicas de ajuste fino son una forma de aprendizaje por transferencia, esta categoría tiene como objetivo específico permitir que un modelo realice una tarea distinta de la tarea en la que se entrenó inicialmente. La idea principal es aprovechar los conocimientos que el modelo ha obtenido de un gran conjunto de datos generales y aplicarlos a una tarea más específica o relacionada.

Ajustes específicos de dominio

Este tipo de ajuste trata de adaptar el modelo para que comprenda y genere textos específicos de un determinado dominio o sector. El modelo se pone a punto en un conjunto de datos compuesto por texto del dominio de destino para mejorar su contexto y su conocimiento de las tareas específicas del dominio.

Por ejemplo, para generar un chatbot para una aplicación médica, el modelo se entrenaría con historiales médicos, para adaptar sus capacidades de comprensión del lenguaje al ámbito sanitario.

Guía paso a paso para perfeccionar un LLM

Ya sabemos que el ajuste fino es el proceso de tomar un modelo preentrenado y actualizar sus parámetros entrenándolo en un conjunto de datos específico para su tarea. Ejemplifiquemos este concepto ajustando un modelo real.

Imaginemos que estamos trabajando con GPT-2, pero detectamos que es bastante malo a la hora de inferir los sentimientos de los tuits.

Una pregunta natural que nos viene a la mente es: ¿Podemos hacer algo para mejorar su rendimiento?

Podemos aprovechar el ajuste entrenando nuestro modelo GPT-2 preentrenado a partir del modelo Cara de abrazo con un conjunto de datos que contenga tuits y sus correspondientes sentimientos para que el rendimiento mejore. He aquí un ejemplo básico de puesta a punto de un modelo de clasificación de secuencias:

Paso 1: Elegir un modelo preentrenado y un conjunto de datos

Para afinar un modelo, siempre necesitamos tener en mente un modelo preentrenado. En nuestro caso, vamos a realizar algunos ajustes sencillos utilizando GPT-2.

Captura de pantalla de Hugging Face Datasets Hub. Selección del modelo GPT2 de OpenAI.

Captura de pantalla de Hugging Face Datasets Hub. Selección del modelo GPT2 de OpenAI.

Tenga siempre presente que debe seleccionar un modelo de arquitectura adecuado para su tarea.

Paso 2: Cargar los datos a utilizar

Ahora que tenemos nuestro modelo, necesitamos datos de buena calidad con los que trabajar, y aquí es precisamente donde entra en juego la biblioteca datasets.

En mi caso, utilizaré la biblioteca de conjuntos de datos Hugging Face para importar un conjunto de datos que contenga tweets segmentados por su sentimiento (Positivo, Neutral o Negativo).

from datasets import load_dataset

dataset = load_dataset("mteb/tweet_sentiment_extraction")
df = pd.DataFrame(dataset['train'])

Si comprobamos el conjunto de datos que acabamos de descargar, se trata de un conjunto de datos que contiene un subconjunto para entrenamiento y otro para pruebas. Si convertimos el subconjunto de entrenamiento en un marco de datos, tiene el siguiente aspecto.

El conjunto de datos que se utilizará.

El conjunto de datos que se utilizará.

Paso 3: Tokenizer

Ahora que ya tenemos nuestro conjunto de datos, necesitamos un tokenizador para prepararlo para ser analizado por nuestro modelo.

Como los LLM trabajan con tokens, necesitamos un tokenizador para procesar el conjunto de datos. Para procesar su conjunto de datos en un solo paso, utilice el método Mapa de conjuntos de datos para aplicar una función de preprocesamiento a todo el conjunto de datos.

Por eso, el segundo paso consiste en cargar un Tokenizer preentrenado y tokenizar nuestro conjunto de datos para poder utilizarlo para el ajuste fino.

from transformers import GPT2Tokenizer

# Loading the dataset to train our model
dataset = load_dataset("mteb/tweet_sentiment_extraction")

tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
tokenizer.pad_token = tokenizer.eos_token
def tokenize_function(examples):
   return tokenizer(examples["text"], padding="max_length", truncation=True)

tokenized_datasets = dataset.map(tokenize_function, batched=True)

BONO: Para mejorar nuestros requisitos de procesamiento, podemos crear un subconjunto más pequeño del conjunto de datos completo para afinar nuestro modelo. El conjunto de entrenamiento se utilizará para afinar nuestro modelo, mientras que el conjunto de pruebas se utilizará para evaluarlo.

small_train_dataset = tokenized_datasets["train"].shuffle(seed=42).select(range(1000))
small_eval_dataset = tokenized_datasets["test"].shuffle(seed=42).select(range(1000))

Paso 4: Inicializar nuestro modelo base

Empiece cargando su modelo y especifique el número de etiquetas previstas. A partir de la ficha del conjunto de datos de sentimiento del Tweet, sabes que hay tres etiquetas:

from transformers import GPT2ForSequenceClassification

model = GPT2ForSequenceClassification.from_pretrained("gpt2", num_labels=3)

Paso 5: Evaluar el método

Transformers ofrece una clase Trainer optimizada para la formación. Sin embargo, este método no incluye cómo evaluar el modelo. Por eso, antes de empezar nuestro entrenamiento, tendremos que pasar a Trainer una función para evaluar el rendimiento de nuestro modelo.

import evaluate

metric = evaluate.load("accuracy")

def compute_metrics(eval_pred):
   logits, labels = eval_pred
   predictions = np.argmax(logits, axis=-1)
   return metric.compute(predictions=predictions, references=labels)

Paso 6: Ajuste con el método Trainer

Nuestro último paso es configurar los argumentos de entrenamiento e iniciar el proceso de entrenamiento. La biblioteca Transformers contiene la clase Trainer, que admite una amplia gama de opciones y funciones de entrenamiento, como el registro, la acumulación de gradientes y la precisión mixta. En primer lugar, definimos los argumentos de entrenamiento junto con la estrategia de evaluación. Una vez definido todo, podemos entrenar fácilmente el modelo utilizando simplemente el comando train().

from transformers import TrainingArguments, Trainer

training_args = TrainingArguments(
   output_dir="test_trainer",
   #evaluation_strategy="epoch",
   per_device_train_batch_size=1,  # Reduce batch size here
   per_device_eval_batch_size=1,    # Optionally, reduce for evaluation as well
   gradient_accumulation_steps=4
   )


trainer = Trainer(
   model=model,
   args=training_args,
   train_dataset=small_train_dataset,
   eval_dataset=small_eval_dataset,
   compute_metrics=compute_metrics,

)

trainer.train()

Tras el entrenamiento, evalúe el rendimiento del modelo en un conjunto de validación o prueba. De nuevo, la clase de entrenador ya contiene un método de evaluación que se encarga de esto.

import evaluate

trainer.evaluate()

Estos son los pasos más básicos para realizar un ajuste fino de cualquier LLM. Recuerde que el ajuste fino de un LLM es muy exigente desde el punto de vista computacional, y es posible que su ordenador local no tenga potencia suficiente para hacerlo.

Puedes aprender a afinar LLMs más potentes directamente en la interfaz de OpenAI siguiendo este tutorial sobre Cómo afinar GPT 3.5.

Perfeccionar las buenas prácticas

Para garantizar el éxito de la puesta a punto, tenga en cuenta las siguientes buenas prácticas:

Calidad y cantidad de datos

La calidad del conjunto de datos de ajuste influye considerablemente en el rendimiento del modelo. Todos conocemos la frase:

"Gargabe in, Garbage Out" (basura dentro, basura fuera)

Por lo tanto, asegúrese siempre de que los datos estén limpios, sean pertinentes y lo suficientemente amplios.

Ajuste de hiperparámetros

La puesta a punto suele ser un proceso largo que requiere repeticiones. Explore siempre varias configuraciones para las tasas de aprendizaje, los tamaños de lote y el número de épocas de entrenamiento para identificar la mejor configuración para su proyecto.

Los ajustes precisos son fundamentales para garantizar que el modelo aprenda de forma eficaz y se adapte bien a los datos no vistos, evitando el escollo del sobreajuste.

Evaluación periódica

Evalúe periódicamente el progreso del modelo durante la formación para comprobar su eficacia y aplicar las modificaciones necesarias. Se trata de evaluar el rendimiento del modelo utilizando un conjunto de datos de validación distinto durante todo el periodo de entrenamiento.

Esta evaluación es fundamental para determinar el rendimiento del modelo en la tarea en cuestión y su potencial de sobreajuste al conjunto de datos de entrenamiento. En función de los resultados de la fase de validación, pueden realizarse los ajustes necesarios para optimizar el rendimiento.

Evitar las trampas de la puesta a punto del LLM

A veces, el ajuste puede conducir a resultados subóptimos. Ten cuidado con las siguientes trampas:

Sobreajuste

Utilizar un conjunto de datos pequeño para el entrenamiento o ampliar excesivamente el número de épocas puede producir un sobreajuste. Esto suele caracterizarse porque el modelo muestra una gran precisión en nuestro conjunto de datos de entrenamiento, pero no consigue generalizarse a nuevos datos.

Insuficiente

Por el contrario, un entrenamiento insuficiente o una tasa de aprendizaje baja pueden dar lugar a un ajuste insuficiente, en el que el modelo no consigue aprender la tarea adecuadamente.

Olvido catastrófico

En el proceso de ajuste para una tarea concreta, existe el riesgo de que el modelo pierda los amplios conocimientos que adquirió inicialmente. Este problema, denominado olvido catastrófico, puede mermar la capacidad del modelo para rendir bien en diversas tareas de procesamiento del lenguaje natural.

Fuga de datos

Asegúrese siempre de que los conjuntos de datos de entrenamiento y validación están separados y de que no se solapan, ya que esto puede dar lugar a métricas de alto rendimiento engañosas.

Reflexiones finales y pasos futuros.

Embarcarse en el viaje de afinar grandes modelos lingüísticos abre un mundo de posibilidades para las aplicaciones de la IA.

Comprendiendo y aplicando los conceptos, prácticas y precauciones expuestos, se pueden adaptar eficazmente estos poderosos modelos para satisfacer necesidades específicas, liberando todo su potencial en el proceso.

Para seguir aprendiendo sobre el ajuste fino, te recomiendo encarecidamente que realices algunos ajustes finos más avanzados. Puede empezar con el curso Conceptos LLM de DataCamp, que abarca muchas de las metodologías de formación clave y las últimas investigaciones. Otros buenos recursos a seguir son:

Temas

Comience hoy mismo su viaje a la IA

Course

Introduction to LLMs in Python

4 hr
4.4K
Learn the nuts and bolts of LLMs and the revolutionary transformer architecture they are based on!
See DetailsRight Arrow
Start Course
Ver másRight Arrow
Relacionado

blog

Los mejores 8 LLM de código abierto para 2024 y sus usos

Descubre algunos de los LLM de código abierto más potentes y por qué serán cruciales para el futuro de la IA generativa
Javier Canales Luna's photo

Javier Canales Luna

13 min

tutorial

Cómo formar a un LLM con PyTorch

Domine el proceso de entrenamiento de grandes modelos lingüísticos con PyTorch, desde la configuración inicial hasta la implementación final.
Zoumana Keita 's photo

Zoumana Keita

8 min

tutorial

Ajuste fino de LLaMA 2: Guía paso a paso para personalizar el modelo de lenguaje grande

Aprende a ajustar Llama-2 en Colab utilizando nuevas técnicas para superar las limitaciones de memoria y computación y hacer más accesibles los grandes modelos lingüísticos de código abierto.
Abid Ali Awan's photo

Abid Ali Awan

12 min

tutorial

Tutorial sobre cómo crear aplicaciones LLM con LangChain

Explore el potencial sin explotar de los grandes modelos lingüísticos con LangChain, un marco Python de código abierto para crear aplicaciones avanzadas de IA.
Moez Ali's photo

Moez Ali

12 min

tutorial

Guía para principiantes sobre el uso de la API ChatGPT

Esta guía te acompanya a través de los fundamentos de la API ChatGPT, demostrando su potencial en el procesamiento del lenguaje natural y la comunicación impulsada por la IA.
Moez Ali's photo

Moez Ali

11 min

tutorial

Cómo ajustar GPT 3.5: Liberar todo el potencial de la IA

Explore GPT-3.5 Turbo y descubra el potencial transformador del ajuste fino. Aprenda a personalizar este modelo de lenguaje avanzado para aplicaciones especializadas, mejore su rendimiento y comprenda los costes asociados, la seguridad y las consideraciones de privacidad.
Moez Ali's photo

Moez Ali

11 min

See MoreSee More