Transformers documentation
Extractores de características
Extractores de características
Los extractores de características preprocesan los datos de audio al formato correcto para un modelo dado. Toma la señal de audio cruda y la convierte en un tensor que puede alimentarse a un modelo. La forma del tensor depende del modelo, pero el extractor de características preprocesará correctamente los datos de audio por ti, dado el modelo que estés utilizando. Los extractores de características también incluyen métodos para relleno, truncamiento y muestreo.
Llame a from_pretrained() para cargar un extractor de características y su configuración de preprocesador desde el Hub de Hugging Face o desde un directorio local. La configuración del extractor de características y del preprocesador se guarda en un archivo preprocessor_config.json.
Pase la señal de audio, normalmente almacenada en array, al extractor de características y establezca el parámetro sampling_rate en la tasa de muestreo de los modelos de audio preentrenados. Es importante que la tasa de muestreo de los datos de audio coincida con la tasa de muestreo de los datos con los que se entrenó el modelo de audio preentrenado.
from transformers import AutoFeatureExtractor
feature_extractor = AutoFeatureExtractor.from_pretrained("facebook/wav2vec2-base")
dataset = load_dataset("PolyAI/minds14", name="en-US", split="train")
processed_sample = feature_extractor(dataset[0]["audio"]["array"], sampling_rate=16000)
processed_sample
{'input_values': [array([ 9.4472744e-05, 3.0777880e-03, -2.8888427e-03, ...,
-2.8888427e-03, 9.4472744e-05, 9.4472744e-05], dtype=float32)]}El extractor de características devuelve una entrada, input_values, lista para que el modelo la consuma.
Esta guía te explica las clases de extractores de características y cómo preprocesar datos de audio.
Clases de extractores de características
Los feature extractors de Transformers heredan de la clase base SequenceFeatureExtractor, que a su vez es una subclase de FeatureExtractionMixin.
- SequenceFeatureExtractor proporciona un método para pad() secuencias hasta una longitud determinada para evitar longitudes de secuencia desiguales.
- FeatureExtractionMixin proporciona from_pretrained() y save_pretrained() para cargar y guardar un extractor de características.
Hay dos formas de cargar un extractor de características: AutoFeatureExtractor y una clase de extractor de características específica del modelo.
La API AutoClass carga automáticamente el extractor de características correcto para un modelo dado.
Use from_pretrained() para cargar un extractor de características.
from transformers import AutoFeatureExtractor
feature_extractor = AutoFeatureExtractor.from_pretrained("openai/whisper-tiny")Cada modelo de audio preentrenado tiene un extractor de características específico asociado para procesar correctamente los datos de audio. Al cargar un extractor de características, este recupera la configuración del extractor de características (tamaño de las características, longitud del fragmento, etc.) desde preprocessor_config.json.
Un extractor de características se puede cargar directamente desde su clase específica del modelo.
from transformers import WhisperFeatureExtractor
feature_extractor = WhisperFeatureExtractor.from_pretrained("openai/whisper-tiny")Preprocesar
Un extractor de características espera la entrada como un tensor de PyTorch de una forma determinada. La forma exacta de la entrada puede variar según el modelo de audio específico que esté utilizando.
Por ejemplo, Whisper espera que input_features sea un tensor de forma (batch_size, feature_size, sequence_length), pero Wav2Vec2 espera que input_values sea un tensor de forma (batch_size, sequence_length).
El extractor de características genera la forma de entrada correcta para el modelo de audio que estés utilizando.
Un extractor de características también establece la tasa de muestreo (el número de valores de la señal de audio tomados por segundo) de los archivos de audio. La tasa de muestreo de sus datos de audio debe coincidir con la tasa de muestreo del conjunto de datos en el que se entrenó un modelo preentrenado. Este valor suele indicarse en la tarjeta del modelo.
Carga un conjunto de datos y un extractor de características con from_pretrained().
from datasets import load_dataset, Audio
from transformers import AutoFeatureExtractor
dataset = load_dataset("PolyAI/minds14", name="en-US", split="train")
feature_extractor = AutoFeatureExtractor.from_pretrained("facebook/wav2vec2-base")Mira el primer ejemplo del conjunto de datos y accede a la columna audio, que contiene array, la señal de audio cruda.
dataset[0]["audio"]["array"]
array([ 0. , 0.00024414, -0.00024414, ..., -0.00024414,
0. , 0. ])El extractor de características preprocesa array al formato de entrada esperado para un modelo de audio dado. Utilice el parámetro sampling_rate para establecer la tasa de muestreo adecuada.
processed_dataset = feature_extractor(dataset[0]["audio"]["array"], sampling_rate=16000)
processed_dataset
{'input_values': [array([ 9.4472744e-05, 3.0777880e-03, -2.8888427e-03, ...,
-2.8888427e-03, 9.4472744e-05, 9.4472744e-05], dtype=float32)]}Relleno
Las longitudes de secuencias de audio diferentes son un problema porque Transformers espera que todas las secuencias tengan la misma longitud para poder agruparse en lotes. Las longitudes de secuencia desiguales no se pueden agrupar en lotes.
dataset[0]["audio"]["array"].shape
(86699,)
dataset[1]["audio"]["array"].shape
(53248,)El relleno añade un token de relleno especial para garantizar que todas las secuencias tengan la misma longitud. El extractor de características añade un 0 -interpretado como silencio- a array para rellenarlo. Establece padding=True para rellenar las secuencias hasta la longitud de la secuencia más larga del lote.
def preprocess_function(examples):
audio_arrays = [x["array"] for x in examples["audio"]]
inputs = feature_extractor(
audio_arrays,
sampling_rate=16000,
padding=True,
)
return inputs
processed_dataset = preprocess_function(dataset[:5])
processed_dataset["input_values"][0].shape
(86699,)
processed_dataset["input_values"][1].shape
(86699,)Truncamiento
Los modelos solo pueden procesar secuencias hasta una longitud determinada antes de fallar.
La truncación es una estrategia para eliminar tokens excedentes de una secuencia y garantizar que no supere la longitud máxima. Establezca truncation=True para truncar una secuencia a la longitud especificada en el parámetro max_length.
def preprocess_function(examples):
audio_arrays = [x["array"] for x in examples["audio"]]
inputs = feature_extractor(
audio_arrays,
sampling_rate=16000,
max_length=50000,
truncation=True,
)
return inputs
processed_dataset = preprocess_function(dataset[:5])
processed_dataset["input_values"][0].shape
(50000,)
processed_dataset["input_values"][1].shape
(50000,)Muestreo
La biblioteca Datasets también puede re-muestrear datos de audio para que coincidan con la tasa de muestreo esperada por un modelo de audio. Este método re-muestrea los datos de audio sobre la marcha cuando se cargan, lo que puede ser más rápido que re-muestrear todo el conjunto de datos in situ.
El conjunto de datos de audio en el que has estado trabajando tiene una tasa de muestreo de 8 kHz y el modelo preentrenado espera 16 kHz.
dataset[0]["audio"]
{'path': '/root/.cache/huggingface/datasets/downloads/extracted/f507fdca7f475d961f5bb7093bcc9d544f16f8cab8608e772a2ed4fbeb4d6f50/en-US~JOINT_ACCOUNT/602ba55abb1e6d0fbce92065.wav',
'array': array([ 0. , 0.00024414, -0.00024414, ..., -0.00024414,
0. , 0. ]),
'sampling_rate': 8000}Llama a cast_column en la columna audio para aumentar la tasa de muestreo a 16 kHz.
dataset = dataset.cast_column("audio", Audio(sampling_rate=16000))Al cargar la muestra del conjunto de datos, ahora se re-muestrea a 16 kHz.
dataset[0]["audio"]
{'path': '/root/.cache/huggingface/datasets/downloads/extracted/f507fdca7f475d961f5bb7093bcc9d544f16f8cab8608e772a2ed4fbeb4d6f50/en-US~JOINT_ACCOUNT/602ba55abb1e6d0fbce92065.wav',
'array': array([ 1.70562416e-05, 2.18727451e-04, 2.28099874e-04, ...,
3.43842403e-05, -5.96364771e-06, -1.76846661e-05]),
'sampling_rate': 16000}