marcostrfn/bart-base-spanish-nli-taller-test
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:
- Entailment (Implicación)
- Neutral
- 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
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
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)
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.
