Partie 1 · Des mots aux nombres
Découper le texte
Un réseau ne calcule que sur des nombres. Le jeu du jour, MorFITT, contient 3 624 résumés médicaux en français (1 514 pour l'entraînement, 1 022 pour la validation, 1 088 pour le test), chacun classé dans une ou plusieurs des 12 spécialités. Première étape : transformer un texte en suite de numéros.
La règle du jour : 1) tout en minuscules ; 2) on coupe à chaque caractère qui n'est ni une lettre ni un chiffre (espace, ponctuation, apostrophe). Chaque morceau est un token. Un résumé compte en moyenne 241 tokens (de 30 à 1 410). Essaie la règle ci-dessous.
Le vocabulaire associe un numéro à chaque token. Deux numéros sont réservés à des tokens spéciaux : <rempl> = 0 (le remplissage, on y vient) et <inconnu> = 1. Le vocabulaire se construit sur l'entraînement seul : 22 702 tokens différents + 2 spéciaux = 22 704.
Un token jamais vu à l'entraînement devient <inconnu>. Exemple : « expectoration » apparaît 13 fois dans le test et jamais à l'entraînement. Sur tout le test : 12 679 tokens inconnus sur 260 788, soit 4,86 %. Le réseau sait alors qu'il y avait un mot, pas lequel.
À toi de coder
À toi de coder
Les sous-mots. Découper en mots laisse des inconnus ; découper en caractères donne des suites 6,2 fois plus longues, faites de lettres sans sens. Entre les deux : apprendre des morceaux de mots fréquents par la méthode BPE (byte pair encoding) : 1) partir des caractères ; 2) compter les paires de symboles voisins ; 3) fusionner la plus fréquente en un seul symbole, puis recompter ; 4) s'arrêter à une taille de vocabulaire fixée (32 005 morceaux pour DrBERT).
Corpus de la démo : chien (110 apparitions), chiens (377), chat (46), chats (151). Une paire compte autant de fois que son mot.
À toi de coder
Former un paquet. Le réseau reçoit plusieurs résumés à la fois, rangés en tableau : une ligne par résumé, une colonne par position. Or les résumés n'ont pas la même longueur. On complète donc chaque suite avec le token <rempl> (0) jusqu'à la longueur de la suite la plus longue de ce paquet. Le masque de remplissage a la même forme : 1 pour un vrai token, 0 pour un remplissage. Il dira aux calculs suivants quoi ignorer. Dans le notebook, les résumés sont coupés à 256 tokens (plafond).
À toi de coder