Un guide complet des ensembles de données audio

'Guide complet des jeux de données audio'

Introduction

ūü§ó Datasets est une biblioth√®que open-source permettant de t√©l√©charger et de pr√©parer des ensembles de donn√©es provenant de tous les domaines. Son API minimaliste permet aux utilisateurs de t√©l√©charger et de pr√©parer des ensembles de donn√©es en seulement une ligne de code Python, avec une suite de fonctions qui permettent un pr√©traitement efficace. Le nombre d’ensembles de donn√©es disponibles est sans pr√©c√©dent, avec tous les ensembles de donn√©es d’apprentissage automatique les plus populaires disponibles en t√©l√©chargement.

Non seulement cela, mais ūü§ó Datasets est √©galement √©quip√© de fonctionnalit√©s sp√©cifiques √† l’audio qui facilitent le travail avec des ensembles de donn√©es audio pour les chercheurs et les praticiens. Dans ce blog, nous pr√©senterons ces fonctionnalit√©s, en montrant pourquoi ūü§ó Datasets est l’endroit id√©al pour t√©l√©charger et pr√©parer des ensembles de donn√©es audio.

Table des matières

  1. Le Hub
  2. Charger un ensemble de données audio
  3. Facile à charger, facile à traiter
  4. Mode de streaming : la solution miracle
  5. Une visite des ensembles de données audio sur le Hub
  6. Remarques finales

Le Hub

Le Hub Hugging Face est une plateforme pour h√©berger des mod√®les, des ensembles de donn√©es et des d√©monstrations, tous en open source et disponibles publiquement. Il abrite une collection croissante d’ensembles de donn√©es audio qui couvrent divers domaines, t√Ęches et langues. Gr√Ęce √† des int√©grations √©troites avec ūü§ó Datasets, tous les ensembles de donn√©es sur le Hub peuvent √™tre t√©l√©charg√©s en une seule ligne de code.

Allons sur le Hub et filtrons les ensembles de donn√©es par t√Ęche :

  • Ensembles de donn√©es de reconnaissance vocale sur le Hub
  • Ensembles de donn√©es de classification audio sur le Hub

Au moment de la r√©daction, il y a 77 ensembles de donn√©es de reconnaissance vocale et 28 ensembles de donn√©es de classification audio sur le Hub, et ces chiffres augmentent constamment. Vous pouvez choisir n’importe lequel de ces ensembles de donn√©es en fonction de vos besoins. Voyons le premier r√©sultat de reconnaissance vocale. En cliquant sur common_voice, nous faisons appara√ģtre la fiche de l’ensemble de donn√©es :

Ici, nous pouvons trouver des informations suppl√©mentaires sur l’ensemble de donn√©es, voir sur quels mod√®les il a √©t√© entra√ģn√© et, surtout, √©couter des √©chantillons audio r√©els. L’aper√ßu de l’ensemble de donn√©es est pr√©sent√© au milieu de la fiche de l’ensemble de donn√©es. Il nous montre les 100 premiers √©chantillons pour chaque sous-ensemble et partition. De plus, il charge les √©chantillons audio pr√™ts √† √™tre √©cout√©s en temps r√©el. Si nous cliquons sur le bouton de lecture du premier √©chantillon, nous pouvons √©couter l’audio et voir le texte correspondant.

L’aper√ßu de l’ensemble de donn√©es est un moyen brillant de d√©couvrir des ensembles de donn√©es audio avant de d√©cider de les utiliser. Vous pouvez choisir n’importe quel ensemble de donn√©es sur le Hub, parcourir les √©chantillons et √©couter l’audio pour les diff√©rents sous-ensembles et partitions, afin de d√©terminer s’il convient √† vos besoins. Une fois que vous avez s√©lectionn√© un ensemble de donn√©es, il est facile de charger les donn√©es pour commencer √† les utiliser.

Charger un ensemble de données audio

Une des caract√©ristiques cl√©s de ūü§ó Datasets est la possibilit√© de t√©l√©charger et de pr√©parer un ensemble de donn√©es en seulement une ligne de code Python. Cela est rendu possible gr√Ęce √† la fonction load_dataset. En g√©n√©ral, charger un ensemble de donn√©es implique : i) t√©l√©charger les donn√©es brutes, ii) les extraire de leur format compress√©, et iii) pr√©parer les √©chantillons individuels et les partitions. En utilisant load_dataset, tout le travail lourd est effectu√© en interne.

Prenons l’exemple du chargement de l’ensemble de donn√©es GigaSpeech depuis Speech Colab. GigaSpeech est un ensemble de donn√©es de reconnaissance vocale relativement r√©cent pour l’√©valuation des syst√®mes de reconnaissance vocale acad√©miques, et il fait partie des nombreux ensembles de donn√©es audio disponibles sur le Hub Hugging Face.

Pour charger l’ensemble de donn√©es GigaSpeech, il suffit de prendre l’identifiant de l’ensemble de donn√©es sur le Hub ( speechcolab/gigaspeech ) et de le sp√©cifier √† la fonction load_dataset. GigaSpeech est disponible en cinq configurations de taille croissante, allant de xs (10 heures) √† xl (10 000 heures). Dans le cadre de ce tutoriel, nous chargerons la plus petite de ces configurations. L’identifiant de l’ensemble de donn√©es et la configuration souhait√©e sont tout ce dont nous avons besoin pour t√©l√©charger l’ensemble de donn√©es :

