rss2/docs/TRANSLATION_QUALITY_FIX.md

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