Comment un programme lit-il une phrase ?
La tokenisation consiste à découper un texte en petits morceaux, appelés jetons, qu’un programme peut compter. C’est la première étape de tout traitement automatique des langues, car un ordinateur lit des suites de caractères, pas des phrases.
Le service des études reçoit 300 messages d’étudiants par semaine. Pour les trier, un programme doit d’abord savoir ce qu’est un mot.
À la fin de cette leçon
Remarque
Je peux découper une phrase en jetons propres, sans majuscules ni ponctuation.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Jeton | une unité de texte que le programme compte, souvent un mot | amphi |
| Corpus | l’ensemble des textes que l’on étudie | |
| Normalisation | mettre le texte sous une forme commune | tout en minuscules |
| Mot vide | un mot très courant qui dit peu de chose | le |
| Vocabulaire | la liste des jetons différents d’un corpus |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un jeton n’est pas toujours un mot
Un jeton est l’unité que le programme compte. Le plus souvent, c’est un mot. On peut aussi compter des caractères.
Les grands modèles de langage coupent plutôt les mots en morceaux. Ainsi, un mot rare ou nouveau se compose de morceaux déjà connus. Le choix dépend de ce que l’on veut faire du texte.
Exemple travaillé : une phrase coupée de trois façons
| Découpage | Résultat pour « Le café ouvre à 8 h » | Nombre de jetons |
|---|---|---|
| En mots | Le, café, ouvre, à, 8, h | 6 |
| En caractères | L, e, espace, c, a, f, é, et ainsi de suite | 19 |
| En morceaux de mots (exemple) | Le, café, ouv, re, à, 8, h | 7 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Compter les caractères et les mots
docker exec jupyter python3 -c 'print(len("Le cafe ouvre a 8 h"), len("Le cafe ouvre a 8 h".split()))'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Couper sur les espaces ne suffit pas
Si l’on coupe seulement sur les espaces, la ponctuation reste collée aux mots. Le jeton « h, » n’est pas le jeton « h ». Un programme les compte comme deux mots différents.
La normalisation règle cela. On passe tout en minuscules, puis on traite chaque signe qui n’est ni une lettre ni un chiffre comme une espace.
Voir la ponctuation qui reste collée
docker exec jupyter python3 -c 'print("Le cafe ouvre a 8 h, et l amphi est plein !".lower().split())'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Une erreur fréquente
Attention
Beaucoup pensent qu’un jeton est toujours un mot. C’est un choix, pas une loi. Selon la tâche, un jeton est un mot, un caractère ou un morceau de mot. Choisissez-le d’après ce que vous voulez compter.
Nettoyer puis découper une phrase
phrase = "Le café ouvre à 8 h, et l’amphi est plein !"
propre = ""
for lettre in phrase:
if lettre.isalpha() or lettre.isdigit():
propre = propre + lettre.lower()
else:
# Tout le reste devient une espace : elle sépare les jetons.
propre = propre + " "
jetons = propre.split()
print(jetons)
print(len(jetons))
# Changez la phrase, puis relancez. Que devient « aujourd’hui » ?
Le vocabulaire est la liste des jetons différents
Un corpus est un ensemble de textes. Son vocabulaire est la liste de ses jetons différents, chacun compté une seule fois.
Certains mots reviennent partout : « le », « à », « de ». On les appelle des mots vides. Selon la tâche, on les garde ou on les retire.
Exemple travaillé : un petit corpus
| Message | Jetons | Nombre |
|---|---|---|
| Le restaurant ferme à 14 h | le, restaurant, ferme, à, 14, h | 6 |
| Le restaurant ouvre à 11 h | le, restaurant, ouvre, à, 11, h | 6 |
| La bibliothèque ferme à 19 h | la, bibliothèque, ferme, à, 19, h | 6 |
| Tout le corpus | 18 jetons au total, 11 jetons différents | 11 dans le vocabulaire |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Pour aller plus loin
Dans un carnet de JupyterLab, découpez cinq messages de votre choix avec votre fonction decouper. Calculez la taille de leur vocabulaire.
Retirez ensuite les mots vides que vous aurez choisis. Combien de jetons restent-ils ? Que perd-on en les retirant ?