Saltar al contenido principal

Guía introductoria para el ajuste preciso de los LLM

El ajuste preciso de los grandes modelos lingüísticos (LLM) ha revolucionado el procesamiento del lenguaje natural (PLN) y ofrece capacidades sin precedentes en tareas como la traducción lingüística, el análisis del sentimiento y la generación de textos. Este enfoque transformador aprovecha modelos preentrenados como el GPT-2 y mejora su rendimiento en dominios específicos mediante el proceso de ajuste preciso.
Actualizado 22 ago 2024  · 12 min de lectura

Durante 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 grandes modelos del lenguaje (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 alcanzable, con capacidades que van desde la traducción de idiomas al 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 preciso 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 significativamente su aplicabilidad en diversos campos. Esto significa que podemos aprovechar la capacidad de procesamiento del lenguaje natural de los LLM preentrenados y de código abierto y entrenarlos aún más para que realicen nuestras tareas específicas.

Hoy, explora la esencia de los modelos lingüísticos preentrenados y profundiza en el proceso de ajuste preciso.

Así pues, vamos a navegar por los pasos prácticos para afinar con precisión un modelo como el GPT-2 utilizando Hugging Face.

Comprender cómo funcionan los modelos lingüísticos preentrenados

El modelo lingüístico es un tipo de algoritmo de machine learning diseñado para predecir la palabra siguiente de una frase, a partir de sus segmentos anteriores. 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 preentrenados, como el 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 del LLM.

Imagen del autor. Entrada y salida del LLM.

Lo más importante es que estos modelos no solo son buenos comprendiendo el lenguaje natural, sino que también son buenos generando texto similar al humano 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 aprovechar las LLM más potentes de OpenAI, puedes aprender a hacerlo siguiendo esta hoja de trucos sobre la API de OpenAI.

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

El ajuste preciso 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 específicos orientados a tareas concretas. El proceso de ajuste preciso 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 dan acceso a una amplia colección de modelos preentrenados adecuados para diversas tareas. El ajuste preciso de estos modelos es un paso crucial para mejorar la capacidad del modelo de realizar tareas específicas, como el análisis del sentimiento, 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. Visualizar el proceso de ajuste preciso.

El ajuste preciso adapta el modelo para que tenga un mejor rendimiento en tareas específicas, haciendo 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 preciso depende de tus objetivos, que suelen variar en función del ámbito o la tarea específicos.

Los distintos tipos de ajuste preciso

El ajuste preciso puede enfocarse de varias formas, en función principalmente de su enfoque principal y de sus objetivos específicos.

Ajuste preciso supervisado

El enfoque 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, entrenaríamos nuestro modelo en un conjunto de datos que contiene muestras de texto etiquetadas con su correspondiente sentimiento para el análisis del sentimiento.

Aprendizaje con pocas tomas

En algunos casos, recopilar un gran conjunto de datos etiquetados no resulta práctico. El aprendizaje con pocas tomas intenta solucionar esto proporcionando unos cuantos ejemplos (o tomas) de la tarea requerida al principio de las indicaciones de entrada. Esto ayuda a que el modelo tenga un mejor contexto de la tarea sin un extenso proceso de ajuste preciso.

Aprendizaje por transferencia

Aunque todas las técnicas de ajuste preciso 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 fue entrenado inicialmente. La idea principal es aprovechar el conocimiento que el modelo ha obtenido de un gran conjunto de datos generales y aplicarlo a una tarea más específica o relacionada.

Ajuste preciso específico de dominio

Este tipo de ajuste intenta adaptar el modelo para que comprenda y genere texto específico de un dominio o sector concreto. 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

Ejecute y edite el código de este tutorial en línea

Ejecutar código

Ya sabemos que el ajuste preciso es el proceso de tomar un modelo preentrenado y actualizar sus parámetros entrenándolo en un conjunto de datos específico para tu tarea. Así pues, ejemplifiquemos este concepto ajustando un modelo real.

Imagina 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 me 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 Hugging Face con un conjunto de datos que contenga tuits y sus correspondientes sentimientos, de modo que mejore el rendimiento. He aquí un ejemplo básico de ajuste preciso 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 precisos sencillos utilizando GPT-2.

Captura de pantalla de Hugging Face Datasets Hub. Se selecciona el modelo GPT2 de OpenAI.

Captura de pantalla de Hugging Face Datasets Hub. Se selecciona el modelo GPT2 de OpenAI.

Ten siempre presente seleccionar un modelo de arquitectura adecuado a tu 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 tuits 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 va a utilizar.

El conjunto de datos que se va a utilizar.

Paso 3: Tokenizador

Ahora que ya tenemos nuestro conjunto de datos, necesitamos un tokenizador que lo prepare para que lo analice nuestro modelo.

Como los LLM trabajan con tokens, necesitamos un tokenizador para procesar el conjunto de datos. Para procesar tu conjunto de datos en un solo paso, utiliza el método de mapa de conjuntos de datos para aplicar una función de preprocesamiento sobre 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 en el ajuste preciso.

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)

