Este proyecto utiliza Mistral, un modelo causal de lenguaje, para entrenar un sistema que responda a instrucciones específicas relacionadas con cálculos aritméticos simples. Se implementa un enfoque de fine-tuning utilizando LoRA (Low-Rank Adaptation) para reducir la memoria requerida durante el entrenamiento, permitiendo ajustar eficientemente el modelo.
El dataset está compuesto por una serie de ejemplos con formato JSON, donde cada entrada sigue la estructura:
{"text": "<s>[INST] <número> es igual a [/INST] <serie_de_sumandos> </s>"}
Ejemplo:
{"text": "<s>[INST] 33 es igual a [/INST] cinco más tres más ocho más cuatro más cinco más cinco más tres </s>"}
- Rango de Números: Los números objetivo se generan aleatoriamente entre 10 y 50.
- Sumandos: Se generan series de números cuya suma coincide con el número objetivo, representados en palabras como "uno", "dos", "tres".
- Volumen: Se generaron 600 ejemplos para entrenamiento.
- Modelo y Tokenizador: Se utiliza
unsloth/mistral-7b-instruct-v0.2-bnb-4bit
con cuantización en 4 bits para reducir el uso de memoria. - LoRA:
- Rango:
r=8
- Alpha:
lora_alpha=16
- Dropout:
lora_dropout=0.1
- Módulos objetivo: Proyecciones clave, valor y salida.
- Rango:
- Entrenamiento:
- Épocas:
30
- Tamaño de lote:
2
- Tasa de aprendizaje:
1e-4
- Estrategia de evaluación: Desactivada.
- Épocas:
-
Generación de Texto: El modelo genera respuestas basadas en la instrucción proporcionada. Ejemplo:
Instrucción:
<s>[INST] 33 es igual a [/INST]
Respuesta Generada:
cinco más tres más ocho más cuatro más cinco más cinco más tres
-
Evaluación:
- Error Absoluto Medio (MAE): El modelo presenta un error promedio menor a 1 unidad, indicando que comprende correctamente la suma de los elementos generados.
- Limitaciones: El modelo muestra dificultades con frases más complejas o preguntas fuera del formato del entrenamiento, como:
<s>[INST] 20 más 23 es igual a [/INST]
El modelo fine-tuneado con LoRA logra cumplir con el objetivo del proyecto, demostrando capacidad para resolver sumas aritméticas simples en el formato entrenado. Sin embargo, podría beneficiarse de más datos y diversificación para manejar casos fuera de distribución.
Esta parte del proyecto utiliza GPT-2 para generar código en Java mediante dos procesos de entrenamiento:
- Fine-Tuning Autoregresivo: El modelo aprende patrones sintácticos y estructurales del código.
- Fine-Tuning Instruido: Se ajusta el modelo para generar código a partir de instrucciones específicas escritas en comentarios.
- Origen: Código recopilado de repositorios públicos en GitHub.
- Contenido:
- Ejemplos de clases, métodos, bucles, condicionales y más.
- Dataset balanceado y representativo del lenguaje Java.
- Estructura:
- Cada línea del archivo corresponde a un snippet de código Java.
- Ejemplo:
public class Main { public static void main(String[] args) { System.out.println("Hello, World!"); } }
- Formato: Pares de instrucciones y código.
- Ejemplo:
// A function that prints "Hello, World!" public void printHelloWorld() { System.out.println("Hello, World!"); } </s>
- Volumen: 20,000 ejemplos generados combinando palabras en inglés y español para diversificar las instrucciones.
-
Autoregresivo:
- Modelo:
GPT2LMHeadModel
- Épocas:
5
- Tamaño de lote:
8
- Longitud de secuencia:
128
- Métrica: Pérdida de lenguaje (
Cross-Entropy
).
- Modelo:
-
Instruido:
- Épocas:
2.5
(primer modelo),5
(modelo mejorado). - Datos Diversificados: Combinaciones de palabras para aumentar la variedad de instrucciones.
- Épocas:
-
Capacidades Generativas:
- El modelo aprendió a generar estructuras básicas de Java como clases, métodos y bucles.
- Ejemplo:
Prompt:
public class
Salida:public class MyClass { private int value; }
-
Limitaciones:
- Ausencia de indentación en las salidas iniciales.
- Generaciones parcialmente correctas pero con errores sintácticos.
-
Mejora con Dataset Ajustado:
- El dataset se enriqueció con indentación correcta.
- Resultados mejorados: Código con jerarquías claras y bien formateado.
-
Capacidades Generativas:
- El modelo genera código Java a partir de instrucciones textuales.
- Ejemplo:
Instrucción:
Salida Generada:
// A function printing "Hello, Java!"
public void printHelloJava() { System.out.println("Hello, Java!"); }
-
Evaluación:
- Precisión Inicial: 55.1% (primera versión del modelo).
- Precisión Mejorada: 93.1% (con dataset extendido).
-
Errores:
- Casos con palabras no vistas en el entrenamiento inicial.
- Dificultades menores con estructuras complejas.
El fine-tuning de GPT-2 mostró que:
- Es posible adaptar el modelo para generar código estructurado y con formato correcto.
- La precisión en la generación de instrucciones mejora significativamente con datasets diversificados.
- Una estrategia combinada de fine-tuning autoregresivo e instruido es efectiva para enseñar a los modelos a entender y generar código Java.
Aspecto | Mistral | GPT-2 |
---|---|---|
Tarea | Sumas Aritméticas | Generación de Código en Java |
Método | LoRA | Autoregresivo e Instruido |
Dataset | 600 ejemplos | 20,000 ejemplos (mejorado) |
Precisión Inicial | - | 55.1% (Instrucciones) |
Precisión Mejorada | - | 93.1% |
Ambos modelos destacan en sus respectivas tareas y muestran cómo las técnicas modernas de ajuste fino pueden aprovechar modelos preentrenados para resolver problemas específicos.