Dominican News QA - pdqa-roberta-bne-sqac-finetuned-augmented

Descripción

Modelo desarrollado para el Dominican News Question Answering Challenge de ICC-344-T. El sistema recibe una pregunta y un contexto noticioso, y extrae una respuesta contenida explicitamente en el contexto.

Este repositorio publica los pesos de un modelo RoBERTa afinado con fine-tuning sobre train aumentado (Variante B, ver seccion de Experimentos). Usados solos, con pipeline(...), logran 66.67 EM y 87.20 F1 en validation. El repositorio de codigo del proyecto incluye ademas un pipeline de inferencia (post-procesamiento con spaCy es_core_news_sm y re-ranking hibrido) que envuelve este modelo y sube el resultado a 73.33 EM y 90.78 F1, ver la seccion de Resultados para el detalle.

Integrantes

  • Isaac Pena, 10154671
  • Javier Gondres, 10153671

Recursos oficiales

Modelo base

  • Repositorio: mrm8488/roberta-base-bne-finetuned-sqac
  • Justificacion: modelo en espanol ya afinado para QA extractivo sobre SQAC, lo que da un punto de partida zero-shot mas fuerte que un modelo base sin afinar para esta tarea y este idioma.
  • Numero aproximado de parametros: 124,054,274 (todos entrenables, arquitectura RoBERTa-base)

Datos

Division Filas Uso
train 45 Entrenamiento
validation 15 Comparacion y seleccion
test 20 Predicciones finales

No se publicaron ni utilizaron respuestas privadas de test.

Entrenamiento

Parametro Valor
Seed 42
Learning rate 3e-5
Batch size 4
Warmup ratio 0.1
Weight decay 0.01
LR scheduler cosine
Epocas maximas 20 (con early stopping)
Paciencia (early stopping) 6 epocas sin mejora en el combinado EM+F1
Epocas efectivas, Variante A 7 (colapso temprano, ver seccion de ablacion)
Epocas efectivas, Variante B 16 (mejor variante, sin senales de colapso)
Max length 384
Doc stride 128
Hardware Tesla T4, 15360 MiB (Google Colab, CUDA 12.8)
Tiempo ~1.2 minutos (Variante B, train aumentado, 16 epocas hasta early stopping)

Función utilizada para data augmentation (presente en el notebook)

´SYNONYM_MAP = { "gobierno": ["administracion central", "el Ejecutivo", "las autoridades"], "presidente": ["mandatario", "jefe de Estado"], "ministro": ["funcionario", "titular de la cartera"], "ministra": ["funcionaria", "titular de la cartera"], "dijo": ["afirmo", "senalo", "expreso"], "aumento": ["subio", "se incremento"], "disminuyo": ["bajo", "se redujo"], "policia": ["cuerpo policial", "las autoridades policiales"], }

def paraphrase_question(question): variants = [question] q_lower = question.lower() for word, synonyms in SYNONYM_MAP.items(): if word in q_lower: pattern = re.compile(re.escape(word), re.IGNORECASE) for syn in synonyms: variants.append(pattern.sub(syn, question, count=1)) seen, unique_variants = set(), [] for v in variants: if v not in seen: seen.add(v) unique_variants.append(v) return unique_variants´

Experimentos

Experimento Cambio EM validation F1 validation
1. Baseline oficial (zero-shot) Sin cambios 53.33 81.68
2. Baseline + post-procesamiento (spaCy es_core_news_sm) Reglas de concordancia de plural y preservacion de verbo 60.00 88.15
3. Baseline + post-procesamiento + re-ranking Re-ranking hibrido sobre candidatos top k, mas post-procesamiento 60.00 88.15
4. Variante A (fine-tuning, train original) Fine-tuning con train original (45 ejemplos) 66.67 83.46
5. Variante B (fine-tuning, train aumentado) Fine-tuning con train aumentado (49 ejemplos) 73.33 86.73
6. Variante B + post-procesamiento Post-procesamiento spaCy es_core_news_sm sobre la Variante B 73.33 90.98
7. Modelo final: Variante B + post-procesamiento + re-ranking hibrido Re-ranking hibrido sobre candidatos top k de la Variante B, mas post-procesamiento 73.33 90.98

