Natural Language Processing (NLP) - Fondements et applications

Auteur: Mohamed CHINY Durée necessaire pour le cours de Natural Language Processing (NLP) - Fondements et applications Niveau recommandé pour le cours de Natural Language Processing (NLP) - Fondements et applications Supports vidéo non disponibles pour ce cours Exercices de renforcement non disponibles pour ce cours Quiz disponible pour ce cours

Leçon 7: Lemmatisation: normaliser les texte en retrouvant la forme canonique des mots

Toutes les leçons

Lammatisation: vers une meilleure compréhension du langage

Qu’est-ce que la lemmatisation ?

La lemmatisation est une technique de normalisation liée au NLP qui consiste à ramener un mot à sa forme canonique, appelée lemme.

Contrairement au stemming, qui se contente de tronquer les mots pour obtenir une racine approximative, la lemmatisation s’appuie sur des règles linguistiques et sur des dictionnaires pour identifier la véritable forme de base.

Par exemple, en français, les mots "mangé", "mangeons" et "mangerai" seront tous ramenés au lemme "manger". En anglais, "better" sera ramené à "good", ce qui montre que la lemmatisation prend en compte la sémantique et non seulement la morphologie.

Pourquoi la lemmatisation plutôt que le stemming?

Le stemming est une méthode rapide et simple, mais souvent imprécise. En effet, Il peut produire des racines qui ne correspondent pas à des mots réels ("computing" → "comput"). La lemmatisation, par contre, est plus coûteuse en temps de calcul, mais elle offre une précision linguistique supérieure.

En pratique :
  • Stemming: utile pour des tâches où la rapidité prime sur la précision (indexation, recherche approximative...).
  • Lemmatisation: indispensable pour des applications où le sens exact des mots est crucial (analyse de sentiments, traduction automatique, systèmes de question-réponse).

Ainsi, la lemmatisation est une évolution naturelle du stemming car elle corrige les limites de cette dernière en intégrant la grammaire et le contexte.

Le dictionnaire WordNet et la notion de synset

Qu'est ce que le dictionnaire WordNet?

WordNet est une base de données lexicale conçue pour la langue anglaise. Son objectif initial était de reproduire, sous forme informatique, la manière dont les humains organisent mentalement leur vocabulaire. Développé au Laboratoire des sciences cognitives de Princeton, ce projet a été lancé au début des années 1980 par George A. Miller et son équipe de linguistes et psycholinguistes. La première version complète et accessible au public a été publiée en 1998 et depuis, WordNet a connu plusieurs mises à jour, la dernière étant la version 3.1 en 2011.

Vous pouvez consulter le site Web officiel de Wordnet à travers ce lien.

Le dictionnaire WordNet et la lemmatisation

Dans le cadre du traitement automatique du langage naturel (NLP), WordNet joue un rôle essentiel pour la lemmatisation. En effet, la lemmatisation ne se limite pas à supprimer des suffixes ou des désinences: elle nécessite une compréhension linguistique et sémantique des mots. WordNet fournit cette base en permettant aux algorithmes de relier une forme fléchie (comme running, manges, better) à son lemme correct (run, manger, good).

Ainsi, WordNet est utilisé par des bibliothèques comme NLTK ou spaCy pour améliorer la précision de la lemmatisation. Grâce à cette ressource, les systèmes NLP peuvent distinguer les usages grammaticaux et choisir la forme canonique adaptée, ce qui évite les approximations du stemming.
spaCy est une bibliothèque moderne de NLP conçue pour être rapide et adaptée aux applications industrielles. Contrairement à NLTK, qui est davantage orienté vers l’apprentissage académique et l’expérimentation, spaCy fournit des modèles linguistiques pré-entraînés et un pipeline intégré (tokenisation, normalisation, lemmatisation, reconnaissance d’entités...).

Le synset: l'élément atomique de WordNet

Un synset (abréviation de synonym set) est une unité lexicale utilisée dans WordNet pour organiser les mots. Il regroupe des termes qui partagent le même sens, en les considérant comme des synonymes dans un contexte donné. Chaque synset correspond donc à une idée ou un concept unique, indépendamment des variations morphologiques ou grammaticales.

