theme | title | author | background | info | class | highlighter | drawings | transition | mdc | layout | |
---|---|---|---|---|---|---|---|---|---|---|---|
seriph |
xAPI au service des Learning Analytics |
OpenFun |
Journée workshop à la DNE | 02 avril 2024 | © France Université Numérique |
text-center |
shiki |
|
fade-out |
true |
cover |
France Université Numérique, 2 avril 2024, Lab 110 Paris
- Anime et coordonne l’offre de cours des établissements éditeurs et développe des actions de formation et d’animation des équipes productrices de cours
- Fournit des services éditoriaux et de certification des cours en ligne
- Met à disposition une infrastructure d’hébergement sécurisée, des services, des applications et des ressources numériques
- Assure la promotion de l’écosystème, des plateformes de diffusion et des cours et formations en ligne, et le développement de la marque FUN
- Participe au développement des actions de formation professionnelle des établissements
- Contribue à l’expérimentation et l’étude des pratiques pédagogiques, et au développement des technologies au service de l’apprentissage
Objectifs
- Développement des outils et de l'infrastructure de l'univers FUN
- Développements de briques autonomes focalisées sur des périmètres (forum, vidéo, streaming, catalogue, etc.) => agnostique d'un LMS
- Gestion de l'infrastructure : performance et résilience
- 100 % des projets open source
Projets
- Richie (catalogue)
- Joanie (ecommerce)
- Ashley (forum)
- Marsha (LCMS)
- Cunningham (Design System)
- Verna (Form builder)
- Kubic (k8s as code)
- Moodle
- Open edX
Objectifs
- Organiser la collecte, la transformation et le stockage des traces d'apprentissage générées par les apprenants sur tous nos services / toutes nos plateformes
- Valoriser les traces :
- Dashboards équipes pédagogiques
- Dashboards apprenant
- Assister les travaux de recherche liés aux traces
Services
- OpenEdx
- Moodle
- Marsha (vidéos, documents)
- Ashley (forum)
eXperience API
🏫 Standard. Spécification des données d'usage et d'activité dans l'apprentissage en ligne
📖 Open-source. Libre d'accès et utilisation gratuite
🌍 Universalité. Format universel de données
🕸️ Interopérabilité. Contrer le traitement des silos de données
2011. Initiative d'ADL (Advanced Distributed Learning) pour remplacer SCORM, devenu
trop limitant en terme d'interopérabilité par un groupe de travail
international.
2013. Publication de la première version d'xAPI
2023. Publication de xAPI V2 - spécification IEEE (P9274.2.1)
🧑🎓 Format de données décrivant une expérience d'apprentissage avec un statement
écrit en JSON
🖥️ Formalisation grammaticale d'une action d'apprentissage de type "Sujet,
Verbe, Complément"
{
"acteur": "La personne concernée par le statement",
"verbe": "L'action faite par l'acteur",
"objet": "L'objet sur lequel l'acteur a agi",
"résultat": "Détails complémentaires sur le résultat de l'action",
"contexte": "Information contextuelle complémentaire",
"temps": "Quand l'objet a été soumis à l'action"
}
Alice est inscrite au cours "Apprendre l'anglais en 1 mois" sur https://fun-mooc.fr. Elle regarde la vidéo de la leçon 2 sur les auxiliaires "have" et "be". Elle décide de mettre sur pause à 45s pour pouvoir prendre en note une partie du contenu affiché. Cette action est faite le 10 janvier 2024, à 20h 51m 37s à Saint-Brieuc.
Quelle est la modélisation xAPI de l'action d'Alice ?
- Acteur: Alice
- Verbe: Mettre sur pause
- Objet: Vidéo sur les auxiliaires "have" et "be"
- Contexte: Cours "Apprendre l'anglais en 1 mois"
- Résultat: Mise en pause à 45 secondes de la vidéo
- Temps: 20h51min37s UTC+2
👱🏼♀️ Alice
{
"actor": {
"objectType": "Agent",
"account": {
"name": "alice_dupont",
"homePage": "https://fun-mooc.fr"
}
}
}
⏸️ Mettre sur pause
{
"verb": {
"id": "https://w3id.org/xapi/video/verbs/paused",
"display": {
"fr": "mis sur pause"
}
}
}
📼 Vidéo de la leçon 2 sur les auxiliaires "have" et "be"
{
"object": {
"objectType": "Activity",
"id": "uuid://23fa7583-5874-4a6d-9d3d-2faaaff45438",
"definition": {
"type": "https://w3id.org/xapi/video/activity-type/video",
"name": {
"fr": "S1_L2_auxiliaire_be_have.mp4"
}
}
}
}
📗 Cours "Apprendre l'anglais en 1 mois"
📏 Longueur de la vidéo
🔣 Taux de complétion de la vidéo
{
"context": {
"contextActivites":{
"parent": {
"objectType": "Activity",
"id": "https://lms.fun-mooc.fr/courses/course-v1:UnivAnglais+00001+session27/courseware/swkytth28bk3jnp2zocjy81p27t52fsx/",
"definition": {
"type": "http://adlnet.gov/expapi/activities/course",
"name": {
"fr": "Apprendre l'anglais en 1 mois"
}
}
},
},
"extensions": {
"https://w3id.org/xapi/video/extensions/length": 180.67,
"https://w3id.org/xapi/video/extensions/completion-threshold": 0.25
}
}
}
⏲️ Temps de l'action sur la durée de la vidéo
🎞️ Cumul des segments de la vidéo déjà visionnés
⏳ Pourcentage de la vidéo vu par Alice
{
"result": {
"extensions": {
"https://w3id.org/xapi/video/extensions/time": 45.23,
"https://w3id.org/xapi/video/extensions/played-segments": "0[.]45.23",
"https://w3id.org/xapi/video/extensions/progress": 0.25
}
}
}
⏱️ 10 janvier 2024, 20h 51min 37s UTC+2
{
"timestamp": "2024-01-10T18:51:37.666723+00:00"
}
Ontologie pour les learning analytics regroupant un ensemble de spécification pour décrire les interactions avec une ressource d'apprentissage.
- Modèles de statements décrivant une expérience d'apprentissage
- Propriétés et règles associées défini pour les modèles de statements
- Vocabulaire utilisé dans les modèles de statements
Exemple du profil "classe virtuelle"
- Co-développement par Sébastien Fraysse et France Université Numérique
- Rédaction et maintenance d'une documentation utilisateur
- Travail de conception avec une approche à 3 niveaux pour définir les modèles de statements
On associe à une expérience d'apprentissage un modèle de statements mais comment savoir quelles expériences représenter dans le profil ?
MACROSCOPIQUE | Quelles sont les activités essentielles à tracer? |
---|---|
MESOSCOPIQUE | Quelles sont les activités qui apportent des informations de suivi pédagogiques à la classe virtuelle? |
MICROSCOPIQUE | Quelles sont les activités qui apportent un complément d'informations, utiles pour l'enrichissement du suivi pédagogique? |
Les bonnes pratiques
- Utiliser les profils publics s'ils répondent aux besoins
- Spécifier et publier un profil sur le serveur sinon, en veillant à l'universalité du profil
- Maintenir un profil privé si le cas d'usage est spécifique, interne ou confidentiel
- Versionner le profil à chaque modification de la spécification
- Tenir une documentation utilisateur à jour (en complément du profil publié pour un profil officiel ou privée pour un profil non publiée)
Dans une base de données ?
Besoins de :
- Centraliser ces traces à un même endroit
- Pouvoir les rendre disponible à d'autres services (outil de data visualization)
ADL avec la spécification xAPI, définit le Learning Record Store (LRS)
flowchart TD
subgraph LRS
lrs("API HTTP") --> db[(DB)]
end
lms("LMS 1 🎓") -- xAPI --> LRS
lms2("LMS 2 🎓") -- xAPI --> LRS
marsha("Vidéo 🎬") -- xAPI --> LRS
ashley("Forum 💬") -- xAPI --> LRS
other("...") -- xAPI --> LRS
LRS --> dataviz("Dataviz 📈")
Le LRS est "un serveur (i.e. un système capable de recevoir et de traiter des requêtes web) qui est responsable de la réception, du stockage et de l'accès aux Learning Records."
Ce standard définit :
- l'authentification et les permissions
- la validation des requêtes
- la validation des données entrantes
- la détection de conflits
- la manière de filtrer et rechercher des Learning Records
- le format de restitution
Le LRS est généralement headless
Un LRS définit plusieurs API (ou endpoints)
L'endpoint principal :
statements
pour les traces d'apprentissages au format xAPI
D'autres endpoints permettent de stocker des documents, afin d'enrichir ces traces :
agents
etagents/profile
: informations identifiantes d'un agentactivities
,activities/profile
etactivities/state
: description d'une activité, de l'état d'un agent sur une activitéabout
: informations sur le LRSextensions/"votreextension"
: pour d'autres ressources non définies par la spécification
L'apprentissage est un processus permanent : il doit se faire partout, sous toutes ses formes et tout au long de la vie
- les traces d'apprentissages (xAPI et LRS)
- un index des activités pédagogiques (XI)
- un référentiel de compétences
- un profil apprenant
- Noisy LRS
- Transactional LRS
- Authoritative LRS
flowchart TB
openedx(Open edX - LMS 🎓) -- edX --> graylog
openedx -- edX --> swift
subgraph legacy
swift[(Swift)]
ll(Learning Locker - LRS) -- xAPI --> mongo[(MongoDB)]
end
marsha(Marsha 🎬) -- xAPI --> graylog[(Graylog)]
marsha -- xAPI --> ll
ashley(Ashley 💬) -- xAPI --> graylog
- Mise en place d'un data lake basé sur Elasticsearch, dédié learning analytics
- Développer un outil Python capable de récupérer et de transformer des données à partir de différents backends
- Développer un outil qui tient la charge importante chez FUN (bonne scalabilité)
flowchart LR
openedx(Open edX - LMS) -- edX --> graylog
marsha(Marsha 🎬) -- xAPI --> graylog
ashley(Ashley 💬) -- xAPI --> graylog
graylog[(Graylog)] -- GELF --> ralph(Ralph) -- xAPI --> es[(Elasticsearch)]
flowchart LR
openedx(Moodle - LMS) -- xAPI --> ralph(Ralph)
ralph -- xAPI --> es[(Elasticsearch)]
Les caractéristiques de Ralph :
- Entièrement open source
- Basé sur FastAPI
- Backends compatibles : Elasticsearch, MongoDB, ClickHouse
- Support du forwarding des traces
- Bonne scalabilité
- Support de HTTP Basic Auth et OpenIDConnect
- Choix de ne pas développer tous les aspects de la spécification LRS
- headless, sans interface graphique, et sans data visualization
- Validation ou conversion des traces dans différents standards
- Lecture/Ecriture des traces dans différentes bases de données/serveurs
- Aide à la configuration du LRS
Usage: ralph [OPTIONS] COMMAND [ARGS]...
The cli is a stream-based tool to play with your logs.
Commands:
auth Generate credentials for LRS HTTP basic authentication.
convert Convert input events to a given format.
extract Extract input events from a container format using a...
list List available documents from a configured data backend.
read Read records matching the QUERY (json or string) from a...
runserver Run the API server for the development environment.
validate Validate input events of given format.
write Write an archive to a configured backend.
Exemple : afficher le top 100 des agents qui ont générés le plus d'évènements
ralph read --backend swift 20231023.xapi.gz | \
jq .actor.account.name | \
sort | \
uniq -c | \
sort -rn | \
head -n 100
Un outil CLI c'est pratique, mais écrire du code Python c'est mieux !
Dans quel but ?
- Facilite l'intégration/l'adoption des développeurs
- Maintenabilité
- Utilisable dans des notebooks Jupyter
- intégrable dans les Learning Record Providers, facilite la génération de traces
- utilisation des convertisseurs de modèles (edX en xAPI)
- intégrable dans les Learning Record Consumer, comme les outils de data visualization : Warren 📈
Released en 01/2024 🎉
- Ajout support du multitenant
- Unification des backends
- Refonte de la documentation
- Ajout de nouveaux profils xAPI
- Ajout de nouveaux convertisseurs format edX en format xAPI
- Ajout d'un backend "LRS", pour requêter facilement un LRS depuis Python (utilisé dans Warren 📈)
- Architecture plugin : flexibilité pour l'ajout de nouveau backend
- Utilisation de Pydantic v2 pour les modèles
<style> .credits { margin-top: 1rem; text-align: center; } .logo { display: block; margin: 1rem auto 0; } </style>