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.
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
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
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.
À toi de coder
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
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