Un premier modèle français

J’ai réussi à obtenir un premier modèle assez fonctionnel pour pouvoir effectuer des démos. Il a été entraîné avec le Docker disponible https://github.com/Common-Voice/commonvoice-fr/blob/master/DeepSpeech/CONTRIBUTING.md

  • entraîné par dessus le checkpoint du modèle 0.5.0
  • importation de LinguaLibre, TrainingSpeech et Common Voice, avec mode compatible anglais

Avant de mettre à disposition, je vais continuer quelques vérifications, et m’assurer que le nécessaire est disponible dans les dépôts pour que ce soit reproductible.

Le modèle a été testé sur Android notamment. Côté qualité, il ne faut pas attendre un truc parfait. Le WER en fin d’entraînement est > 95%, et le CER au delà de 55%.

Le modèle de langue, construit à partir de Wikipedia, nécessite encore un peu de travail (je dois le regénérer avec un alphabet compatible avec l’anglais).

Il est aussi nécessaire d’articuler correctement et avec un volume sonore suffisant, sans aller trop vite.

Attention, ce premier modèle a été entraîné sans language model, si vous faites des essais avec les résultats seront incohérents.

EDIT: DeepSpeech v0.5.0 et ses checkpoints sont disponibles, j’ai donc validé la PR qui permet de faire du transfer-learning depuis l’anglais. Je suis encore en train de faire tourner un entraînement, je compte partager les modèles exportés + checkpoints d’ici peu.

4 Likes

2 Likes

C’est encourageant alors. Bravo.
En attendant notre modèle aussi.

1 Like

Merci, j’ai plus ou moins terminé https://github.com/Common-Voice/commonvoice-fr/pull/44, mais j’ai encore des essais à faire pour vérifier que j’obtiens bien le même résultat. Pour le moment, c’est construit à partir d’une branche de mon fork de DeepSpeech, je cherche une façon de faire le filtrage validate_label_fr qui soit souple et facile à modifier.

Il y a encore un comportement d’entraînement inadapté, que j’avais résolu l’autre fois : le loss augmente. J’ai peut d’avoir un petit bug qui traîne dans l’importation des données.

+ python -u DeepSpeech.py --alphabet_config_path /mnt/models/alphabet.txt --lm_binary_path /mnt/lm/lm.binary --lm_trie_path /mnt/lm/trie --feature_cache /mnt/sources/feature_cache --train_files /mnt/extracted/data/lingualibre/lingua_libre_Q21-fra-French_train.csv,/mnt/extracted/data/trainingspeech/ts_2019-04-11_fr_FR_train.csv,/mnt/extracted/data/cv-fr/clips/train.csv --dev_files /mnt/extracted/data/lingualibre/lingua_libre_Q21-fra-French_dev.csv,/mnt/extracted/data/trainingspeech/ts_2019-04-11_fr_FR_dev.csv,/mnt/extracted/data/cv-fr/clips/dev.csv --test_files /mnt/extracted/data/lingualibre/lingua_libre_Q21-fra-French_test.csv,/mnt/extracted/data/trainingspeech/ts_2019-04-11_fr_FR_test.csv,/mnt/extracted/data/cv-fr/clips/test.csv --train_batch_size 68 --dev_batch_size 68 --test_batch_size 68 --n_hidden 2048 --epochs 100 --learning_rate 0.000001 --dropout_rate 0.30 --lm_alpha 0.0 --lm_beta 0.0 --noearly_stop --display_step 0 --validation_step 1 --checkpoint_step 1 --checkpoint_dir /mnt/checkpoints/ --export_dir /mnt/models/ --export_language fra                                                                                                                                        
WARNING:tensorflow:From /home/trainer/ds-train-fr/lib/python3.6/site-packages/tensorflow/python/data/ops/dataset_ops.py:429: py_func (from tensorflow.python.ops.script_ops) is deprecated and will be removed in a future version.                                                                                                                                                                            
Instructions for updating:                                                                                                                                                                                                                                                                                                                                                                                     
tf.py_func is deprecated in TF V2. Instead, use                                                                                                                                                                                                                                                                                                                                                                
    tf.py_function, which takes a python function which manipulates tf eager                                                                                                                                                                                                                                                                                                                                   
    tensors instead of numpy arrays. It's easy to convert a tf eager tensor to                                                                                                                                                                                                                                                                                                                                 
    an ndarray (just call tensor.numpy()) but having access to eager tensors                                                                                                                                                                                                                                                                                                                                   
    means `tf.py_function`s can use accelerators such as GPUs as well as                                                                                                                                                                                                                                                                                                                                       
    being differentiable using a gradient tape.                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                               
