POS Tagging (Part-of-Speech Tagging)
Le POS tagging (Part-of-Speech tagging, ou étiquetage morphosyntaxique) est une tâche de traitement automatique du langage naturel qui consiste à attribuer à chaque mot (ou token) d’un texte sa catégorie grammaticale : nom, verbe, adjectif, adverbe, pronom, etc.
Vous tapez une phrase. Le modèle lit chaque mot, analyse son contexte, et lui colle une étiquette : NOUN, VERB, ADJ, ADV, PRON, DET… C’est la brique la plus fondamentale de toute pipeline NLP. Sans POS tagging fiable, l’analyse syntaxique, la reconnaissance d’entités nommées, la sentiment analysis et la traduction automatique fonctionnent à l’aveugle.
L’étiquetage grammatical semble basique, mais il résout un problème que les humains gèrent sans y penser : la polysémie contextuelle. Le mot « marche » est-il un nom ou un verbe ? « Bien » est-il un adverbe ou un nom ? Seul le contexte tranche, et c’est exactement ce que fait un POS tagger performant.
- Catégorie
- Tâche NLP fondamentale (étiquetage de séquence)
- Input
- Texte brut tokenisé
- Output
- Chaque token étiqueté avec sa catégorie grammaticale
- Tagsets standards
- Penn Treebank (45 tags), Universal Dependencies (17 tags)
- Précision SOTA
- 97-98% sur texte formel (anglais, Penn Treebank)
- Outils principaux
- spaCy, Stanza, Flair, NLTK, Hugging Face Transformers
- Prérequis
- Tokenisation du texte en amont
Comment fonctionne le POS tagging
Le POS tagging est une tâche d’étiquetage de séquence (sequence labeling). Pour chaque token d’une phrase, le modèle prédit l’étiquette grammaticale la plus probable compte tenu du contexte environnant.
Prenons un exemple concret. La phrase « Le chat mange la souris rapidement » serait étiquetée ainsi :
| Token | Tag (UD) | Catégorie |
|---|---|---|
| Le | DET | Déterminant |
| chat | NOUN | Nom commun |
| mange | VERB | Verbe |
| la | DET | Déterminant |
| souris | NOUN | Nom commun |
| rapidement | ADV | Adverbe |
Ce qui paraît trivial pour un humain est un vrai défi algorithmique. Le mot « souris » pourrait être un nom (l’animal) ou un verbe conjugué (« tu souris »). C’est le contexte syntaxique (ici, précédé d’un déterminant « la ») qui lève l’ambiguïté. Les modèles modernes capturent ces dépendances contextuelles grâce aux architectures de réseaux de neurones, en particulier les Transformers.
Place dans la pipeline NLP
Le POS tagging intervient tôt dans la chaîne de traitement, typiquement juste après la tokenisation. Voici l’ordre habituel d’une pipeline NLP classique :
1. Tokenisation : découpage du texte en tokens.
2. POS tagging : attribution de la catégorie grammaticale à chaque token.
3. Lemmatisation : réduction à la forme canonique (utilise le POS tag pour choisir le bon lemme).
4. Analyse syntaxique (parsing) : construction de l’arbre de dépendances.
5. NER : reconnaissance d’entités nommées.
6. Tâches applicatives : sentiment analysis, classification de texte, extraction d’information, etc.
Le POS tag alimente directement les étapes suivantes. Par exemple, la lemmatisation de « mangées » produit « manger » uniquement si le tagger a correctement identifié un verbe (et non un nom). L’analyse syntaxique s’appuie sur les tags pour construire l’arbre de dépendances grammaticales.
Les tagsets : Penn Treebank vs Universal Dependencies
Un tagset est l’ensemble fini d’étiquettes utilisées pour annoter les mots. Deux standards dominent le domaine.
Penn Treebank (PTB)
Le Penn Treebank est le tagset historique de référence pour l’anglais. Développé à l’université de Pennsylvanie entre 1989 et 1996, il comprend 36 tags grammaticaux et 12 tags supplémentaires pour la ponctuation et les symboles. C’est le benchmark classique pour évaluer les POS taggers en anglais : on entraîne sur les sections 0 à 18, on valide sur 19 à 21, et on teste sur 22 à 24 du corpus Wall Street Journal.
Ses tags sont fins (fine-grained) : il distingue par exemple VB (verbe base), VBD (passé), VBG (gérondif), VBN (participe passé), VBP (présent non 3e personne) et VBZ (présent 3e personne du singulier). Cette granularité est utile pour l’anglais mais se transpose mal aux autres langues.
| Tag PTB | Description | Exemple |
|---|---|---|
| NN | Nom singulier ou masse | dog, music |
| NNS | Nom pluriel | dogs, children |
| NNP | Nom propre singulier | Paris, Google |
| VB | Verbe, forme de base | run, eat |
| VBD | Verbe, passé | ran, ate |
| VBG | Verbe, gérondif/participe présent | running, eating |
| VBN | Verbe, participe passé | eaten, broken |
| JJ | Adjectif | big, fast |
| RB | Adverbe | quickly, very |
| DT | Déterminant | the, a, these |
| IN | Préposition ou conjonction de subordination | in, of, that |
| PRP | Pronom personnel | I, he, they |
| CC | Conjonction de coordination | and, but, or |
Universal Dependencies (UD)
Universal Dependencies est un projet international qui définit un cadre d’annotation syntaxique multilingue cohérent. Son tagset UPOS (Universal POS) comprend 17 catégories conçues pour fonctionner sur plus de 100 langues. C’est le standard moderne. Les treebanks UD couvrent aujourd’hui plus de 200 corpus dans plus de 100 langues.
| Tag UPOS | Catégorie | Exemples (français) |
|---|---|---|
| ADJ | Adjectif | grand, bleu, rapide |
| ADP | Adposition (préposition/postposition) | dans, sur, à |
| ADV | Adverbe | rapidement, très, bien |
| AUX | Auxiliaire | être, avoir, sera |
| CCONJ | Conjonction de coordination | et, ou, mais |
| DET | Déterminant | le, un, cette |
| INTJ | Interjection | oh, bravo, hélas |
| NOUN | Nom commun | chat, maison, idée |
| NUM | Numéral | deux, 42, premier |
| PART | Particule | ne, n’ (en français) |
| PRON | Pronom | je, il, celui-ci |
| PROPN | Nom propre | Paris, Claude, Google |
| PUNCT | Ponctuation | . , ! ? ; |
| SCONJ | Conjonction de subordination | que, si, lorsque |
| SYM | Symbole | $, %, @ |
| VERB | Verbe | manger, courir, penser |
| X | Autre | mots étrangers, abréviations inclassables |
En pratique, les outils modernes comme spaCy fournissent les deux niveaux : un tag pos_ UPOS (coarse-grained) et un tag tag_ fin (fine-grained, souvent basé sur Penn Treebank pour l’anglais ou un tagset spécifique à la langue). Vous pouvez utiliser l’un ou l’autre selon la granularité dont vous avez besoin.
Les méthodes de POS tagging : des règles aux Transformers
L’histoire du POS tagging reflète l’évolution de tout le NLP : des règles écrites à la main vers l’apprentissage statistique, puis le deep learning.
Approche par règles
Les premiers taggers, comme celui d’Eric Brill (1995), utilisaient des règles linguistiques définies manuellement. Exemple : « si le mot se termine par -ment et est précédé d’un verbe, c’est probablement un adverbe ». Ces systèmes étaient explicables et fonctionnaient bien dans des domaines contrôlés, mais ils exigeaient un travail d’ingénierie considérable pour chaque langue et s’adaptaient mal aux variations de style.
Cette approche n’est plus utilisée en production, mais elle reste utile pour l’enseignement et pour comprendre les fondamentaux de la linguistique computationnelle.
Approches statistiques
Les modèles statistiques ont dominé le domaine des années 1990 aux années 2010. Ils apprennent les probabilités d’assignation de tags à partir de grands corpus annotés.
Hidden Markov Models (HMM) : modèle génératif qui calcule la séquence de tags la plus probable en se basant sur deux distributions : la probabilité d’émission (quel mot pour un tag donné) et la probabilité de transition (quel tag suit un autre tag). L’algorithme de Viterbi permet de trouver efficacement la meilleure séquence. Les HMM atteignaient déjà environ 96% de précision sur le Penn Treebank.
Maximum Entropy Markov Models (MEMM) : modèle discriminatif qui conditionne la prédiction du tag sur des features observées (préfixe, suffixe, majuscule, tag précédent…). Plus flexible que les HMM car il peut intégrer des caractéristiques arbitraires sans avoir à modéliser leurs distributions.
Conditional Random Fields (CRF) : extension des MEMM qui résout le problème du label bias. Les CRF modélisent la distribution de la séquence entière conjointement, ce qui permet de capturer des dépendances globales. Ils ont longtemps été l’état de l’art et restent utilisés comme couche finale dans certaines architectures neuronales modernes (BiLSTM-CRF).
Approches par deep learning
Le deep learning a transformé le POS tagging à partir de 2015 environ, en supprimant le besoin de feature engineering manuel.
BiLSTM (Bidirectional Long Short-Term Memory) : les réseaux LSTM bidirectionnels lisent la phrase dans les deux sens et apprennent des représentations contextuelles de chaque token. Combinés avec une couche CRF en sortie (architecture BiLSTM-CRF), ils ont défini l’état de l’art pendant plusieurs années. Des résultats de précision autour de 97% sur le Penn Treebank étaient courants avec cette architecture.
Flair Embeddings : les embeddings contextuels de Flair (Akbik et al., 2018) capturent la morphologie à l’échelle du caractère. Le modèle POS anglais de Flair, basé sur des embeddings Flair et une architecture LSTM-CRF, atteint un F1-score de 98,19% sur le corpus OntoNotes.
Transformers (BERT et dérivés) : les modèles de type BERT ont poussé encore plus loin les performances. Un modèle BERT fine-tuné sur le POS tagging exploite son mécanisme d’attention pour capturer des dépendances longue distance que les LSTM peinent à modéliser. Les variantes transformers des pipelines spaCy (modèles *_trf) et Stanza utilisent cette approche.
Tableau comparatif des méthodes
| Méthode | Précision typique (anglais, PTB) | Avantages | Inconvénients |
|---|---|---|---|
| Règles (Brill) | ~95% | Explicable, pas de données annotées nécessaires | Maintenance lourde, mal adaptable |
| HMM | ~96% | Simple, rapide | Features limitées, indépendance naïve |
| CRF | ~97% | Features riches, modélisation séquentielle | Feature engineering manuel |
| BiLSTM-CRF | ~97,5% | Pas de feature engineering, contexte bidirectionnel | Plus lent à entraîner |
| Flair (LSTM-CRF + embeddings caractères) | ~98,2% | Embeddings morphologiques riches | Inférence plus lente que spaCy |
| Transformer (BERT fine-tuné) | ~97,8-98% | Contexte global, transfer learning | Lourd en mémoire et en calcul |
Outils et bibliothèques pour le POS tagging
Voici les outils que vous utiliserez concrètement en production ou en recherche.
spaCy
spaCy (version 3.8 actuellement) est la bibliothèque de référence pour le NLP en production. Open-source sous licence MIT, elle est développée par Explosion. spaCy intègre le POS tagging dans sa pipeline complète (tokenisation, POS, lemmatisation, parsing, NER) et optimise la vitesse d’inférence.
spaCy propose plusieurs tailles de modèles pour chaque langue : sm (petit, rapide), md (moyen), lg (grand, avec word vectors) et trf (basé sur un Transformer, le plus précis mais le plus lent). Les modèles anglais sont entraînés sur le corpus OntoNotes 5.0 et utilisent le tagset Penn Treebank pour les tags fins et Universal Dependencies pour les tags UPOS.
import spacy
nlp = spacy.load("fr_core_news_lg") # modèle français large
doc = nlp("Le chat mange la souris rapidement")
for token in doc:
print(f"{token.text:15} {token.pos_:8} {token.tag_:8} {token.dep_}")
# Le DET DET det
# chat NOUN NOUN nsubj
# mange VERB VERB ROOT
# la DET DET det
# souris NOUN NOUN obj
# rapidement ADV ADV advmod
fr_core_news_lg offre le meilleur compromis vitesse/précision. Si vous avez besoin de la meilleure précision possible et que la latence n’est pas critique, utilisez fr_dep_news_trf (modèle Transformer).
Stanza (Stanford NLP)
Stanza est la bibliothèque Python officielle du Stanford NLP Group. Elle fournit des modèles neuronaux pré-entraînés pour plus de 70 langues, tous basés sur les treebanks Universal Dependencies. Stanza est optimisée pour la précision plutôt que pour la vitesse d’inférence.
Les modèles Stanza utilisent des architectures BiLSTM avec des embeddings de caractères et atteignent des performances proches de l’état de l’art sur la plupart des langues UD. La bibliothèque supporte aussi l’entraînement de modèles personnalisés sur vos propres données annotées au format CoNLL-U.
import stanza
stanza.download('fr') # télécharge le modèle français
nlp = stanza.Pipeline('fr')
doc = nlp("Le chat mange la souris rapidement")
for sentence in doc.sentences:
for word in sentence.words:
print(f"{word.text:15} {word.upos:8} {word.xpos or '-':8} {word.deprel}")
Flair
Flair, développée par l’université Humboldt de Berlin, se distingue par ses embeddings contextuels au niveau du caractère. Son modèle POS anglais (flair/pos-english) atteint un F1-score de 98,19% sur OntoNotes, ce qui en fait l’un des taggers les plus précis disponibles. Le modèle multilingue (flair/upos-multi) couvre 12 langues avec un F1-score de 96,87%.
from flair.data import Sentence
from flair.models import SequenceTagger
tagger = SequenceTagger.load("flair/upos-multi")
sentence = Sentence("Le chat mange la souris rapidement")
tagger.predict(sentence)
for token in sentence:
print(f"{token.text:15} {token.get_label('upos').value}")
NLTK
NLTK (Natural Language Toolkit) est la bibliothèque historique du NLP en Python. Son POS tagger par défaut utilise un modèle Maximum Entropy entraîné sur le Penn Treebank. NLTK est idéal pour l’apprentissage et le prototypage, mais ses performances et sa vitesse sont inférieures à celles de spaCy ou Stanza pour un usage en production.
import nltk
nltk.download('averaged_perceptron_tagger_eng')
tokens = nltk.word_tokenize("The cat eats the mouse quickly")
tagged = nltk.pos_tag(tokens)
print(tagged)
# [('The', 'DT'), ('cat', 'NN'), ('eats', 'VBZ'),
# ('the', 'DT'), ('mouse', 'NN'), ('quickly', 'RB')]
Hugging Face Transformers
La bibliothèque Hugging Face Transformers permet d’utiliser n’importe quel modèle de type BERT fine-tuné pour le POS tagging via la pipeline token-classification. C’est l’approche la plus flexible : vous pouvez choisir parmi des centaines de modèles pré-entraînés sur le Hub, ou fine-tuner votre propre modèle sur vos données annotées.
from transformers import pipeline
tagger = pipeline("token-classification",
model="vblagoje/bert-english-uncased-finetuned-pos")
result = tagger("The cat eats the mouse quickly")
for token in result:
print(f"{token['word']:15} {token['entity']}")
Tableau comparatif des outils
| Outil | Version | Langues | Tagset | Vitesse | Précision | Usage recommandé |
|---|---|---|---|---|---|---|
| spaCy | 3.8 | 70+ | UPOS + PTB (anglais) | Rapide | Très bonne | Production, pipelines complètes |
| Stanza | 1.9+ | 70+ | UPOS (UD) | Moyenne | Excellente | Recherche, précision maximale |
| Flair | 0.14+ | 12+ (multi) | UPOS + PTB | Lente | Excellente | Recherche, POS seul |
| NLTK | 3.9+ | Anglais (natif) | PTB | Moyenne | Bonne | Apprentissage, prototypage |
| HF Transformers | 4.x | Variable (par modèle) | Variable | Lente | Variable | Personnalisation, fine-tuning |
Les défis du POS tagging
Malgré des scores impressionnants sur les benchmarks, le POS tagging reste problématique dans plusieurs situations réelles.
Ambiguïté lexicale
C’est le défi fondamental. En anglais, le mot « can » peut être un nom (une canette), un verbe modal (pouvoir), ou un verbe lexical (mettre en conserve). En français, « ferme » peut être un nom (une exploitation agricole), un adjectif (solide), un verbe conjugué (je ferme), ou un adverbe (tenir ferme). Le contexte syntaxique et sémantique doit être analysé pour trancher.
Les modèles modernes gèrent bien l’ambiguïté courante. Là où ils trébuchent, c’est sur les constructions atypiques, les jeux de mots, et les usages créatifs de la langue.
Changement de domaine (domain shift)
Un tagger entraîné sur des articles de presse produit des résultats nettement inférieurs sur des tweets, des textes juridiques, ou des conversations orales. Des études montrent que la précision des meilleurs taggers chute de 98-99% à 94-95% lorsqu’on passe du texte écrit formel au texte parlé. Ce phénomène touche particulièrement les expressions argotiques, les abréviations, et les structures grammaticales non standard.
Code-switching
De plus en plus de textes (surtout sur les réseaux sociaux) mélangent plusieurs langues dans une même phrase : « Je suis trop happy de ce résultat lol ». Les taggers monolingues ne savent pas gérer ces transitions et attribuent des tags incohérents aux mots étrangers.
Langues peu dotées
Pour les langues disposant de peu de corpus annotés, les performances chutent significativement. Des approches de transfer learning multilingue (entraîner sur une langue riche en données, appliquer sur une langue cible) et de zero-shot cross-lingue permettent de compenser partiellement ce manque, mais les résultats restent inférieurs à ceux obtenus sur les langues bien dotées.
Expressions multi-mots
Les expressions figées comme « pomme de terre », « avoir lieu », « en train de » posent problème car le tag de chaque mot pris individuellement ne reflète pas la fonction de l’expression dans son ensemble. Le framework Universal Dependencies traite ce problème avec la notion de multi-word tokens, mais tous les taggers ne le gèrent pas correctement.
Applications concrètes du POS tagging
Le POS tagging n’est presque jamais une fin en soi. C’est une brique sur laquelle reposent de nombreuses applications NLP.
Lemmatisation guidée par le POS
La lemmatisation dépend directement du POS tag. Le mot « avions » se lemmatise en « avion » (nom) ou « avoir » (verbe) selon la catégorie grammaticale identifiée. Sans POS tag fiable, la lemmatisation produit des résultats aberrants.
Analyse syntaxique (dependency parsing)
Les parseurs syntaxiques utilisent les POS tags comme features d’entrée pour construire l’arbre de dépendances. Un parseur dépourvu de POS tags perd typiquement 5 à 10% de précision par rapport à la même architecture avec POS tags.
Extraction d’information
Pour extraire des relations entre entités (« Google a acquis YouTube »), le POS tagging permet d’identifier les verbes (le prédicat de la relation) et les noms propres (les entités participantes). Combiné avec la NER, il structure l’information extraite.
Analyse de sentiment
Dans la sentiment analysis, les adjectifs et adverbes portent l’essentiel de la charge émotionnelle. Identifier correctement ces catégories permet de pondérer les signaux de sentiment et de mieux traiter la négation (« pas bon » vs « bon »).
Traduction automatique
Les systèmes de traduction utilisent les POS tags pour lever les ambiguïtés de traduction. Le mot anglais « book » se traduit « livre » (nom) ou « réserver » (verbe) selon son tag. Même dans les architectures neuronales modernes, les POS tags restent utiles comme features additionnelles, surtout pour les paires de langues à structures syntaxiques différentes.
Correction grammaticale et assistants d’écriture
Des outils comme Grammarly ou Antidote utilisent le POS tagging pour identifier les erreurs d’accord (sujet-verbe, nom-adjectif), les fautes de préposition, et les constructions grammaticales incorrectes.
Analyse SEO et text mining
En SEO et en text mining, le POS tagging permet d’extraire automatiquement les mots-clés pertinents (noms et groupes nominaux), d’analyser la densité lexicale d’un texte, et de comparer le vocabulaire utilisé entre différents documents ou concurrents.
Tutoriel pratique : POS tagging en Python avec spaCy
Voici un exemple complet, de l’installation à l’analyse de résultats.
Installation
# Installation de spaCy
pip install spacy
# Téléchargement du modèle français (large)
python -m spacy download fr_core_news_lg
# Pour l'anglais avec Transformer (meilleure précision)
python -m spacy download en_core_web_trf
Exemple basique
import spacy
nlp = spacy.load("fr_core_news_lg")
texte = """
L'intelligence artificielle transforme rapidement les industries.
Les modèles de langage comme GPT ou Claude génèrent du texte
avec une fluidité remarquable.
"""
doc = nlp(texte)
for token in doc:
if not token.is_space:
print(f"{token.text:20} POS: {token.pos_:8} Tag: {token.tag_:10} "
f"Lemme: {token.lemma_}")
Extraction de patterns grammaticaux
L’un des usages les plus puissants du POS tagging est l’extraction de patterns syntaxiques. Par exemple, extraire tous les groupes « adjectif + nom » d’un corpus :
import spacy
nlp = spacy.load("fr_core_news_lg")
doc = nlp("L'intelligence artificielle offre des perspectives nouvelles "
"et des applications concrètes dans le monde réel.")
# Extraction des patterns ADJ + NOUN ou NOUN + ADJ
patterns = []
for i, token in enumerate(doc[:-1]):
next_token = doc[i + 1]
if token.pos_ == "ADJ" and next_token.pos_ == "NOUN":
patterns.append(f"{token.text} {next_token.text}")
elif token.pos_ == "NOUN" and next_token.pos_ == "ADJ":
patterns.append(f"{token.text} {next_token.text}")
print("Groupes nom-adjectif trouvés :", patterns)
# ['intelligence artificielle', 'perspectives nouvelles',
# 'applications concrètes', 'monde réel']
Utilisation du Matcher spaCy pour des patterns complexes
from spacy.matcher import Matcher
nlp = spacy.load("fr_core_news_lg")
matcher = Matcher(nlp.vocab)
# Pattern : PROPN + VERB + DET + NOUN
# Capture des structures "Sujet propre fait quelque chose à un objet"
pattern = [{"POS": "PROPN"}, {"POS": "VERB"}, {"POS": "DET"}, {"POS": "NOUN"}]
matcher.add("SUJET_VERBE_OBJET", [pattern])
doc = nlp("Google développe une IA. Microsoft lance un produit.")
matches = matcher(doc)
for match_id, start, end in matches:
span = doc[start:end]
print(f"Trouvé : {span.text}")
trf (Transformer) de spaCy est 10 à 50 fois plus lent que les modèles sm ou lg. En production sur de gros volumes, privilégiez lg sauf si la différence de précision est critique pour votre cas d’usage. Profilez toujours votre pipeline avant de passer en production.
POS tagging et LLM : quel rôle dans l’ère des grands modèles ?
Question légitime : si des modèles comme GPT ou Claude comprennent la grammaire implicitement, le POS tagging explicite a-t-il encore un sens ?
La réponse est oui, pour plusieurs raisons.
Premièrement, les LLM sont surdimensionnés pour une tâche de POS tagging. Vous n’allez pas envoyer chaque phrase à un modèle à 70 milliards de paramètres juste pour obtenir les tags grammaticaux. Les outils spécialisés (spaCy, Stanza) sont des ordres de grandeur plus rapides et moins coûteux.
Deuxièmement, le POS tagging reste indispensable comme composant de pipeline. Si vous construisez un système de RAG, un moteur de recherche, ou un outil d’analyse de corpus, vous avez besoin d’annotations structurées fiables en amont. Les LLM produisent du texte libre, pas des annotations structurées de manière systématique et reproductible.
Troisièmement, les LLM eux-mêmes bénéficient du POS tagging dans certaines architectures. Des études montrent que l’ajout de features POS peut améliorer les performances de modèles de classification de texte ou de question answering, en particulier pour les modèles de taille modeste.
Le POS tagging ne va pas disparaître. Il se repositionne comme un composant d’infrastructure NLP, fiable, rapide et peu coûteux, sur lequel s’appuient des systèmes plus complexes.
Métriques d’évaluation du POS tagging
L’évaluation d’un POS tagger repose principalement sur l’accuracy (exactitude) au niveau du token : le pourcentage de tokens correctement étiquetés par rapport à un corpus de référence (gold standard).
| Métrique | Formule | Usage |
|---|---|---|
| Accuracy | Tokens corrects / Total tokens | Métrique principale pour le POS tagging |
| F1-score (par classe) | Moyenne harmonique de précision et rappel | Évaluation détaillée par catégorie grammaticale |
| OOV Accuracy | Accuracy sur les mots hors vocabulaire | Mesure la capacité de généralisation |
| Sentence Accuracy | % de phrases entièrement correctes | Mesure plus stricte que l’accuracy par token |
L’accuracy globale peut masquer des faiblesses sur certaines catégories. Par exemple, un tagger qui identifie correctement 99% des déterminants mais seulement 85% des interjections affichera une accuracy élevée (les déterminants étant fréquents) mais échouera sur des tâches nécessitant une couverture fine de toutes les catégories.
Pour les évaluations multilingues sur les corpus Universal Dependencies, le script officiel du CoNLL 2018 Shared Task est le standard. Il évalue l’ensemble de la pipeline (tokenisation, POS, features morphologiques, parsing) de bout en bout.
Le POS tagging pour le français
Le français présente des particularités qui complexifient le POS tagging par rapport à l’anglais : accord en genre et en nombre, conjugaisons riches, élision (l’, j’, n’), liaisons, et les fameux multi-word tokens (du = de + le, au = à + le).
Les principaux modèles disponibles pour le français sont :
spaCy : les modèles fr_core_news_sm/md/lg sont entraînés sur des données journalistiques annotées. Le modèle fr_dep_news_trf utilise un Transformer (CamemBERT) pour une meilleure précision.
Stanza : le modèle français de Stanza est entraîné sur le treebank UD_French-GSD et supporte nativement l’expansion des multi-word tokens.
CamemBERT : modèle BERT pré-entraîné spécifiquement sur du français (corpus OSCAR), qui peut être fine-tuné pour le POS tagging. C’est souvent le backbone des modèles Transformer pour le français.
FlauBERT : alternative à CamemBERT, également pré-entraîné sur du français, avec des performances comparables sur les tâches de sequence labeling.
fr_core_news_lg de spaCy. Il offre le meilleur équilibre entre vitesse d’inférence, précision et facilité d’intégration. Si la précision est critique (analyse juridique, médicale), passez au modèle Transformer fr_dep_news_trf ou fine-tunez CamemBERT sur vos données métier.
Bonnes pratiques
Choisissez le bon tagset dès le départ. Si votre projet est multilingue ou que vous utilisez des outils modernes, partez sur Universal Dependencies (UPOS). Le Penn Treebank est pertinent uniquement pour des travaux de recherche en anglais où vous comparez avec la littérature existante.
Évaluez sur vos propres données. Les scores sur les benchmarks standards ne reflètent pas toujours les performances sur votre domaine. Constituez un jeu de test de 500 à 1000 phrases annotées manuellement dans votre domaine cible, et mesurez l’accuracy réelle.
Traitez les erreurs en cascade. Si votre POS tagger se trompe, la lemmatisation et le parsing en aval se trompent aussi. Identifiez les catégories d’erreurs les plus fréquentes et leur impact sur les tâches applicatives.
Adaptez au domaine si nécessaire. Sur des textes très spécifiques (médical, juridique, réseaux sociaux), un fine-tuning sur quelques centaines de phrases annotées peut apporter un gain significatif. spaCy et Stanza supportent tous les deux l’entraînement sur des données personnalisées.
Ne surdimensionnez pas votre modèle. Pour un cas d’usage simple (extraction de mots-clés, lemmatisation), le modèle sm de spaCy suffit largement. Le modèle Transformer n’est pertinent que si vous mesurez une différence significative sur votre tâche finale.
Questions fréquentes sur le POS tagging
Quelle est la différence entre POS tagging et NER ?
Le POS tagging et la NER (Named Entity Recognition) sont deux tâches d’étiquetage de séquence, mais elles ciblent des informations différentes. Le POS tagging attribue une catégorie grammaticale (nom, verbe, adjectif…) à chaque token, quelle que soit sa sémantique. La NER identifie les entités nommées spécifiques (personnes, organisations, lieux, dates…) en les étiquetant avec des tags sémantiques. Les deux tâches sont complémentaires : le POS tagging fournit une couche structurelle, la NER une couche sémantique. Dans une pipeline spaCy ou Stanza, les deux sont exécutées séquentiellement.
Quel est le meilleur outil de POS tagging pour le français ?
Pour une utilisation en production, spaCy avec le modèle fr_core_news_lg offre le meilleur compromis vitesse/précision. Si vous avez besoin de la meilleure précision possible, le modèle Transformer fr_dep_news_trf de spaCy (basé sur CamemBERT) ou Stanza avec le treebank UD_French-GSD sont recommandés. Pour de la recherche académique, Stanza produit des résultats très compétitifs sur les benchmarks Universal Dependencies.
Le POS tagging fonctionne-t-il bien sur les tweets et les textes informels ?
Les performances se dégradent significativement sur les textes informels. Les études montrent une chute d’accuracy de 3 à 5 points par rapport au texte formel. Les principales causes sont les abréviations (tkt, jsp, mdr), l’absence de ponctuation et de majuscules, les fautes d’orthographe volontaires, et le code-switching. Pour améliorer les résultats, vous pouvez fine-tuner un modèle sur un corpus de tweets annotés, ou utiliser des modèles spécialement entraînés sur des données de réseaux sociaux (comme le treebank UD_English-Tweebank pour l’anglais).
Peut-on faire du POS tagging sans corpus annoté (unsupervised) ?
Oui, mais avec des performances inférieures. Les approches non supervisées utilisent des techniques comme le clustering de mots (regrouper les mots qui apparaissent dans des contextes similaires) ou l’induction grammaticale. Les résultats sont utiles pour des langues sans aucune ressource annotée, mais restent 10 à 20 points en dessous des approches supervisées. En pratique, la stratégie la plus efficace pour une langue peu dotée est le transfer learning cross-lingue : entraîner sur une langue riche en données (comme le français ou l’anglais) et appliquer sur la langue cible, en exploitant les embeddings multilingues.
Comment entraîner un POS tagger personnalisé sur mes propres données ?
Avec spaCy, vous pouvez fine-tuner un modèle existant sur vos données annotées au format IOB ou CoNLL-U en utilisant la commande spacy train. Avec Stanza, l’entraînement se fait depuis le code source avec des données au format CoNLL-U. Avec Hugging Face, vous pouvez fine-tuner n’importe quel modèle BERT sur la tâche token-classification avec le Trainer API. Dans tous les cas, il vous faut un corpus annoté d’au moins 500 phrases (idéalement plus) dans votre domaine cible. L’annotation peut être accélérée en utilisant un modèle pré-entraîné pour pré-annoter, puis en corrigeant manuellement les erreurs.