CONSEJO EXTRA: 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 realizar un ajuste preciso 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

Empieza cargando tu modelo y especifica el número de etiquetas previstas. Por la ficha del conjunto de datos de sentimiento del tuit, sabes que hay tres etiquetas:

from transformers import GPT2ForSequenceClassification

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

Paso 5: Evaluar el método

Transformers proporciona una clase de entrenador optimizada para el entrenamiento. Sin embargo, este método no incluye cómo evaluar el modelo. Por eso, antes de empezar nuestro entrenamiento, tendremos que pasar a un entrenador 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 preciso utilizando el método del entrenador

Nuestro último paso es configurar los argumentos de entrenamiento e iniciar el proceso de entrenamiento. La biblioteca de transformadores contiene la clase entrenador, que admite una amplia gama de opciones y funciones de entrenamiento, como el registro, la acumulación de gradientes y la precisión mixta. Primero 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úa el rendimiento del modelo en un conjunto de validación o prueba. De nuevo, la clase 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 preciso de cualquier LLM. Recuerda que afinar un LLM es muy exigente desde el punto de vista computacional, y puede que tu ordenador local no tenga potencia suficiente para hacerlo.

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

Perfecciona las prácticas recomendadas

Para garantizar el éxito del ajuste preciso, ten en cuenta las siguientes buenas prácticas:

Calidad y cantidad de datos

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

“Garbage In, Garbage Out” (basura entra, basura sale)

Por tanto, asegúrate siempre de que los datos estén limpios, sean relevantes y suficientemente grandes.

Ajuste de hiperparámetros

El ajuste preciso suele ser un proceso largo que hay que repetir. Explora siempre varias configuraciones para los ritmos de aprendizaje, el tamaño de los lotes y el número de épocas de entrenamiento para identificar la mejor configuración para tu proyecto.

Unos ajustes precisos son fundamentales para garantizar que el modelo aprenda con eficacia y se adapte bien a los datos no vistos, para evitar el escollo del sobreajuste.

Evaluación periódica

Evalúa periódicamente el progreso del modelo durante el entrenamiento para hacer un seguimiento de su eficacia y aplicar las modificaciones necesarias. Esto implica evaluar el rendimiento del modelo utilizando un conjunto de datos de validación distinto a lo largo del periodo de entrenamiento.

Dicha 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. Según los resultados de la fase de validación, se pueden hacer los ajustes necesarios para optimizar el rendimiento.

Cómo evitar los escollos del ajuste preciso del LLM

El ajuste preciso a veces 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.

Subajuste

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 el amplio conocimiento que adquirió inicialmente. Este problema, denominado olvido catastrófico, puede disminuir la capacidad del modelo para rendir bien en diversas tareas de procesamiento del lenguaje natural.

Vulneración de datos

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

Ajuste preciso frente a RAG

RAG combina los puntos fuertes de los modelos basados en la recuperación y los modelos generativos. En el GAR, un componente recuperador busca en una gran base de datos o de conocimientos para encontrar información relevante en función de la consulta introducida. A continuación, un modelo generativo utiliza esta información recuperada para producir una respuesta más precisa y contextualmente relevante. Las principales ventajas del GAR son:

  • Integración dinámica del conocimiento: Incorpora información en tiempo real de fuentes externas, lo que la hace adecuada para tareas que requieren conocimientos actualizados o específicos.
  • Relevancia contextual: Mejora las respuestas del modelo generativo proporcionando contexto adicional a partir de los documentos recuperados.
  • Versatilidad: Puede manejar una gama más amplia de consultas, incluidas las que requieren información específica o poco frecuente con la que el modelo puede no haber sido entrenado.

Elegir entre ajuste preciso y RAG

Cuando decidas si utilizar el ajuste preciso o el RAG, ten en cuenta los siguientes factores:

  • Naturaleza de la tarea: Para las tareas que se benefician de modelos altamente especializados (por ejemplo, aplicaciones específicas del dominio), el ajuste preciso suele ser el enfoque preferido. RAG es ideal para tareas que requieren la integración de conocimientos externos o la recuperación de información en tiempo real.
  • Disponibilidad de los datos: El ajuste preciso requiere una cantidad considerable de datos etiquetados específicos de la tarea. Si esos datos son escasos, el componente de recuperación de RAG puede compensarlo proporcionando información relevante de fuentes externas.
  • Limitaciones de recursos: El ajuste preciso puede ser computacionalmente intensivo, mientras que el RAG aprovecha las bases de datos existentes para complementar el modelo generativo, lo cual reduce potencialmente la necesidad de un entrenamiento exhaustivo.

