Polydesk-logotype
Polydesk.ai — Header

NER (Named Entity Recognition)

Le NER (Named Entity Recognition, ou reconnaissance d’entités nommées) est une tâche de traitement du langage naturel qui consiste à identifier et classifier automatiquement les entités nommées (personnes, organisations, lieux, dates, montants, etc.) dans un texte non structuré. C’est une brique fondamentale de l’extraction d’information : elle transforme du texte brut en données structurées exploitables.

NER en bref
Type
Tâche de NLP (sequence labeling / token classification)
Entrée
Texte brut non structuré
Sortie
Entités classifiées (PERSON, ORG, LOC, DATE, MONEY, etc.)
Approche SOTA
Fine-tuning de Transformers (BERT, RoBERTa, DeBERTa) + CRF
F1-score (benchmarks)
92-94% sur CoNLL-2003 (news), 80-92% sur domaines spécialisés
Outils
spaCy, Hugging Face Transformers, Flair, GLiNER, Stanza
Schéma d’annotation
BIO (Begin-Inside-Outside) ou BIOES

Comment fonctionne le NER

Prenons une phrase : « Emmanuel Macron a rencontré Joe Biden à Washington le 15 mars 2026. » Le NER identifie et classifie chaque entité :

« Emmanuel Macron » → PERSON
« Joe Biden » → PERSON
« Washington » → LOCATION
« 15 mars 2026 » → DATE

La tâche semble simple sur cet exemple, mais elle est complexe en pratique. « Washington » peut désigner une personne (George Washington), une ville (Washington D.C.), un État (État de Washington) ou une organisation (Washington Post). C’est le contexte qui permet de trancher, et c’est pourquoi les modèles modernes basés sur l’attention excellent.

Le schéma d’annotation BIO

Le NER est formalisé comme un problème d’étiquetage de séquence (sequence labeling). Chaque token du texte reçoit une étiquette selon le schéma BIO (ou IOB2) :

B-TYPE : début (Begin) d’une entité de type TYPE
I-TYPE : intérieur (Inside) d’une entité (token suivant du même entité)
O : en dehors (Outside) de toute entité

Emmanuel  B-PER
Macron    I-PER
a         O
rencontré O
Joe       B-PER
Biden     I-PER
à         O
Washington B-LOC
le        O
15        B-DATE
mars      I-DATE
2026      I-DATE

La variante BIOES ajoute E (End, fin d’entité) et S (Single, entité d’un seul token), ce qui permet une segmentation plus précise des frontières d’entités.

Types d’entités standards

Type Exemples Usage
PERSON (PER) Emmanuel Macron, Marie Curie Identification de personnes mentionnées
ORGANIZATION (ORG) Google, ONU, Airbus Extraction d’entreprises, institutions
LOCATION (LOC) Paris, Alpes, Seine Géolocalisation, cartographie
GPE France, New York Entités géopolitiques (pays, villes, états)
DATE 15 mars 2026, lundi prochain Extraction temporelle
MONEY 150 000 €, $2.5M Extraction de montants financiers
MISC Nobel, Champions League Événements, nationalités, etc.

Les domaines spécialisés définissent leurs propres types : DISEASE, DRUG, GENE en biomédical ; PRODUCT, BRAND en e-commerce ; VULNERABILITY, MALWARE en cybersécurité.

Évolution des approches NER

1. Règles et dictionnaires (années 1990)

Les premiers systèmes NER utilisaient des listes de noms (gazetteers), des expressions régulières et des règles linguistiques manuelles. Efficaces pour les cas simples (noms de pays, dates), mais incapables de gérer l’ambiguïté et les entités nouvelles. Encore utiles en complément d’approches ML pour les entités à vocabulaire fermé.

2. Machine learning classique (années 2000)

Les CRF (Conditional Random Fields) ont dominé le NER pendant une décennie. Un CRF modélise les dépendances entre étiquettes consécutives (si le token précédent est B-PER, le token courant est probablement I-PER ou O, mais pas B-LOC). Combinés avec des features manuelles (forme du mot, majuscule, préfixe, POS tag), les CRF atteignaient ~90% F1 sur CoNLL-2003.

3. Deep learning (années 2015-2018)

L’architecture BiLSTM-CRF (Lample et al., 2016) a combiné un BiLSTM pour l’encodage contextuel avec un CRF pour la décodage des étiquettes. Le BiLSTM capture le contexte bidirectionnel, le CRF impose la cohérence des transitions d’étiquettes. Cette architecture a fixé un nouveau SOTA sans features manuelles : ~91% F1 sur CoNLL-2003.

L’ajout d’embeddings de caractères (CNN ou LSTM sur les lettres) a amélioré la gestion des mots inconnus et des morphologies complexes.

