Jetons un coup d'œil à l'intérieur du pipeline de classification de tokens.
Dans la vidéo du pipeline, nous avons examiné les différentes applications
prises en charge par la bibliothèque Transformers, l'une d'entre elles étant la classification de tokens, par exemple en prédisant pour chaque mot d'une
phrase s'il correspond à une personne, une organisation ou un lieu.
On peut même regrouper les tokens correspondant à une même entité, par exemple tous les tokens
qui ont formé ici le mot « Sylvain », ou « Hugging » et « Face ».
Le pipeline de classification de tokens fonctionne de la même manière que le pipeline de classification de texte que
nous avons étudié dans une vidéo précédente.
Il y a trois étapes : la tokenisation, le modèle et le post-traitement.
Les deux premières étapes sont identiques au pipeline de classification de texte, sauf que nous utilisons un
modèle de classification de token automatique au lieu d'un modèle de classification de séquence.
Nous tokenisons notre texte puis le transmettons au modèle.
Au lieu d'obtenir un numéro pour chaque étiquette possible pour toute la phrase, nous obtenons un numéro
pour chacune des 9 étiquettes possibles pour chaque token de la phrase, ici 19.
Comme tous les autres modèles de la bibliothèque Transformers, notre modèle génère des logits, que nous
transformons en prédictions en utilisant une SoftMax.
Nous obtenons également l'étiquette prédite pour chaque token en prenant la prédiction maximale (puisque la
fonction softmax préserve l'ordre, nous aurions pu le faire sur les logits si nous n'avions pas besoin
des prédictions).
La configuration du modèle contient l'association d'étiquette dans son champ `id2label`.
En l'utilisant, nous pouvons mapper chaque token à son étiquette correspondante.
L'étiquette `O` correspond à « aucune entité », c'est pourquoi nous ne l'avons pas vu dans nos résultats dans
la première diapositive.
En plus de l'étiquette et de la probabilité, ces résultats incluaient le caractère de début et de fin
dans la phrase.
Nous devrons utiliser l'association de décalage du tokenizer pour les obtenir (regardez la vidéo
liée ci-dessous si vous ne les connaissez pas déjà).
Ensuite, en parcourant chaque token qui a une étiquette distincte de `O`, nous pouvons construire la
liste des résultats que nous avons obtenus avec notre premier pipeline.
La dernière étape consiste à regrouper les tokens qui correspondent à la même entité.
C'est pourquoi nous avions deux labels pour chaque type d'entité : `I-PER` et `B-PER` par exemple.
Il nous permet de savoir si un token est dans la même entité que le précédent. A noter
qu'il existe deux manières d'étiqueter utilisées pour la classification des tokens, l'une (en rose ici) utilise l'
étiquette `B-PER` au début de chaque nouvelle entité, mais l'autre (en bleu) ne l'utilise que pour séparer
deux entités adjacentes du même type.
Dans les deux cas, nous pouvons marquer une nouvelle entité chaque fois que nous voyons apparaître une nouvelle étiquette
(avec le préfixe `I` ou `B`) puis prendre tous les tokens suivants étiquetés de la même manière, avec un
drapeau `I`.
Ceci, couplé à l'association de décalage pour obtenir les caractères de début et de fin, nous permet d'
obtenir l'étendue des textes pour chaque entité.