UD03 · EX5 — Prototipo de asistente virtual¶
Esta práctica propone la creación de un prototipo del sistema de traducción que permite recibir órdenes en un idioma y ejecutarlos en otro idioma. Por ejemplo, el usuario podría decir "open the door" y el sistema respondería "abre la puerta". Este prototipo se basará en el uso de modelos de HugginFace previamente entrenados para la traducción y la síntesis de voz.
Buscar modelos previamente entrenados¶
El primer paso es buscar modelos previamente entrenados para las tareas solicitadas. Investigue Huggingface para seleccionar modelos que mejor satisfagan las necesidades del prototipo.
Cuando haya seleccionado los modelos, modifique las siguientes variables para incluirlas en el prototipo:
# Modelo de voz de texto
MODELO_VOZ_A_TEXTO = ""
# Model de traducción ingles a español
MODELO_TRADUCCION = ""
# Modelo de texto a voz
MODELO_TEXTO_A_VOZ = ""
!!! Tres trampas técnicas de este ejercicio
- **Cargar el audio**: `asr("OpenTheDoor.wav")` puede fallar con
`ffmpeg was not found` si tu entorno no tiene `ffmpeg` instalado (el contenedor de la unidad
no lo trae). Alternativa sin `ffmpeg`: carga el audio tú mismo con `librosa` o `soundfile`
y pásaselo al *pipeline* como diccionario `{"array": ..., "sampling_rate": ...}`.
- **La frecuencia de muestreo**: Whisper espera **16.000 Hz**, y `OpenTheDoor.wav` no está a
esa frecuencia. Si la cargas con `librosa.load(ruta, sr=16000)`, el propio `librosa` la
remuestrea al vuelo.
- **La traducción**: en las versiones recientes de `transformers`, `pipeline("translation",
model=...)` **ya no existe** como tarea genérica. Para un modelo Marian como
`Helsinki-NLP/opus-mt-en-es`, usa directamente `AutoTokenizer` +
`AutoModelForSeq2SeqLM.generate(...)`. Necesitarás además `pip install sentencepiece`. Implementación del prototipo¶
Una vez que se seleccionan los modelos previamente entrenados, implementa el prototipo.Para hacer esto, puede seguir los siguientes pasos:
- Cree una función que, dada una orden de voz, lo transforme en texto (Automatic Speech Recognition ASR). Para hacer esto, puede usar el modelo
MODELO_VOZ_A_TEXTOpreviamente seleccionado. Como ejemplo, puede usar el siguiente archivo de voz: OpenTheDoor.wav.
# Creamos la tubería para la conversión de voz a texto
from transformers import pipeline
# Convertimos la voz en texto
/usr/local/lib/python3.11/dist-packages/huggingface_hub/utils/_auth.py:94: UserWarning: The secret `HF_TOKEN` does not exist in your Colab secrets. To authenticate with the Hugging Face Hub, create a token in your settings tab (https://huggingface.co/settings/tokens), set it as secret in your Google Colab and restart your session. You will be able to reuse this secret in all of your notebooks. Please note that authentication is recommended but still optional to access public models or datasets. warnings.warn( Device set to use cpu /usr/local/lib/python3.11/dist-packages/transformers/models/whisper/generation_whisper.py:573: FutureWarning: The input name `inputs` is deprecated. Please make sure to use `input_features` instead. warnings.warn( You have passed language=english, but also have set `forced_decoder_ids` to [[1, None], [2, 50359]] which creates a conflict. `forced_decoder_ids` will be ignored in favor of language=english.
' Open the door.'
- Crea una función que, dado un texto y un idioma, lo traduce al español (machine translation). Para hacer esto, puede usar el modelo
MODELO_TRADUCCIONseleccionado anteriormente. Como ejemplo, puede usar el siguiente pedido en texto: "Abra la puerta".
# Creamos la tubería para la traducción
# Traducimos el texto al español
/usr/local/lib/python3.11/dist-packages/transformers/models/marian/tokenization_marian.py:175: UserWarning: Recommended: pip install sacremoses.
warnings.warn("Recommended: pip install sacremoses.")
Device set to use cpu
'Abre la puerta.'
- Crea una funció que, donat un text, el sintetitzi en veu (Text to speech). Per fer-ho pots utilitzar el model
MODEL_TEXT_A_VEUseleccionat anteriorment. Com a exemple pots utilitzar el text "abre la puerta".
# Creamos la tubería para la síntesis de voz
# Sintetizamos el texto en voz
Device set to use cpu
# mostramos el texto sintetizado como un reproductor
from IPython.display import Audio
Audio(out["audio"], rate=out['sampling_rate'])
4.- Une las tres funciones anteriores en una sola función que, dada una voz y un idioma, lo transforma en texto, lo traduce en otro idioma y la sintetizando en la voz. Como ejemplo, puede usar el siguiente audio de voz: OpenTheDoor.wav.
# Aquí generamos una funcion que lo aglutine todo
from IPython.display import Audio
def assistant(voice_order):
# Convertim la veu a text
# Traduïm el text al castellà
# Sintetitzem el text en veu
return out
out = assistant("OpenTheDoor.wav")
Audio(out["audio"], rate=out['sampling_rate'])
/usr/local/lib/python3.11/dist-packages/transformers/models/whisper/generation_whisper.py:573: FutureWarning: The input name `inputs` is deprecated. Please make sure to use `input_features` instead. warnings.warn(
text from audio: Open the door. text in spanish: Abre la puerta.