Entraîner des modèles sur-mesure avec commonvoice-fr

Préambule

Dans ce document, je vais vous montrer comment facilement entraîner un modèle de reconnaissance vocale sur-mesure pour votre voix grâce à l’image docker de commonvoice-fr, vos données personnelles de CommonVoice et mon modèle pré-entraîné.

Conditions nécessaires

Pour commencer, il vous faut:

Gérez vos permissions

Prévoyez assez de place disponible pour vos données d’entraînement dans un dossier hôte $VOTRE_DOSSIER_HOTE sur votre machine. Les permissions du dossier doivent être prévue pour l’utilisateur trainer créé dans l’image commonvoice-fr.

Pour récursivement changer les permissions d’un dossier utilisez la commande chown 999:999 -R $chemin_du_dossier.
(999: ID du groupe et de l’utilisateur trainer)

Améliorez votre modèle de language

Si vous souhaitez augmenter votre modèle de language, utilisez la variable d’environnement $LM_ADD_EXCLUDED_MAX_SEC=1 et créez un ou plusieurs fichiers ${VOTRE_DOSSIER_HOTE}/extracted/_*_lm.txt contenant des phrases à ajouter au scorer.
(Une phrase par ligne. * peut être n’importe quoi. ex: _03234_custom_lm.txt)
Changez les permissions!

Utilisez un checkpoint

Dans un autre dossier, également appartenant à l’utilisateur trainer, téléchargez mon dernier modèle pré-entraîné et placez-y le contenu de checkpoints-fr.tar.xz dans le dossier.
Changez également les permissions.

Préparez commonvoice-fr

Dans un nouveau dossier (en dehors du dossier hôte pour les données) clonez ma branche de commonvoice-fr pour STT 1.4.0 et CommonVoice 12.0.

git clone https://github.com/wasertech/commonvoice-fr.git ./cv-fr && \
cd  cv-fr/ && \
git checkout -b stt140-cv12

Construisez l’image docker

Dans le dossier cv-fr/STT, construisez l’image docker avec les paramètres de votre choix.
(999: ID du groupe et de l’utilisateur trainer)

docker build \
--build-arg uid=999 \
--build-arg gid=999 \
-f Dockerfile.train \
-t commonvoice-fr .

Créez un modèle sur-mesure.

Une fois l’image construite, vous pouvez la lancer en utilisant la commande suivante.

docker run \
-it \
--gpus=all \
--privileged \
--shm-size=1g \
--ulimit memlock=-1 \
--ulimit stack=67108864 \
--mount type=bind,src=${VOTRE_DOSSIER_HOTE},dst=/mnt \
--mount type=bind,src=${VOTRE_DOSSIER_CHECKPOINT},dst=/transfer-checkpoint \
--env CV_PERSONAL_FIRST_URL="Première url pour votre archive CV perso" \
--env CV_PERSONAL_SECOND_URL="Deuxième url pour votre archive CV perso" \
--env TRAIN_BATCH_SIZE=16 \
--env DEV_BATCH_SIZE=4 \
--env TEST_BATCH_SIZE=4 \
--env EPOCH=15 \
--env LM_ADD_EXCLUDED_MAX_SEC=1 \
--env LM_EVALUATE_RANGE=2,2,50 \
commonvoice-fr 

Avant de lancer l’image, obtenez les deux url pour télécharger vos données avec CommonVoice et configurez l’environnement avec --env.

N’oubliez pas de monter votre dossier hôte pour vos données ($VOTRE_DOSSIER_HOTE), ainsi que le dossier contenant les modèles pré-entraîné ($VOTRE_DOSSIER_CHECKPOINT).

Vous pouvez modifier le nombre d’epochs et la taille par batch en fonction de la quantité de données que vous avez validé sur CommonVoice.

Utilisez $LM_EVALUATE_RANGE=lm_max_alpha,lm_max_beta,n_trails (doc) pour optimiser votre scorer sur vos données personnelles.

A la fin du processus, vous obtiendrez vos nouveaux modèles sur-mesure à la racine de votre dossier hôte dans l’archive fr-fr.zip.

Testez vos nouveaux modèles

Vous pourrez alors tester vos modèles en utilisant la commande stt après avoir extrait l’archive.

pip install stt && \
stt  --model chemin/vers/output_graph.tflite --scorer chemin/vers/kenlm.scorer 

Besoins de plus de données?

Contribuez votre voix au projet CommonVoice!

1 Like

rebonjour Danny ! @skeilnet

A la lecture de la matrice, ne pourrais tu point mettre ce tuto dans le README de common voice-fr, ou a minima un lien vers ce Discourse ? Car j’ai peut que ton travail ne reste dans les limbe s’il n’est pas référencé/archivé en lien avec common voice-fr.

Ca risque de fortement évoluer avec les ajouts apportés.

C’est plus un guide pour les francophones (anglophobes) qu’autre chose. J’ai remarqué qu’il n’existait pas de resource qui expliquait succinctement (en français) comment utiliser l’image docker pour l’entraînement (l’ajustement) des modèles. Hors, c’est quelque chose qui, à mon avis, peut booster les contributions au projet CommonVoice. Une fois que tout le monde à bien compris la corrélation entre nos contributions et la qualité de nos modèles bien-sûr.

Le mieux que je puisse faire, c’est de mettre le lien de cet article dans le README de ma branche de commonvoice-fr.

2 Likes

Super !
Question bête : …et pourquoi ne pas merger ta version du README dans la branche commune ? Ta version est nettement plus à jour, donc elle pourrait tout à fait remplacer la MAIN, non ?

Y a pas de question bête. Juste des questions qui n’ont pas encore trouvé leurs réponses.

J’ai pas juste mis à jour la doc mais bien tout le projet pour passer de DeepSpeech à Coqui-STT.

Effectivement, c’est bien pour ça que j’ai ouvert une pull request. Maintenant, j’ai pas les droits suffisant pour le faire moi-même et je rappel que Mozilla ne maintient plus DeepSpeech (et donc commonvoice-fr). Toutefois sans l’aide (entièrement volontaire) de @lissyx, j’aurais jamais réussi à le faire aussi proprement (y a eu pas mal d’autres PR avant) car les modifications sont substantielles et certains fichiers ne collent pas ce qui rend une fusion plus délicate.

Dans tous les cas, c’est plus important qu’on puissent continuer à produire des modèles dans notre langue que de pinailler sur l’endroit où on les produit.

1 Like

En vrai il faudrait que je prenne le temps de regarder tes patches, mais ça change tellement de choses que je repousse tout le temps.

2 Likes

D’ailleurs maintenant que t’as un truc qui semble stable, tu penses que tu pourrais re-découper le travail pour que ce soit reviewable ? (j’ai pas regardé les derniers pushes, donc si c’est le cas pardon, dis le moi juste :slight_smile: )

@lissyx : Check tes messages privés :wink:

Oui et faut dire que de modifier directement le dossier DeepSpeech ça aide pas non plus…

C’est pour ça que je suis parti d’un nouveau dossier STT et j’ai laissé DeepSpeech tranquil.

Je t’ai fais un joli patch où tu peux facilement voir la diff entre DeepSpeech et STT.

Si non tu peux aussi la calculer toi même:

❯ diff --recursive DeepSpeech STT

Voilà voilà, bisous.