7.2. Ajuste fino para seguir instrucciones
Reading time: 7 minutes
tip
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripci贸n!
- 脷nete al 馃挰 grupo de Discord o al grupo de telegram o s铆guenos en Twitter 馃惁 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
tip
El objetivo de esta secci贸n es mostrar c贸mo ajustar finamente un modelo ya preentrenado para seguir instrucciones en lugar de solo generar texto, por ejemplo, respondiendo a tareas como un chatbot.
Conjunto de datos
Para ajustar finamente un LLM para seguir instrucciones, es necesario tener un conjunto de datos con instrucciones y respuestas para ajustar el LLM. Hay diferentes formatos para entrenar un LLM en seguir instrucciones, por ejemplo:
- El estilo de aviso de Apply Alpaca:
Below is an instruction that describes a task. Write a response that appropriately completes the request.
### Instruction:
Calculate the area of a circle with a radius of 5 units.
### Response:
The area of a circle is calculated using the formula \( A = \pi r^2 \). Plugging in the radius of 5 units:
\( A = \pi (5)^2 = \pi \times 25 = 25\pi \) square units.
- Ejemplo de Estilo de Prompt Phi-3:
<|User|>
Can you explain what gravity is in simple terms?
<|Assistant|>
Absolutely! Gravity is a force that pulls objects toward each other.
Entrenar un LLM con este tipo de conjuntos de datos en lugar de solo texto sin procesar ayuda al LLM a entender que necesita dar respuestas espec铆ficas a las preguntas que recibe.
Por lo tanto, una de las primeras cosas que se deben hacer con un conjunto de datos que contiene solicitudes y respuestas es modelar esa fecha en el formato de aviso deseado, como:
# Code from https://github.com/rasbt/LLMs-from-scratch/blob/main/ch07/01_main-chapter-code/ch07.ipynb
def format_input(entry):
instruction_text = (
f"Below is an instruction that describes a task. "
f"Write a response that appropriately completes the request."
f"\n\n### Instruction:\n{entry['instruction']}"
)
input_text = f"\n\n### Input:\n{entry['input']}" if entry["input"] else ""
return instruction_text + input_text
model_input = format_input(data[50])
desired_response = f"\n\n### Response:\n{data[50]['output']}"
print(model_input + desired_response)
Luego, como siempre, es necesario separar el conjunto de datos en conjuntos para entrenamiento, validaci贸n y prueba.
Batching & Data Loaders
Luego, es necesario agrupar todas las entradas y salidas esperadas para el entrenamiento. Para esto, es necesario:
- Tokenizar los textos
- Rellenar todas las muestras a la misma longitud (generalmente la longitud ser谩 tan grande como la longitud del contexto utilizado para pre-entrenar el LLM)
- Crear los tokens esperados desplazando 1 la entrada en una funci贸n de colaci贸n personalizada
- Reemplazar algunos tokens de relleno con -100 para excluirlos de la p茅rdida de entrenamiento: Despu茅s del primer token
endoftext
, sustituir todos los otros tokensendoftext
por -100 (porque usarcross_entropy(...,ignore_index=-100)
significa que ignorar谩 los objetivos con -100) - [Opcional] Enmascarar usando -100 tambi茅n todos los tokens que pertenecen a la pregunta para que el LLM aprenda solo a generar la respuesta. En el estilo de Apply Alpaca, esto significar谩 enmascarar todo hasta
### Response:
Con esto creado, es hora de crear los cargadores de datos para cada conjunto de datos (entrenamiento, validaci贸n y prueba).
Load pre-trained LLM & Fine tune & Loss Checking
Es necesario cargar un LLM pre-entrenado para ajustarlo. Esto ya se discuti贸 en otras p谩ginas. Luego, es posible usar la funci贸n de entrenamiento utilizada anteriormente para ajustar el LLM.
Durante el entrenamiento tambi茅n es posible ver c贸mo var铆a la p茅rdida de entrenamiento y la p茅rdida de validaci贸n durante las 茅pocas para ver si la p茅rdida se est谩 reduciendo y si est谩 ocurriendo sobreajuste.
Recuerda que el sobreajuste ocurre cuando la p茅rdida de entrenamiento se est谩 reduciendo pero la p茅rdida de validaci贸n no se est谩 reduciendo o incluso est谩 aumentando. Para evitar esto, lo m谩s sencillo es detener el entrenamiento en la 茅poca donde comienza este comportamiento.
Response Quality
Como este no es un ajuste fino de clasificaci贸n donde es posible confiar m谩s en las variaciones de p茅rdida, tambi茅n es importante verificar la calidad de las respuestas en el conjunto de prueba. Por lo tanto, se recomienda recopilar las respuestas generadas de todos los conjuntos de prueba y verificar su calidad manualmente para ver si hay respuestas incorrectas (ten en cuenta que es posible que el LLM cree correctamente el formato y la sintaxis de la oraci贸n de respuesta pero d茅 una respuesta completamente incorrecta. La variaci贸n de p茅rdida no reflejar谩 este comportamiento).
Ten en cuenta que tambi茅n es posible realizar esta revisi贸n pasando las respuestas generadas y las respuestas esperadas a otros LLMs y pidi茅ndoles que eval煤en las respuestas.
Otra prueba para ejecutar para verificar la calidad de las respuestas:
- Measuring Massive Multitask Language Understanding (MMLU): MMLU eval煤a el conocimiento y las habilidades de resoluci贸n de problemas de un modelo en 57 materias, incluidas humanidades, ciencias y m谩s. Utiliza preguntas de opci贸n m煤ltiple para evaluar la comprensi贸n en varios niveles de dificultad, desde elemental hasta profesional avanzado.
- LMSYS Chatbot Arena: Esta plataforma permite a los usuarios comparar respuestas de diferentes chatbots lado a lado. Los usuarios ingresan un aviso, y m煤ltiples chatbots generan respuestas que se pueden comparar directamente.
- AlpacaEval: AlpacaEval es un marco de evaluaci贸n automatizado donde un LLM avanzado como GPT-4 eval煤a las respuestas de otros modelos a varios avisos.
- General Language Understanding Evaluation (GLUE): GLUE es una colecci贸n de nueve tareas de comprensi贸n del lenguaje natural, incluida el an谩lisis de sentimientos, la implicaci贸n textual y la respuesta a preguntas.
- SuperGLUE: Bas谩ndose en GLUE, SuperGLUE incluye tareas m谩s desafiantes dise帽adas para ser dif铆ciles para los modelos actuales.
- Beyond the Imitation Game Benchmark (BIG-bench): BIG-bench es un benchmark a gran escala con m谩s de 200 tareas que prueban las habilidades de un modelo en 谩reas como razonamiento, traducci贸n y respuesta a preguntas.
- Holistic Evaluation of Language Models (HELM): HELM proporciona una evaluaci贸n integral a trav茅s de varias m茅tricas como precisi贸n, robustez y equidad.
- OpenAI Evals: Un marco de evaluaci贸n de c贸digo abierto de OpenAI que permite probar modelos de IA en tareas personalizadas y estandarizadas.
- HumanEval: Una colecci贸n de problemas de programaci贸n utilizados para evaluar las habilidades de generaci贸n de c贸digo de los modelos de lenguaje.
- Stanford Question Answering Dataset (SQuAD): SQuAD consiste en preguntas sobre art铆culos de Wikipedia, donde los modelos deben comprender el texto para responder con precisi贸n.
- TriviaQA: Un conjunto de datos a gran escala de preguntas y respuestas de trivia, junto con documentos de evidencia.
y muchos m谩s
Follow instructions fine-tuning code
Puedes encontrar un ejemplo del c贸digo para realizar este ajuste fino en https://github.com/rasbt/LLMs-from-scratch/blob/main/ch07/01_main-chapter-code/gpt_instruction_finetuning.py
References
tip
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripci贸n!
- 脷nete al 馃挰 grupo de Discord o al grupo de telegram o s铆guenos en Twitter 馃惁 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.