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()