from datasets import load_dataset

gigaspeech = load_dataset("speechcolab/gigaspeech", "xs")

print(gigaspeech)

Sortie d’impression :

DatasetDict({
    train: Dataset({
        features: ['segment_id', 'speaker', 'text', 'audio', 'begin_time', 'end_time', 'audio_id', 'title', 'url', 'source', 'category', 'original_full_path'],
        num_rows: 9389
    })
    validation: Dataset({
        features: ['segment_id', 'speaker', 'text', 'audio', 'begin_time', 'end_time', 'audio_id', 'title', 'url', 'source', 'category', 'original_full_path'],
        num_rows: 6750
    })
    test: Dataset({
        features: ['segment_id', 'speaker', 'text', 'audio', 'begin_time', 'end_time', 'audio_id', 'title', 'url', 'source', 'category', 'original_full_path'],
        num_rows: 25619
    })
})

Et voil√†, nous avons le jeu de donn√©es GigaSpeech pr√™t ! Il n’y a tout simplement pas de moyen plus facile de charger un jeu de donn√©es audio. Nous pouvons voir que nous avons les partitions d’entra√ģnement, de validation et de test pr√©-d√©finies, avec les informations correspondantes pour chacune.

L’objet gigaspeech retourn√© par la fonction load_dataset est un DatasetDict. Nous pouvons le traiter de la m√™me mani√®re qu’un dictionnaire Python ordinaire. Pour obtenir la partition d’entra√ģnement, nous passons la cl√© correspondante au dictionnaire gigaspeech :

print(gigaspeech["train"])

Sortie d’impression :

Dataset({
    features: ['segment_id', 'speaker', 'text', 'audio', 'begin_time', 'end_time', 'audio_id', 'title', 'url', 'source', 'category', 'original_full_path'],
    num_rows: 9389
})

Cela renvoie un objet Dataset, qui contient les donn√©es de la partition d’entra√ģnement. Nous pouvons aller un niveau plus profond et obtenir le premier √©l√©ment de la partition. Encore une fois, cela est possible gr√Ęce √† l’indexation standard de Python :

print(gigaspeech["train"][0])

Sortie d’impression :

{'segment_id': 'YOU0000000315_S0000660',
 'speaker': 'N/A', 
 'text': "AS THEY'RE LEAVING <COMMA> CAN KASH PULL ZAHRA ASIDE REALLY QUICKLY <QUESTIONMARK>", 
 'audio': {'path': '/home/sanchit_huggingface_co/.cache/huggingface/datasets/downloads/extracted/7f8541f130925e9b2af7d37256f2f61f9d6ff21bf4a94f7c1a3803ec648d7d79/xs_chunks_0000/YOU0000000315_S0000660.wav', 
           'array': array([0.0005188 , 0.00085449, 0.00012207, ..., 0.00125122, 0.00076294,
       0.00036621], dtype=float32), 
           'sampling_rate': 16000
           }, 
 'begin_time': 2941.889892578125, 
 'end_time': 2945.070068359375, 
 'audio_id': 'YOU0000000315', 
 'title': 'Return to Vasselheim | Critical Role: VOX MACHINA | Episode 43', 
 'url': 'https://www.youtube.com/watch?v=zr2n1fLVasU', 
 'source': 2, 
 'category': 24, 
 'original_full_path': 'audio/youtube/P0004/YOU0000000315.opus',
 }

Nous pouvons voir qu’il y a plusieurs caract√©ristiques renvoy√©es par la partition d’entra√ģnement, notamment segment_id, speaker, text, audio et plus encore. Pour la reconnaissance vocale, nous nous int√©resserons aux colonnes text et audio.

En utilisant la m√©thode remove_columns de ūü§ó Datasets, nous pouvons supprimer les caract√©ristiques du jeu de donn√©es qui ne sont pas n√©cessaires pour la reconnaissance vocale :

COLUMNS_TO_KEEP = ["text", "audio"]
all_columns = gigaspeech["train"].column_names
columns_to_remove = set(all_columns) - set(COLUMNS_TO_KEEP)

gigaspeech = gigaspeech.remove_columns(columns_to_remove)

Vérifions que nous avons bien conservé les colonnes texte et audio:

print(gigaspeech["train"][0])

R√©sultat de l’impression:

{'texte': "AS THEY'RE LEAVING <COMMA> CAN KASH PULL ZAHRA ASIDE REALLY QUICKLY <QUESTIONMARK>", 
 'audio': {'chemin': '/home/sanchit_huggingface_co/.cache/huggingface/datasets/downloads/extracted/7f8541f130925e9b2af7d37256f2f61f9d6ff21bf4a94f7c1a3803ec648d7d79/xs_chunks_0000/YOU0000000315_S0000660.wav', 
           'tableau': tableau([0.0005188 , 0.00085449, 0.00012207, ..., 0.00125122, 0.00076294,
       0.00036621], dtype=float32), 
           'taux_échantillonnage': 16000}}

G√©nial ! Nous pouvons voir que nous avons les deux colonnes requises texte et audio. Le texte est une cha√ģne de caract√®res avec la transcription de l’√©chantillon et l’audio est un tableau √† une dimension contenant les valeurs d’amplitude √† un taux d’√©chantillonnage de 16 kHz. Notre ensemble de donn√©es est charg√© !

