Buckets:
Preprocesamiento de un conjunto de datos de audio
Cargar una base de datos con 馃 Datasets es solo la mitad de la diversi贸n. Si planeas usar los datos para entrenar un modelo, o para hacer inferencia necesitar谩s preprocesar los datos primero. En general, esto involucra los siguientes pasos:
- Resamplear los datos de audio.
- Filtrar la base de datos.
- Convertir el audio a la entrada esperada por el modelo.
Resamplear los datos de audio
La funci贸n load_dataset descarga los archivos de audio con la frecuencia de muestreo con la que fueron publicados. Esta frecuencia
no siempre coincide con la esperada por el modelo que planees usar para entrenar o realizar inferencia. Si existe una discrepancia
entre las frecuencias, puedes resamplear el audio a la frecuencia de muestreo que espera el modelo.
La mayoria de los modelos pre-entrenados disponibles han sido entrenados con audios a una frecuencia de muestreo de 16kHz. Cuando exploramos los datos de MINDS-14, puedes haber notado que la frecuencia de muestreo era de 8kHz, por lo que seguramente se tendr谩 que realizar un proceso de upsampling(Convertir de una frecuencia menor a una mayor).
Para hacer esto, usa el m茅todo cast_column de 馃 Datasets. Esta operaci贸n no altera el audio cuando se ejecuta, crea una
se帽al para que datasets haga el resampleo en el momento en que se carguen los audios. El siguiente c贸digo configura el proceso
de resampling a 16 kHz.
from datasets import Audio
minds = minds.cast_column("audio", Audio(sampling_rate=16_000))
Vuelve a cargar el primer ejemplo de audio en el conjunto de datos MINDS-14 y verifica que se haya re-muestreado al valor deseado de sampling rate:
minds[0]
Output:
{
"path": "/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-AU~PAY_BILL/response_4.wav",
"audio": {
"path": "/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-AU~PAY_BILL/response_4.wav",
"array": array(
[
2.0634243e-05,
1.9437837e-04,
2.2419340e-04,
...,
9.3852862e-04,
1.1302452e-03,
7.1531429e-04,
],
dtype=float32,
),
"sampling_rate": 16000,
},
"transcription": "I would like to pay my electricity bill using my card can you please assist",
"intent_class": 13,
}
Puedes ver que los valores del array ahora son diferentes. Esto es porque ahora tenemos el doble de valores de amplitud de la longitud original.
馃挕 Si una se帽al de audio ha sido grabada a una frecuencia de muestreo de 8kHz, de manera que cada segundo de la se帽al esta representado por 8000 muestras, sabemos tambien que el audio no contiene ninguna frecuencia por encima de 4kHz. Esto esta garantizado por el teorema de Nyquist. Resamplear a una frecuencia de muestro mayor(Upsampling) consiste en estimar los puntos adicionales que irian entre las muestras existentes. El proceso de Downsampling, requiere en cambio, que primero filtremos cualquier frecuencia que sea mayor al nuevo Limite de Nyquist antes de estimar las nuevas muestras. En otras palabras, no puedes hacer downsampling por un facto de 2x solo descartando la mitad de muestras de la se帽al - Esto crear铆a distorsiones en la se帽al llamadas alias. Hacer resampliing de la manera correcta es complejo por lo que es mejor usar librerias que han sido probadas a lo largo de los a帽os como lo son librosa o 馃 Datasets.
Filtrando el conjunto de datos
Algunas veces necesitar谩s filtrar los datos en funci贸n de algunos criterios. Uno de los casos comunes implica limitar los ejemplos de audio a una duraci贸n determinada. Por ejemplo, es posible que deseemos filtrar cualquier ejemplo que supere los 20 segundos para evitar errores de falta de memoria al entrenar un modelo.
Podemos hacer esto al usar el m茅todo filter que espera una funci贸n que contenga una l贸gica de filtrado. Empezemos por escribir
una funci贸n que indique cuales ejemplos conservar y cuales descartar. la funci贸n is_audio_length_in_range, retorna True si
un ejemplo tiene una duraci贸ne menor a 20s y False si es mayor a 20s.
MAX_DURATION_IN_SECONDS = 20.0
def is_audio_length_in_range(input_length):
return input_length
Ahora puedes ver como se ve la entrada de audio al modelo de Whisper tras haber realizado el preprocesamiento.
La clase de extractor de caracter铆sticas del modelo se encarga de transformar los datos de audio en bruto al formato que el modelo espera.
Sin embargo, muchas tareas que involucran audio son multimodales, como el reconocimiento de voz. En tales casos, 馃 Transformers tambi茅n
ofrece tokenizadores espec铆ficos del modelo para procesar las entradas de texto. Para obtener m谩s informaci贸n sobre los tokenizadores,
consulta nuestro curso de [NLP](https://huggingface.co/course/chapter2/4).
Puedes cargar el extractor de caracter铆sticas y el tokenizador para Whisper y otros modelos multimodales de forma separada, o puedes cargar
ambos usando el "procesador". Para hacer las cosas aun m谩s simples, usa el `AutoProcessor` para cargar el extractor de caracter铆sticas
y el procesador de un modelo de la siguiente forma:
```py
from transformers import AutoProcessor
processor = AutoProcessor.from_pretrained("openai/whisper-small")
Aqu铆 hemos ilustrado los pasos fundamentales de preparaci贸n de datos. Por supuesto, los datos personalizados pueden requerir una preprocesamiento m谩s complejo. En este caso, puedes ampliar la funci贸n prepare_dataset para realizar cualquier tipo de transformaci贸n personalizada en los datos. Con 馃 Datasets, si puedes escribirlo como una funci贸n de Python, 隆puedes aplicarlo a tu conjunto de datos!
Xet Storage Details
- Size:
- 5.93 kB
- Xet hash:
- 3f5dd014872b73a6204d3c35b1c509299074f85328afcad64e4df059f68df092
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.