Datasets documentation
Cargar datos de audio
Cargar datos de audio
Puedes cargar un conjunto de datos de audio utilizando la función Audio, que decodifica y re-muestrea automáticamente los archivos de audio cuando accedes a los ejemplos.
La decodificación de audio se basa en el paquete de python torchcodec, que utiliza la biblioteca C FFmpeg internamente.
Instalación
Para trabajar con conjuntos de datos de audio, necesitas tener instaladas las dependencias de audio.
Consulta la guía de instalación para aprender a instalarlas.
Archivos locales
Puedes cargar tu propio conjunto de datos usando las rutas a tus archivos de audio. Utiliza la función cast_column() para tomar una columna de rutas de archivos de audio y convertirla en la característica Audio:
>>> audio_dataset = Dataset.from_dict({"audio": ["path/to/audio_1", "path/to/audio_2", ..., "path/to/audio_n"]}).cast_column("audio", Audio())
>>> audio_dataset[0]["audio"]
<datasets.features._torchcodec.AudioDecoder object at 0x11642b6a0>AudioFolder
También puedes cargar un conjunto de datos con el creador de conjuntos de datos AudioFolder. No requiere escribir un dataloader personalizado, lo que lo hace útil para crear y cargar rápidamente conjuntos de datos de audio con varios miles de archivos de audio.
AudioFolder con metadatos
Para vincular tus archivos de audio con información de metadatos, asegúrate de que tu conjunto de datos tenga un archivo metadata.csv. La estructura de tu conjunto de datos podría ser:
folder/train/metadata.csv
folder/train/first_audio_file.mp3
folder/train/second_audio_file.mp3
folder/train/third_audio_file.mp3El archivo metadata.csv debe tener una columna file_name que vincule los archivos de audio con sus metadatos. Un archivo metadata.csv de ejemplo podría verse así:
file_name,transcription first_audio_file.mp3,znowu się duch z ciałem zrośnie w młodocianej wstaniesz wiosnie i możesz skutkiem tych leków umierać wstawać wiek wieków dalej tam były przestrogi jak siekać głowę jak nogi second_audio_file.mp3,już u źwierzyńca podwojów król zasiada przy nim książęta i panowie rada a gdzie wzniosły krążył ganek rycerze obok kochanek król skinął palcem zaczęto igrzysko third_audio_file.mp3,pewnie kędyś w obłędzie ubite minęły szlaki zaczekajmy dzień jaki poślemy szukać wszędzie dziś jutro pewnie będzie posłali wszędzie sługi czekali dzień i drugi gdy nic nie doczekali z płaczem chcą jechać dali
AudioFolder cargará los datos de audio y creará una columna transcription que contendrá los textos de metadata.csv:
>>> from datasets import load_dataset
>>> dataset = load_dataset("username/dataset_name")
>>> # OR locally:
>>> dataset = load_dataset("/path/to/folder")Para conjuntos de datos locales, esto es equivalente a pasar audiofolder manualmente en load_dataset() y el directorio en data_dir:
>>> dataset = load_dataset("audiofolder", data_dir="/path/to/folder")Los metadatos también se pueden especificar en formato JSON Lines, en cuyo caso use metadata.jsonl como nombre del archivo de metadatos. Este formato resulta útil en escenarios en los que una de las columnas es compleja, por ejemplo, una lista de números de coma flotante, para evitar errores de análisis o la lectura de los valores complejos como cadenas de texto.
Para ignorar la información en el archivo de metadatos, establezca drop_metadata=True en load_dataset():
>>> from datasets import load_dataset
>>> dataset = load_dataset("username/dataset_with_metadata", drop_metadata=True)Si no tiene un archivo de metadatos, AudioFolder infiere automáticamente el nombre de la etiqueta a partir del nombre del directorio.
Si desea eliminar las etiquetas creadas automáticamente, establezca drop_labels=True.
En este caso, su conjunto de datos solo contendrá una columna de audio:
>>> from datasets import load_dataset
>>> dataset = load_dataset("username/dataset_without_metadata", drop_labels=True)Por último, el argumento filters permite cargar solo un subconjunto del conjunto de datos, basado en una condición sobre la etiqueta o los metadatos. Esto es especialmente útil si los metadatos están en formato Parquet, ya que este formato permite un filtrado rápido. También se recomienda usar este argumento con streaming=True, porque por defecto el conjunto de datos se descarga por completo antes de aplicar el filtrado.
>>> filters = [("label", "=", 0)]
>>> dataset = load_dataset("username/dataset_name", streaming=True, filters=filters)Para obtener más información sobre la creación de tu propio conjunto de datos
AudioFolder, consulta la guía Crear un conjunto de datos de audio.
Para una guía sobre cómo cargar cualquier tipo de conjunto de datos, consulte la guía general de carga.
Decodificación de audio
Por defecto, los archivos de audio se decodifican de forma secuencial como objetos AudioDecoder de torchcodec al iterar sobre un conjunto de datos.
Sin embargo, es posible acelerar significativamente el conjunto de datos mediante la decodificación multihilo:
>>> import os
>>> num_threads = num_threads = min(32, (os.cpu_count() or 1) + 4)
>>> dataset = dataset.decode(num_threads=num_threads)
>>> for example in dataset: # up to 20 times faster !
... ...Puede habilitar el multihilo usando num_threads. Esto es especialmente útil para acelerar el streaming de datos remotos.
Sin embargo, puede ser más lento que num_threads=0 para datos locales en discos rápidos.
Si no le interesan las imágenes decodificadas como matrices de NumPy y prefiere acceder a la ruta/bytes en su lugar, puede deshabilitar la decodificación:
>>> dataset = dataset.decode(False)Nota: IterableDataset.decode() solo está disponible actualmente para conjuntos de datos en streaming.
Update on GitHub