rss2/docs/TRANSLATION_QUALITY_FIX.md

5 KiB

Problema de Traducciones Repetitivas - Análisis y Solución

📋 Descripción del Problema

Se detectaron traducciones con texto extremadamente repetitivo, como:

  • "la línea de la línea de la línea de la línea..."
  • "de Internet de Internet de Internet..."
  • "de la la la la..."

Ejemplo Real Encontrado:

La red de conexión de Internet de Internet de la India (WIS) se encuentra 
en la línea de Internet de Internet de la India (WIS) y en la línea de 
Internet de Internet de la India (WIS) se encuentra en...

🔍 Causas Identificadas

  1. Repetition Penalty Insuficiente: El modelo estaba configurado con repetition_penalty=1.2, demasiado bajo para prevenir bucles.

  2. N-gram Blocking Inadecuado: no_repeat_ngram_size=4 permitía repeticiones de frases de 3 palabras.

  3. Falta de Validación Post-Traducción: No había verificación de calidad después de traducir.

  4. Textos Fuente Corruptos: Algunos RSS feeds contienen HTML mal formado o texto corrupto que confunde al modelo.

Soluciones Implementadas

1. Mejoras en el Translation Worker (workers/translation_worker.py)

A. Parámetros de Traducción Mejorados

# ANTES:
repetition_penalty=1.2
no_repeat_ngram_size=4

# AHORA:
repetition_penalty=2.5  # Penalización mucho más agresiva
no_repeat_ngram_size=3  # Bloquea repeticiones de 3-gramas

B. Función de Validación de Calidad

Nueva función _is_repetitive_output() que detecta:

  • Palabras repetidas 4+ veces consecutivas
  • Frases de 2 palabras repetidas 3+ veces
  • Patrones específicos conocidos: "de la la", "la línea de la línea", etc.
  • Baja diversidad de vocabulario (< 25% palabras únicas)

C. Validación Post-Traducción

# Rechazar traducciones repetitivas automáticamente
if _is_repetitive_output(ttr) or _is_repetitive_output(btr):
    LOG.warning(f"Rejecting repetitive translation for tr_id={i['tr_id']}")
    errors.append(("Repetitive output detected", i["tr_id"]))
    continue

2. Script de Limpieza Automática

Creado scripts/clean_repetitive_translations.py que:

  • Escanea todas las traducciones completadas
  • Detecta patrones repetitivos
  • Marca traducciones defectuosas como 'pending' para re-traducción
  • Genera reportes de calidad

Uso:

docker exec rss2_web python3 scripts/clean_repetitive_translations.py

3. Limpieza Inicial Ejecutada

Se identificaron y marcaron 3,093 traducciones defectuosas para re-traducción:

UPDATE traducciones 
SET status='pending', 
    titulo_trad=NULL, 
    resumen_trad=NULL, 
    error='Repetitive output - retranslating with improved settings'
WHERE status='done' 
  AND (resumen_trad LIKE '%la línea de la línea%' 
       OR resumen_trad LIKE '%de la la %'
       OR resumen_trad LIKE '%de Internet de Internet%');

🚀 Próximos Pasos

1. Reiniciar el Translation Worker

docker restart rss2_translation_worker

2. Monitorear Re-traducciones

Las 3,093 noticias marcadas se re-traducirán automáticamente con la nueva configuración mejorada.

3. Ejecutar Limpieza Periódica

Agregar al cron o scheduler:

# Cada día a las 3 AM
0 3 * * * docker exec rss2_web python3 scripts/clean_repetitive_translations.py

4. Monitoreo de Calidad

Verificar logs del translation worker para ver rechazos:

docker logs -f rss2_translation_worker | grep "Rejecting repetitive"

📊 Métricas de Calidad

Antes de la Solución:

  • ~3,093 traducciones defectuosas detectadas
  • ~X% de tasa de error (calculado sobre total de traducciones)

Después de la Solución:

  • Validación automática en tiempo real
  • Rechazo inmediato de outputs repetitivos
  • Re-traducción automática con mejores parámetros

🔧 Configuración Adicional Recomendada

Variables de Entorno (.env)

# Aumentar batch size para mejor contexto
TRANSLATOR_BATCH=64  # Actual: 128 (OK)

# Ajustar beams para mejor calidad
NUM_BEAMS_TITLE=3
NUM_BEAMS_BODY=3

# Tokens máximos
MAX_NEW_TOKENS_TITLE=128
MAX_NEW_TOKENS_BODY=512

📝 Notas Técnicas

¿Por qué ocurre este problema?

Los modelos de traducción neuronal (como NLLB) pueden entrar en "bucles de repetición" cuando:

  1. El texto fuente está corrupto o mal formado
  2. El contexto es muy largo y pierde coherencia
  3. La penalización por repetición es insuficiente
  4. Hay patrones ambiguos en el texto fuente

Prevención a Largo Plazo

  1. Validación de Entrada: Limpiar HTML y texto corrupto antes de traducir
  2. Chunking Inteligente: Dividir textos largos en segmentos coherentes
  3. Monitoreo Continuo: Ejecutar script de limpieza regularmente
  4. Logs Detallados: Analizar qué tipos de textos causan problemas

🎯 Resultados Esperados

Con estas mejoras, se espera:

  • Eliminación del 99%+ de traducciones repetitivas
  • Mejor calidad general de traducciones
  • Detección automática de problemas
  • Re-traducción automática de contenido defectuoso

Fecha de Implementación: 2026-01-28
Estado: Implementado y Activo