Facile à Charger, Facile à Traiter

Charger un ensemble de donn√©es avec ūü§ó Datasets est seulement la moiti√© du plaisir. Nous pouvons maintenant utiliser l’ensemble d’outils disponibles pour pr√©traiter efficacement nos donn√©es afin de les rendre pr√™tes pour l’entra√ģnement ou l’inf√©rence du mod√®le. Dans cette section, nous effectuerons trois √©tapes de pr√©traitement des donn√©es :

  1. Resampling des données audio
  2. Fonction de prétraitement
  3. Fonction de filtrage

1. Resampling des données audio

La fonction load_dataset pr√©pare les √©chantillons audio avec le taux d’√©chantillonnage avec lequel ils ont √©t√© publi√©s. Ce n’est pas toujours le taux d’√©chantillonnage attendu par notre mod√®le. Dans ce cas, nous devons r√©√©chantillonner l’audio au taux d’√©chantillonnage correct.

Nous pouvons d√©finir les entr√©es audio avec le taux d’√©chantillonnage souhait√© en utilisant la m√©thode cast_column de ūü§ó Datasets. Cette op√©ration ne modifie pas l’audio en place, mais indique plut√īt √† datasets de r√©√©chantillonner les √©chantillons audio √† la vol√©e lorsqu’ils sont charg√©s. Le code suivant d√©finira le taux d’√©chantillonnage sur 8 kHz :

from datasets import Audio

gigaspeech = gigaspeech.cast_column("audio", Audio(sampling_rate=8000))

Le rechargement du premier √©chantillon audio dans l’ensemble de donn√©es GigaSpeech r√©√©chantillonnera celui-ci au taux d’√©chantillonnage souhait√© :

print(gigaspeech["train"][0])

R√©sultat de l’impression :

{'texte': "AS THEY'RE LEAVING <COMMA> CAN KASH PULL ZAHRA ASIDE REALLY QUICKLY <QUESTIONMARK>", 
 'audio': {'chemin': '/home/sanchit_huggingface_co/.cache/huggingface/datasets/downloads/extracted/7f8541f130925e9b2af7d37256f2f61f9d6ff21bf4a94f7c1a3803ec648d7d79/xs_chunks_0000/YOU0000000315_S0000660.wav', 
           'tableau': tableau([ 0.00046338,  0.00034808, -0.00086153, ...,  0.00099299,
        0.00083484,  0.00080221], dtype=float32), 
           'taux_échantillonnage': 8000}
 }

Nous pouvons voir que le taux d’√©chantillonnage a √©t√© r√©duit √† 8 kHz. Les valeurs du tableau sont √©galement diff√©rentes, car nous avons maintenant environ une valeur d’amplitude pour chaque deux que nous avions auparavant. R√©tablissons le taux d’√©chantillonnage de l’ensemble de donn√©es √† 16 kHz, le taux d’√©chantillonnage attendu par la plupart des mod√®les de reconnaissance vocale :

gigaspeech = gigaspeech.cast_column("audio", Audio(sampling_rate=16000))

print(gigaspeech["train"][0])

Sortie imprimée :

{'text': "ALORS QU'ILS PARTENT <VIRGULE> EST-CE QUE KASH PEUT ATTIRER ZAHRA √Ä PART TR√ąS RAPIDEMENT <POINT D'INTERROGATION>", 
 'audio': {'path': '/home/sanchit_huggingface_co/.cache/huggingface/datasets/downloads/extracted/7f8541f130925e9b2af7d37256f2f61f9d6ff21bf4a94f7c1a3803ec648d7d79/xs_chunks_0000/YOU0000000315_S0000660.wav', 
           'array': array([0.0005188 , 0.00085449, 0.00012207, ..., 0.00125122, 0.00076294,
       0.00036621], dtype=float32), 
           'sampling_rate': 16000}
 }

Facile ! cast_column offre un mécanisme simple pour rééchantillonner les ensembles de données audio selon les besoins.

2. Fonction de prétraitement

L’un des aspects les plus difficiles de travailler avec des ensembles de donn√©es audio est de pr√©parer les donn√©es dans le bon format pour notre mod√®le. En utilisant la m√©thode map de ūü§ó Datasets, nous pouvons √©crire une fonction pour pr√©traiter un seul √©chantillon de l’ensemble de donn√©es, puis l’appliquer √† chaque √©chantillon sans aucun changement de code.

Tout d’abord, chargeons un objet processeur √† partir de ūü§ó Transformers. Ce processeur pr√©traite l’audio en fonctionnalit√©s d’entr√©e et tokenise le texte cible en √©tiquettes. La classe AutoProcessor est utilis√©e pour charger un processeur √† partir d’un point de contr√īle de mod√®le donn√©. Dans l’exemple, nous chargeons le processeur √† partir du point de contr√īle Whisper VoAGI.en d’OpenAI, mais vous pouvez le modifier pour n’importe quel identifiant de mod√®le sur le Hub Hugging Face :

from transformers import AutoProcessor

processor = AutoProcessor.from_pretrained("openai/whisper-VoAGI.en")

