# 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 ```python # 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 ```python # 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:** ```bash 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: ```sql 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 ```bash 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: ```bash # 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: ```bash 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) ```bash # 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