Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import random | |
| import pandas as pd | |
| import numpy as np | |
| import json | |
| # Préparation des données | |
| questions = [ | |
| { | |
| "question": "Quelle est la différence principale entre un algorithme classique et un algorithme de Machine Learning ?", | |
| "options": [ | |
| "A) Les algorithmes classiques sont plus précis", | |
| "B) Les algorithmes de Machine Learning utilisent les données historiques pour produire un modèle prédictif", | |
| "C) Les algorithmes classiques fonctionnent sur de plus grandes bases de données", | |
| "D) Les algorithmes de Machine Learning sont toujours supervisés" | |
| ], | |
| "correct": "B", | |
| "category": "Fondamentaux du Machine Learning" | |
| }, | |
| { | |
| "question": "Dans un modèle linéaire f(x) = ax + b, que représentent a et b ?", | |
| "options": [ | |
| "A) a est l'ordonnée à l'origine et b est la pente", | |
| "B) a est la pente et b est l'ordonnée à l'origine", | |
| "C) a est la variable d'entrée et b est la variable de sortie", | |
| "D) a est la moyenne et b est l'écart-type" | |
| ], | |
| "correct": "B", | |
| "category": "Fondamentaux du Machine Learning" | |
| }, | |
| { | |
| "question": "Quel type d'apprentissage utilise des données étiquetées pour entraîner un modèle ?", | |
| "options": [ | |
| "A) Apprentissage non supervisé", | |
| "B) Apprentissage par renforcement", | |
| "C) Apprentissage supervisé", | |
| "D) Apprentissage semi-supervisé" | |
| ], | |
| "correct": "C", | |
| "category": "Fondamentaux du Machine Learning" | |
| }, | |
| { | |
| "question": "Qu'est-ce que le surapprentissage (overfitting) ?", | |
| "options": [ | |
| "A) Un modèle qui apprend trop rapidement", | |
| "B) Un modèle qui ne parvient pas à capturer les tendances dans les données d'entraînement", | |
| "C) Un modèle qui capture trop bien les données d'entraînement mais généralise mal", | |
| "D) Un modèle qui nécessite trop de données d'entraînement" | |
| ], | |
| "correct": "C", | |
| "category": "Fondamentaux du Machine Learning" | |
| }, | |
| { | |
| "question": "Pourquoi utilise-t-on le Deep Learning plutôt que le Machine Learning classique pour certains problèmes ?", | |
| "options": [ | |
| "A) Le Deep Learning est toujours plus précis", | |
| "B) Le Machine Learning classique est limité avec les données non-structurées et de grande dimension", | |
| "C) Le Deep Learning nécessite moins de données", | |
| "D) Le Machine Learning classique est plus complexe à implémenter" | |
| ], | |
| "correct": "B", | |
| "category": "Fondamentaux du Machine Learning" | |
| }, | |
| { | |
| "question": "Qu'est-ce qu'un perceptron ?", | |
| "options": [ | |
| "A) Un algorithme de classification d'images", | |
| "B) L'élément de base d'un réseau de neurones artificiels, inspiré des neurones biologiques", | |
| "C) Une technique de visualisation de données", | |
| "D) Un type de fonction d'activation" | |
| ], | |
| "correct": "B", | |
| "category": "Réseaux de Neurones Artificiels" | |
| }, | |
| { | |
| "question": "Quels sont les éléments caractéristiques d'un perceptron ?", | |
| "options": [ | |
| "A) Son activation, ses connexions d'entrée, sa fonction d'entrée et sa fonction d'activation", | |
| "B) Sa taille, sa couleur, sa forme et sa position", | |
| "C) Son algorithme, sa mémoire, son processeur et son interface", | |
| "D) Son bias, son taux d'apprentissage, sa dimension et sa profondeur" | |
| ], | |
| "correct": "A", | |
| "category": "Réseaux de Neurones Artificiels" | |
| }, | |
| { | |
| "question": "Quelles sont les principales couches d'un réseau de neurones ?", | |
| "options": [ | |
| "A) Couche d'entrée, couche cachée, couche de sortie", | |
| "B) Couche primaire, couche secondaire, couche tertiaire", | |
| "C) Couche superficielle, couche intermédiaire, couche profonde", | |
| "D) Couche d'acquisition, couche de traitement, couche de restitution" | |
| ], | |
| "correct": "A", | |
| "category": "Réseaux de Neurones Artificiels" | |
| }, | |
| { | |
| "question": "Comment fonctionne l'algorithme de rétropropagation (backpropagation) ?", | |
| "options": [ | |
| "A) Il propage les entrées de la première à la dernière couche", | |
| "B) Il calcule le gradient de la fonction d'erreur et met à jour les paramètres du réseau", | |
| "C) Il supprime les neurones inutiles du réseau", | |
| "D) Il compare les sorties de différents modèles" | |
| ], | |
| "correct": "B", | |
| "category": "Réseaux de Neurones Artificiels" | |
| }, | |
| { | |
| "question": "Qu'est-ce qu'une fonction d'activation dans un réseau de neurones ?", | |
| "options": [ | |
| "A) Une fonction qui initialise les poids du réseau", | |
| "B) Une fonction qui transforme la somme pondérée des entrées d'un neurone en sortie", | |
| "C) Une fonction qui détermine la vitesse d'apprentissage", | |
| "D) Une fonction qui compte le nombre de neurones actifs" | |
| ], | |
| "correct": "B", | |
| "category": "Réseaux de Neurones Artificiels" | |
| }, | |
| { | |
| "question": "Qu'est-ce qu'un hyperparamètre dans un réseau de neurones ?", | |
| "options": [ | |
| "A) Un paramètre dont la valeur est apprise pendant l'entraînement", | |
| "B) Un paramètre qui contrôle les autres paramètres", | |
| "C) Un paramètre constant dont la valeur est fixée avant le début du processus d'apprentissage", | |
| "D) Un paramètre qui change automatiquement pendant l'exécution" | |
| ], | |
| "correct": "C", | |
| "category": "Hyperparamètres" | |
| }, | |
| { | |
| "question": "Parmi ces éléments, lequel n'est PAS un hyperparamètre ?", | |
| "options": [ | |
| "A) Taux d'apprentissage", | |
| "B) Poids des connexions entre neurones", | |
| "C) Nombre de couches cachées", | |
| "D) Taille des échantillons (batch size)" | |
| ], | |
| "correct": "B", | |
| "category": "Hyperparamètres" | |
| }, | |
| { | |
| "question": "Quel est l'effet d'un taux d'apprentissage trop élevé ?", | |
| "options": [ | |
| "A) L'apprentissage est plus lent mais plus stable", | |
| "B) L'apprentissage est plus rapide mais potentiellement instable", | |
| "C) L'apprentissage ne démarre pas", | |
| "D) L'apprentissage est toujours meilleur" | |
| ], | |
| "correct": "B", | |
| "category": "Hyperparamètres" | |
| }, | |
| { | |
| "question": "À quoi sert la technique de \"dropout\" dans un réseau de neurones ?", | |
| "options": [ | |
| "A) À augmenter la vitesse d'entraînement", | |
| "B) À réduire le surapprentissage en désactivant aléatoirement des neurones", | |
| "C) À ajouter plus de neurones progressivement", | |
| "D) À stabiliser la fonction d'activation" | |
| ], | |
| "correct": "B", | |
| "category": "Hyperparamètres" | |
| }, | |
| { | |
| "question": "Qu'est-ce que la technique d'\"Early Stopping\" ?", | |
| "options": [ | |
| "A) Arrêter l'entraînement après un nombre fixe d'époques", | |
| "B) Interrompre l'entraînement lorsqu'il n'y a plus d'amélioration sur le jeu de validation", | |
| "C) Commencer l'entraînement avec moins de neurones", | |
| "D) Limiter le nombre d'exemples d'entraînement" | |
| ], | |
| "correct": "B", | |
| "category": "Hyperparamètres" | |
| }, | |
| { | |
| "question": "Quelle est la définition du Deep Learning ?", | |
| "options": [ | |
| "A) Une technique d'apprentissage automatique basée sur des arbres de décision profonds", | |
| "B) Une catégorie d'IA qui exploite des réseaux de neurones artificiels avec plusieurs couches", | |
| "C) Un algorithme spécifique pour l'analyse de données complexes", | |
| "D) Une méthode d'apprentissage par renforcement avancée" | |
| ], | |
| "correct": "B", | |
| "category": "Deep Learning" | |
| }, | |
| { | |
| "question": "Quelle est la principale différence entre le Deep Learning et le Machine Learning traditionnel ?", | |
| "options": [ | |
| "A) Le Deep Learning nécessite moins de données", | |
| "B) Le Machine Learning utilise des réseaux de neurones plus complexes", | |
| "C) Le Deep Learning utilise des réseaux de neurones à plusieurs couches pour apprendre des représentations hiérarchiques", | |
| "D) Le Machine Learning est plus récent que le Deep Learning" | |
| ], | |
| "correct": "C", | |
| "category": "Deep Learning" | |
| }, | |
| { | |
| "question": "Lequel de ces modèles n'appartient PAS au Deep Learning ?", | |
| "options": [ | |
| "A) CNN (Convolutional Neural Network)", | |
| "B) RNN (Recurrent Neural Network)", | |
| "C) SVM (Support Vector Machine)", | |
| "D) Transformer" | |
| ], | |
| "correct": "C", | |
| "category": "Deep Learning" | |
| }, | |
| { | |
| "question": "Pourquoi le Deep Learning est-il particulièrement efficace pour traiter des images ?", | |
| "options": [ | |
| "A) Parce qu'il utilise moins de ressources computationnelles", | |
| "B) Parce qu'il peut extraire automatiquement des caractéristiques hiérarchiques", | |
| "C) Parce qu'il nécessite moins de données d'entraînement", | |
| "D) Parce qu'il est plus simple à implémenter" | |
| ], | |
| "correct": "B", | |
| "category": "Deep Learning" | |
| }, | |
| { | |
| "question": "Qu'est-ce que le \"transfer learning\" en Deep Learning ?", | |
| "options": [ | |
| "A) Transférer des données d'un ordinateur à un autre", | |
| "B) Transférer la connaissance acquise sur un jeu de données \"source\" pour mieux traiter un nouveau jeu de données \"cible\"", | |
| "C) Transférer un modèle d'un langage de programmation à un autre", | |
| "D) Transférer l'apprentissage d'un réseau de neurones à un autre type d'algorithme" | |
| ], | |
| "correct": "B", | |
| "category": "Deep Learning" | |
| }, | |
| { | |
| "question": "Quelles sont les principales opérations appliquées dans un CNN ?", | |
| "options": [ | |
| "A) Convolution, pooling et fonction d'activation", | |
| "B) Addition, soustraction et multiplication", | |
| "C) Encodage, décodage et normalisation", | |
| "D) Segmentation, classification et régression" | |
| ], | |
| "correct": "A", | |
| "category": "Réseaux de Neurones à Convolution (CNN)" | |
| }, | |
| { | |
| "question": "À quoi sert l'opération de convolution dans un CNN ?", | |
| "options": [ | |
| "A) À réduire la taille de l'image", | |
| "B) À détecter les caractéristiques d'une image", | |
| "C) À augmenter le nombre de pixels", | |
| "D) À transformer l'image en noir et blanc" | |
| ], | |
| "correct": "B", | |
| "category": "Réseaux de Neurones à Convolution (CNN)" | |
| }, | |
| { | |
| "question": "Qu'est-ce que le \"pooling\" dans un CNN ?", | |
| "options": [ | |
| "A) Une technique pour combiner plusieurs images", | |
| "B) Une méthode pour réduire la dimensionnalité en conservant les informations importantes", | |
| "C) Un algorithme de partage de poids", | |
| "D) Une fonction d'activation spécifique aux CNN" | |
| ], | |
| "correct": "B", | |
| "category": "Réseaux de Neurones à Convolution (CNN)" | |
| }, | |
| { | |
| "question": "Quel est le rôle du \"flattening\" dans un CNN ?", | |
| "options": [ | |
| "A) Transformer une matrice multidimensionnelle en vecteur unidimensionnel", | |
| "B) Aplatir physiquement le matériel informatique", | |
| "C) Réduire le nombre de couches du réseau", | |
| "D) Éliminer les variations d'intensité dans une image" | |
| ], | |
| "correct": "A", | |
| "category": "Réseaux de Neurones à Convolution (CNN)" | |
| }, | |
| { | |
| "question": "Qu'est-ce que le \"padding\" dans une couche de convolution ?", | |
| "options": [ | |
| "A) Une technique pour augmenter la taille des filtres", | |
| "B) L'ajout de zéros autour des bords d'une image avant la convolution", | |
| "C) Un paramètre qui détermine la couleur de fond", | |
| "D) Une méthode pour réduire le bruit dans l'image" | |
| ], | |
| "correct": "B", | |
| "category": "Réseaux de Neurones à Convolution (CNN)" | |
| }, | |
| { | |
| "question": "Que signifie le terme \"stride\" dans une couche de convolution ?", | |
| "options": [ | |
| "A) La largeur des filtres utilisés", | |
| "B) Le nombre de filtres appliqués", | |
| "C) La distance de déplacement du filtre à chaque application", | |
| "D) La profondeur de la couche de convolution" | |
| ], | |
| "correct": "C", | |
| "category": "Réseaux de Neurones à Convolution (CNN)" | |
| }, | |
| { | |
| "question": "Parmi ces architectures, laquelle n'est PAS un modèle CNN ?", | |
| "options": [ | |
| "A) VGG16", | |
| "B) ResNet", | |
| "C) LSTM", | |
| "D) AlexNet" | |
| ], | |
| "correct": "C", | |
| "category": "Réseaux de Neurones à Convolution (CNN)" | |
| }, | |
| { | |
| "question": "Quel type de problème un CNN n'est PAS conçu pour résoudre ?", | |
| "options": [ | |
| "A) Classification d'images", | |
| "B) Détection d'objets", | |
| "C) Prédiction de séries temporelles", | |
| "D) Segmentation sémantique" | |
| ], | |
| "correct": "C", | |
| "category": "Réseaux de Neurones à Convolution (CNN)" | |
| }, | |
| { | |
| "question": "Pour quel type de données les RNN sont-ils particulièrement adaptés ?", | |
| "options": [ | |
| "A) Images 2D", | |
| "B) Données séquentielles (texte, séries temporelles)", | |
| "C) Graphes", | |
| "D) Tables de données structurées" | |
| ], | |
| "correct": "B", | |
| "category": "Réseaux de Neurones Récurrents (RNN)" | |
| }, | |
| { | |
| "question": "Quelle est la caractéristique principale des RNN par rapport aux réseaux feed-forward ?", | |
| "options": [ | |
| "A) Ils utilisent plus de neurones", | |
| "B) Ils ont une mémoire interne qui conserve des informations sur les états précédents", | |
| "C) Ils sont plus rapides à entraîner", | |
| "D) Ils nécessitent moins de données d'entraînement" | |
| ], | |
| "correct": "B", | |
| "category": "Réseaux de Neurones Récurrents (RNN)" | |
| }, | |
| { | |
| "question": "Quel problème majeur affecte les RNN simples lors de l'apprentissage de dépendances à long terme ?", | |
| "options": [ | |
| "A) Le problème du gradient explosif", | |
| "B) Le problème du gradient qui disparaît (vanishing gradient)", | |
| "C) Le problème de surapprentissage", | |
| "D) Le problème de sous-apprentissage" | |
| ], | |
| "correct": "B", | |
| "category": "Réseaux de Neurones Récurrents (RNN)" | |
| }, | |
| { | |
| "question": "Quelle architecture a été développée pour résoudre le problème du gradient qui disparaît dans les RNN ?", | |
| "options": [ | |
| "A) CNN", | |
| "B) LSTM (Long Short-Term Memory)", | |
| "C) GAN", | |
| "D) ResNet" | |
| ], | |
| "correct": "B", | |
| "category": "Réseaux de Neurones Récurrents (RNN)" | |
| }, | |
| { | |
| "question": "Quelles sont les trois opérations principales dans une cellule LSTM ?", | |
| "options": [ | |
| "A) Convolution, pooling, activation", | |
| "B) Encodage, traitement, décodage", | |
| "C) Forget Gate, Input Gate, Output Gate", | |
| "D) Lecture, écriture, mise à jour" | |
| ], | |
| "correct": "C", | |
| "category": "Réseaux de Neurones Récurrents (RNN)" | |
| }, | |
| { | |
| "question": "À quoi sert la \"Forget Gate\" dans une cellule LSTM ?", | |
| "options": [ | |
| "A) À supprimer complètement le réseau", | |
| "B) À décider quelles informations de l'état précédent doivent être oubliées", | |
| "C) À ignorer les nouvelles entrées", | |
| "D) À réinitialiser tous les poids" | |
| ], | |
| "correct": "B", | |
| "category": "Réseaux de Neurones Récurrents (RNN)" | |
| }, | |
| { | |
| "question": "Quelle est l'innovation principale introduite par l'architecture Transformer ?", | |
| "options": [ | |
| "A) L'utilisation exclusive de couches de convolution", | |
| "B) Le mécanisme d'attention qui remplace les connexions récurrentes", | |
| "C) L'élimination complète des couches cachées", | |
| "D) L'utilisation de fonctions d'activation plus complexes" | |
| ], | |
| "correct": "B", | |
| "category": "Transformers et Mécanismes d'Attention" | |
| }, | |
| { | |
| "question": "Qu'est-ce que le \"Scaled Dot-Product Attention\" dans les Transformers ?", | |
| "options": [ | |
| "A) Une technique pour augmenter la taille des matrices", | |
| "B) Un mécanisme permettant de calculer l'importance relative entre différents éléments d'une séquence", | |
| "C) Une méthode de normalisation des données", | |
| "D) Un type de fonction d'activation" | |
| ], | |
| "correct": "B", | |
| "category": "Transformers et Mécanismes d'Attention" | |
| }, | |
| { | |
| "question": "Que représentent les trois composantes Q, K, V dans le mécanisme d'attention ?", | |
| "options": [ | |
| "A) Questions, Kilomètres, Valeurs", | |
| "B) Qualité, Kinésie, Vitesse", | |
| "C) Query (requête), Key (clé), Value (valeur)", | |
| "D) Quantité, Kurtosis, Variance" | |
| ], | |
| "correct": "C", | |
| "category": "Transformers et Mécanismes d'Attention" | |
| }, | |
| { | |
| "question": "Quelle est la différence entre le \"Self-Attention\" et le \"Multi-Head Attention\" ?", | |
| "options": [ | |
| "A) Le Self-Attention s'applique à une seule séquence, tandis que le Multi-Head Attention combine plusieurs mécanismes d'attention en parallèle", | |
| "B) Le Self-Attention utilise une tête, tandis que le Multi-Head Attention utilise plusieurs têtes physiques", | |
| "C) Le Self-Attention est supervisé, tandis que le Multi-Head Attention est non supervisé", | |
| "D) Le Self-Attention est utilisé pour les images, tandis que le Multi-Head Attention est utilisé pour le texte" | |
| ], | |
| "correct": "A", | |
| "category": "Transformers et Mécanismes d'Attention" | |
| }, | |
| { | |
| "question": "Quelle est la particularité du \"Masked Multi-Head Attention\" utilisé dans le décodeur d'un Transformer ?", | |
| "options": [ | |
| "A) Il masque certains neurones aléatoirement", | |
| "B) Il empêche les positions de faire attention aux positions futures", | |
| "C) Il cache certaines parties de l'image", | |
| "D) Il supprime les mots peu fréquents" | |
| ], | |
| "correct": "B", | |
| "category": "Transformers et Mécanismes d'Attention" | |
| }, | |
| { | |
| "question": "Quelle architecture a été introduite dans le papier \"Attention is All You Need\" ?", | |
| "options": [ | |
| "A) ResNet", | |
| "B) LSTM", | |
| "C) Transformer", | |
| "D) GAN" | |
| ], | |
| "correct": "C", | |
| "category": "Transformers et Mécanismes d'Attention" | |
| }, | |
| { | |
| "question": "Quel est le principe de base d'un auto-encodeur ?", | |
| "options": [ | |
| "A) Encoder les données puis les décoder pour retrouver l'entrée originale", | |
| "B) Classer automatiquement les données en catégories", | |
| "C) Générer de nouvelles données aléatoires", | |
| "D) Compresser les données de manière irréversible" | |
| ], | |
| "correct": "A", | |
| "category": "Auto-encodeurs" | |
| }, | |
| { | |
| "question": "Qu'est-ce qu'un \"bottleneck\" (goulot d'étranglement) dans un auto-encodeur ?", | |
| "options": [ | |
| "A) Un problème technique qui ralentit l'entraînement", | |
| "B) Une couche cachée de dimension réduite qui force le réseau à apprendre une représentation compressée", | |
| "C) Un défaut dans l'architecture du réseau", | |
| "D) Une limite dans la quantité de données qu'on peut traiter" | |
| ], | |
| "correct": "B", | |
| "category": "Auto-encodeurs" | |
| }, | |
| { | |
| "question": "Comment calcule-t-on généralement l'erreur de reconstruction dans un auto-encodeur ?", | |
| "options": [ | |
| "A) Par la différence entre le nombre de neurones d'entrée et de sortie", | |
| "B) Par la distance entre les représentations latentes de différentes entrées", | |
| "C) Par la différence entre l'entrée originale et la sortie reconstruite", | |
| "D) Par le temps nécessaire à l'encodage et au décodage" | |
| ], | |
| "correct": "C", | |
| "category": "Auto-encodeurs" | |
| }, | |
| { | |
| "question": "Qu'est-ce qui caractérise un \"Denoising Auto-Encoder\" ?", | |
| "options": [ | |
| "A) Il produit des sorties sans bruit", | |
| "B) Il ajoute du bruit aux données d'entrée et tente de reconstruire les données originales", | |
| "C) Il filtre automatiquement les données bruitées", | |
| "D) Il utilise le bruit comme fonction d'activation" | |
| ], | |
| "correct": "B", | |
| "category": "Auto-encodeurs" | |
| }, | |
| { | |
| "question": "Quelle est l'utilité principale des auto-encodeurs en Deep Learning ?", | |
| "options": [ | |
| "A) Uniquement pour la compression de données", | |
| "B) Pour la génération d'images réalistes", | |
| "C) Pour la capture de la structure des données et l'apprentissage de représentations utiles", | |
| "D) Pour remplacer les réseaux convolutifs" | |
| ], | |
| "correct": "C", | |
| "category": "Auto-encodeurs" | |
| }, | |
| { | |
| "question": "Quelle méthode est utilisée pour évaluer les performances d'un modèle de classification ?", | |
| "options": [ | |
| "A) Régression linéaire", | |
| "B) Matrice de confusion", | |
| "C) Analyse en composantes principales", | |
| "D) Clustering k-means" | |
| ], | |
| "correct": "B", | |
| "category": "Questions Diverses" | |
| }, | |
| { | |
| "question": "Qu'est-ce que l'augmentation de données (data augmentation) en Deep Learning ?", | |
| "options": [ | |
| "A) L'ajout de nouvelles caractéristiques aux données existantes", | |
| "B) La création de données synthétiques pour augmenter la taille du jeu d'entraînement", | |
| "C) L'application de transformations aux données existantes pour créer de nouveaux exemples d'entraînement", | |
| "D) L'augmentation artificielle du nombre d'époques d'entraînement" | |
| ], | |
| "correct": "C", | |
| "category": "Questions Diverses" | |
| }, | |
| { | |
| "question": "Quelle technique est utilisée pour éviter le surapprentissage dans les modèles de Deep Learning ?", | |
| "options": [ | |
| "A) Augmenter le nombre de paramètres", | |
| "B) Réduire le nombre d'exemples d'entraînement", | |
| "C) Régularisation (comme L1, L2, dropout)", | |
| "D) Utiliser uniquement des fonctions d'activation linéaires" | |
| ], | |
| "correct": "C", | |
| "category": "Questions Diverses" | |
| }, | |
| { | |
| "question": "Dans quel cas utiliserait-on le transfert d'apprentissage (transfer learning) ?", | |
| "options": [ | |
| "A) Lorsqu'on dispose de très grandes quantités de données d'entraînement", | |
| "B) Lorsqu'on a peu de données pour un problème mais qu'il existe un modèle pré-entraîné sur un problème similaire", | |
| "C) Uniquement pour les problèmes de traitement du langage naturel", | |
| "D) Lorsqu'on veut transférer les données d'un ordinateur à un autre" | |
| ], | |
| "correct": "B", | |
| "category": "Questions Diverses" | |
| }, | |
| { | |
| "question": "Quelle est la différence entre la segmentation sémantique et la détection d'objets ?", | |
| "options": [ | |
| "A) La segmentation sémantique identifie chaque pixel d'une image, tandis que la détection d'objets localise les objets avec des boîtes englobantes", | |
| "B) La segmentation sémantique fonctionne uniquement sur les images en noir et blanc", | |
| "C) La détection d'objets est une technique dépassée, remplacée par la segmentation sémantique", | |
| "D) Il n'y a pas de différence, ce sont deux termes pour la même technique" | |
| ], | |
| "correct": "A", | |
| "category": "Questions Diverses" | |
| } | |
| ] | |
| # Add correct_answers variable | |
| correct_answers = [q["correct"] for q in questions] | |
| def calculate_score(user_answers): | |
| # Convertir les réponses utilisateur de A,B,C,D à 0,1,2,3 | |
| idx_answers = [] | |
| for ans in user_answers: | |
| if ans == "A": | |
| idx_answers.append(0) | |
| elif ans == "B": | |
| idx_answers.append(1) | |
| elif ans == "C": | |
| idx_answers.append(2) | |
| elif ans == "D": | |
| idx_answers.append(3) | |
| else: | |
| idx_answers.append(None) # Pour gérer les réponses vides | |
| # Convertir les réponses correctes | |
| correct_idx = [] | |
| for ans in correct_answers: | |
| if ans == "A": | |
| correct_idx.append(0) | |
| elif ans == "B": | |
| correct_idx.append(1) | |
| elif ans == "C": | |
| correct_idx.append(2) | |
| elif ans == "D": | |
| correct_idx.append(3) | |
| # Calculer le score | |
| score = 0 | |
| user_responses = [] | |
| for i in range(len(idx_answers)): | |
| if idx_answers[i] is not None and idx_answers[i] == correct_idx[i]: | |
| score += 1 | |
| user_responses.append(f"Question {i+1}: Correct ✓ - Votre réponse: {user_answers[i]}") | |
| else: | |
| user_responses.append(f"Question {i+1}: Incorrect ✗ - Votre réponse: {user_answers[i] if idx_answers[i] is not None else 'Non répondue'}, Réponse correcte: {correct_answers[i]}") | |
| # Calculer la note sur 20 | |
| note_sur_20 = (score / len(correct_answers)) * 20 | |
| return score, note_sur_20, user_responses | |
| # Modified qcm_app to handle multiple arguments from Gradio click event | |
| def qcm_app(*user_responses): | |
| # Convert tuple of responses to list | |
| answers = list(user_responses) | |
| # Calculer le score | |
| score, note, detailed_responses = calculate_score(answers) | |
| # Formatter la sortie | |
| output = f"# Résultats du QCM sur la Gouvernance des Données\n\n" | |
| output += f"## Score: {score}/{len(questions)} questions correctes\n" | |
| output += f"## Note: {note:.2f}/20\n\n" | |
| output += "## Détail des réponses:\n\n" | |
| for resp in detailed_responses: | |
| output += f"- {resp}\n" | |
| return output | |
| # Créer l'interface Gradio | |
| with gr.Blocks(title="QCM - Gouvernance des Données") as demo: | |
| gr.Markdown("# Questionnaire à Choix Multiples - Gouvernance des Données") | |
| gr.Markdown("Répondez aux questions en sélectionnant la réponse correcte (A, B, C ou D).") | |
| user_choices = [] | |
| with gr.Accordion("Questions", open=True): | |
| for i in range(len(questions)): | |
| with gr.Row(): | |
| with gr.Column(scale=10): | |
| gr.Markdown(f"### {questions[i]['question']}") | |
| for opt in questions[i]['options']: | |
| gr.Markdown(f"- {opt}") | |
| with gr.Column(scale=1): | |
| # Changed from Dropdown to Radio for clickable answers | |
| user_choice = gr.Radio( | |
| choices=["A", "B", "C", "D"], | |
| label=f"Question {i+1}" | |
| ) | |
| user_choices.append(user_choice) | |
| submit_btn = gr.Button("Soumettre") | |
| output = gr.Markdown() | |
| submit_btn.click( | |
| fn=qcm_app, | |
| inputs=user_choices, | |
| outputs=output | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() |