G√©nial ! Maintenant, nous pouvons √©crire une fonction qui prend un seul √©chantillon d’entra√ģnement et le passe √† travers le processeur pour le pr√©parer pour notre mod√®le. Nous calculerons √©galement la longueur d’entr√©e de chaque √©chantillon audio, une information dont nous aurons besoin pour l’√©tape suivante de pr√©paration des donn√©es :

def prepare_dataset(batch):
    audio = batch["audio"]
    batch = processor(audio["array"], sampling_rate=audio["sampling_rate"], text=batch["text"])
    
    batch["input_length"] = len(audio["array"]) / audio["sampling_rate"]
    return batch

Nous pouvons appliquer la fonction de pr√©paration des donn√©es √† tous nos exemples d’entra√ģnement en utilisant la m√©thode map de ūü§ó Datasets. Ici, nous supprimons √©galement les colonnes text et audio, car nous avons pr√©trait√© l’audio en fonctionnalit√©s d’entr√©e et tokenis√© le texte en √©tiquettes :

gigaspeech = gigaspeech.map(prepare_dataset, remove_columns=gigaspeech["train"].column_names)

3. Fonction de filtrage

Avant l’entra√ģnement, nous pouvons avoir une heuristique pour filtrer nos donn√©es d’entra√ģnement. Par exemple, nous voulons peut-√™tre filtrer tous les √©chantillons audio plus longs que 30s pour √©viter de tronquer les √©chantillons audio ou de risquer des erreurs de m√©moire insuffisante. Nous pouvons le faire de la m√™me mani√®re que nous avons pr√©par√© les donn√©es pour notre mod√®le √† l’√©tape pr√©c√©dente.

Nous commençons par écrire une fonction qui indique quels échantillons conserver et lesquels rejeter. Cette fonction, is_audio_length_in_range, renvoie un booléen : les échantillons plus courts que 30s renvoient True, et ceux qui sont plus longs renvoient False.

DUR√ČE_MAX_EN_SECONDES = 30.0

def is_audio_length_in_range(input_length):
    return input_length < DUR√ČE_MAX_EN_SECONDES

Nous pouvons appliquer cette fonction de filtrage √† tous nos exemples d’entra√ģnement en utilisant la m√©thode filter de ūü§ó Datasets, en conservant tous les √©chantillons plus courts que 30s (True) et en √©cartant ceux qui sont plus longs (False) :

gigaspeech["train"] = gigaspeech["train"].filter(is_audio_length_in_range, input_columns=["input_length"])

Et voil√†, l’ensemble de donn√©es GigaSpeech est enti√®rement pr√©par√© pour notre mod√®le ! Au total, ce processus a n√©cessit√© 13 lignes de code Python, depuis le chargement de l’ensemble de donn√©es jusqu’√† l’√©tape finale de filtrage.

En gardant le cahier aussi g√©n√©ral que possible, nous avons seulement effectu√© les √©tapes fondamentales de pr√©paration des donn√©es. Cependant, il n’y a aucune restriction quant aux fonctions que vous pouvez appliquer √† votre ensemble de donn√©es audio. Vous pouvez √©tendre la fonction prepare_dataset pour effectuer des op√©rations beaucoup plus complexes, telles que l’augmentation des donn√©es, la d√©tection d’activit√© vocale ou la r√©duction du bruit. Avec ūü§ó Datasets, si vous pouvez l’√©crire dans une fonction Python, vous pouvez l’appliquer √† votre ensemble de donn√©es !

Mode Streaming : La Solution Miracle

Un des plus grands d√©fis auxquels sont confront√©s les ensembles de donn√©es audio est leur taille consid√©rable. La configuration xs de GigaSpeech ne contenait que 10 heures de donn√©es d’entra√ģnement, mais a n√©cessit√© plus de 13 Go d’espace de stockage pour le t√©l√©chargement et la pr√©paration. Alors que se passe-t-il lorsque nous voulons nous entra√ģner sur une partition plus grande ? La configuration xl compl√®te contient 10 000 heures de donn√©es d’entra√ģnement, n√©cessitant plus de 1 To d’espace de stockage. Pour la plupart des chercheurs en parole, cela d√©passe largement les sp√©cifications d’un disque dur typique. Devons-nous investir et acheter un espace de stockage suppl√©mentaire ? Ou existe-t-il un moyen de s’entra√ģner sur ces ensembles de donn√©es sans contraintes d’espace disque ?

ūü§ó Datasets nous permet de faire exactement cela. C’est possible gr√Ęce √† l’utilisation du mode streaming, repr√©sent√© graphiquement dans la Figure 1. Le streaming nous permet de charger les donn√©es progressivement au fur et √† mesure que nous it√©rons sur l’ensemble de donn√©es. Au lieu de t√©l√©charger l’ensemble de donn√©es en une fois, nous chargeons l’√©chantillon de donn√©es par √©chantillon. Nous it√©rons sur l’ensemble de donn√©es, en chargeant et en pr√©parant les √©chantillons au fur et √† mesure de leur besoin. De cette fa√ßon, nous ne chargeons jamais que les √©chantillons que nous utilisons, et pas ceux que nous n’utilisons pas ! Une fois que nous avons termin√© avec un √©chantillon, nous continuons d’it√©rer sur l’ensemble de donn√©es et chargeons le suivant.

