Datasets documentation
Carregar dados de áudio
Carregar dados de áudio
Você pode carregar um conjunto de dados de áudio usando o recurso Audio, que decodifica e reamostra automaticamente os arquivos de áudio quando você acessa os exemplos.
A decodificação de áudio é baseada no pacote python torchcodec, que usa a biblioteca C FFmpeg por baixo dos panos.
Instalação
Para trabalhar com conjuntos de dados de áudio, você precisa ter as dependências de audio instaladas.
Consulte o guia de instalação para aprender como instalá-las.
Arquivos locais
Você pode carregar seu próprio conjunto de dados usando os caminhos para seus arquivos de áudio. Use a função cast_column() para pegar uma coluna de caminhos de arquivos de áudio e convertê-la para o recurso 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
Você também pode carregar um conjunto de dados com um construtor de conjunto de dados AudioFolder. Ele não exige a criação de um dataloader personalizado, o que o torna útil para criar e carregar rapidamente conjuntos de dados de áudio com vários milhares de arquivos de áudio.
AudioFolder com metadados
Para vincular seus arquivos de áudio às informações de metadados, verifique se seu conjunto de dados possui um arquivo metadata.csv. A estrutura do seu conjunto de dados pode ser:
folder/train/metadata.csv
folder/train/first_audio_file.mp3
folder/train/second_audio_file.mp3
folder/train/third_audio_file.mp3O arquivo metadata.csv deve ter uma coluna file_name que vincula os arquivos de áudio aos seus metadados. Um exemplo de arquivo metadata.csv pode ser:
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 carregará dados de áudio e criará uma coluna transcription contendo os 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 dados locais, isso é equivalente a passar audiofolder manualmente em load_dataset() e o diretório em data_dir:
>>> dataset = load_dataset("audiofolder", data_dir="/path/to/folder")Metadados também podem ser especificados como JSON Lines, caso em que use metadata.jsonl como o nome do arquivo de metadados. Esse formato é útil em cenários em que uma das colunas é complexa, por exemplo, uma lista de floats, para evitar erros de análise ou a leitura dos valores complexos como strings.
Para ignorar as informações no arquivo de metadados, defina drop_metadata=True em load_dataset():
>>> from datasets import load_dataset
>>> dataset = load_dataset("username/dataset_with_metadata", drop_metadata=True)Se você não tiver um arquivo de metadados, o AudioFolder infere automaticamente o nome do rótulo a partir do nome do diretório.
Se você quiser descartar os rótulos criados automaticamente, defina drop_labels=True.
Nesse caso, seu conjunto de dados conterá apenas uma coluna de áudio:
>>> from datasets import load_dataset
>>> dataset = load_dataset("username/dataset_without_metadata", drop_labels=True)Por fim, o argumento filters permite carregar apenas um subconjunto do conjunto de dados, com base em uma condição sobre o rótulo ou os metadados. Isso é especialmente útil se os metadados estiverem em formato Parquet, pois esse formato permite filtragem rápida. Também é recomendado usar este argumento com streaming=True, porque, por padrão, o conjunto de dados é totalmente baixado antes da filtragem.
>>> filters = [("label", "=", 0)]
>>> dataset = load_dataset("username/dataset_name", streaming=True, filters=filters)Para mais informações sobre a criação do seu próprio conjunto de dados
AudioFolder, consulte o guia Criar um conjunto de dados de áudio.
Para um guia sobre como carregar qualquer tipo de conjunto de dados, consulte o guia de carregamento geral.
Decodificação de áudio
Por padrão, os arquivos de áudio são decodificados sequencialmente como objetos AudioDecoder do torchcodec ao iterar sobre um conjunto de dados.
No entanto, é possível acelerar significativamente o conjunto de dados usando decodificação multithreaded:
>>> 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 !
... ...Você pode habilitar a multithreading usando num_threads. Isso é especialmente útil para acelerar o streaming de dados remotos.
No entanto, pode ser mais lento que num_threads=0 para dados locais em discos rápidos.
Se você não se interessa pelas imagens decodificadas como arrays NumPy e deseja acessar o caminho/bytes em vez disso, você pode desabilitar a decodificação:
>>> dataset = dataset.decode(False)Observação: IterableDataset.decode() está disponível apenas para datasets em streaming no momento.
Update on GitHub