Dans le cadre de la lemmatisation, les synsets jouent un rôle important car ils permettent de relier une forme fléchie ou dérivée d’un mot à sa forme canonique (lemme). Par exemple, "ran" et "running" peuvent être associés au lemme "run" via leur synset, ce qui garantit que l’algorithme ne se contente pas de couper des suffixes (comme le stemming), mais qu’il identifie la véritable racine linguistique en fonction du sens.

Voici un exemple de définition du mot "car" dans Wordnet à l’aide de 5 synsets:
  1. car, auto, automobile, machine, motorcar -- (4-wheeled motor vehicle; usually propelled by an internal combustion engine; he needs a car to get to work)
  2. car, railcar, railway car, railroad car -- (a wheeled vehicle adapted to the rails of railroad; three cars had jumped the rails)
  3. car, gondola -- (car suspended from an airship and carrying personnel and cargo and power plant)
  4. car, elevator car -- (where passengers ride up and down; the car was on the top floor)
  5. cable car, car -- (a conveyance for passengers or freight on a cable railway; they took a cable car to the top of the mountain)

Mise en pratique de la lemmatisation

Réduction des mots d'un texte à leur forme canonique

Je propose ce code:
import nltk
from nltk.corpus import wordnet
from nltk.stem import WordNetLemmatizer
from nltk.tokenize import word_tokenize
nltk.download('wordnet')
lemmatizer = WordNetLemmatizer()
texte = "Stemming is a text normalization technique used in natural language processing"
lemmes = [lemmatizer.lemmatize(mot,wordnet.VERB) for mot in word_tokenize(texte)]
print(lemmes)
En plus des modules usuels qu'on a déjà eu l'occasion d'utiliser auparavant, on importe aussi deux éléments essentiels de NLTK pour la lemmatisation. Le module wordnet (from nltk.corpus import wordnet) fournit la base lexicale WordNet et le module WordNetLemmatizer (from nltk.stem import WordNetLemmatizer) qui est la classe qui exploite cette ressource pour ramener les mots à leur lemme.

L'insctruction nltk.download('wordnet') sert à télécharger la ressource WordNet dans NLTK afin de l’utiliser localement pour des tâches de lemmatisation. Sans ce téléchargement préalable, le WordNetLemmatizer ne peut pas fonctionner correctement car il s’appuie sur ce dictionnaire lexical pour ramener les mots à leur forme canonique.
Le téléchargement de WordNet ne doit être effectué qu’une seule fois sur l’environnement de travail. Une fois la ressource installée, elle reste disponible pour toutes les utilisations futures.
Ensuite on initialise le lemmatiseur WordNet de NLTK (lemmatizer = WordNetLemmatizer()), puis on découpe le texte en mots avec word_tokenize avant d'applique la lemmatisation en considérant chaque token comme un verbe (wordnet.VERB), ce qui permet de ramener les formes conjuguées (is, used, processing) à leur base verbale (be, use, process) et de produire une liste de lemmes correspondant aux mots du texte.

L'exécution du code produit ce résultat:
['Stemming', 'be', 'a', 'text', 'normalization', 'technique', 'use', 'in', 'natural', 'language', 'process']
Dans l'exemple, seuls les verbes ont été ramenés à leur forme canonique. Si l’on souhaite normaliser d’autres classes grammaticales comme les noms, il suffit de préciser wordnet.NOUN au lieu de wordnet.VERB lors de la lemmatisation.
Il existe aussi wordnet.ADJ pour les adjectifs et wordnet.ADV pour les adverbes. Ainsi, on peut adapter la lemmatisation à différentes classes grammaticales. Toutefois, si l’on veut lemmatiser automatiquement tous les mots selon leur vraie catégorie (nom, verbe, adjectif, adverbe…), il est nécessaire de recourir à une autre technique appelée PoS Tagging (Part-of-Speech Tagging) que nous aborderons plus loin dans ce cours.