Cela est analogue au t√©l√©chargement d’une √©mission de t√©l√©vision par rapport √† son streaming. Lorsque nous t√©l√©chargeons une √©mission de t√©l√©vision, nous t√©l√©chargeons la vid√©o enti√®re hors ligne et la sauvegardons sur notre disque. Nous devons attendre que la vid√©o enti√®re se t√©l√©charge avant de pouvoir la regarder et cela n√©cessite autant d’espace disque que la taille du fichier vid√©o. Comparez cela au streaming d’une √©mission de t√©l√©vision. Ici, nous ne t√©l√©chargeons aucune partie de la vid√©o sur le disque, mais it√©rons plut√īt sur le fichier vid√©o distant et chargeons chaque partie en temps r√©el au fur et √† mesure de notre besoin. Nous n’avons pas besoin d’attendre que la vid√©o enti√®re soit mise en m√©moire tampon avant de pouvoir commencer √† regarder, nous pouvons commencer d√®s que la premi√®re partie de la vid√©o est pr√™te ! C’est le m√™me principe de streaming que nous appliquons au chargement des ensembles de donn√©es.

Figure 1 : Mode streaming. L'ensemble de données est chargé progressivement à mesure de notre itération sur l'ensemble de données.

Le mode streaming pr√©sente trois avantages principaux par rapport au t√©l√©chargement de l’ensemble de donn√©es en une fois :

  1. Espace disque : les √©chantillons sont charg√©s en m√©moire un par un au fur et √† mesure de notre it√©ration sur l’ensemble de donn√©es. √Čtant donn√© que les donn√©es ne sont pas t√©l√©charg√©es localement, il n’y a pas de contraintes d’espace disque, vous pouvez donc utiliser des ensembles de donn√©es de taille arbitraire.
  2. Temps de t√©l√©chargement et de traitement : les ensembles de donn√©es audio sont volumineux et n√©cessitent une quantit√© importante de temps pour √™tre t√©l√©charg√©s et trait√©s. Avec le streaming, le chargement et le traitement sont effectu√©s √† la vol√©e, ce qui signifie que vous pouvez commencer √† utiliser l’ensemble de donn√©es d√®s que le premier √©chantillon est pr√™t.
  3. Exp√©rimentation facile : vous pouvez exp√©rimenter sur un petit nombre d’√©chantillons pour v√©rifier que votre script fonctionne sans avoir √† t√©l√©charger l’ensemble de donn√©es entier.

Il y a une exception au mode streaming. Lorsque nous t√©l√©chargeons un ensemble de donn√©es, les donn√©es brutes et les donn√©es trait√©es sont toutes deux enregistr√©es localement sur le disque. Si nous voulons r√©utiliser cet ensemble de donn√©es, nous pouvons directement charger les donn√©es trait√©es √† partir du disque, en √©vitant ainsi les √©tapes de t√©l√©chargement et de traitement. Par cons√©quent, nous ne devons effectuer les op√©rations de t√©l√©chargement et de traitement qu’une seule fois, apr√®s quoi nous pouvons r√©utiliser les donn√©es pr√©par√©es. Avec le mode streaming, les donn√©es ne sont pas t√©l√©charg√©es sur le disque. Ainsi, ni les donn√©es t√©l√©charg√©es ni les donn√©es pr√©trait√©es ne sont mises en cache. Si nous voulons r√©utiliser l’ensemble de donn√©es, les √©tapes de streaming doivent √™tre r√©p√©t√©es, avec les fichiers audio charg√©s et trait√©s √† la vol√©e √† nouveau. Pour cette raison, il est conseill√© de t√©l√©charger les ensembles de donn√©es que vous √™tes susceptible d’utiliser plusieurs fois.

Comment pouvez-vous activer le mode streaming ? Facile ! Il vous suffit de définir streaming=True lorsque vous chargez votre ensemble de données. Le reste sera pris en charge pour vous :

gigaspeech = load_dataset("speechcolab/gigaspeech", "xs", streaming=True)

Toutes les √©tapes couvertes jusqu’√† pr√©sent dans ce tutoriel peuvent √™tre appliqu√©es √† l’ensemble de donn√©es en streaming sans aucun changement de code. La seule diff√©rence est que vous ne pouvez plus acc√©der aux √©chantillons individuels en utilisant l’indexation Python (c.-√†-d. gigaspeech["train"][sample_idx]). Au lieu de cela, vous devez it√©rer sur l’ensemble de donn√©es, en utilisant par exemple une boucle for.

Le mode streaming peut faire passer votre recherche au niveau sup√©rieur : non seulement les plus grands ensembles de donn√©es vous sont accessibles, mais vous pouvez facilement √©valuer des syst√®mes sur plusieurs ensembles de donn√©es en une seule fois sans vous soucier de l’espace de votre disque. Compar√© √† l’√©valuation sur un seul ensemble de donn√©es, l’√©valuation multi-ensemble donne une meilleure mesure des capacit√©s de g√©n√©ralisation d’un syst√®me de reconnaissance vocale (cf. End-to-end Speech Benchmark (ESB)). Le Google Colab accompagnant fournit un exemple d’√©valuation du mod√®le Whisper sur huit ensembles de donn√©es de reconnaissance vocale en anglais dans un seul script utilisant le mode streaming.

Une visite des ensembles de données audio sur The Hub

