Transformers documentation

Extractores de características

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.23.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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.

Hay dos formas de cargar un extractor de características: AutoFeatureExtractor y una clase de extractor de características específica del modelo.

AutoFeatureExtractor
extractor de características específico 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")

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}
Update on GitHub