Aller au contenu
Apprendre.
  • M1 · toutes les matières15 matières : Préparation de données, API & sécurité, CI/CD, Docker, Merise, Dataviz, KNIME, ML appliqué : projet LoL, SQL & UML, SQL avancé, Machine Learning, Git, IA frugale & responsable, Qualité des données, MathématiquesAnnée
  • M2 · toutes les matières4 matières : Deep Learning, AI Act, Comex & Fundraising, Gouvernance & DataMeshAnnée
  • Deep LearningM2 · 4 modules · Réseaux de neurones, CNN, texte, modèles génératifs.Matière
  • Préparation de donnéesM1 · 3 modules · Nettoyer, transformer et fusionner des données avec Python.Matière
  • API & sécuritéM1 · 2 modules · Consommer, concevoir et sécuriser des API.Matière
  • CI/CDM1 · 1 module · Intégration et livraison continues.Matière
  • DockerM1 · 3 modules · Conteneurs, images, volumes, réseaux, Compose.Matière
  • MeriseM1 · 2 modules · Modéliser une base : MCD, MLD, MPD.Matière
  • DatavizM1 · 2 modules · Visualiser pour comprendre et décider.Matière
  • KNIMEM1 · 1 module · Explorer et nettoyer des données en workflow.Matière
  • ML appliqué : projet LoLM1 · 2 modules · Du besoin métier au POC de vision par ordinateur.Matière
  • SQL & UMLM1 · 3 modules · Modèles UML et requêtes SQL.Matière
  • SQL avancéM1 · 3 modules · Jointures, fenêtres, CTE, optimisation.Matière
  • Machine LearningM1 · 3 modules · Régression, classification, segmentation, projet.Matière

↑↓ naviguer↵ ouvre le résultat en surbrillanceesc fermer

Partie 3 · Donner douze réponses

Douze réponses

Un résumé de MorFITT a parfois plusieurs spécialités : 69,5 % en ont une seule, 22,0 % deux, 6,7 % trois, et au total les 3 624 résumés portent 5 116 étiquettes (1,41 par résumé). C'est un problème multi-label.

La softmax de J1 ne convient pas : ses probabilités font 1 au total, donc une seule spécialité peut être forte. Il faut une réponse oui / non par spécialité : une sigmoïde par score, σ(z) = 1 / (1 + exp(−z)), donne douze probabilités indépendantes entre 0 et 1. On fixe un seuil (0,5) et on répond « oui » au-dessus.

Bouge les scores : chaque probabilité est indépendante, leur somme n'est pas 1. Coche les vraies spécialités du résumé (cibles) pour voir la perte et les taux.

Pour décider, on applique la sigmoïde à chaque score, puis on compare au seuil. Chaque spécialité est jugée à part : plusieurs « oui » à la fois sont possibles (c'est le but) et le seuil est un paramètre qu'on pourra régler.

À toi de coder

Sigmoïde et seuil

Deux étapes : 1) transformer un score z en probabilité avec la sigmoïde ; attention au signe : c'est exp(−z), sinon un grand score donnerait une probabilité proche de 0 ; 2) pour chaque spécialité, répondre 1 si la probabilité dépasse le seuil, 0 sinon. Chaque score est traité seul, sans normalisation avec les autres : c'est ce qui permet plusieurs « oui ».

Ctrl/⌘+Entrée

La perte. On reprend celle du neurone de J1 pour chaque spécialité : si le résumé en relève (cible 1), la perte vaut −log(p) ; sinon (cible 0), −log(1 − p). Dans les deux cas, être confiant et faux coûte cher. La perte du résumé est la moyenne des douze pertes. Exemple de la diapositive : 0,91 pour la virologie (cible 1) coûte 0,09 ; 0,62 pour la physiologie (cible 1) coûte 0,48 ; 0,30 pour l'immunologie (cible 0) coûte 0,36.

À toi de coder

Entropie croisée binaire

Le choix de la formule dépend de la cible, car « avoir raison » ne veut pas dire la même chose : pour une cible 1, la bonne probabilité à prendre est p ; pour une cible 0, c'est la probabilité de l'événement contraire, 1 − p. Tu prends le −log de la probabilité accordée à la bonne réponse, puis tu moyennes sur les spécialités.

Ctrl/⌘+Entrée

Juger une spécialité. Prenons la virologie : la validation contient 1 022 résumés dont 57 de virologie. Au seuil 0,5, le modèle en classe 50 en virologie et a raison pour 40.

  • Précision : parmi ceux que le modèle classe en virologie, combien en sont vraiment ? 40 / 50 = 80 %.
  • Rappel : parmi les vrais résumés de virologie, combien en retrouve-t-il ? 40 / 57 ≈ 70 %.

Un seul nombre : le F1 = 2 × P × R / (P + R), moyenne harmonique. Il reste bas dès que l'un des deux taux est bas. Pourquoi pas la moyenne simple ? Essaie.

Précision 1 et rappel 0,1 (un modèle très prudent) : la moyenne affiche 0,55, le F1 ≈ 0,18.

À toi de coder

Précision, rappel, F1

Trois comptes suffisent : les vrais positifs (« oui » justes), le nombre de résumés prédits dans la spécialité, et le nombre de résumés réellement dans la spécialité. La précision divise par les prédits (« quand je dis oui, ai-je raison ? »), le rappel par les vrais (« en ai-je oublié ? »). Le F1 combine les deux ; si précision et rappel sont nuls, il faut éviter la division par zéro et rendre 0.

Ctrl/⌘+Entrée

Douze F1, un seul score. Le F1 pondéré est la moyenne des F1, chacun pondéré par le nombre de résumés de sa spécialité : une spécialité rare compte moins qu'une fréquente. Sur la diapositive (3 spécialités, valeurs inventées) : moyenne simple ≈ 0,68, F1 pondéré ≈ 0,83. Repère : répondre toujours « vétérinaire » donne 6,8 % de F1 pondéré en validation ; les meilleurs modèles publiés (pré-entraînés) atteignent 64 à 71 % sur le test.

À toi de coder

F1 pondéré

Pondérer, c'est donner à chaque F1 le poids de sa spécialité : tu additionnes F1 × effectif, puis tu divises par la somme des effectifs (et non par le nombre de spécialités, sinon ce serait une moyenne simple multipliée par un gros nombre). Le résultat reste entre 0 et 1.

Ctrl/⌘+Entrée

Le premier classifieur enchaîne : numéros (paquet, longueur) → nn.Embedding (paquet, longueur, 64) → moyenne masquée (paquet, 64) → nn.Linear(64, 12) (12 scores) → 12 sigmoïdes. Presque tous les poids sont dans la table d'embeddings. Compte-les :

À toi de coder

Compter les 1 453 836 paramètres

Chaque couche a ses poids. La table d'embeddings : une ligne de 64 nombres pour chacun des 22 704 tokens. La couche dense : un poids par couple (entrée, sortie), soit 64 × 12, plus un biais par sortie (12). On additionne les deux.

Ctrl/⌘+Entrée