4. Transformers (2018-présent)

Le fine-tuning de modèles pré-entraînés comme BERT, RoBERTa, DeBERTa, XLM-R et CamemBERT a propulsé le NER à 92-94% F1 sur CoNLL-2003. Le processus est simple : prendre un modèle pré-entraîné, ajouter une couche de classification par token, et fine-tuner sur quelques milliers d’exemples annotés.

Les Transformers capturent le contexte bidirectionnel de manière plus riche que les BiLSTM, et leurs représentations pré-entraînées sur des milliards de tokens transfèrent naturellement vers le NER. C’est l’approche standard en 2026.

5. LLM et zero-shot NER (2023-présent)

Les LLM (GPT-4, Claude, Mistral) peuvent réaliser du NER en zero-shot ou few-shot via le prompting. GPT-NER (NAACL 2025) atteint 90.91% F1 sur CoNLL-2003 par génération promptée avec auto-vérification. GLiNER, un modèle compact (~300M paramètres), surpasse les LLM sur le NER zero-shot (F1 jusqu’à 60.9 sur des datasets hors distribution) grâce à une approche d’extraction de spans guidée par des instructions.

Cette approche est particulièrement puissante quand les données annotées sont rares : le LLM comprend la tâche via quelques exemples dans le prompt, sans fine-tuning.

Implémentation pratique

NER avec spaCy

import spacy

# Charger le modèle français (transformers pour la meilleure précision)
# pip install spacy && python -m spacy download fr_dep_news_trf
nlp = spacy.load("fr_dep_news_trf")

text = "Emmanuel Macron a inauguré le nouveau centre Airbus à Toulouse le 10 mars 2026."
doc = nlp(text)

for ent in doc.ents:
    print(f"{ent.text:25s} {ent.label_:10s} ({ent.start_char}-{ent.end_char})")

# Sortie :
# Emmanuel Macron           PER        (0-15)
# Airbus                    ORG        (48-54)
# Toulouse                  LOC        (57-65)
# 10 mars 2026              DATE       (69-82)

NER avec Hugging Face Transformers

from transformers import pipeline

# Pipeline NER pré-entraîné (anglais)
ner = pipeline("ner", model="dslim/bert-base-NER", aggregation_strategy="simple")

text = "Apple CEO Tim Cook announced new products in Cupertino."
results = ner(text)

for entity in results:
    print(f"{entity['word']:20s} {entity['entity_group']:10s} ({entity['score']:.3f})")

# NER avec CamemBERT (français)
ner_fr = pipeline("ner", model="Jean-Baptiste/camembert-ner", aggregation_strategy="simple")

text_fr = "Airbus a signé un contrat avec la SNCF à Paris."
results_fr = ner_fr(text_fr)
for entity in results_fr:
    print(f"{entity['word']:20s} {entity['entity_group']:10s} ({entity['score']:.3f})")

Fine-tuning pour un domaine spécifique

from transformers import (
    AutoTokenizer, AutoModelForTokenClassification,
    TrainingArguments, Trainer, DataCollatorForTokenClassification
)
from datasets import load_dataset

# Charger un dataset NER (ex: CoNLL-2003)
dataset = load_dataset("conll2003")

# Charger le modèle pré-entraîné
model_name = "bert-base-cased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForTokenClassification.from_pretrained(
    model_name, num_labels=9  # nombre de tags BIO
)

# Tokeniser les données (gérer les sous-tokens)
def tokenize_and_align(examples):
    tokenized = tokenizer(examples["tokens"], is_split_into_words=True,
                          truncation=True, padding=True)
    labels = []
    for i, label in enumerate(examples["ner_tags"]):
        word_ids = tokenized.word_ids(batch_index=i)
        label_ids = [-100 if w is None else label[w] for w in word_ids]
        labels.append(label_ids)
    tokenized["labels"] = labels
    return tokenized

tokenized_data = dataset.map(tokenize_and_align, batched=True)

# Entraîner
args = TrainingArguments(
    output_dir="ner-model",
    num_train_epochs=3,
    per_device_train_batch_size=16,
    learning_rate=2e-5,
    evaluation_strategy="epoch"
)

