File size: 5,959 Bytes
127353e
 
 
 
 
 
9dd91b9
127353e
 
 
e665107
127353e
27d5f80
e665107
ecedc1e
432bc54
9601b76
a2fdabe
d0787ff
 
9601b76
a2fdabe
d0787ff
 
9601b76
a2fdabe
d0787ff
11f7fe4
 
aaba823
d0787ff
 
ecedc1e
432bc54
ecedc1e
 
fb3242c
d0787ff
fb3242c
7536772
521d44c
40fa490
521d44c
40fa490
521d44c
40fa490
57e4a00
fb3242c
27d5f80
6990b9c
fb3242c
7536772
27d5f80
586ee69
27d5f80
4c9c1de
27d5f80
6990b9c
 
 
 
 
 
045d190
6990b9c
27d5f80
6990b9c
 
 
 
 
b6076a3
 
6990b9c
02f3c95
 
 
 
 
 
 
 
40fa490
a2fdabe
27d5f80
d0787ff
ecedc1e
8d3f34b
27d5f80
4c9c1de
27d5f80
4c9c1de
27d5f80
4a9079d
 
aaba823
 
b520654
aaba823
 
 
 
 
 
b520654
 
f18a77f
 
2177007
 
 
942721f
 
b3b2ef9
f18a77f
 
2177007
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
---
title: PruebaSpeechTranslate
emoji: 馃弮
colorFrom: indigo
colorTo: purple
sdk: gradio
sdk_version: 5.6.0
app_file: app.py
pinned: false

---
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference

---
# Problema, soluci贸n, input y output

- *Problema principal*:

    La comunicaci贸n entre distintas lenguas es imprescindible en la actualidad, por ello surge una necesidad de contar con una herramienta que permita la traducir contenido, en este caso, del ingl茅s a otros idiomas ampliamente utilizados. Este sistema est谩 en la integraci贸n de tecnolog铆as de reconocimiento de voz, tambi茅n conocido como ASR (Automatic Speech Recognition) y procesamiento de lenguaje natural para facilitar la traducci贸n.
  
- *Soluci贸n*:

    Consiste en desarrollar un sistema que procese audios en formatos comunes, como .mp3 o .wav, transcriba autom谩ticamente el contenido previamente grabado en ingl茅s y proporcione su traducci贸n al idioma seleccionado. Aprovechando modelos de IA como Whisper y MBart, adaptadas al contexto del mensaje.
  
- *Especificaciones*:

    Input: Un archivo de audio en formato compatible (MP3, WAV, etc.), cargado o grabado directamente por el usuario.


    Output: Una transcripci贸n del audio en texto traducido al idioma seleccionado (espa帽ol, alem谩n, ruso, franc茅s o sueco).
    Adem谩s de responder a la necesidad de superar barreras a nivel de idiomas, tambi茅n ofrece una experiencia intuitiva.

# Descripci贸n de los modelos, clasificaci贸n y limitaciones

## Modelos utilizados
### Whisper:
   **Descripci贸n**: Modelo de transcripci贸n de audio desarrollado por OpenAI. Tiene como objetivo pasar audios a texto. Basado en Transformer y entrenado con un conjunto grande de datos de muchos idiomas distintos, lo que permite tareas relacionadas con el ASR.
  
   **Clasificaci贸n**: 
   
- Tipo de tarea -> ASR
    
- Modelo preentrenado -> preentrenado en datos multiling眉es y ajustable para tareas espec铆ficas
    
- Dominio de uso -> Procesamiento de Lenguaje Natural y Reconocimiento de Voz	
    
### MBart:
   **Descripci贸n**: Otro modelo multiling眉e basado en Transformer. 脷til para la traducci贸n autom谩tica y dem谩s tareas de generaci贸n de texto en m煤ltiples idiomas. Preentrenado en tareas de reducci贸n de ruido y puede ser ajustado para traducir espec铆ficamente entre dos pares de idiomas.
   Se utiliza el modelo "SnypzZz/Llama2-13b-Language-translate", el cual est谩 basado en MBart. El tokenizador asociado es MBart50TokenizerFast, que convierte el texto de entrada en tokens que el modelo entiende y devuelve los tokens decodificados en formato de texto.
   
   **Clasificaci贸n**:
   
- Tipo de tarea -> Traducci贸n autom谩tica y generaci贸n de texto.
 
- Modelo preentrenado -> preentrenado en tareas de m煤ltiples idiomas y ajustable para traducci贸n espec铆fica.
  
- Dominio de uso -> Procesamiento de lenguaje natural y traducci贸n.

### Funci贸n principal: **transcribe_translate**

Convierte el audio subido (mp3 o wav, por ejemplo) a texto con Whisper, esperando que est茅 en ingl茅s, ya que Whisper 'base.en' est谩 entrenado para ello.

| model_inputs = tokenizer(transcription, return_tensors="pt") |
|:------------------------------------------------------------:|

El modelo MBart genera los tokens traducidos al idioma objetivo especificado. Esto se consigue utilizando el ID del token del idioma (lang_code_to_id) proporcionado por el tokenizador.

### Traducci贸n con MBart

El texto transcrito es procesado por el tokenizador de MBart, para luego convertirlo en tokens.

| generated_tokens = translation_model.generate(   **model_inputs, forced_bos_token_id=tokenizer.lang_code_to_id[target_language]) |
|:--------------------------------------------------------------------------------------------------------------------------------:|


Los tokens generados se convierten de nuevo a texto en el idioma deseado.

| translated_text = tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)[0] |
|:---------------------------------------------------------------------------------------:|



### Sinergia para estos dos modelos:
    Tomamos como base que Whisper lo usamos para convertir un archivo de audio a texto en ingl茅s,
    y MBart toma el texto transcrito, el cual lo traduce a otro idioma seleccionado previamente.
  
**Posibles limitaciones generales**

  1.La precisi贸n general depender谩 tanto de la calidad de la transcripci贸n como de la traducci贸n. A la hora de la traducci贸n, puede llegar err贸nea por culpa de la transcripci贸n.

  2.Los recursos necesarios aumentan significativamente cuando ambos modelos se usan en tiempo real.
  
  3.Existe la posibilidad de incompatibilidades ling眉isticas o culturales cuando se precise de traducir frases, dichos o expresiones que no tienen un significado directo en otro idioma.


# Rendimiento

Usando el hardware gratuito de Hugging Face (CPU basic - 2cCPU - 16GB), tenemos claramente, un rendimiento un tanto lento pero eficiente, no podemos
esperar la mejor velocidad. Algunos testeos que he hecho marcan lo siguiente:

| **audio** | **traducci贸n** |
|:---------:|:--------------:|
| 28s |  26s |
| 347s | 190s |
| 345s | 190s |

Hay un notorio cambio entre los audios cortos y los largos, se aprovecha mejor con audios extensos.

# Documentaci贸n usada

- Whisper-small: https://huggingface.co/openai/whisper-small
- tiny-random-MBartForConditionalGeneration:  https://huggingface.co/trl-internal-testing/tiny-random-MBartForConditionalGeneration
- SnypzZz/Llama2-13b-Language-translate: https://huggingface.co/SnypzZz/Llama2-13b-Language-translate
- Idea de traductor: https://huggingface.co/spaces/xMcLovinx/translate/tree/main

# NOTA
Hay un limitador del modelo que desconozco y no he usado en el c贸digo, que pone un m谩ximo de longitud de la transcripci贸n, solo transcribe aproximadamente 15 segundos de audio, aunque cargues uno de mayor longitud.