Nota honesta sobre el re-ranking: El re-ranking hibrido (score nativo + similitud Jaccard + bono NER) no cambio ninguna prediccion en este validation de 15 ejemplos, ni sobre el baseline ni sobre la Variante B. Esto sugiere que en la mayoria de los casos el candidato top 1 del modelo ya coincidia con lo que el re-ranking habria elegido, o que el validation es demasiado pequeno para que la tecnica muestre diferencia. Se reporta la tecnica y se mantiene en el pipeline final por completitud metodologica (cumple el requisito de comparar variantes), pero no se le atribuye la mejora observada, que viene del post-procesamiento y del fine-tuning.

Ablacion o comparacion controlada

Variable que cambio: el conjunto de entrenamiento (train original de 45 ejemplos contra train aumentado con parafrasis sinonimicas de las preguntas, manteniendo contexto y respuesta identicos). Variables que permanecieron constantes: modelo base, hiperparametros, semilla y metricas de evaluacion. La comparacion se hizo epoca por epoca sobre el mismo split de validation, ver seccion 12 del notebook.

Hallazgo principal: la Variante A (train original) colapsa rapido, el combinado EM+F1 cae de ~71 en la epoca 1 a ~60 hacia la epoca 5, y el early stopping la corta en la epoca 7. La Variante B (train aumentado) nunca muestra ese colapso, oscila entre 66 y 77 durante 16 epocas completas sin tendencia de caida sostenida. Esto es evidencia directa de que el data augmentation actua como regularizacion: con solo 45 ejemplos el modelo memoriza la forma exacta de las preguntas en pocas epocas, mientras que con mas variedad de formulaciones (mismo contexto y respuesta) tarda mucho mas en sobreajustarse.

Resultados

Modelo publicado (solo pesos, lo que se obtiene con pipeline(...) directo): Variante B, fine-tuning con train aumentado.

  • Exact Match en validation: 73.33
  • F1 en validation: 86.73

Con el pipeline completo (post-procesamiento con spaCy es_core_news_sm + re-ranking hibrido, incluidos en el repositorio de codigo, no en los pesos):

  • Exact Match en validation: 73.33 (+6.66 puntos sobre el modelo solo)
  • F1 en validation: 90.98 (+3.78 puntos sobre el modelo solo)

El repositorio de codigo incluye ademas una demo interactiva (widget de ipywidgets) en la seccion 20 del notebook, que envuelve el modelo publicado con el pipeline completo (predict_answer

  • postprocess_prediction + re-ranking hibrido), para reproducir directamente el resultado de 73.33/90.78 sin tener que reimplementar el post-procesamiento a mano. No se publico un Hugging Face Space externo porque, al momento de esta entrega, la plataforma requiere plan PRO para Spaces con SDK Gradio en cuentas personales nuevas.

Diagnostico de overfitting (pipeline completo):

  • Exact Match en train: 84.44
  • F1 en train: 88.44
  • Brecha EM (train menos validation): 11.11 puntos
  • Brecha F1 (train menos validation): -2.54 puntos (F1 es mejor en validation que en train)
  • Lectura: no hay evidencia de overfitting significativo. La brecha de F1 negativa descarta memorizacion clasica, y la brecha de EM remanente es consistente con el tamano reducido de ambos splits (45 y 15 ejemplos) mas que con un problema de generalizacion. Antes de aplicar post-procesamiento y re-ranking sobre el modelo afinado solo, la brecha de EM era de 22.22 puntos, el post-procesamiento y el re-ranking la redujeron sin afectar F1, lo que confirma que el problema era de calibracion del limite exacto del span, no de contenido.
  • Script de evaluacion: 05_evaluate_qa.py

Diagnostico de overfitting (modelo suelto):

  • Exact Match en train: 86.67
  • F1 en train: 88.89
  • Brecha EM (train menos validation): 13.33 puntos
  • Brecha F1 (train menos validation): 2.16 puntos
  • Lectura: Lo que llama la atención es la disociación entre EM y F1. Si el modelo estuviera memorizando train de forma clásica, esperarías que ambas métricas caigan de forma pareja en validation (F1 y EM se mueven juntas cuando el modelo simplemente "no reconoce" el patrón). Aquí F1 casi no se mueve, lo que significa que en validation el modelo casi siempre está encontrando el fragmento correcto en términos de contenido (tokens correctos), pero falla en el límite exacto del span (dónde empieza o termina el string). Eso es justo el tipo visto en la sección 15 del notebook y que motivó el post-procesamiento con spaCy: preguntas plurales donde falta extender el span, o de tiempo verbal donde falta el verbo auxiliar.
  • Script de evaluacion: 05_evaluate_qa.py