Cette section sert de guide de r√©f√©rence pour les ensembles de donn√©es les plus populaires de reconnaissance vocale, de traduction vocale et de classification audio sur le Hugging Face Hub. Nous pouvons appliquer tout ce que nous avons couvert pour l’ensemble de donn√©es GigaSpeech √† n’importe lequel des ensembles de donn√©es sur le Hub. Tout ce que nous avons √† faire est de changer l’identifiant de l’ensemble de donn√©es dans la fonction load_dataset. C’est aussi simple que √ßa !

  1. Reconnaissance vocale en anglais
  2. Reconnaissance vocale multilingue
  3. Traduction vocale
  4. Classification audio

Reconnaissance vocale en anglais

La reconnaissance vocale, ou la conversion de la parole en texte, est la t√Ęche qui consiste √† mapper la parole parl√©e sur le texte √©crit, o√Ļ la parole et le texte sont dans la m√™me langue. Nous fournissons un r√©sum√© des ensembles de donn√©es de reconnaissance vocale les plus populaires en anglais sur le Hub :

Consultez le Google Colab pour un guide sur l’√©valuation d’un syst√®me sur les huit ensembles de donn√©es de reconnaissance vocale en anglais dans un seul script.

Les descriptions d’ensemble de donn√©es suivantes sont largement tir√©es de l’article de r√©f√©rence de l’ESB Benchmark.

LibriSpeech ASR

LibriSpeech est un ensemble de donn√©es standard √† grande √©chelle pour l’√©valuation des syst√®mes ASR. Il est compos√© d’environ 1 000 heures de livres audio narr√©s collect√©s √† partir du projet LibriVox. LibriSpeech a √©t√© essentiel pour permettre aux chercheurs de tirer parti d’un large corpus de donn√©es de parole transcrit pr√©existantes. En tant que tel, il est devenu l’un des ensembles de donn√©es les plus populaires pour l’√©valuation des syst√®mes acad√©miques de parole.

librispeech = load_dataset("librispeech_asr", "all")

Common Voice

Common Voice est une s√©rie d’ensembles de donn√©es vocales sous licence libre et contributive, o√Ļ les locuteurs enregistrent du texte provenant de Wikip√©dia dans diff√©rentes langues. √Čtant donn√© que n’importe qui peut contribuer √† l’enregistrement, il existe une variation significative tant en termes de qualit√© audio que de locuteurs. Les conditions audio sont difficiles, avec des artefacts sonores, de la parole accentu√©e, des h√©sitations et la pr√©sence de mots √©trangers. Les transcriptions sont en minuscules et ponctu√©es. Le sous-ensemble anglais de la version 11.0 contient environ 2 300 heures de donn√©es valid√©es. L’utilisation de l’ensemble de donn√©es n√©cessite votre accord sur les conditions d’utilisation de Common Voice, que vous pouvez trouver sur le Hugging Face Hub : mozilla-foundation/common_voice_11_0. Une fois que vous avez accept√© les conditions d’utilisation, vous aurez acc√®s √† l’ensemble de donn√©es. Vous devrez ensuite fournir un jeton d’authentification √† partir du Hub lorsque vous chargez l’ensemble de donn√©es.

common_voice = load_dataset("mozilla-foundation/common_voice_11", "en", use_auth_token=True)

VoxPopuli

VoxPopuli est un corpus vocal multilingue √† grande √©chelle compos√© de donn√©es provenant d’enregistrements d’√©v√©nements du Parlement europ√©en de 2009 √† 2020. En cons√©quence, il occupe le domaine unique de l’oratoire, du discours politique, principalement issus de locuteurs non natifs. Le sous-ensemble anglais contient environ 550 heures de discours √©tiquet√©s.

voxpopuli = load_dataset("facebook/voxpopuli", "en")

TED-LIUM

TED-LIUM est un ensemble de donn√©es bas√© sur des vid√©os de conf√©rences TED Talk en langue anglaise. Le style de parole est celui des discours √©ducatifs. Les discours transcrits couvrent un √©ventail de sujets culturels, politiques et acad√©miques diff√©rents, ce qui entra√ģne un vocabulaire technique. La version 3 (la plus r√©cente) de l’ensemble de donn√©es contient environ 450 heures de donn√©es d’entra√ģnement. Les donn√©es de validation et de test proviennent de l’ensemble h√©rit√©, conforme aux versions pr√©c√©dentes.

tedlium = load_dataset("LIUM/tedlium", "release3")

GigaSpeech

GigaSpeech est un corpus de reconnaissance automatique de la parole anglais multi-domaine s√©lectionn√© √† partir de livres audio, de podcasts et de YouTube. Il couvre √† la fois la parole narr√©e et spontan√©e sur une vari√©t√© de sujets tels que les arts, la science et les sports. Il contient des ensembles d’entra√ģnement variant de 10 heures √† 10 000 heures et des ensembles de validation et de test standardis√©s.

gigaspeech = load_dataset("speechcolab/gigaspeech", "xs", use_auth_token=True)

SPGISpeech

SPGISpeech est un corpus de reconnaissance automatique de la parole anglais compos√© d’appels de r√©sultats d’entreprise qui ont √©t√© transcrits manuellement par S&P Global, Inc. Les transcriptions sont enti√®rement format√©es selon un guide de style professionnel pour l’√©loquence et la parole spontan√©e. Il contient des ensembles d’entra√ģnement allant de 200 heures √† 5 000 heures, avec des ensembles de validation et de test canoniques.

spgispeech = load_dataset("kensho/spgispeech", "s", use_auth_token=True)

Earnings-22

Earnings-22 est un corpus de 119 heures d’appels de r√©sultats en langue anglaise provenant d’entreprises mondiales. L’ensemble de donn√©es a √©t√© d√©velopp√© dans le but de regrouper un large √©ventail de locuteurs et d’accents couvrant une gamme de sujets financiers r√©els. Il y a une grande diversit√© dans les locuteurs et les accents, avec des locuteurs issus de sept r√©gions linguistiques diff√©rentes. Earnings-22 a √©t√© principalement publi√© en tant qu’ensemble de donn√©es uniquement pour les tests. Le Hub contient une version de l’ensemble de donn√©es qui a √©t√© partitionn√©e en ensembles d’entra√ģnement, de validation et de test.

earnings22 = load_dataset("revdotcom/earnings22")

AMI

AMI comprend 100 heures d’enregistrements de r√©unions captur√©s √† l’aide de diff√©rents flux d’enregistrement. Le corpus contient des transcriptions orthographiques annot√©es manuellement des r√©unions align√©es au niveau des mots. Les √©chantillons individuels de l’ensemble de donn√©es AMI contiennent des fichiers audio tr√®s volumineux (entre 10 et 60 minutes), qui sont segment√©s √† des longueurs praticables pour l’entra√ģnement de la plupart des syst√®mes de reconnaissance de la parole. AMI contient deux ensembles : IHM et SDM. IHM (microphone individuel) contient une parole de champ proche plus facile, et SDM (microphone distant unique) contient une parole de champ lointain plus difficile.

ami = load_dataset("edinburghcstr/ami", "ihm")

Reconnaissance de la parole multilingue

La reconnaissance de la parole multilingue fait r√©f√©rence √† la reconnaissance de la parole (conversion de la parole en texte) pour toutes les langues sauf l’anglais.

Multilingual LibriSpeech

Multilingual LibriSpeech est l’√©quivalent multilingue du corpus d’ASR (Automatic Speech Recognition) LibriSpeech. Il comprend un grand corpus de livres audio lus √† partir du projet LibriVox, ce qui en fait un ensemble de donn√©es adapt√© √† la recherche universitaire. Il contient des donn√©es r√©parties dans huit langues √† ressources √©lev√©es : anglais, allemand, n√©erlandais, espagnol, fran√ßais, italien, portugais et polonais.

Common Voice

Common Voice est une s√©rie d’ensembles de donn√©es vocales sous licence libre et r√©alis√©s en crowdsourcing, dans lesquels les locuteurs enregistrent du texte provenant de Wikip√©dia dans diff√©rentes langues. √Čtant donn√© que n’importe qui peut contribuer aux enregistrements, il y a une variation significative tant au niveau de la qualit√© audio que des locuteurs. Les conditions audio sont difficiles, avec des artefacts d’enregistrement, de la parole avec accent, des h√©sitations et la pr√©sence de mots √©trangers. Les transcriptions sont en majuscules et ponctu√©es. √Ä partir de la version 11, plus de 100 langues sont disponibles, tant √† ressources faibles que √©lev√©es.

VoxPopuli

VoxPopuli est un corpus vocal multilingue √† grande √©chelle compos√© de donn√©es provenant d’enregistrements d’√©v√©nements du Parlement europ√©en de 2009 √† 2020. Par cons√©quent, il occupe le domaine unique de l’√©loquence, du discours politique, principalement provenant de locuteurs non natifs. Il contient des donn√©es audio-transcription √©tiquet√©es pour 15 langues europ√©ennes.

FLEURS

FLEURS (Few-shot Learning Evaluation of Universal Representations of Speech) est un ensemble de donn√©es permettant d’√©valuer les syst√®mes de reconnaissance de la parole dans 102 langues, dont beaucoup sont class√©es comme “√† faible ressource”. Les donn√©es sont d√©riv√©es de l’ensemble de donn√©es FLoRes-101, un corpus de traduction automatique comprenant 3001 traductions de phrases de l’anglais vers 101 autres langues. Des locuteurs natifs enregistrent les transcriptions des phrases dans leur langue maternelle. Les donn√©es audio enregistr√©es sont associ√©es aux transcriptions des phrases pour permettre la reconnaissance de la parole multilingue dans les 101 langues. Les ensembles d’entra√ģnement contiennent environ 10 heures de donn√©es audio-transcription supervis√©es par langue.

Traduction de la parole

La traduction de la parole est la t√Ęche qui consiste √† mapper la parole parl√©e en texte √©crit, o√Ļ la parole et le texte sont dans des langues diff√©rentes (par exemple, de l’anglais parl√© au texte fran√ßais).

CoVoST 2

CoVoST 2 est un corpus de traduction de la parole multilingue √† grande √©chelle couvrant les traductions de 21 langues vers l’anglais et de l’anglais vers 15 langues. Le jeu de donn√©es est cr√©√© √† partir de la base de donn√©es Common Voice de Mozilla, qui est une base de donn√©es de voix enregistr√©es provenant de la foule. Il y a 2 900 heures de discours repr√©sent√©es dans le corpus.

FLEURS

