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.

NLP

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.).