common-voice / commonvoice-fr

Tooling for producing French dataset for Common Voice

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Node.js DeepSpeech & modèle francophone

simon-tannai opened this issue · comments

commented

Bonjour !

Je suis en train d'essayer d'utiliser DeepSpeech sur un serveur Node.js afin d'essayer de mettre en oeuvre une solution de STT. Mais malheureusement, je ne parviens pas à obtenir grand chose.

Pour mes expérimentations, j'ai utilisé la realese 0.3.4 afin de me baser sur un modèle français.

J'utilise la caméra PlayStation Eye branchée en USB et arecord:

**** Liste des Périphériques Matériels CAPTURE ****
carte 0: PCH [HDA Intel PCH], périphérique 0: CX8200 Analog [CX8200 Analog]
  Sous-périphériques: 1/1
  Sous-périphérique #0: subdevice #0
carte 1: CameraB409241 [USB Camera-B4.09.24.1], périphérique 0: USB Audio [USB Audio]
  Sous-périphériques: 1/1
  Sous-périphérique #0: subdevice #0

J'ai repris l'exemple fourni par Mozilla sur le repo de DeepSpeech en modifiant la configuration du micro:

const playstationEye = {
  rate: '32000',
  channels: '4',
  debug: true,
  fileType: 'wav',
  device: 'plughw:1,0',
}

J'ai également modifié le chemin vers le modèle utilisé par DeepSpeech:

  DEEPSPEECH_MODEL = path.join(__dirname, 'model_tensorflow_fr')

Lorsque je lance le serveur Node.js, le micro écoute bien mais je n'arrive à détecter que peu de mots / phrases qui sont assez loin de ce que je dis:
recognized: { text: 'ou je mavet', recogTime: 456, audioLength: 1875 }

Etant novice dans ce monde de la reconnaissance vocale, j'imagine que je passe à côté de quelque chose et qu'il y a d'autres éléments à configurer ?

Etant novice dans ce monde de la reconnaissance vocale, j'imagine que je passe à côté de quelque chose et qu'il y a d'autres éléments à configurer ?

Tu choppes du 32kHz sur 4 canaux ? Le modèle est pour du 16kHz sur 1 canal, essaie déjà ça. Ensuite, comme indiqué sur Discourse, c'est très expérimental, si tu as un accent, si tu parles pas à la bonne vitesse, ou si y'a du bruit, etc.

J'ai repris l'exemple fourni par Mozilla sur le repo de DeepSpeech en modifiant la configuration du micro:

idéalement, essaie avec les clients officiels, les tests en streaming ne sont que difficilement reproductibles et pas actionables.

Je suis en train d'essayer d'utiliser DeepSpeech sur un serveur Node.js afin d'essayer de mettre en oeuvre une solution de STT.

T'essaies d'obtenir quoi comme outil ? Transcription générique ou plutôt du contrôle vocal ?

Le premier cas, en l'état des données publiques dispos pour entraîner le modèle, ça reste très perfectible, j'ai vu des essais sur des vidéos (pas fait par moi) , et on comptait de l'ordre de 50% de taux d'erreur.

Si tu fais du contrôle vocal, idéalement tu construit ton modèle de langue avec tes commandes et là tu devrais avoir quelque chose de beaucoup plus efficace (mais pas forcément parfait).

commented

@lissyx Merci pour ta réponse !

T'essaies d'obtenir quoi comme outil ? Transcription générique ou plutôt du contrôle vocal ?

Si tu fais du contrôle vocal, idéalement tu construit ton modèle de langue avec tes commandes et là tu devrais avoir quelque chose de beaucoup plus efficace (mais pas forcément parfait).

C'est bien du contrôle vocal que je souhaite faire. Dans un premier temps mon but est de pouvoir allumer / éteindre une ampoule connectée.
Si je comprends bien, il faut que je créais un modèle spécialisé avec des phrases type "Allume le salon", "Eteins l'appartement", ... ?

@lissyx Merci pour ta réponse !

T'essaies d'obtenir quoi comme outil ? Transcription générique ou plutôt du contrôle vocal ?

Si tu fais du contrôle vocal, idéalement tu construit ton modèle de langue avec tes commandes et là tu devrais avoir quelque chose de beaucoup plus efficace (mais pas forcément parfait).

C'est bien du contrôle vocal que je souhaite faire. Dans un premier temps mon but est de pouvoir allumer / éteindre une ampoule connectée.
Si je comprends bien, il faut que je créais un modèle spécialisé avec des phrases type "Allume le salon", "Eteins l'appartement", ... ?

Absolument. En corrigeant ta capture du son et en construisant ce LM spécialisé, tu devrais vraiment avoir de bien meilleurs résultats. J'ai fait des essais pour des contributeurs qui voulaient faire de la commande vocale pour du contrôle / intégration sur une distro basée sur Debian, et ça marchait vraiment pas mal.

@simon-tannai Tu fais ça dans un cadre professionnel ou perso ?

commented

@lissyx Ok top, je vais essayer de faire comme ça. Il me semble qu'il y a tout les outils qu'il faut sur ce repo 👍

Par contre, j'ai vu que plusieurs personnes qui avaient créés des LM utilisaient des machines plutôt costaux. Il faut, même pour 20 fichiers audio, ce type de machine ?

@simon-tannai Tu fais ça dans un cadre professionnel ou perso ?

Pour le moment c'est complètement personnel. Dans la vie pro' j'utilise des solutions du marché (LUIS, DialogFLow, ...) pour mes clients.
Mon but est pour le moment de comprendre un peu plus ce qu'il se passe en descendant plus bas dans les niveaux d'abstractions et d'alimenter ma curiosité 👍

