Comment j'ai aidé ma fille à lire avec le machine learning

📖 👨‍👧

Vincent Ogloblinsky - @vogloblinsky

Vincent Ogloblinsky

Compodoc maintainer

Google Developer Expert on Web Technologies

Architecte logiciel / Référent Open-Source

Disclaimer

La suite n'est qu'une vision "technique" du machine learning du point de vue d'un développeur.

Je n'ai pas une formation de data-scientist. 😉

Certains sujets (optimisation du modèle par ex) ne sont pas encore traités.

Agenda

1.

Genèse de l'idée

2.

L'apprentissage de la lecture

3.

Le machine learning

4.

Le speech to text

5.

La construction du modèle

6.

Résultats et perspectives

Genèse de l'idée

Genèse de l'idée

Comme tout papa geek qui fait la lecture du soir :

- 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 😀

Genèse de l'idée

Aide à la lecture

Application web

🗣️

Voix d'enfant

Machine learning

Speech to text

Definition of "ready"

Imposons-nous quelques contraintes techniques en +

100% technologies "web"

- JavaScript

- WebGL et/ou WebAssembly

Offline & privacy by design

- aucun appel API possible

- aucune identification de l'enfant

L'apprentis-sage

de la lecture

L'apprentissage de la lecture

Processus en 7 étapes

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

La fusion syllabique

"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"

Richesse du "français"

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)

Le machine learning

L'IA chez Orange

L'IA chez Orange

Le machine learning

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)

Le machine learning

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

Le "speech to text"

Le "speech to text"

Aussi appelé "Automatic Speech Recognition (ASR)"

Le "speech to text"

Le "speech to text"

Le "speech to text"

Le "speech to text" chez Orange

Le "speech to text" chez Orange

Service 1

Service 2

Service 3

Service 4

Service 5

Service 6

"Speech to text" et voix d'enfants

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

Construction du modèle

Construction du "modèle"

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

Construction du "modèle"

2 approches possibles : "de zéro" ou par "transfer learning"

Transfer learning

Transfer learning

Sound classification

Cas d'usage plus "simple" qu'un ASR

Construction du "modèle"

- 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"

Tensorflow

Développé par Google Brain

Sorti en 2017 en v1.0.0 - (current 2.8.0)

Tensorflow

Tensorflow.js

Utilise le GPU et les APIs WebGL "under the hood"

Collecte de données

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)

Préparation des données

Interface web de nettoyage des données

- un son par syllabe par enfant

- raccourcissement à 1s

- nettoyage des sons parasites (euh, ...)

+ augmentation (variation du pitch)

Entrainement du modèle

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

Entrainement du modèle

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"])

Entrainement du modèle

Print des informations des couches

Entrainement du modèle

5. Entrainement : ~ 5min

Entrainement du modèle

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

Entrainement du modèle

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

Entrainement du modèle

8. Affichage de la matrice de confusion

Entrainement du modèle

8. Contrôle avec des fichiers de tests complémentaires (labellisés)

Export du modèle

# 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

Import en JavaScript du modèle

@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'
);

Utilisation en JavaScript du modèle

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

Résultats et perspectives

Démo : syllabe

Démo : mot syllabe par syllabe

Démo : mot à mot

Perspectives

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)

Bilan

Super aventure technique

Domaine ML passionnant et qui s'enrichit chaque jour (OpenAI, etc)

Approche test, fail & learn

Ressource

Merci pour votre attention !

Des questions ?

Slides : bit.ly/3uBPDYR

Crédit photos - Unsplash.com

Un feedback ? 👉🏻 C'est par ici

Comment j'ai aidé ma fille à lire avec le machine learning

By Vincent Ogloblinsky

Comment j'ai aidé ma fille à lire avec le machine learning

  • 3,538