Utilisation CommonVoice FR avec client Node.js

Bonjour à tous ! :slight_smile:

Je cherche à utiliser les données de la release 0.6 de CommonVoice FR dans le cadre d’un projet personnel d’assistant vocal offline.
Je suis très peu familier avec le monde de la DataScience, j’ai quelques doutes sur mon usage car j’ai pas mal de difficultés pour réussir à obtenir un résultat satisfaisant.

J’ai implémenté un serveur Node.js avec le client JavaScript DeepSpeech.
Depuis les fichier de la release, j’ai récupéré le fichier .pbmm et .scorer qui se trouvent dans l’archive model_tensorflow_fr.tar.xz.

Du côté du code, je créais mon modèle à partir de ces deux fichierd, puis j’ajoute le scorer et les hyperparamètres:

const model = new DeepSpeech.Model(modelPath);

model.enableExternalScorer(scorerPath);
model.setScorerAlphaBeta(lmAlpha, lmBeta);

Enfin, j’utilise le micro d’un PS Eye pour générer un fichier .wav afin de le lire et le transmettre à DeepSpeech. J’enregistre via une commande SoX:

sox --default-device --no-show-progress --channels=4 --rate=16000 --type=wav -V0 --endian=little --bits=16 --encoding=signed-integer --compression=0.0 -

J’ai donc plusieurs questions que j’aimerais vous partager :smile:

Sur la release, j’ai constaté qu’il y a d’autres paramètres:

  • EPOCHS=32
  • LEARNING_RATE=0.0001
  • DROPOUT=0.3
  • BATCH_SIZE=64

Est-il nécessaire de les utiliser ? Si oui, savez-vous comment ?

Il y a t-il quelque chose dans la configuration de SoX qui pourrait perturber les résultats ?

Est-ce que les temps de blanc peuvent perturber l’obtention de bons résultats ?

Merci d’avance pour vos retours :rocket:

Non, c’est des paramètres pour l’entraînement

Tu devrais plutôt utiliser l’interface streaming et pas dépendre d’un binaire sox externe

ça, ça va pas, le modèle est entraîné sur du 16kHz 16 bits mono, donc pas 4 canaux.

le reste me parait ok

ça dépend, des fois oui, des fois non, c’est pour ça qu’on suggère de brancher du VAD pour éviter

En vrai, si tu changes pas les paramètres lm alpha et beta, t’as pas besoin de faire un setScorerAlphaBeta, on le fait automatiquement avec les valeurs par défaut

Tu trouveras peut-être des choses intéressantes dans https://github.com/mozilla/DeepSpeech-examples/tree/r0.9/nodejs_mic_vad_streaming

Merci pour toutes ces précisions ! :smile:

J’ai pu avancer en travaillant sur la détection de la voix et en “retouchant” l’audio via SoX.
J’ai de très bons résultats lorsque je parle bien dans le micro du PS Eye. Et pourtant, lorsque je m’éloigne un peu, les résultats deviennent très mauvais.

Est-ce “normal” que ces résultats soient mauvais lorsqu’il y a un peu de réverbération ou que la voix est moins clair ?
Est-ce une limite du modèle ?

Oui, c’est pas surprenant. Sur le modèle anglais, on a commencé à entraîner avec des “augmentations” pour justement, générer du bruit, de la reverb, etc. Mais j’ai pas fait ça sur le modèle français (pas le temps, malheuresement).

Donc pour le moment, la seule bonne réponse, c’est d’essayer de nettoyer le signal ou aider à rajouter l’utilisation d’augmentations dans l’entraînement du modèle (mais ça nécessite de se plonger dans la doc / le code et d’adapter https://github.com/Common-Voice/commonvoice-fr/blob/master/DeepSpeech/), https://github.com/mozilla/DeepSpeech/blob/master/training/deepspeech_training/util/flags.py#L32 et https://github.com/mozilla/DeepSpeech/blob/master/training/deepspeech_training/util/augmentations.py

Peut-être qu’un peut de traitement du signal, filtre passe-bas etc. peut déjà t’aider pas mal, dans certains cas ça suffisait.