Conclusión

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

Al comprender y aplicar 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 obtener más información sobre el ajuste preciso, te animo encarecidamente a que realices algunos ajustes precisos más avanzados. Puedes 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:

Preguntas frecuentes

¿Cuál es el principal objetivo del ajuste preciso de los grandes modelos lingüísticos (LLM)?

El objetivo del ajuste preciso de los LLM es adaptar los modelos preentrenados a tareas o dominios específicos. Este proceso implica entrenar más el modelo en un conjunto de datos específico de la tarea, mejorar su rendimiento y hacerlo más eficaz para aplicaciones concretas como el análisis del sentimiento, la respuesta a preguntas o la generación de textos específicos de un dominio.

¿En qué se diferencia el ajuste preciso del entrenamiento de un modelo desde cero?

El ajuste preciso aprovecha un modelo preentrenado que ya ha aprendido patrones lingüísticos generales a partir de un gran conjunto de datos. Esto reduce el coste computacional y el tiempo en comparación con el entrenamiento de un modelo desde cero, que implica partir de una inicialización aleatoria y requiere muchos más datos y recursos computacionales para conseguir un rendimiento comparable.

¿Cuáles son algunos de los escollos más comunes que hay que evitar al perfeccionar los LLM?

Entre los escollos más comunes están el sobreajuste, en el que el modelo funciona bien con los datos de entrenamiento, pero mal con los nuevos datos; el subajuste, en el que el modelo no aprende la tarea adecuadamente; el olvido catastrófico, en el que el modelo pierde el amplio conocimiento que adquirió inicialmente; y la vulneración de datos, en la que el solapamiento de los conjuntos de datos de entrenamiento y validación conduce a métricas de alto rendimiento engañosas.

¿Qué tipos de conjuntos de datos son adecuados para realizar un ajuste preciso de los LLM?

Los conjuntos de datos adecuados para el ajuste preciso deben ser de alta calidad, relevantes para la tarea específica y lo suficientemente grandes como para proporcionar suficientes ejemplos con los que el modelo pueda aprender. Algunos ejemplos son los conjuntos de datos etiquetados para el ajuste preciso supervisado (p. ej., tuits etiquetados con sentimientos para el análisis del sentimiento) o las colecciones de textos de dominios específicos para la adaptación de dominios (p. ej., historiales médicos para un chatbot de atención sanitaria).

¿Cuál es la diferencia entre el ajuste preciso y la generación mejorada por recuperación (RAG)?

El ajuste preciso ajusta los parámetros de un modelo preentrenado utilizando un conjunto de datos específico para mejorar su rendimiento en tareas concretas. La RAG, sin embargo, combina un componente de recuperación para encontrar documentos relevantes y un modelo generativo para producir respuestas, e incorpora dinámicamente conocimientos externos durante la inferencia. El ajuste preciso mejora el conocimiento preexistente del modelo, mientras que la RAG utiliza la recuperación en tiempo real para proporcionar respuestas contextualmente relevantes.

Temas

¡Comienza hoy tu viaje por la IA!

curso

Introduction to LLMs in Python

4 hr
10.3K
Learn the nuts and bolts of LLMs and the revolutionary transformer architecture they are based on!
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado

blog

Evaluación de un LLM: Métricas, metodologías y buenas prácticas

Aprende a evaluar grandes modelos lingüísticos (LLM) utilizando métricas clave, metodologías y mejores prácticas para tomar decisiones informadas.
Stanislav Karzhev's photo

Stanislav Karzhev

9 min

blog

Explicación de la destilación del LLM: Aplicaciones, implementación y más

La destilación es una técnica de entrenamiento de LLM en la que un modelo más pequeño y eficiente (como GPT-4o mini) se entrena para imitar el comportamiento y los conocimientos de un modelo más grande y complejo (como GPT-4o).
Stanislav Karzhev's photo

Stanislav Karzhev

12 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

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

Guía para principiantes de LlaMA-Factory WebUI: Ajuste de los LLM

Aprende a afinar los LLM en conjuntos de datos personalizados, evaluar el rendimiento y exportar y servir modelos sin problemas utilizando el marco de trabajo de bajo/ningún código de LLaMA-Factory.
Abid Ali Awan's photo

Abid Ali Awan

12 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