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
-
Repetition Penalty Insuficiente: El modelo estaba configurado con
repetition_penalty=1.2, demasiado bajo para prevenir bucles. -
N-gram Blocking Inadecuado:
no_repeat_ngram_size=4permitía repeticiones de frases de 3 palabras. -
Falta de Validación Post-Traducción: No había verificación de calidad después de traducir.
-
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:
- El texto fuente está corrupto o mal formado
- El contexto es muy largo y pierde coherencia
- La penalización por repetición es insuficiente
- Hay patrones ambiguos en el texto fuente
Prevención a Largo Plazo
- Validación de Entrada: Limpiar HTML y texto corrupto antes de traducir
- Chunking Inteligente: Dividir textos largos en segmentos coherentes
- Monitoreo Continuo: Ejecutar script de limpieza regularmente
- 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