Skip to content

feat(analysis): el zero-shot deja de votar en la dimensión forma (#109) - #117

Merged
g-garciac2022 merged 1 commit into
devfrom
feat/109-acoplamiento-senales
Aug 25, 2026
Merged

feat(analysis): el zero-shot deja de votar en la dimensión forma (#109)#117
g-garciac2022 merged 1 commit into
devfrom
feat/109-acoplamiento-senales

Conversation

@g-garciac2022

Copy link
Copy Markdown
Collaborator

Cierra #109.

forma contrasta tres señales y es la dimensión que sostiene la tesis del
proyecto. Al medir el acoplamiento resultó que el contraste no existía.

Qué se midió

  • El acoplamiento es estructural, no empírico. linear.featurize_cues()
    llama a lexical.detect(), y con THRESHOLD=1 el veredicto del léxico es
    exactamente any(featurize_cues(h)) — verificado en el 100 % de 6.400
    titulares. El léxico es una función determinista del input del lineal.
  • La mitad del acuerdo es ceguera compartida. kappa 0,880, pero en el 50 %
    de titulares el vector sale vacío y ambas responden «no» sin mirar (acuerdo
    forzado del 100 %). Donde hay contenido, el acuerdo cae al 88,0 % — y al
    59,1 % en Webis-17.
  • Techo de recall del featurizado: 84,5 % en Chakraborty y 67,5 % en
    Webis-17, con recall medido de 0,478. w · 0 = 0, así que reentrenar pesos
    no puede superarlo.
  • El sesgo de fuente, cuantificado: el atajo vale +34,5 pts sobre la tasa
    base dentro de Chakraborty y sólo +9,6 fuera.
  • El zero-shot es la señal más floja en los dos dominios (63,7 % de acierto
    en dev con n=300, F1 0,405 en Webis con n=600) y generaba el 37 % de
    veredictos AMBIGUO, de los que el 78 % eran error suyo.

Qué cambia

El zero-shot deja de votar: se muestra como tarjeta, pero su veredicto no
entra en forma. El criterio adoptado es que ambiguo debe significar que dos
señales fiables discrepan, no que alguna discrepa.

Qué NO arregla, y queda declarado

forma queda sobre el par acoplado, es decir sobre una sola familia de
evidencia. El modelo era además un placeholder de E3-02 elegido por
eliminación, así que silenciarlo mantiene ese aplazamiento: por eso la ficha lo
declara placeholder pendiente de #115 en vez de disimularlo.

Consecuencia de planificación

El punto ciego compartido y el techo de recall son el mismo hecho, así que
rellenarlo desacopla las señales y levanta el techo. #75 (featurización)
pasa a ser prerrequisito de #78 (reentrenamiento)
, no un experimento
opcional posterior. Razonamiento completo en los comentarios de ambas issues.

Descartado

  • Subir el THRESHOLD del léxico: bajaría el kappa sin añadir información,
    porque esa magnitud ya está en el vector que el lineal recibe entero.
  • Sustituir el lineal por elozano/bert-base-cased-clickbait-news: 99,7 %
    en Chakraborty dev y F1 0,185 en Webis-17 completo, contra una clase
    mayoritaria de 69,0 %. Memorización. Refuerza que la palanca es la
    supervisión, no el algoritmo.

Resultado colateral

Estratificando por truthMean, el recall del léxico sigue el juicio humano de
intensidad casi linealmente (51,6 / 75,8 / 85,5 % por tercios), por delante de
las otras tres. El detalle fino importa: el lineal —que es el mismo featurizado
re-pesado sobre Chakraborty— se estanca en los tramos altos (61,3 % →
62,9 %) justo donde el léxico despega. Aprender los pesos sobre etiquetas
por-fuente no mejoró la regla: la empeoró donde el clickbait es más evidente.

Reproducibilidad

Las cifras dejan de vivir en scripts de usar y tirar. Tres módulos en
backend/evaluation/, separados por coste:

  • eval_featurizado.py — lo estructural (cobertura, techo de recall, valor del
    atajo, descomposición del acuerdo). No carga ningún modelo: segundos.
  • eval_acoplamiento.py — kappa, correlación de errores, ambigüedad de forma.
  • eval_transferencia.py — Webis-17 con el zero-shot y el dedicado, más el
    recall por intensidad. Cachea en var/ con tamaño y semilla en la clave.

Requiere NLP_BACKEND=local: en remoto los veredictos dependen de qué sirva
HuggingFace ese día.

Dos defectos encontrados al escribir los módulos

  • kappa engañoso. En el subconjunto de vector con contenido salía 0,000, que
    se lee como «independientes» — cuando en realidad sale 0 porque el léxico es
    constante ahí. Ahora imprime con la explicación.
  • Fallo silencioso del backend. Una corrida remota se cayó a mitad y reventó
    con un TypeError al indexar un data que era None, perdiendo diez minutos.
    Los dos scripts que llaman al backend comprueban el ToolResult y fallan
    diciendo en qué titular y por qué.

Verificación

190 tests pasan (uno nuevo de regresión), ruff y formato limpios.

@g-garciac2022 g-garciac2022 changed the title feat(analysis): el zero-shot deja de votar en (#109) feat(analysis): el zero-shot deja de votar en la dimensión forma (#109) Aug 25, 2026
@g-garciac2022
g-garciac2022 merged commit 7ab1284 into dev Aug 25, 2026
1 check passed
@g-garciac2022
g-garciac2022 deleted the feat/109-acoplamiento-senales branch August 25, 2026 15:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant