Voici SpeechBrain : Une boîte à outils polyvalente de traitement de la parole basée sur PyTorch

Mila > Le blogue Mila > Voici SpeechBrain : Une boîte à outils polyvalente de traitement de la parole basée sur PyTorch
28/04/2021
Voici SpeechBrain : Une boîte à outils polyvalente de traitement de la parole basée sur PyTorch
par Mirco Ravanelli, Loren Lugosch

Qu’est-ce que SpeechBrain ?

SpeechBrain est une boîte à outils de traitement de la parole tout-en-un en code source libre, à la fois simple, flexible, conviviale et bien documentée, conçue pour faciliter la recherche-développement de technologies de traitement neuronal de la parole.

SpeechBrain peut prendre en charge nativement plusieurs tâches vocales d’intérêt général, notamment les suivantes :

  • Reconnaissance automatique de la parole, c’est-à-dire la transcription automatique de la parole.
  • Compréhension du langage parlé, c’est-à-dire l’interprétation du sens.
  • Reconnaissance du locuteur, c’est-à-dire l’identification ou la vérification de l’identité des locuteurs à partir d’enregistrements de la parole.
  • Amélioration de la parole, c’est-à-dire l’amélioration de la qualité du signal vocal par la suppression du bruit.
  • Séparation vocale, c’est-à-dire la distinction de plusieurs locuteurs parlant en même temps.
  • Segmentation des locuteurs, c’est-à-dire la détection de qui a parlé et quand.
  • Traitement du signal multimicrophone, c’est-à-dire la combinaison de l’information enregistrée par plusieurs microphones.

De nombreuses autres tâches telles que la synthèse de la parole, la classification des événements acoustiques, et l’apprentissage autosurveillé seront bientôt prises en charge. La boîte à outils fournit des recettes d’entraînement pour les jeux de données vocales les plus populaires. Des modèles préentraînés sont publiés sur Hugging Face (https://huggingface.co/speechbrain/), de même que des fonctionnalités intuitives pour l’inférence et le réglage fin. Pour aider les débutants à se familiariser avec la boîte à outils, nous avons écrit plusieurs tutoriels sur Google Colab (https://speechbrain.github.io/tutorial_basics.html). SpeechBrain est publié sous la licence Apache, version 2.0.

Site Web : https://speechbrain.github.io/
GitHub : https://github.com/speechbrain/speechbrain

Motivation

La disponibilité de logiciels libres joue un rôle remarquable dans la communauté de l’apprentissage profond, comme l’ont démontré Theano [1] et ses didacticiels d’apprentissage profond [2] lorsque l’apprentissage profond a vu le jour. Aujourd’hui, l’une des boîtes à outils les plus utilisées est PyTorch [3], grâce à sa conception moderne et flexible qui prend en charge les calculs tensoriels sur GPU et facilite le développement d’architectures neuronales structurées dynamiquement avec des routines appropriées pour le calcul automatique du gradient.

Parallèlement aux logiciels d’apprentissage profond à usage général, certaines boîtes à outils de traitement de la parole ont également gagné en popularité au sein de la communauté de recherche. La plupart d’entre elles sont limitées à des tâches vocales spécifiques. Par exemple, Kaldi [4] est un cadre bien établi utilisé pour le perfectionnement d’outils de reconnaissance vocale de pointe.

Même si beaucoup de ces cadres fonctionnent bien pour la tâche spécifique pour laquelle ils sont conçus, notre expérience dans le domaine suggère que le fait de disposer d’une boîte à outils unique, efficace et flexible peut accélérer considérablement la recherche et la mise au point de techniques de traitement de la parole et de l’audio. Il est ainsi beaucoup plus facile de se familiariser avec une seule boîte à outils que d’apprendre plusieurs cadres différents, étant donné que toutes les techniques de traitement de la parole de pointe partagent la même technologie sous-jacente : l’apprentissage profond. SpeechBrain consolide donc toutes les tâches de traitement de la parole au sein d’une seule et même boîte à outils, au bénéfice de la communauté de recherche.

Ce n’est que récemment que d’excellentes boîtes à outils capables de prendre en charge diverses tâches de traitement de la parole ont été lancées sur le marché. Citons par exemple ESPNET [5] et NeMo [6]. Dans cette optique, nous avons récemment lancé SpeechBrain, que nous avons conçu de A à Z avec l’idée qu’il soit simple, flexible et modulaire. Nous voulons que SpeechBrain soit également adapté à des fins éducatives. Nous avons donc fait des efforts considérables pour fournir une documentation riche et des tutoriels pour aider les débutants à se familiariser avec notre boîte à outils.

Exemple d’utilisation

SpeechBrain peut être facilement installé de cette manière :

 pip install speechbrain 

Si vous préférez une installation locale, vous pouvez taper :

git clone https://github.com/speechbrain
cd speechbrain
pip install -r requirements.txt
pip install --editable .

Inférence avec un modèle préentraîné 

Une fois le logiciel installé, vous pouvez commencer à vous amuser. Tout d’abord, voyez comment il est facile d’utiliser un de nos modèles préentraînés stockés sur Hugging Face (https://huggingface.co/speechbrain). Par exemple, vous pouvez utiliser un modèle de reconnaissance vocale (entraîné sur LibriSpeech) pour transcrire un enregistrement audio :

from speechbrain.pretrained import EncoderDecoderASR
asr_model =
EncoderDecoderASR.from_hparams(source="peechbrain/asr-crdnn-rnnlm-librispeech",
savedir="pretrained_models/asr-crdnn-rnnlm-librispeech")
asr_model.transcribe_file('speechbrain/asr-crdnn-rnnlm-librispeech/example.wav')

Vous pouvez également effectuer une reconnaissance des locuteurs, pour vérifier si deux enregistrements proviennent des mêmes locuteurs ou de locuteurs différents.

from speechbrain.pretrained import SpeakerRecognition
verification =
SpeakerRecognition.from_hparams(source="speechbrain/spkrec-ecapa-vox
celeb", savedir="pretrained_models/spkrec-ecapa-voxceleb")
score, prediction =
verification.verify_files("speechbrain/spkrec-ecapa-voxceleb/example1.wav",
"speechbrain/spkrec-ecapa-voxceleb/example2.flac")

Nous fournissons également quelques modèles de préentraînement pour la séparation vocale (en utilisant l’architecture SepFormer) :

from speechbrain.pretrained import SepformerSeparation as separator
import torchaudio
model =
separator.from_hparams(source="speechbrain/sepformer-wsj02mix",
savedir='pretrained_models/sepformer-wsj02mix')
# for custom file, change path
est_sources =
model.separate_file(path='speechbrain/sepformer-wsj02mix/test_mixtur
e.wav')
torchaudio.save("source1hat.wav", est_sources[:, :,
0].detach().cpu(), 8000)
torchaudio.save("source2hat.wav", est_sources[:, :,
1].detach().cpu(), 8000)

Nous prenons en charge de nombreuses autres tâches (voir https://huggingface.co/speechbrain/). Comme vous pouvez le constater, vous pouvez facilement utiliser des modèles SpeechBrain préentraînés avec seulement quelques lignes de code.

Entraînement d’un modèle

En plus des éléments de base du traitement de la parole couramment utilisés et des modèles préentraînés, SpeechBrain comprend de nombreuses recettes pour entraîner des modèles vocaux de pointe à partir de zéro pour une variété de tâches.

Si vous allez dans le dossier principal du projet, vous pouvez taper :

cd recipes/{dataset}/{task}

Ici, le jeu de données (dataset) est le corpus que vous souhaitez utiliser pour l’entraînement (par exemple, LibriSpeech) et la tâche (task) est la tâche vocale que vous voulez effectuer avec ce jeu de données (par exemple, la reconnaissance automatique de la parole).

Ensuite, nous exécutons une commande simple, comme celle-ci :

#Train the model using the default recipe
python train.py hparams/train.yaml

Cela permet d’entraîner et de tester un modèle. Tous les hyperparamètres sont résumés dans un fichier yaml, tandis que le script principal pour l’entraînement est train.py.

yaml permet de définir les hyperparamètres d’une manière élégante, flexible et transparente. Par exemple, voici un fragment de code yaml :  

dropout: 0.8
compute_features: !new:speechbrain.lobes.features.MFCC
    n_mels: 40
    left_frames: 5
    right_frames: 5

model: !new:speechbrain.lobes.models.CRDNN.CRDNN
   input_shape: [null, null, 440]
   activation: !name:torch.nn.LeakyReLU []
   dropout: !ref <dropout>
   cnn_blocks: 2
   cnn_channels: (32, 16)
   cnn_kernelsize: (3, 3)
   time_pooling: True
   rnn_layers: 2
   rnn_neurons: 512
   rnn_bidirectional: True
   dnn_blocks: 2
   dnn_neurons: 1024

Comme vous pouvez le constater, il ne s’agit pas d’une simple liste d’hyperparamètres. Pour chaque paramètre, nous précisons la classe (ou la fonction) qui va l’utiliser. Cela rend le code plus transparent et plus facile à déboguer.

Le fichier yaml contient toutes les informations pour initialiser les classes lors de leur chargement. Dans SpeechBrain, il est doté d’une fonction spéciale appelée load_hyperpyyaml, qui initialise toutes les classes déclarées. Cela rend le code extrêmement lisible et compact.

Le fichier d’expérience (p. ex. example_asr_ctc_experiment.py tiré de l’exemple) entraîne un modèle en combinant les fonctions ou les classes déclarées dans le fichier yaml. Ce script définit le pipeline de traitement des données et définit tous les calculs depuis le signal d’entrée jusqu’à la fonction coût final. Tout est conçu pour être facilement personnalisable.

Pour faciliter l’entraînement, SpeechBrain comprend la classe Brain, qui utilise des routines superposables pour l’entraînement d’un modèle sur plusieurs époques, validations, points de contrôle et chargements de données. Notre classe flexible de chargement de données DynamicItemDataset permet de personnaliser entièrement le pipeline de lecture des données directement dans le fichier d’expérience.

En conséquence, le code utilisé pour l’entraînement est plutôt compact et organisé en classes/fonctions significatives aux fonctionnalités claires. Même pour les systèmes complexes, vous pouvez exécuter toutes les expériences d’entraînement pour toutes les recettes de cette manière toute simple. Actuellement, nous disposons de recettes pour de nombreux jeux de données vocales, notamment LibriSpeech, VoxCeleb, CommonVoice, AISHELL-1, AMI, DNSGoogle Speech Commands, SLURP, TIMIT, Voicebank, WSJ0Mix, Fluent Speech Commands, et Timers and Such.

Prochaines étapes

Nous prévoyons de bâtir progressivement une communauté qui travaillera sur cette boîte à outils en code source libre. À l’avenir, nous aimerions étendre les fonctionnalités de la boîte à outils pour inclure des tâches telles que la synthèse vocale, l’apprentissage autosupervisé, les modèles pour les appareils à faible encombrement et la prise en charge du traitement vocal en ligne en temps réel. La communauté des logiciels libres jouera un rôle important dans ce plan de croissance ambitieux.

Une autre aide peut venir des commanditaires. Les commandites nous permettent de continuer à élargir l’équipe de SpeechBrain et à augmenter le nombre de nouvelles fonctionnalités proposées. Si vous souhaitez contribuer, n’hésitez pas à communiquer avec nous à speechbrainproject@gmail.com.

Remerciements

Un grand merci à tous les contributeurs qui ont permis de concrétiser ce projet ! Il n’aurait pas été possible sans la généreuse contribution de nos commanditaires actuels : Samsung, Nvidia, Dolby, Nuance, Via-Dialog.

Contributeurs

Mirco Ravanelli, Mila, Université de Montréal (CA)
Titouan Parcollet, Université d’Avignon (LIA, FR)
Aku Rouhe, Université Aalto (FI)
Peter Plantinga, Université d’État de l’Ohio (É.-U.)
Elena Rastorgueva
Loren Lugosch, Mila, Université McGill (CA)
Nauman Dawalatabad, Institut indien de technologie de Madras (IN)
Ju-Chieh Chou, Université nationale de Taïwan (TW)
Abdel Heba, Linagora / Université de Toulouse (IRIT, FR)
François Grondin, Université de Sherbrooke (CA)
William Aris, Université de Sherbrooke (CA)
Chien-Feng Liao, Université nationale de Taïwan (TW)
Samuele Cornell, Université polytechnique des Marches (IT)
Sung-Lin Yeh, Université nationale Tsing Hua (TW)
Hwidong Na, Chercheur invité Samsung SAIL (CA)
Yan Gao, Université de Cambridge (R.-U.)
Szu-Wei Fu, Académie chinoise (TW)
Cem Subakan, Mila, Université de Montréal (CA)
Jianyuan Zhong, Université de Rochester (É.-U.)
Brecht Desplanques, Université de Gand (BE)
Jenthe Thienpondt, Université de Gand (BE)
Salima Mdhaffar, Université d’Avignon (LIA, FR)
Renato De Mori, Université de McGill (CA), Université d’Avignon (LIA, FR)
Yoshua Bengio, Mila, Université de Montréal (CA)

Références :

[1] https://github.com/Theano/Theano
[2] http://deeplearning.net/software/theano
[3] https://pytorch.org/
[4] https://github.com/kaldi-asr/kaldi
[5] https://github.com/espnet/espnet
[6] https://github.com/NVIDIA/NeMo

Articles similaires

array(1) { ["wp-wpml_current_language"]=> string(2) "fr" }