trainer = Trainer(
    model=model, args=args,
    train_dataset=tokenized_data["train"],
    eval_dataset=tokenized_data["validation"],
    data_collator=DataCollatorForTokenClassification(tokenizer)
)
trainer.train()
Attention aux sous-tokens Les tokenizers des Transformers découpent les mots en sous-tokens (WordPiece, BPE). Le mot « Macron » peut devenir [« Mac », « ##ron »]. Il faut aligner les labels NER avec les sous-tokens : seul le premier sous-token d’un mot reçoit le label, les suivants reçoivent -100 (ignorés par la loss). C’est le piège le plus fréquent lors du fine-tuning NER avec des Transformers.

Les outils NER en 2026

Outil Approche Français Forces
spaCy Modèles pré-entraînés + Transformers Oui (fr_dep_news_trf) API intuitive, pipeline complet (tokenisation, POS, NER, dépendances), production-ready
Hugging Face Fine-tuning Transformers Oui (CamemBERT-NER) Écosystème massif, des milliers de modèles, fine-tuning flexible
Flair Stacked embeddings + BiLSTM-CRF Oui Combine plusieurs types d’embeddings, bon pour les cas multilingues
GLiNER Zero-shot span extraction Multilingue NER zero-shot sans fine-tuning, ~300M params, surpasse ChatGPT sur NER OOD
Stanza (Stanford) BiLSTM-CRF + caractères Oui Précision élevée, support académique, 60+ langues

Quelle approche choisir

Approche Données annotées requises F1 typique (CoNLL) Latence Quand l’utiliser
Règles + dictionnaires Aucune (listes manuelles) ~70-80% Très faible Entités à vocabulaire fermé (pays, devises, codes)
spaCy pré-entraîné Aucune ~85-88% Faible Prototypage rapide, types d’entités standards
Fine-tuning BERT/CamemBERT 500-5000 phrases ~92-94% Modérée (GPU) Production, domaines spécialisés, précision maximale
GLiNER (zero-shot) Aucune ~55-61% (OOD) Modérée Types d’entités non standards, pas de données annotées
LLM via prompting Aucune (quelques exemples en prompt) ~80-91% Élevée (API) Exploration, prototypage, types d’entités dynamiques

En pratique, le meilleur rapport coût/performance en 2026 reste le fine-tuning d’un modèle Transformer pré-entraîné. Avec 500 phrases annotées et quelques heures de calcul GPU, vous obtenez un modèle de production qui surpasse toutes les alternatives en précision sur votre domaine spécifique. Pour le prototypage sans données, commencez par spaCy ou GLiNER, et passez au fine-tuning quand la précision devient critique.

Cas d’usage

Conformité et KYC financier : extraction automatique de noms de clients, d’entreprises, de montants et de dates dans les documents réglementaires. Les banques rapportent une réduction de 85% du temps de traitement manuel grâce au NER. Les systèmes de surveillance des transactions utilisent le NER pour détecter les entités sous sanctions dans les flux de messages SWIFT et les rapports de compliance.

Veille médiatique et analyse de presse : identifier les personnes, organisations et lieux mentionnés dans des milliers d’articles pour la veille concurrentielle, l’analyse de réputation ou le suivi géopolitique. Les agences de presse et les services de renseignement économique traitent des millions d’articles par jour grâce au NER automatisé.

Biomédical et pharmaceutique : extraction de noms de médicaments, de maladies, de gènes et de dosages dans les dossiers patients (EHR) et la littérature scientifique. BioBERT et PubMedBERT sont des modèles spécialisés pour ce domaine. La pharmacovigilance utilise le NER pour détecter les effets indésirables dans les rapports cliniques et les publications.

Juridique et contractuel : identification des parties, des dates, des montants et des clauses clés dans les contrats. Le NER juridique atteint 96.2% de précision avec un fine-tuning sur seulement 500 exemples annotés. Les cabinets d’avocats automatisent la due diligence et la revue de contrats grâce au NER.

Moteurs de recherche et chatbots : comprendre les requêtes utilisateur en identifiant les entités (« restaurants italiens à Lyon ») pour fournir des résultats pertinents. Les assistants vocaux et les chatbots utilisent le NER pour extraire l’intention et les paramètres des requêtes.

Cybersécurité (Threat Intelligence) : extraction de noms de malwares, d’adresses IP, de CVE et d’acteurs de menaces dans les rapports de sécurité. Le NER transforme les rapports textuels en indicateurs de compromission (IOC) structurés, exploitables par les systèmes SIEM et SOAR.

E-commerce et service client : identifier les noms de produits, les marques, les tailles, les couleurs et les problèmes mentionnés dans les avis clients et les tickets de support. Le NER alimente les systèmes de routage automatique et d’analyse de sentiment par entité.

Défis et limites

Ambiguïté contextuelle : « Python » (langage ou serpent ?), « Washington » (personne, ville ou état ?). Le contexte est essentiel, et même les meilleurs modèles se trompent dans les cas ambigus.

Entités imbriquées (nested NER) : « Banque de France » contient une LOC (France) à l’intérieur d’une ORG (Banque de France). Le schéma BIO standard ne gère pas les imbrications. Des approches par spans ou par couches multiples résolvent ce problème.

Domaines spécialisés : un modèle NER entraîné sur des articles de presse ne reconnaîtra pas les noms de médicaments ou les termes juridiques. Le fine-tuning sur des données du domaine est nécessaire, ce qui exige des données annotées spécifiques.

Langues peu dotées : les modèles NER performent bien en anglais, français, allemand et chinois, mais chutent significativement sur les langues peu dotées (swahili, hindi, langues africaines). XLM-R et les approches multilingues atténuent ce problème.

Entités nouvelles : les modèles pré-entraînés ne reconnaissent pas les nouvelles entreprises, produits ou personnalités apparues après leur date de coupure. GLiNER et les approches zero-shot sont une solution partielle.

Bonnes pratiques

Commencez par spaCy ou un modèle Hugging Face pré-entraîné. Pour le français, CamemBERT-NER est un excellent point de départ. Ne réinventez pas la roue : les modèles pré-entraînés couvrent les types d’entités standards avec une bonne précision.

Fine-tunez sur vos données pour les domaines spécialisés. 500 à 2 000 phrases annotées suffisent pour un fine-tuning efficace d’un modèle BERT sur un nouveau domaine. L’annotation est l’investissement le plus rentable.

Utilisez GLiNER pour le zero-shot. Si vous n’avez pas de données annotées et que vos types d’entités sont non standards, GLiNER (~300M paramètres) surpasse les LLM généralistes sur le NER zero-shot tout en étant bien plus léger.

Évaluez avec le F1-score par type d’entité. Le F1 global peut masquer des performances médiocres sur certains types. Un modèle à 93% F1 global peut avoir 98% sur PERSON mais seulement 75% sur MISC. Analysez chaque type séparément.

Gérez les sous-tokens lors du fine-tuning. C’est le piège technique le plus courant. Alignez les labels BIO avec les sous-tokens du tokenizer, en assignant -100 aux sous-tokens non-premiers pour qu’ils soient ignorés par la loss.

Combinez NER et relation extraction. Le NER identifie les entités, mais la valeur réside souvent dans les relations entre elles (qui travaille où, quel médicament traite quelle maladie). Les pipelines modernes combinent NER + RE pour extraire des graphes de connaissances.


Questions fréquentes sur le NER

Quelle est la différence entre NER et POS tagging ?

Le POS tagging (Part-of-Speech tagging) attribue une catégorie grammaticale à chaque mot (nom, verbe, adjectif, etc.). Le NER identifie les entités nommées (personnes, lieux, organisations) et les classifie. Le POS tagging est une tâche linguistique basse (syntaxe), le NER est une tâche sémantique haute (sens). Les deux sont des tâches d’étiquetage de séquence, mais elles opèrent à des niveaux différents. Le POS tagging est souvent utilisé comme feature intermédiaire pour améliorer le NER.

Le NER peut-il fonctionner en zero-shot (sans données annotées) ?

Oui. Les LLM (GPT-4, Claude) réalisent du NER en zero-shot via le prompting, avec des résultats corrects (80-90% F1 sur les types standards). GLiNER, un modèle spécialisé de ~300M paramètres, surpasse les LLM généralistes sur le NER zero-shot hors distribution. Cependant, pour une précision maximale (92%+ F1), le fine-tuning sur des données annotées du domaine reste nécessaire.

Quel modèle NER utiliser pour le français ?

Deux options principales. spaCy fr_dep_news_trf : pipeline complet (tokenisation, POS, NER, dépendances) basé sur CamemBERT, prêt à l’emploi. CamemBERT-NER (Jean-Baptiste/camembert-ner sur Hugging Face) : fine-tuné sur des données françaises, utilisable via la pipeline Hugging Face. Pour les cas spécialisés, fine-tunez CamemBERT ou XLM-R sur vos propres données annotées en français.

Combien de données annotées faut-il pour fine-tuner un modèle NER ?

Avec un modèle pré-entraîné (BERT, CamemBERT), 500 à 2 000 phrases annotées suffisent pour obtenir des résultats compétitifs sur un nouveau domaine. C’est la force du transfer learning : le modèle a déjà une compréhension générale du langage, il ne lui manque que les patterns spécifiques à votre domaine. Pour les domaines très spécialisés (biomédical, juridique), 5 000 à 10 000 phrases sont recommandées.

Quelle est la différence entre NER et extraction d’entités ?

Le NER est un type spécifique d’extraction d’entités, focalisé sur les entités nommées (noms propres de personnes, lieux, organisations). L’extraction d’entités est plus large : elle peut inclure l’extraction de relations (qui travaille où), d’événements (qu’est-ce qui s’est passé), d’attributs (taille, couleur, prix) et d’entités non nommées (concepts, catégories). Le NER est souvent la première étape d’un pipeline d’extraction d’information plus complet.

Polydesk.ai — Footer