Le NER au cœur du NLP moderne
Reconnaissance d’Entités Nommées (NER): Définition et utilité
La
Reconnaissance d’Entités Nommées (ou
NER pour
Named Entity Recognition) est une tâche fondamentale du traitement automatique du langage naturel (NLP). Elle consiste à identifier et classer automatiquement des éléments spécifiques dans un texte, comme les noms de personnes (PERSON), les organisations (ORG), les lieux (GPE), les dates (DATE) ou encore les montants financiers (MONEY). En d’autres termes, le NER permet de transformer un texte brut en données structurées, facilitant ainsi l’analyse et l’exploitation de l’information.
L'utilité du NER est multiple, entre autres:
- La veille informationnelle: le NER permet d’extraire rapidement les acteurs clés, les lieux et les événements d’un article de presse.
- En entreprise: il est utilisé pour analyser des documents contractuels, détecter des entités sensibles (comme des noms ou des adresses) et automatiser la conformité réglementaire
- Dans les applications grand public: il sert par exemple à améliorer les moteurs de recherche, les assistants virtuels ou encore les systèmes de recommandation en identifiant les entités pertinentes dans les requêtes des utilisateurs.
En gros, le NER joue un rôle crucial dans des tâches avancées comme la relation entre entités (par exemple, relier une personne à une organisation), la construction de graphes de connaissances, ou l’extraction d’information à grande échelle.
NER moderne: comprendre le langage grâce au deep learning
Les modèles modernes de deep learning, tels que BERT et CamemBERT, ont révolutionné le NER. Contrairement aux approches classiques basées sur des règles ou des dictionnaires, ces architectures reposent sur des représentations contextuelles des mots capables de saisir les nuances sémantiques et syntaxiques d’une phrase.
Grâce à l’attention multi-têtes de BERT, chaque mot est interprété en fonction de son contexte global, ce qui permet de distinguer par exemple « Apple » comme entreprise (ORG) ou comme fruit (MISC). CamemBERT, entraîné spécifiquement sur des corpus francophones, améliore encore la précision pour les textes en français.
Ces modèles offrent des performances très élevées, avec des scores proches de l’état de l’art sur les benchmarks NER. Ils permettent non seulement une extraction fine des entités, mais aussi une meilleure généralisation à des domaines variés (juridique, médical, journalistique).
L’attention multi‑têtes de BERT est un mécanisme qui permet au modèle de «regarder» un mot sous plusieurs angles en parallèle. Chaque tête d’attention capture une relation différente (par exemple, un lien syntaxique ou une nuance sémantique), ce qui enrichit la compréhension contextuelle. Ainsi, le modèle peut distinguer des cas ambigus comme « Apple » en tant qu’entreprise (ORG) ou en tant que fruit (MISC).
Nous reviendrons plus en détail sur le fonctionnement de l’attention multi‑têtes et ses implications dans le NLP dans une section ultérieure de ce cours.
Exemple pratique introductif de NER
Dans cet exemple, nous allons illustrer concrètement la Reconnaissance d’Entités Nommées (NER) à l’aide de la bibliothèque
spaCy. L’exemple proposé montre comment charger un modèle pré‑entraîné en anglais, analyser un texte, puis extraire automatiquement les entités qu’il contient (personnes, organisations, lieux, montants financiers, etc.).
Je propose ce code:
import spacy
nlp = spacy.load("en_core_web_sm")
text = """
Apple is looking at buying U.K. startup for $1 billion.
Barack Obama was the 44th President of the United States.
"""
doc = nlp(text)
for ent in doc.ents:
print(f"{ent.text}: {ent.label_}")
Expliquons rapidement ce code:
On commence par importer la bibliothèque
spaCy spécialisée dans le traitement automatique du langage naturel (NLP):
import spacy
spaCy est une bibliothèque open‑source du NLP en Python. Elle fournit des modèles pré‑entraînés pour différentes langues et permet d’effectuer des tâches comme la segmentation en tokens, l’étiquetage grammatical, l’analyse syntaxique et la reconnaissance d’entités nommées (NER). Son avantage est d’être rapide, simple à utiliser et adaptée aussi bien aux projets académiques qu’aux applications industrielles.
Ensuite, on charge un modèle pré‑entraîné appelé
en_core_web_sm qui est un petit modèle statistique en anglais fourni par spaCy.
nlp = spacy.load("en_core_web_sm")
Ce modèle contient des composants pour analyser du texte (tokenisation, étiquetage grammatical, analyse de dépendances syntaxiques et NER).
Après avoir défini le texte à analyser, on applique le pipeline linguistique de spaCy:
doc = nlp(text)
Cette instruction applique le modèle linguistique de spaCy au texte fourni et crée un objet
Doc. Cet objet contient toutes les annotations produites par le pipeline: découpage en tokens, catégories grammaticales, dépendances syntaxiques et entités nommées. En pratique, c’est l’étape qui transforme une chaîne de caractères brute en une structure riche et exploitable pour l’analyse linguistique et l’extraction d’information.
En fin, on parcourt toutes les entités nommées détectées dans le texte par spaCy et affiche chacune d’elles avec son type:
for ent in doc.ents:
print(f"{ent.text}: {ent.label_}")
Concrètement,
doc.ents contient la liste des entités extraites (comme Apple, Barack Obama, United States), et la boucle for imprime à la fois le texte de l’entité
ent.text et son label
ent.label_ qui indique sa catégorie (par exemple ORG pour organisation, PERSON pour personne, GPE pour lieu, MONEY pour montant). Cela permet de visualiser directement le résultat de la Reconnaissance d’Entités Nommées (NER) sur un texte donné.
L'exécution du code produit ce résultat:
Apple: ORG
U.K.: GPE
$1 billion: MONEY
Barack Obama: PERSON
44th: ORDINAL
the United States: GPE
Dans cet exemple, nous avons utilisé la bibliothèque spaCy avec son modèle pré‑entraîné en_core_web_sm. Cela signifie que les tâches de tokenisation, d’embedding et de Reconnaissance d’Entités Nommées (NER) sont réalisées par spaCy qui repose sur des approches statistiques et des représentations internes optimisées. Il ne s’agit pas ici d’un modèle basé sur les Transformers (comme BERT ou CamemBERT), que nous verrons plus en détail dans la suite du cours.