Vincent Ogloblinsky - @vogloblinsky
Vincent Ogloblinsky
Compodoc maintainer
Google Developer Expert on Web Technologies
Architecte logiciel / Référent Open-Source
- guider sa fille en décortiquant les syllabes de mots avec le doigt
- guider et corriger le déchiffrage oral
- travailler dans un contexte professionnel "traitant de la voix" (Orange - Data IA)
- imaginer qu'une application basée sur un moteur "speech to text" adapté + une bonne dose d'interactivité
- faire une veille "sectorielle" et se rendre compte que ça n'existe pas
Bingo ! Nouveau défi technique en poche pour le papa geek 😀
Aide à la lecture
Application web
🗣️
Voix d'enfant
Machine learning
Speech to text
100% technologies "web"
- JavaScript
- WebGL et/ou WebAssembly
Offline & privacy by design
- aucun appel API possible
- aucune identification de l'enfant
1 - La conscience des sonorités à l’oral
2 - Le prise de conscience du lien entre l’oral et l’écrit
3 - La découverte de l’alphabet composé de 26 lettres
4 - Comprendre l’association « sons et lettres »
5 - Comprendre la fusion syllabique
6 - Reconnaître les mots
7 - Comprendre les textes
"château"
ch ça fait "chhh"
Habileté mentale de synthèse : réunir son-parole d'une consonne et son-parole d'une voyelle
/p/ et /a/ → pa
L'enfant a besoin de savoir que la langue est segmentée en mots et aussi en segments sonores plus petits : les phonèmes et les syllabes (fusion de phonèmes)
a ça fait "aa"
t ça fait "ttt"
eau ça fait "ooo"
26 lettres dans l'alphabet
36 phonèmes
voyelles : [a] (table, patte), [é] (éléphant, parler), [o] (bonnet, chaud), ...
semi-voyelles : [J] (fille, rail), ...
consonnes : [b] (billets, abbé), [g] (gâteau, aggraver), ...
190 graphèmes
[o] : o, au, eau
[k] : c, qu (coque)
Sous-catégorie de l' "Intelligence Artificielle"
Algorithmes découvrant des "patterns" (des motifs récurrents) dans des ensembles de données
4 étapes :
- sélectionner et préparer les données
- sélectionner l'algorithme à appliquer
- entraînement de l'algorithme (= modèle)
- utilisation (et amélioration du modèle)
3 types principaux de machine learning
- apprentissage supervisé : données étiquetées - task driven (onéreux)
- apprentissage non-supervisé : données non étiquetées - data driven (recherche autonome de patterns)
- apprentissage par renforcement : l'algorithme apprendre de ses erreurs pour atteindre un objectif
Aussi appelé "Automatic Speech Recognition (ASR)"
Service 1
Service 2
Service 3
Service 4
Service 5
Service 6
Assistants vocaux actuels "entrainés" avec des datasets "adultes"
Voix d'enfants plus riches "vocalement" parlant : aigu, canal vocal plus fin, cordes vocales plus petites; bref ils "grandissent"
Spectralement plus riche
Datasets de voix faibles
2 approches possibles : "de zéro" ou par "transfer learning"
- de zéro :
Avantage :
- contrôle total du modèle
Inconvénient :
- nécessite beaucoup de données
- transfer learning :
Avantage :
- bénéficie d'un apprentissage initial du modèle
Inconvénient :
- maitrise moins forte du modèle
2 approches possibles : "de zéro" ou par "transfer learning"
Cas d'usage plus "simple" qu'un ASR
🔘 Speech commands dataset (www.tensorflow.org/datasets/catalog/speech_commands)
- proposé par Google en 2017
- 65000 sons de 1s de 30 mots courts prononcés par des milliers de personnes
🔘 Utilisation de Tensorflow comme framework de Machine Learning
🔘 "Entrainement" en local (Python) puis "export"
Développé par Google Brain
Sorti en 2017 en v1.0.0 - (current 2.8.0)
Utilise le GPU et les APIs WebGL "under the hood"
Interface web de collecte de données
- jeu simple de syllabes
- réception de fichiers wav
- aucune information collectée sur l'enfant (âge, sexe)
Interface web de nettoyage des données
- un son par syllabe par enfant
- raccourcissement à 1s
- nettoyage des sons parasites (euh, ...)
+ augmentation (variation du pitch)
1. Séparation des données d'entrainement
80% pour l'entrainement
10% pour la validation interne de Tensorflow
10% pour les tests
3. Chargement du modèle de base
2. Inspection de quelques spectrogrammes
4. Freezing de toutes les couches du modèles sauf la dernière
for layer in model.layers[:-1]:
layer.trainable = False
model.compile(optimizer="sgd", loss="sparse_categorical_crossentropy", metrics=["acc"])
Print des informations des couches
5. Entrainement : ~ 5min
6. Contrôle de la fonction de perte
Ecart entre les prédictions réalisées par le réseau de neurones et les valeurs réelles des observations utilisées pendant l’apprentissage
Itération
Loss
7. Contrôle de la précision
Elle mesure l’efficacité d’un modèle à prédire correctement à la fois les individus positifs et négatifs.
Itération
Accuracy
8. Affichage de la matrice de confusion
8. Contrôle avec des fichiers de tests complémentaires (labellisés)
# Convert the model to TensorFlow.js Layers model format.
tfjs_model_dir = "./thot-model-tfjs-1"
tfjs.converters.save_keras_model(model, tfjs_model_dir)
# Create the metadata.json file.
metadata = {
"words": list(commands),
"frameSize": model.input_shape[-2],
"generated_at": now.strftime("%Y-%m-%d-%H:%M:%S")
}
with open(os.path.join(tfjs_model_dir, "metadata.json"), "w") as f:
json.dump(metadata, f)
4.1 Mo
1.6 Mo
@tensorflow-models/speech-commands : package JavaScript de pilotage du modèle
import * as tf from '@tensorflow/tfjs-core';
import * as tfl from '@tensorflow/tfjs-layers';
import * as speechCommands from '@tensorflow-models/speech-commands';
const recognizer = speechCommands.create(
'BROWSER_FFT',
null,
'http://test.com/my-audio-model/model.json',
'http://test.com/my-audio-model/metadata.json'
);
Ecoute en continu
API getUserMedia
setInterval
~ 1s
Récupération des fréquences audio
Creation du spectrogramme
Envoi au modèle Tensorflow
Récupération des prédictions
Scaling du modèle avec crowdsourcing
Couche d'adaptation côté application : correction, guidage
Détection de la dyslexie phonologique
Gamification du parcours "enfant"
Customisation du modèle à la voix de l'enfant (on-device)
Super aventure technique
Domaine ML passionnant et qui s'enrichit chaque jour (OpenAI, etc)
Approche test, fail & learn
Des questions ?
Slides : bit.ly/3uBPDYR
Crédit photos - Unsplash.com