Entrenamiento¶
En esta sesión vamos a afinar el entrenamiento trabajando el dataset y registrando las métricas para una futura evaluación.
Dataset¶
Para ello, vamos a ajustar el dataset:
- Realizando un EDA y comprobando tamaños de los audios, y por ejemplo, si el audio de menor duración contiene algún sonido.
- Eliminando los audios del usuario
cliente@xyz.com
. - Seleccionando los audios del usuario con más grabaciones
- Seleccionando los tres usuarios con más audios
- Seleccionar los audios de los usuarios de la misma asociación.
Una vez tengamos el dataset, además de cambiar el tamaño de Whisper, podemos probar con diferentes tamaños de datos para train y test.
Publicando¶
Finalmente, vamos a publicar el modelo en Hugging Face (en la organización IABDs8a
) y registrar las métricas en Web and Biases (en la entidad severo8a
) para luego poder valorar qué modelos obtienen mejores métricas.
Web and Biases¶
El primer paso es instalar la librería, y tras hacer login, configurar la entidad a la que pertenecemos y el nombre del proyecto (cada equipo debería crear su propio proyecto):
!pip install wandb
import wandb
wandb.login()
wandb.init(
entity="severo8a",
project="Lara-Severo8a"
)
Y posteriormente, al configurar los parámetros de entrenamiento, le decimos que reporte a wandb
:
from transformers import Seq2SeqTrainingArguments
training_args = Seq2SeqTrainingArguments(
output_dir="whisper-base-lara",
...
report_to=["wandb"],
...
)
Hugging Face¶
En el caso de HuggingFAce, hacemos login desde el cuaderno, y tras introducir el token de acceso con permisos de escritura:
from huggingface_hub import notebook_login
# Login en HF
notebook_login()
Al entrenar le indicamos que publique:
from transformers import Seq2SeqTrainingArguments
training_args = Seq2SeqTrainingArguments(
output_dir="whisper-base-lara",
...
push_to_hub=True,
...
)
Si en vez de publicar al entrenar, únicamente queremos publicar el modelo resultante en Hugging Face dentro de la organización, haríamos:
model.push_to_hub("lara-base-xyz", organization="IABDs8a")
Gradio¶
A la hora de probar los modelos, por ejemplo, podemos crear un IU que nos permite probar más de un modelo dentro del mismo espacio:
import gradio as gr
import torch
from transformers import pipeline
import numpy as np
import time
# Utilizamos dos modelos entrenados
pipe_base = pipeline("automatic-speech-recognition", model="aitor-medrano/lara-base-pushed")
pipe_small = pipeline("automatic-speech-recognition", model="aitor-medrano/whisper-small-lara")
def greet(grabacion, modelo="base"):
inicio = time.time()
sr, y = grabacion
# Pasamos el array de muestras a tipo NumPy de 32 bits
y = y.astype(np.float32)
y /= np.max(np.abs(y))
if modelo is not None and modelo == "base":
pipe = pipe_base
else:
modelo = "small"
pipe = pipe_small
result = modelo + ":" + pipe({"sampling_rate": sr, "raw": y})["text"]
fin = time.time()
# Devolvemos el resultado de la predicción y el tiempo empleado
return result, fin - inicio
demo = gr.Interface(fn=greet,
inputs=[
gr.Audio(),
gr.Dropdown(
["base", "small"], label="Modelo", info="Modelos de Lara entrenados"
)
],
outputs=[
gr.Text(label="Salida"),
gr.Number(label="Tiempo")
])
demo.launch()
Tareas a realizar¶
- Entrenar el modelo, al menos tres veces, con diferentes datasets y tamaños de Whisper o tamaños para test/validación.
- Publicar los modelos en HuggingFace dentro de la organización.
- Crear espacios Gradio para los modelos entrenados.
Plazo de entrega¶
- Viernes 17 Mayo - 17:00 - 3 modelos re-entrenados a partir de diferentes datasets.
- Lunes 19 Mayo - 17:00 - Gradio que permita probar los diferentes modelos.