--- language: es license: apache-2.0 tags: - nli - spanish - bart library_name: transformers pipeline_tag: text-classification base_model: facebook/bart-base datasets: - marcostrfn/nli-taller-es widget: - text: "Una persona está montando un caballo [SEP] Una persona está sobre un animal" output: - label: entailment score: 0.95 - label: contradiction score: 0.03 - label: neutral score: 0.02 --- # BART for Natural Language Inference (MNLI Custom) Este modelo es una versión finetuneada de **facebook/bart-base** para la tarea de **Inferencia de Lenguaje Natural (NLI)**. Ha sido entrenado para clasificar la relación entre una premisa y una hipótesis en tres categorías: 1. **Entailment** (Implicación) 2. **Neutral** 3. **Contradiction** (Contradicción) ## Detalles del Modelo - **Base**: `facebook/bart-base` - **Tarea**: Clasificación de secuencias (3 etiquetas). - **Entrenamiento**: Se utilizó un callback de *Early Stopping* para evitar el sobreajuste, optimizando la métrica de **accuracy**. ## Cómo usar el modelo Puedes utilizar este modelo directamente con la librería `transformers` de Hugging Face. ### Ejemplo de Inferencia ```python from transformers import AutoTokenizer, AutoModelForSequenceClassification import torch model_name = "marcostrfn/bart-base-spanish-nli-taller-test" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForSequenceClassification.from_pretrained(model_name) def predict_nli(premise, hypothesis): # Tokenización de la pareja de frases inputs = tokenizer(premise, hypothesis, return_tensors="pt", truncation=True, padding=True) # Predicción with torch.no_grad(): logits = model(**inputs).logits # Obtener la etiqueta con mayor probabilidad prediction = torch.argmax(logits, dim=-1).item() # Mapeo de etiquetas (ajustar según el orden de tus datos) labels = {0: "entailment", 1: "neutral", 2: "contradiction"} return labels[prediction] # Ejemplo de prueba premisa = "Un hombre está tocando la guitarra en el parque." hipotesis = "Alguien está haciendo música al aire libre." resultado = predict_nli(premisa, hipotesis) print(f"La relación es: {resultado}") ``` ### Ejemplo de inferencia como clasificador ```python from transformers import pipeline # 1. Cargar el pipeline específico de Zero-Shot # Puedes usar la ruta de tu modelo en Hugging Face o local model_path = "marcostrfn/bart-base-spanish-nli-taller-test" # Importante: El pipeline zero-shot-classification requiere un modelo NLI zero_shot_classifier = pipeline( "zero-shot-classification", model=model_path, tokenizer=model_path, device=-1 # 0 para GPU ) # 2. Definir el texto y las etiquetas que tú quieras (sin haber reentrenado) secuencia_a_clasificar = "El nuevo procesador cuántico permite realizar cálculos en segundos." etiquetas_candidatas = ["tecnología", "cocina", "deportes", "economía"] # 3. Ejecutar la clasificación # El modelo probará: "Este texto trata sobre tecnología", "Este texto trata sobre cocina", etc. resultado = zero_shot_classifier( secuencia_a_clasificar, candidate_labels=etiquetas_candidatas, hypothesis_template="Este ejemplo trata sobre {}." # Plantilla en español ) # 4. Mostrar resultados ordenados print(f"Texto: {resultado['sequence']}\n") for label, score in zip(resultado['labels'], resultado['scores']): print(f"Etiqueta: {label.ljust(12)} | Confianza: {score:.2%}") ``` ### Parámetros de Entrenamiento El modelo fue entrenado con las siguientes configuraciones: Learning Rate: 2e-5 Batch Size: 16 Épocas: 10 (con Early Stopping) Weight Decay: 0.01 Precisión: FP16 activa ### Métricas Resultados de Evaluación (Classification Report) El modelo fue evaluado sobre un conjunto de prueba de 13,859 ejemplos, obteniendo un Accuracy global de 68%. | Epoch | Training Loss | Validation Loss | Accuracy | |-------|---------------|-----------------|----------| | 1 | 0.838667 | 0.850865 | 0.628328 | | 2 | 0.766949 | 0.797787 | 0.661087 | | 3 | 0.707689 | 0.779431 | 0.672343 | | 4 | 0.633748 | 0.857711 | 0.668879 | | 5 | 0.570300 | 0.902633 | 0.666138 | | 6 | 0.521099 | 0.920889 | 0.672415 | | 7 | 0.473461 | 0.950290 | 0.678187 | | 8 | 0.415742 | 1.079982 | 0.671188 | | 9 | 0.366492 | 1.132096 | 0.669673 | | 10 | 0.328156 | 1.211365 | 0.668158 | Análisis de resultados del entrenamiento El comportamiento de las métricas a lo largo de las 10 épocas permite identificar un fenómeno de sobreajuste o overfitting. A partir de la tercera época, se observa que la pérdida de entrenamiento (Training Loss) continúa disminuyendo de forma constante, pasando de 0.707689 a 0.328156. Sin embargo, la pérdida de validación (Validation Loss) alcanza su punto mínimo en la época 3 con 0.779431 y comienza a ascender progresivamente hasta llegar a 1.211365 en la última iteración. Esta divergencia indica que el modelo ha dejado de generalizar patrones para comenzar a memorizar el ruido de los datos de entrenamiento. Mientras que la precisión (Accuracy) en el conjunto de validación se estanca en torno al 67%, el incremento en la pérdida de validación sugiere que las predicciones del modelo son cada vez menos seguras fuera del entorno de entrenamiento. Por tanto habría que implementar estrategias de regularización para mitigar este comportamiento en futuros experimentos. Entre las opciones más efectivas se encuentran la detención temprana (Early Stopping) o la inclusión de capas de Dropout y regularización L2 para controlar la complejidad del aprendizaje. | Etiqueta | Precisión | Recall | F1-Score | Soporte | | :--- | :---: | :---: | :---: | :---: | | Entailment | 0.73 | 0.67 | 0.70 | 4777 | | Neutral | 0.62 | 0.66 | 0.64 | 4184 | | Contradiction | 0.69 | 0.70 | 0.70 | 4898 | | **Global Accuracy** | | | **0.68** | **13859** | ![matriz de confusión](1KDePP_0e-v_MWxwxHFmySdkEjMwK088h) ![métricas](1c497rYuYryWxiv-b679jAey7QjisUjIi) **Limitaciones y Sesgos** Este modelo hereda las limitaciones del modelo base BART y está sujeto a los sesgos presentes en el dataset de entrenamiento utilizado. Se recomienda evaluar el modelo en casos específicos antes de su uso en producción.