164 lines
5 KiB
Markdown
164 lines
5 KiB
Markdown
# 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
|