FLEURS (Evaluation de l’apprentissage √† partir de quelques exemples des repr√©sentations universelles de la parole) est un ensemble de donn√©es pour l’√©valuation des syst√®mes de reconnaissance de la parole dans 102 langues, dont beaucoup sont class√©es comme ¬ę √† faibles ressources ¬Ľ. Les donn√©es sont d√©riv√©es de l’ensemble de donn√©es FLoRes-101, un corpus de traduction automatique comprenant 3001 traductions de phrases de l’anglais vers 101 autres langues. Les locuteurs natifs enregistrent les transcriptions des phrases dans leurs langues maternelles. Un corpus parall√®le n-n-n de donn√©es de traduction de la parole est construit en associant les donn√©es audio enregistr√©es aux transcriptions des phrases pour chacune des 101 langues. Les ensembles d’entra√ģnement contiennent environ 10 heures de donn√©es audio-transcription supervis√©es par combinaison de langues source-cible.

Classification audio

La classification audio est la t√Ęche qui consiste √† mapper une entr√©e audio brute √† une √©tiquette de classe de sortie. Les applications pratiques de la classification audio incluent la d√©tection de mots-cl√©s, l’intention des locuteurs et l’identification de la langue.

SpeechCommands

SpeechCommands est un ensemble de donn√©es compos√© de fichiers audio d’une seconde, contenant chacun un seul mot parl√© en anglais ou du bruit de fond. Les mots sont extraits d’un petit ensemble de commandes et sont prononc√©s par plusieurs locuteurs diff√©rents. L’ensemble de donn√©es est con√ßu pour aider √† entra√ģner et √©valuer les petits syst√®mes de d√©tection de mots-cl√©s embarqu√©s.

Mots parlés multilingues

Mots parl√©s multilingues est un corpus √† grande √©chelle d’√©chantillons audio d’une seconde, contenant chacun un seul mot parl√©. L’ensemble de donn√©es comprend 50 langues et plus de 340 000 mots-cl√©s, soit un total de 23,4 millions d’exemples parl√©s d’une seconde ou plus de 6 000 heures d’audio. Les donn√©es audio-transcription sont issues du projet Common Voice de Mozilla. Des horodatages sont g√©n√©r√©s pour chaque √©nonc√© au niveau des mots et utilis√©s pour extraire les mots parl√©s individuels et leurs transcriptions correspondantes, formant ainsi un nouveau corpus de mots parl√©s uniques. L’utilisation pr√©vue de l’ensemble de donn√©es est la recherche acad√©mique et les applications commerciales dans la d√©tection multilingue de mots-cl√©s et la recherche de termes parl√©s.

FLEURS

FLEURS (Evaluation de l’apprentissage √† partir de quelques exemples des repr√©sentations universelles de la parole) est un ensemble de donn√©es pour l’√©valuation des syst√®mes de reconnaissance de la parole dans 102 langues, dont beaucoup sont class√©es comme ¬ę √† faibles ressources ¬Ľ. Les donn√©es sont d√©riv√©es de l’ensemble de donn√©es FLoRes-101, un corpus de traduction automatique comprenant 3001 traductions de phrases de l’anglais vers 101 autres langues. Les locuteurs natifs enregistrent les transcriptions des phrases dans leurs langues maternelles. Les donn√©es audio enregistr√©es sont associ√©es √† une √©tiquette pour la langue dans laquelle elles sont parl√©es. L’ensemble de donn√©es peut √™tre utilis√© comme ensemble de donn√©es de classification audio pour l’identification de la langue : les syst√®mes sont entra√ģn√©s √† pr√©dire la langue de chaque √©nonc√© dans le corpus.

Remarques finales

Dans ce billet de blog, nous avons explor√© le Hub Hugging Face et avons utilis√© l’aper√ßu de l’ensemble de donn√©es, un moyen efficace d’√©couter les ensembles de donn√©es audio avant de les t√©l√©charger. Nous avons charg√© un ensemble de donn√©es audio avec une seule ligne de code Python et avons effectu√© une s√©rie d’√©tapes de pr√©traitement g√©n√©riques pour le pr√©parer √† un mod√®le d’apprentissage automatique. Au total, cela n’a n√©cessit√© que 13 lignes de code, en utilisant des fonctions Python simples pour effectuer les op√©rations n√©cessaires. Nous avons introduit le mode de streaming, une m√©thode pour charger et pr√©parer des √©chantillons de donn√©es audio √† la vol√©e. Nous avons conclu en r√©sumant les ensembles de donn√©es les plus populaires de reconnaissance de la parole, de traduction de la parole et de classification audio sur le Hub.

Apr√®s avoir lu ce blog, nous esp√©rons que vous √™tes d’accord que ūü§ó Datasets est le meilleur endroit pour t√©l√©charger et pr√©parer des ensembles de donn√©es audio. ūü§ó Datasets est rendu possible gr√Ęce au travail de la communaut√©. Si vous souhaitez contribuer √† un ensemble de donn√©es, consultez le guide pour ajouter un nouvel ensemble de donn√©es.

Nous tenons à remercier les personnes suivantes qui ont contribué à ce billet de blog : Vaibhav Srivastav, Polina Kazakova, Patrick von Platen, Omar Sanseviero et Quentin Lhoest.

We will continue to update IPGirl; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more