Introduction au NLP#
Quâest-ce que le NLP ?#
Le NLP, ou traitement automatique du langage naturel (Natural Language Processing), est un domaine clĂ© en machine learning. Il couvre diverses tĂąches liĂ©es au texte, comme la traduction, la comprĂ©hension de texte, les systĂšmes de questions/rĂ©ponses, et bien dâautres.

Figure extraite du blogpost.
Le NLP se distingue dans le deep learning car il traite des données discrÚtes, généralement lues de gauche à droite.
Contenu du cours#
Ce cours se concentre principalement sur la prédiction du prochain token, en commençant par la prédiction du prochain caractÚre pour simplifier. Ce problÚme est à la base des modÚles de langage (comme GPT, Llama, Gemini, etc.).
Lâobjectif est de prĂ©dire le mot suivant en fonction des mots prĂ©cĂ©dents, avec un contexte plus ou moins Ă©tendu selon la mĂ©thode et la puissance du modĂšle. Le contexte est dĂ©fini par le nombre de tokens (ou mots) utilisĂ©s pour cette prĂ©diction.
Quâest-ce quâun token ? Un token est un Ă©lĂ©ment dâentrĂ©e du modĂšle. Il peut sâagir dâun caractĂšre, dâun groupe de caractĂšres ou dâun mot, converti en vecteur avant dâĂȘtre fourni en entrĂ©e au modĂšle.
Inspirations pour le cours#
Ce cours sâinspire largement de la sĂ©rie de vidĂ©os dâAndrej Karpathy (lien du dĂ©pĂŽt GitHub), notamment des cours âbuilding makemoreâ. Nous proposons ici une version Ă©crite et en français de ces enseignements. Je vous encourage Ă regarder cette sĂ©rie de vidĂ©os, qui est lâun des meilleurs cours sur les modĂšles de langage disponibles Ă ce jour (et gratuit).
Nous structurerons ce cours en plusieurs notebooks, avec des modĂšles de difficultĂ© croissante. LâidĂ©e est de comprendre les limites de chaque modĂšle avant de passer Ă un modĂšle plus complexe.
Voici le plan du cours :
Cours 1 : Bigramme (méthode classique et réseaux de neurones)
Cours 2 : Prédiction du prochain mot avec un réseau fully connected
Cours 3 : WaveNet (architecture hiérarchique)
Cours 4 : RNN (réseaux de neurones récurrents avec architecture séquentielle)
Cours 5 : LSTM (rĂ©seau rĂ©current âamĂ©liorĂ©â)
Note : Le cours 7 sur les transformers aborde le mĂȘme problĂšme de gĂ©nĂ©ration du prochain caractĂšre, mais avec une architecture transformer et sur un dataset plus complexe.
Récupération du dataset prenom.txt#
Dans ce cours, nous utilisons un dataset de prĂ©noms contenant environ 30 000 des prĂ©noms les plus courants en France depuis 1900 (donnĂ©es de lâINSEE). Le fichier prenoms.txt est dĂ©jĂ prĂ©sent dans le dossier, il nâest donc pas nĂ©cessaire dâexĂ©cuter le code ci-dessous. Si vous souhaitez le faire, vous devez dâabord tĂ©lĂ©charger le fichier nat2022.csv sur le site de lâINSEE.
import pandas as pd
# Chargement du fichier CSV
df = pd.read_csv('nat2022.csv', sep=';')
# On enlÚve la catégorie '_PRENOMS_RARES' qui regroupe les prénoms peu fréquents
df_filtered = df[df['preusuel'] != '_PRENOMS_RARES']
# Pour compter, on fait la somme des nombres de naissances pour chaque prénom
df_grouped = df_filtered.groupby('preusuel', as_index=False)['nombre'].sum()
# On va trier les prénoms par popularité
df_sorted = df_grouped.sort_values(by='nombre', ascending=False)
# On extrait les 30 000 prénoms les plus populaires
top_prenoms = df_sorted['preusuel'].head(30000).values
with open('prenoms.txt', 'w', encoding='utf-8') as file:
for prenom in top_prenoms:
file.write(f"{prenom}\n")
Dans le notebook suivant, nous commencerons par analyser le dataset (caractĂšres distincts, etc.).