WARNING:tensorflow:From /home/trainer/ds-train-fr/lib/python3.6/site-packages/tensorflow/python/data/ops/iterator_ops.py:358: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.
Instructions for updating:                                                     
Colocations handled automatically by placer.                                   
WARNING:tensorflow:From /home/trainer/ds-train-fr/lib/python3.6/site-packages/tensorflow/contrib/rnn/python/ops/lstm_ops.py:696: to_int64 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.
Instructions for updating:                                                     
Use tf.cast instead.                                                           
WARNING:tensorflow:From /home/trainer/ds-train-fr/lib/python3.6/site-packages/tensorflow/python/training/saver.py:1266: checkpoint_exists (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.
Instructions for updating:                                                     
Use standard file APIs to check for files with this prefix.        
I Restored variables from most recent checkpoint at /mnt/checkpoints/best_dev-585277, step 585277                                                                                                                                        
I STARTING Optimization                                                                                                                                                                         
Epoch 0 |   Training | Elapsed Time: 0:15:33 | Steps: 1120 | Loss: 198.901285  
Epoch 0 | Validation | Elapsed Time: 0:00:02 | Steps: 31 | Loss: 34.221434 | Dataset: /mnt/extracted/data/lingualibre/lingua_libre_Q21-fra-French_dev.csv                                                                             
Epoch 0 | Validation | Elapsed Time: 0:00:29 | Steps: 91 | Loss: 242.853168 | Dataset: /mnt/extracted/data/trainingspeech/ts_2019-04-11_fr_FR_dev.csv                                   
Epoch 0 | Validation | Elapsed Time: 0:00:14 | Steps: 65 | Loss: 139.231356 | Dataset: /mnt/extracted/data/cv-fr/clips/dev.csv
I Saved new best validating model with loss 172.248882 to: /mnt/checkpoints/best_dev-586397
Epoch 1 |   Training | Elapsed Time: 0:15:39 | Steps: 1120 | Loss: 168.445158                                                                                                               
Epoch 1 | Validation | Elapsed Time: 0:00:02 | Steps: 31 | Loss: 35.868865 | Dataset: /mnt/extracted/data/lingualibre/lingua_libre_Q21-fra-French_dev.csv
Epoch 1 | Validation | Elapsed Time: 0:00:29 | Steps: 91 | Loss: 252.253984 | Dataset: /mnt/extracted/data/trainingspeech/ts_2019-04-11_fr_FR_dev.csv
Epoch 1 | Validation | Elapsed Time: 0:00:14 | Steps: 65 | Loss: 144.695296 | Dataset: /mnt/extracted/data/cv-fr/clips/dev.csv
Epoch 2 |   Training | Elapsed Time: 0:15:35 | Steps: 1120 | Loss: 158.498774    
WARNING:tensorflow:From /home/trainer/ds-train-fr/lib/python3.6/site-packages/tensorflow/python/training/saver.py:966: remove_checkpoint (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.
Instructions for updating:                    
Use standard file APIs to delete files with this prefix.
Epoch 2 | Validation | Elapsed Time: 0:00:02 | Steps: 31 | Loss: 37.718021 | Dataset: /mnt/extracted/data/lingualibre/lingua_libre_Q21-fra-French_dev.csv                                                                                              
Epoch 2 | Validation | Elapsed Time: 0:00:29 | Steps: 91 | Loss: 259.248127 | Dataset: /mnt/extracted/data/trainingspeech/ts_2019-04-11_fr_FR_dev.csv
Epoch 2 | Validation | Elapsed Time: 0:00:14 | Steps: 65 | Loss: 149.385020 | Dataset: /mnt/extracted/data/cv-fr/clips/dev.csv
Epoch 3 |   Training | Elapsed Time: 0:15:39 | Steps: 1120 | Loss: 144.689475
Epoch 3 | Validation | Elapsed Time: 0:00:02 | Steps: 31 | Loss: 40.592877 | Dataset: /mnt/extracted/data/lingualibre/lingua_libre_Q21-fra-French_dev.csv
Epoch 3 | Validation | Elapsed Time: 0:00:29 | Steps: 91 | Loss: 277.970247 | Dataset: /mnt/extracted/data/trainingspeech/ts_2019-04-11_fr_FR_dev.csv
Epoch 3 | Validation | Elapsed Time: 0:00:14 | Steps: 65 | Loss: 160.652092 | Dataset: /mnt/extracted/data/cv-fr/clips/dev.csv
Epoch 4 |   Training | Elapsed Time: 0:15:43 | Steps: 1120 | Loss: 128.832886                                                                                                                                                                           
Epoch 4 | Validation | Elapsed Time: 0:00:02 | Steps: 31 | Loss: 44.560288 | Dataset: /mnt/extracted/data/lingualibre/lingua_libre_Q21-fra-French_dev.csv
Epoch 4 | Validation | Elapsed Time: 0:00:29 | Steps: 91 | Loss: 308.391034 | Dataset: /mnt/extracted/data/trainingspeech/ts_2019-04-11_fr_FR_dev.csv
Epoch 4 | Validation | Elapsed Time: 0:00:14 | Steps: 65 | Loss: 177.152804 | Dataset: /mnt/extracted/data/cv-fr/clips/dev.csv
Epoch 5 |   Training | Elapsed Time: 0:15:36 | Steps: 1120 | Loss: 114.762158  ^[[A
Epoch 5 | Validation | Elapsed Time: 0:00:02 | Steps: 31 | Loss: 49.119470 | Dataset: /mnt/extracted/data/lingualibre/lingua_libre_Q21-fra-French_dev.csv
Epoch 5 | Validation | Elapsed Time: 0:00:29 | Steps: 91 | Loss: 343.108495 | Dataset: /mnt/extracted/data/trainingspeech/ts_2019-04-11_fr_FR_dev.csv
Epoch 5 | Validation | Elapsed Time: 0:00:14 | Steps: 65 | Loss: 193.982464 | Dataset: /mnt/extracted/data/cv-fr/clips/dev.csv

Je dois mettre en place l’environnement le plus tôt possible pour soutenir. Au moins pour les tests.

Je ne pense plus avoir besoin de faire de changements côté Docker, j’ai mergé le code.

1 Like

Pour ceux que ça intéresse :

  • git clone https://github.com/Common-Voice/commonvoice-fr
  • cd commonvoice-fr/DeepSpeech
  • docker build -f Dockerfile.train.fr --tag deepspeech-fr:transfer-learning-eng --build-arg ds_repo=lissyx/DeepSpeech --build-arg ds_branch=validate_label_fr .
    -docker run --runtime=nvidia --mount type=bind,src=$HOME/tmp/deepspeech-fr-docker,dst=/mnt --mount type=bind,src=$HOME/tmp/deepspeech-eng/0.5.0/checkpoints/,dst=/transfer-checkpoint -e EPOCHS=100 -e LEARNING_RATE=0.00001 -e DROPOUT=0.15 -e LM_ALPHA=0.0 -e LM_BETA=0.0 -e ENGLISH_COMPATIBLE=1 deepspeech-fr:transfer-learning-eng
2 Likes

Et hop! https://github.com/Common-Voice/commonvoice-fr/releases/tag/v0.5.0-fr-0.1

2 Likes

j’ai testé le modéle que vous avez publié mais ça ne marche pas bien , il n’arrive méme pas à reconnaitre un mot

Est-ce que vous avez bien lu les recommandations ci-dessus et le fait que c’est une première ébauche, loin d’être garantie comme fonctionnant bien ? J’ai eu plusieurs retours d’autres personnes, en s’assurant de suivre ces recommandations, capables d’obtenir des résultats encourageants.

Est-ce que vous pouvez faire un nouveau thread avec plus d’informations pour reproduire ?

Bonjour,

Pouvez vous me renseigner sur la façon de deployer les modèles que vous avez entraînés ?

Comme ça je m’assure que j’ai pas commis d’erreur lors de mon test.

Merci d’avance

Le jeu. 27 juin 2019 à 11:33, Lissyx via Mozilla Discourse discourse@mozilla-community.org a écrit :

Il n’y a rien de spécial, je ne suis pas sûr de bien comprendre la question … Télécharger le fichier, et un binaire deepspeech (python, c++, nodejs, etc.).

c’est exactement ce que j’ai fais.

deepspeech --model output_graph.pbmm --audio [fichier à partir de test commun voice] --lm lm.binary --trie trie --alphabet /alphabet.txt

ce que je trouve en prédiction est très loin de la vrai phrase.

Pouvez vous me renseigner un peut plus sur vos résultats , Loss, WER,CER ou des exemples de test avec votre modèle.

Je travaille sur ce sujet depuis un beau moment et j’arrive pas vraiment à trouver un bon résultat c’est pour ça que je sollicite votre aide

Le jeu. 27 juin 2019 à 13:02, Lissyx via Mozilla Discourse discourse@mozilla-community.org a écrit :

Et plus précisément ?

Le paramètre --alphabet /alphabet.txt, il n’y a pas d’erreur ?

J’ai déjà explicité dans le tout premier post que le WER était très élevé (95%) et le CER aussi.

Une partie des mauvais résultats peut s’expliquer par des choses invalides dans les jeux de données, notamment dans Common Voice. Il y a des bugs ouverts sur https://github.com/Common-Voice/commonvoice-fr/issues et toute aide est bienvenue pour identifier, corriger les données à la fois dans les releases et dans ce qui est sur le site.

Merci pour vos explication , moi je suis arrivée à avoir ces résultat :WER: 0.624416, CER: 0.296913.

Ok, et en faisant comment alors ?

Bonjour,

Merci pour ce premier modèle en Français !
J’ai essayé de l’utiliser sur des fichiers audio à moi et je ne parviens pas à avoir quelque chose d’acceptable.
Quand j’essaie tel quel j’obtiens une suite continue de lettres incompréhensibles
(ex:eplagemegenregbingmisgeosugearegimoigregosoepougoiroaga)
Par contre, si j’enlève l’argument du language model (lm.binary) là j’obtiens quelque chose qui se rapprocherait plus d’une suite de mots:
(ex: en pravement jonr e bien re mis e je ne suai jou aretie lete moi)
Est-ce qu’il n’y aurait pas un problème avec le language model ? Est-ce que vous avez une idée de ce que je peux faire ?

Merci