CoolFace
Modelpublic

marcostrfn/bart-base-spanish-nli-taller-test

sourceHugging Faceapache-2.0updated 7mo agoView on Hugging Face
0likes22downloads
Model Card

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. 1.Entailment (Implicación)
  2. 2.Neutral
  3. 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 weightdecay: 0.01 dropout: 0.2 attentiondropout: 0.1

Métricas

Resultados de Evaluación (Classification Report)

EpochTraining LossValidation LossAccuracy
10.8657270.8943250.608053
20.8008890.8389390.641172
30.7590890.7992480.660076
40.7040850.8345580.664189
50.6546020.8728800.664911
ClassPrecisionRecallF1-ScoreSupport
Entailment0.720.640.684777
Neutral0.630.600.614184
Contradiction0.630.730.684898
Accuracy0.6613859
Macro Avg0.660.660.6613859
Weighted Avg0.660.660.6613859

[image]

[image]

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.