UD03 · Notebook 11 — 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 = ""
trampas técnicas de este ejercicio
- Cargar el audio:
asr("OpenTheDoor.wav")puede fallar conffmpeg was not foundsi tu entorno no tieneffmpeginstalado (el contenedor de la unidad no lo trae). Alternativa sinffmpeg: carga el audio tú mismo conlibrosaosoundfiley pásaselo al pipeline como diccionario{"array": ..., "sampling_rate": ...}. - La frecuencia de muestreo: Whisper espera 16.000 Hz, y
OpenTheDoor.wavno está a esa frecuencia. Si la cargas conlibrosa.load(ruta, sr=16000), el propiolibrosala 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 comoHelsinki-NLP/opus-mt-en-es, usa directamenteAutoTokenizer+AutoModelForSeq2SeqLM.generate(...). Necesitarás ademáspip 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ón que, dado un texto, lo sintetice en voz (Text to speech). Para hacer esto, puede usar el modelo
MODELO_TEXTO_A_VOZseleccionado anteriormente. Como ejemplo, puede usar el texto "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):
# Convertimos la voz a texto
# Traducimos el texto al español
# Sintetizamos el texto en voz
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.
Entrega¶
Completa y ejecuta el notebook entero (todas las celdas, sin errores) antes de subirlo a la tarea correspondiente en Moodle.