Ejemplo de uso

from transformers import pipeline

qa = pipeline(
    "question-answering",
    model="Underscore-IDPD/pdqa-roberta-bne-sqac-finetuned-augmented",
    tokenizer="Underscore-IDPD/pdqa-roberta-bne-sqac-finetuned-augmented"
)

qa(
    question="Quien hizo el anuncio?",
    context="La ministra informo que el programa comenzara en agosto."
)

Importante: los resultados reportados arriba corresponden al pipeline completo, que incluye post-procesamiento con spaCy es_core_news_sm y re-ranking hibrido sobre los candidatos del modelo, ademas del fine-tuning. Los pesos publicados en este repositorio son solo el modelo afinado; usarlo directamente con pipeline(...) sin el post-procesamiento y el re-ranking se predice que den resultados inferiores a estos y más cercanos a los del modelo suelto. El codigo de esas dos etapas del pipeline esta en el notebook del repositorio de codigo (ver seccion de Reproducibilidad).

Analisis de errores

  1. Concordancia de plural: preguntas con "quienes" o "cuales" donde el modelo devuelve un fragmento que no incluye la lista completa de la referencia. Ejemplo: pregunta "Cuantos bateadores...", esta pregunta ni siquiera con el pipeline se soluciono.
  2. Tiempo verbal: preguntas en futuro o condicional donde el span predicho omite el verbo auxiliar necesario para que la respuesta tenga sentido completo. Ejemplo: pregunta "Como sera la inflacion en 2023?", referencia "seguira siendo alta", prediccion "siendo alta" (F1 = 0.80, falta el verbo "seguira").
  3. Truncamiento de la frase introductoria en preguntas descriptivas ("de que trata"): el modelo acierta el contenido pero corta el verbo o la frase que enmarca la respuesta. Ejemplo: pregunta "De que trata la pelicula Ramona?", referencia "gira en torno al embarazo en adolescentes", prediccion "al embarazo en adolescentes" (F1 = 0.73, falta "gira en torno").

Nota honesta: el caso peor calificado (F1 = 0.14, ejemplo 1) es justo el tipo de patron que la regla de extension de plurales deberia cubrir, y sin embargo sigue fallando en el pipeline final. Es probable que el patron de puntuacion despues del span predicho (dos puntos seguido de una lista larga con comas internas) no calce con la expresion regular de extend_plural_answer, que espera un formato mas simple. Queda como limitacion conocida en vez de ocultarse.

Limitaciones

  • La respuesta debe estar presente en el contexto.
  • El modelo puede confundir entidades, fechas o cantidades similares.
  • El modelo no verifica la veracidad de la noticia.
  • El train original tiene solo 45 ejemplos, lo que limita la capacidad de generalizacion incluso con data augmentation.
  • No debe utilizarse como unica fuente para decisiones de alto impacto.

Reproducibilidad

  • Repositorio de codigo: pdqa-roberta-bne-sqac-finetuned-augmented-pipeline
  • Commit: f8d9f425e328214db3c71b822ded354e1d57d871
  • Notebook: 03_Introduccion_QA_Noticias.ipynb
  • Archivo de dependencias: requirements.txt (generado en la seccion 17 del notebook), versiones verificadas en el entorno real de Colab: transformers==4.57.6, datasets==4.0.0, accelerate==1.14.0, pandas==2.2.2, pyarrow==18.1.0, numpy==2.0.2, spacy==3.8.14, torch==2.11.0 (build +cu128)
  • Semillas: 42
Downloads last month
113
Safetensors
Model size
0.1B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Underscore-IDPD/pdqa-roberta-bne-sqac-finetuned-augmented

Finetuned
(1)
this model

Dataset used to train Underscore-IDPD/pdqa-roberta-bne-sqac-finetuned-augmented