À l'occasion de la Semaine des langues, nous avons exploré comment les ordinateurs « lisent » le langage humain. Voici le déroulé de la séance, pour celles et ceux qui veulent rejouer les expériences à la maison.
Modules Python utilisés
spacy— traitement du langage naturel (tokenisation, lemmatisation).deep-translator— traduction via plusieurs services en ligne.wordcloud— génération de nuages de mots.matplotlib— affichage du nuage.
Comparer des chaînes : un mot de passe trop simple
L'opération la plus élémentaire sur des chaînes consiste à les comparer.
mot_passe = "chateau"
reponse = input("Quel est le mot de passe ? ")
if reponse == mot_passe:
print("Vous pouvez accéder aux documents secrets.")
else:
print("Mot de passe incorrect.")
"Chateau", " chateau",
"chateau ". Discutez : faut-il être tolérant ? À quel prix ?Pour aller plus loin, le projet Gandalf propose un chatbot qu'il faut convaincre de révéler un mot de passe — une excellente introduction aux failles des modèles de langage.
Le site The Password Game ludifie le choix d'un mot de passe en empilant des règles absurdes. Sous le capot, ces règles s'appuient sur des expressions régulières (regex101.com permet de les tester).
Traduire un texte en quelques lignes
from deep_translator import GoogleTranslator
texte = "La Tour Eiffel, située sur le Champ de Mars à Paris, est l'une des structures les plus célèbres du monde."
traduction = GoogleTranslator(source='auto', target='en').translate(texte)
print(traduction)
Découper un texte : la tokenisation
Avant tout traitement, on découpe le texte en unités appelées tokens. Un token est généralement un mot, parfois un signe de ponctuation, plus rarement une expression complète.
import spacy
nlp = spacy.load("fr_core_news_sm")
doc = nlp("Apple a annoncé le nouvel iPhone à San Francisco.")
tokens = [token.text for token in doc]
print(tokens)
Réduire un mot à sa forme canonique : la lemmatisation
En français, un même mot prend de nombreuses formes : mange, mangeait, mangeront… Le lemme est la forme « de référence » (ici : manger). Les moteurs de recherche s'appuient sur les lemmes pour retrouver tous les documents pertinents quelle que soit la flexion.
import spacy
nlp = spacy.load("fr_core_news_sm")
doc = nlp("Les enfants jouaient à la balle dans le parc.")
lemmes = [token.lemma_ for token in doc]
print(lemmes)
Mini moteur de recherche par lemmes
import spacy
nlp = spacy.load("fr_core_news_sm")
documents = [
"La chatte mange des croquettes.",
"Elle aime marcher dans le parc.",
"Les enfants jouaient à la balle.",
"J'aime lire des livres sur la nature."
]
def lemmatiser(texte: str) -> str:
return ' '.join(token.lemma_ for token in nlp(texte))
lemm_docs = [lemmatiser(d) for d in documents]
requete = lemmatiser(input("Entrez votre terme de recherche : "))
for original, lemm in zip(documents, lemm_docs):
if requete in lemm:
print(original)
Nuage de mots à partir des lemmes
import spacy
from wordcloud import WordCloud
import matplotlib.pyplot as plt
nlp = spacy.load("fr_core_news_sm")
texte = "..." # remplacez par un texte conséquent
doc = nlp(texte)
# On retire les mots vides (le, la, et, etc.)
lemmes = [token.lemma_ for token in doc if not token.is_stop and token.is_alpha]
nuage = WordCloud(width=800, height=400, background_color='white').generate(' '.join(lemmes))
plt.figure(figsize=(10, 5))
plt.imshow(nuage, interpolation='bilinear')
plt.axis('off')
plt.show()
Pour aller plus loin
Ces techniques de NLP (Natural Language Processing) sous-tendent une grande partie des outils que vous utilisez au quotidien : moteurs de recherche, correcteurs, assistants vocaux, traducteurs automatiques. Et elles forment l'ossature classique sur laquelle les grands modèles de langage (LLM) sont venus se greffer plus récemment.