@lissyx Ok top, je vais essayer de faire comme ça. Il me semble qu'il y a tout les outils qu'il faut sur ce repo +1

Par contre, j'ai vu que plusieurs personnes qui avaient créés des LM utilisaient des machines plutôt costaux. Il faut, même pour 20 fichiers audio, ce type de machine ?

C'est pire, le LM c'est la partie data/lm dans le dépôt DeepSpeech, tu compiles les outils de KenLM, tu construits tes commandes dans un fichier texte, et tu génères le LM + trie et basta. Pas besoin de grosse puissance de calcul pour ça, pour ces petits volume ça passe même en quelques secondes sur un RPi4.

Pour le moment c'est complètement personnel. Dans la vie pro' j'utilise des solutions du marché (LUIS, DialogFLow, ...) pour mes clients.
Mon but est pour le moment de comprendre un peu plus ce qu'il se passe en descendant plus bas dans les niveaux d'abstractions et d'alimenter ma curiosité +1

Le modèle français et encore beaucoup handicapé par manque de données, si tu as des jeux à suggérer c'est bienvenu.

Quel type de jeux faut-il fournir pour le français?? sous quel format???
J'avais démarré un assistant de domotique avec Snips avant son rachat par Sonos, et j'ai archivé beaucoup de phrases en français, avec leur intents ou sans.
Du coup je recherche de nouveaux outils OpenSource

Quel type de jeux faut-il fournir pour le français?? sous quel format???
J'avais démarré un assistant de domotique avec Snips avant son rachat par Sonos, et j'ai archivé beaucoup de phrases en français, avec leur intents ou sans.
Du coup je recherche de nouveaux outils OpenSource

En théorie, on a pas de contrainte particulière. En pratique, PCM WAV mono 16kHz 16 bits.
Et un CSV avec : chemin du fichier audio, taille, transcription. Si tu as besoin de détails, yu'a plein d'importeurs dans https://github.com/mozilla/DeepSpeech/tree/master/bin/

J'avais démarré un assistant de domotique avec Snips avant son rachat par Sonos, et j'ai archivé beaucoup de phrases en français, avec leur intents ou sans.

Attention, on fait pas d'interprétation sur ce qui est dit, on se contente de transformer le signal audio en texte. Tu as combien de données ?

commented

J'avais démarré un assistant de domotique avec Snips avant son rachat par Sonos

@richardpub4136 je m'étais justement penché sur Snips mais vu qu'ils ont fermé l'accès aux développeurs suite à leur rachat ...

J'avais démarré un assistant de domotique avec Snips avant son rachat par Sonos, et j'ai archivé beaucoup de phrases en français, avec leur intents ou sans.

Si tu peux nous partager le fruit de ton travail ça serait génial !

Les données (environ 3000) que j'ai, sont uniquement sous ce type de format:

Réduire la luminosité de cinquante pourcent

Réduit l'éclairage de vingt pourcent
Peux tu réduire la lumière de vingt pourcent dans le sous-sol ?
Réduit l'intensité lumineuse dans la salle de réception de quinze pourcent
Veux tu baisser la luminosité dans les deuxième étage de douze pourcent ?
baisse la luminosité de dix pourcent dans le bureau
Est-ce que tu peux baisser la luminosité de douze pourcent ?
Pourrais-tu baisser la luminosité de six pourcent ?
Peux tu baisser la luminosité de dix pourcent dans le cellier ?
Diminue l'intensité de la lumière de douze pourcent dans la véranda
Baisse l'éclairage des toilettes de douze pourcent
Réduit la lumière de vingt pourcent
Baisse la lumière du séjour de cinq pourcent

Le projet ProjectAlice, travaille sur le NLU avec deepspeech. voir sur discord...

Si je peux aider sur la version française ce serait avec plaisir... En me guidant un peu, je peux aider...

Le projet ProjectAlice, travaille sur le NLU avec deepspeech. voir sur discord...

Tu peux en dire plus ? Ça serait bien que les gens qui utilisent DeepSpeech se manifestent, notamment sur Discourse: https://discourse.mozilla.org/t/deep-speech-in-the-wild/52583/11

Les données (environ 3000) que j'ai, sont uniquement sous ce type de format:

3000 heures ? 3000 fichiers ?

Si je peux aider sur la version française ce serait avec plaisir... En me guidant un peu, je peux aider...

Ça dépend vraiment de ce sont tu as besoin. On commence à pas mal dériver du sujet initial, est-ce qu'on peut continuer ça dans https://discourse.mozilla.org/c/voice/fr ou https://chat.mozilla.org/#/room/#common-voice-fr:mozilla.org ou ?

@simon-tannai Est-ce que ce bug devrait rester ouvert ? On dirait que ta question est répondue, et je préfère qu'on continue à discuter par d'autres moyens que Github.

Je me suis inscrit sur discourse.morzilla, pour suivre un peu. Je suis un peu dubitatif sur ce projet. je vais continuer à découvrir deepspeech, mais j'ai l'impression que deepspeech est un peu réducteur par rapport à ProjectAlice, mais si mon intention est de rester une petite main par rapport au NLU, car j'ai déjà pas mal de choses en route...
Cordialement.

commented

@simon-tannai Est-ce que ce bug devrait rester ouvert ? On dirait que ta question est répondue, et je préfère qu'on continue à discuter par d'autres moyens que Github.

Tu peux cloturer, si besoin je passerais par Discourse 👍