L’assistant pédagogique

“We are natural learners”, ou “Naturellement l'être humain apprend”, ou “Il est dans notre nature d’apprendre”

est une citation de Alex Beard conférence internationale sur la pédagogie.

Le conférencier évoque les résultats PISA 1 de différents pays, dans leurs contextes. Il soutient cette idée : créer des conditions personnalisées facilite l’apprentissage. Une personne qui choisit son programme et son rythme progresse naturellement mieux.

Rien ne remplace l'échange humain entre enseignant et apprenant. L’assistant numérique 2 aide l’enseignant à créer des conditions personnalisées d’apprentissage. Il donne aux artefacts pédagogiques 3 la force d’un dialogue personnalisé avec chaque apprenant.

L’enseignant conçoit l’artefact. L’assistant aide à sa mise en oeuvre.

Dans ce contexte nous allons :

  • écrire un artefact et
  • créer un assistant adapté.

Écrire un artefact

Voici un exemple de dialogue entre apprenant et assistant. Les mots entre [] sont les étapes du dialogue. Les mots précédés de # correspondent aux intentions du participant (à ses choix).

[welcome]
    Bonjour et bienvenue chez ABC.
    Nous vous proposons de :
    - préparer une descente en snowboard [#snowboard]
    - accompagner Louis Armstrong au piano [#piano]
    - écrire un mail au président de la république [#président]
    - préparer le journal de 20h [#jt]
    Que voulez-vous essayer ?
[rien]
    D'accord. Ce n'est pas facile de ne rien faire.
[snowboard]
    Pendant cette activité souhaitez-vous en savoir plus sur : 
    - l'anglais [#anglais]
    - le français [#français]
    - le sport et l'histoire [#histoire_sport]
    - la préparation psychologique [#psy_prepa]
    - la géométrie [#géometrie]
    - la programmation informatique [#programmation]
    ?
[snowboard_programmation]
    Pourquoi pas, mais au fait, en informatique vous êtes plutôt 
    débutant [#débutant], initié [#initié] ou incollable [#incollable] ?
[snowboard_programmation_initié]
[q1]
    Ok, nous allons d'abord vous équiper d'une bonne planche.
    J'en ai quelques-unes en réserve mais le programme de gestion des stocks
    n'est pas terminé. Il ne parvient pas à lister les planches. Le voici : 
    affiche_liste() {
        for
            print (planche);
        }
    }
    L'instruction `for` est vide, je vois plusieurs possibilités de la compléter: 
    - for (int i=0; i<planches.length; i++) [#for_1]
    - for planche in planches [#for_2]
    - planches.foreach( planche => { [#for_3]
    - for (Board planche : planches) { [#for_4]
    Laquelle essayons-nous ?"
[for_1]
    euh ... ca ne marche pas. La variable 'i' n'est pas utilisée dans le reste du programme.
    une autre idée ?
[for_4]
    Ah parfait, merci. Nous avons la liste des planches :
    - Apo Selekta TwinTip 154 [#fin]
    - Bataleon EvilTwin [#fin]
    - Burton Custom X [#fin]
    Les voici en image : 
    !(Apo)[http://www.iesanetwork.com/n.auriac/snowfrance/images/test%20boardfreestyle.jpg]
    !(Bataleon)[https://images.evo.com/imgp/700/9793/167101/bataleon-evil-twin-snowboard-2007-.jpg]
    !(Burton)[http://www.surfshop.fr/55412-large_default/custom.jpg]
    Ces planches sont recommandées pour le freestyle.
    Voici une vidéo en exemple : ![freestyle](https://www.youtube.com/watch?v=7G_nXpv8JbE).
    Quelle planche souhaitez-vous ?
[fin] Très bon choix, c'est un planche facile et performante ...

Le dialogue suit un scénario constitué d’alternatives. L’assistant détecte les intentions du participant (ses choix). Le scénario donné en exemple permet d’acquérir un savoir-faire en programmation.

Nous venons de citer les éléments consituant notre artéfact, nous allons les écrire : savoir-faire, intentions, alternatives, et scénario.

Le savoir-faire

Associés à une discipline, le savoir-faire utilise des compétences et des connaissances.

La discipline décrite dans le tableau ci-dessous combine chaque colonne pour former un savoir-faire, par exemple ‘parler anglais en utilisant la conjugaison’.

Discipline Compétence Connaissance
anglais comprendre mots (vocabulaire)
parler structures (lexem, règle)
lire conjugaisons (rèlge)
écrire accords (règle)
dialoguer

Nous pouvons remarquer que dans ce tableau exemple toutes les combinaisons entre discipline, compétence,et onnaissance sont possibles.

Voici comment écrire les combinaisons de cette discipline :

{
    "discipline": {
        "nom": "anglais",
        "compétences": [
            {
                "nom": "comprendre",
                "connaissances": [
                    {
                        "nom": "mots",
                        "description": "le vocabulaire et l'orthographe"
                    },
                    {
                        "nom": "structures",
                        "description": "les phrases"
                    },
                    {
                        "nom": "conjugaison",
                        "description": "la conjugaison"
                    },
                    {
                        "nom": "accords",
                        "description": "règles d'accord en genre et en nombre"
                    }
                ]
            },
            {
                "nom": "parler",
                "connaissances": [
                    {
                        "nom": "mots",
                        "description": "le vocabulaire et l'orthographe"
                    },
                    {
                        "nom": "structures",
                        "description": "les phrases"
                    },
                    {
                        "nom": "conjugaison",
                        "description": "la conjugaison"
                    },
                    {
                        "nom": "accords",
                        "description": "règles d'accord en genre et en nombre"
                    }
                ]
            },
            {
                "nom": "lire",
                "connaissances": [
                    {
                        "nom": "mots",
                        "description": "le vocabulaire et l'orthographe"
                    },
                    {
                        "nom": "structures",
                        "description": "les phrases"
                    },
                    {
                        "nom": "conjugaison",
                        "description": "la conjugaison"
                    },
                    {
                        "nom": "accords",
                        "description": "règles d'accord en genre et en nombre"
                    }
                ]
            },
            {
                "nom": "écrire",
                "connaissances": [
                    {
                        "nom": "mots",
                        "description": "le vocabulaire et l'orthographe"
                    },
                    {
                        "nom": "structures",
                        "description": "les phrases"
                    },
                    {
                        "nom": "conjugaison",
                        "description": "la conjugaison"
                    },
                    {
                        "nom": "accords",
                        "description": "règles d'accord en genre et en nombre"
                    }
                ]
            },
            {
                "nom": "dialoguer",
                "connaissances": [
                    {
                        "nom": "mots",
                        "description": "le vocabulaire et l'orthographe"
                    },
                    {
                        "nom": "structures",
                        "description": "les phrases"
                    },
                    {
                        "nom": "conjugaison",
                        "description": "la conjugaison"
                    },
                    {
                        "nom": "accords",
                        "description": "règles d'accord en genre et en nombre"
                    }
                ]
            }
        ]
    }
}

Pour la suite nous désignons un savoir-faire comme étant la combinaison d’une discipline, d’une compétence, et d’une connaissance.

Par exemple, le savoir-faire ‘parler anglais en utilisant la conjugaison’ s'écrit :

.anglais.parler.conjugaison

Passons maintenant à l'écriture des alternatives du dialogue.

Les alternatives

L’ensemble des possibilités d’un dialogue constitue un graphe 4 dont nous allons noter les étapes et les transitions.

Voici un exemple :

alternatives

Le code ci-dessous permet de générer le graphique ci-dessus

stateDiagram
    [*] --> welcome
    welcome --> rien
    welcome --> snowboard
    snowboard --> snowboard_programmation_initié
    snowboard --> rien
    snowboard_programmation_initié --> rien
    rien --> [*]

Dans ce texte chaque mot, ou suite de mots séparés par _, est une étape.

L’astérisque * représente le participant en début et en fin de dialogue.

La flèche –> représente une transition possible entre deux étapes.

Voici l'écriture du graphe des alternatives pour le début de notre artefact :

{
    "alternatives": {
        "*": "welcome",
        "welcome": "snowboard",
        "welcome": "rien",
        "snowboard": "snowboard_programmation",
        "snowboard": "rien",
        "snowboard_programmation": "snowboard_programmation_initié",
        "snowboard_programmation": "rien",
        "snowboard_programmation_initié": "q1",
        "rien": "*"
    }
}

Après avoir choisit son activité le participant entre dans les alternatives spécifiques de l’artefact :

{
    "alternatives": {
        "*": "q1",
        "q1": "rien,for_1,for_2,for_3,for_4",
        "for_1": "*",
        "for_2": "*",
        "for_3": "*",
        "for_4": "fin",
        "fin": "*",
        "rien": "*"
    },
}

Chaque paire d'étapes, notée “etape A”:“etape B”, est une transition possible. Nous avons ainsi terminé l'écriture des alternatives.

Passons maintenant à l'écriture des différentes intentions possibles (les choix offerts aux participants).

Les intentions

L’intention est contextuelle, elle dépend de l’alternative.

Dans notre exemple, l’intention ‘[#initié]’ n’a de sens que dans une alternative où le participant a déjà choisit une discipline.

Voici l'écriture des intentions pour le début de notre artefact :

{
    "intentions": [
        {
            "welcome": {
                "rien": "aucune, rien, non, négatif",
                "snowboard": "glisse, planche, board, surf",
                "piano": "musique, instrument, clavier, clavecin",
                "président": "trump, obama, macron, hollande",
                "jt": "journal, 20 heures, JT"
            },
            "snowboard": {
                "rien": "aucune, rien, non, négatif",
                "anglais": "anglais, américain, US, UK, AUS, Common Wealth, Shakespeare",
                "français": "langue, france",
                "histoire_sport": "sport, histoire, passé",
                "psy_prepa": "mental, psychologie, préparation",
                "géometrie": "mathématique, géométrie, pythagore",
                "programmation": "ordinateur, informatique, programme, logiciel"
            },
            "snowboard_programmation": {
                "débutant": "1, débutant, premier, faible, pas bon",
                "initié": "2, initié, deuxième, moyen",
                "incollable": "3, incollable, expert, fort, très bon"
            },
        }
    ]
}

Après avoir choisit son activité le participant entre dans les intentions spécifiques de l’activité :

{
    "intentions": [
        {
            "q1": {
                "rien": "aucune, rien, non, négatif",
                "for_1": "premier, un",
                "for_2": "deuxième, deux",
                "for_3": "troisième, trois",
                "for_4": "quatrième, quatre",
            },
            "for_4": {
                "rien": "aucune, rien, non, négatif",
                "fin": "premier, un, deuxième, deux, troisième, trois, bataleon, burton, apo, custom, eviltwin, selekta",
            },
        }
    ]
}

Chaque intention est définie par un ensemble de mots. Cela permet à l’assistant de reconnaître le choix du participant, lors de l’analyse vocale notamment. En général cette liste reste dans la sémantique de l’intention à définir.

Il ne reste plus qu'à écrire le scénario.

Le scénario

L’assistant pourra générer la première partie du dialogue de manière automatique lorsque nous aurons écrit les scénarii spécifiques à chaque activité.

Pour un auteur enseignant, l'écriture d’un scénario commence donc là ou le participant entre en activité. Voici l'écriture du scénario “snowboard_programmation_initié” :

{
    "code":"snowboard_programmation", "niveau":"initié",
    "etapes":[{
        "etape":"q1",
        "savoir-faire":"programmation.swift.boucle_for",
        "md":"
        Ok, nous allons d'abord vous équiper d'une bonne planche.
        J'en ai quelques-unes en réserve mais le programme de gestion des stocks n'est pas terminé. Il ne parvient pas à lister les planches. Le voici : 
        affiche_liste() {
            for
                print (planche);
            }
        }
        L'instruction `for` est vide, je vois plusieurs possibilités de la compléter: 
        - for (int i=0; i<planches.length; i++) [#for_1]
        - for planche in planches [#for_2]
        - planches.foreach( planche => { [#for_3]
        - for (Board planche : planches) { [#for_4]
        Laquelle essayons-nous ?"
    },
    {
        "etape":"for_1",
        "savoir-faire":"programmation.swift.boucle_for",
        "score":"-1",
        "md":"
        euh ... ca ne marche pas. La varibale 'i' n'est pas utilisée dans le reste du programme. une autre idée ?
        "
    },
    {
        "etape":"for_2",
        "savoir-faire":"programmation.swift.boucle_for",
        "score":"-1",
        "md":"
        Cela ne fonctionne pas. Il me semble que la bonne instruction devrait référencer la variable `planche` utilisée dans l'instruction `print`
        "
    },
    {
        "etape":"for_3",
        "savoir-faire":"programmation.swift.boucle_for",
        "score":"-1",
        "md":"
        Cela ne fonctionne pas. Avec cette ligne il manque une parenthèse fermante au programme.
        "
    },
    {
        "etape":"for_4",
        "savoir-faire":"programmation.swift.boucle_for",
        "score":"+1",
        "md":"
        Ah parfait, merci. Nous avons la liste des planches :
        - Apo Selekta TwinTip 154 [#fin]
        - Bataleon EvilTwin [#fin]
        - Burton Custom X [#fin]
        Les voici en image : 
        !(Apo)[http://www.iesanetwork.com/n.auriac/snowfrance/images/test%20boardfreestyle.jpg]
        !(Bataleon)[https://images.evo.com/imgp/700/9793/167101/bataleon-evil-twin-snowboard-2007-.jpg]
        !(Burton)[http://www.surfshop.fr/55412-large_default/custom.jpg]
        Ces planches sont recommandées pour le freestyle. Voici une vidéo en exemple : ![freestyle](https://www.youtube.com/watch?v=7G_nXpv8JbE).
        Quelle planche souhaitez-vous ?
        "
    },
    {
        "etape":"fin",
        "savoir-faire":"programmation.swift.boucle_for",
        "md":"
        Très bon choix, c'est une planche facile et performante ...
        "
    } ]
}

L’assistant présente ou lit à voix haute la partie ‘md’ de chaque étape. Dans cette partie le point d’exclamation sert à donner un lien internet, généralement vers des ressources documentaires.

Un libellé donné entre parenthèses () sert de lien vers une adresse donnée entre crochets [].

Pour rappel les intentions sont nommées avec un dièse # en préfixe. Elles mènent à une étape du même nom.

L’assistant pourra utiliser l’information ‘score’ en la cumulant pour déterminer si un ‘savoir-faire’ est acquis ou non. On remarque que les états correspondants à un mauvais choix ont un score négatif. Inversement le bon choix a un score positif.

Créer l’assistant

Les ‘chatbot pédagogiques’ 5 existent depuis quelques années, certains sous forme de projets open-source.

Sont-ils faciles à utiliser ? Est-ce qu’il y a des standards ? Est-ce compliqué à créer ? De quoi avons nous besoin ?

Nous avons besoin :

  • d’une conversion de la voix en texte
  • de synthèse vocale
  • d’analyse du langage naturel
  • d’analyse sémantique
  • d’une interface homme-machine
  • d’un programme capable de lire l’artéfact

Je réalise un prototype simple en utilisant ‘Siri’ 6 de manière programmée.

Que fait le programme “chatbot” avec un artefact ?

Il prend la première étape du scénario et la présente à l’aprenant. Il écoute la réponse et détermine l’intention. Pour ce faire il décompose la réponse en mots, identifie le lemme de chaque mot, et recherche une ou plusieurs correspondances avec les lemmes de l’artefact pour l'étape en cours. Il attribue un sentiment globale à la réponse, positif ou négatif, en fonction des mots (ne, pas, non, oui …). Si il y a une correspondance et que le sentiment est positif alors le choix qui correspondant à l’intention détectée est validé, le chatbot passe à l'étape indiquée pour cette intention. Autrement, il demande de préciser la réponse.

pandoc -t html5 --css pandoc.css -s -o assistant.html assistant.md
```

Les deux premières questions du dialogue servent à 'cerner les besoins de l'apprenant', elles permettent de choisir une activité.

L'apprenant se trouve un peu en situation de réflexivité, un peu seulement, car le dialogue est limité.

Le tout reste un dialogue limité, aux cas prévus par l'auteur du scénario. L'auteur c'est le prof.

On peut découper l'idée de l'assistant pédagogique en deux : 
 - id 1: écrire un cours sous forme d'un ["livre dont vous êtes le héro"](https://fr.wikipedia.org/wiki/Un_livre_dont_vous_%C3%AAtes_le_h%C3%A9ros).
 - id 2: transformer ce 'livre' en 'chatbot' interactif, utilisant le langage naturel


  1. Présentation du Programme International pour le suivi des acquis des élèves sur le site de l'éducation nationale. ↩︎

  2. Logiciel et appareil proposant un dialogue en langage naturel, par exemple une borne ‘Alexa’, ‘Google home’ ou ‘Home Pod’ ↩︎

  3. Terme utilisé en pédagogie, définition sur le site edutechwiki.unige.ch ↩︎

  4. Mathématiques. Définition sur wikipedia ↩︎

  5. Exemples de chat bot pédagogique : https://fr.snatchbot.me/education , https://tiny-coaching.com/ ↩︎

  6. Application de commande vocale intégrée aux appareils d’Apple https://fr.wikipedia.org/wiki/Siri_(logiciel) ↩︎