Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Sac de Mots | Modèles de Texte de Base
Introduction au NLP
course content

Contenu du cours

Introduction au NLP

Introduction au NLP

1. Fondamentaux du Prétraitement de Texte
2. Racine et Lemmatisation
3. Modèles de Texte de Base
4. Incorporations de Mots

book
Sac de Mots

Comprendre le Modèle BoW

Comme nous l'avons déjà mentionné dans le chapitre précédent, le modèle bag of words (BoW) représente les documents sous forme de vecteurs où chaque dimension correspond à un mot unique. Chaque dimension peut représenter soit la présence d'un mot dans le document (1 si présent, 0 si absent) soit sa fréquence (nombre de mots). Par conséquent, les modèles BoW peuvent être soit binaires soit basés sur la fréquence.

Voyons comment la même phrase (document) est représentée par chaque type :

Comme vous pouvez le voir, un modèle binaire représente ce document sous la forme du vecteur [1, 1, 1], tandis que les modèles basés sur la fréquence le représentent sous la forme [2, 1, 2], en tenant compte de la fréquence des mots.

Implémentation de BoW

Plongeons maintenant dans l'implémentation du modèle BoW en Python. L'implémentation du modèle BoW peut être un processus simple, surtout avec l'aide de la bibliothèque sklearn (Scikit-learn) et de sa classe CountVectorizer.

Sans plus tarder, passons à un exemple de sac de mots binaire :

12345678910111213
from sklearn.feature_extraction.text import CountVectorizer corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] # Create a binary Bag of Words model vectorizer = CountVectorizer(binary=True) # Generate a BoW matrix bow_matrix = vectorizer.fit_transform(corpus) # Convert a sparse matrix into a dense array print(bow_matrix.toarray())
copy

Chaque ligne de la matrice correspond à un document, et chaque colonne à un token (mot). Afin de la représenter visuellement, nous avons converti cette matrice creuse en un tableau 2D dense en utilisant la méthode .toarray().

Pour créer un modèle de sac de mots basé sur la fréquence, il suffit de supprimer le paramètre binary=True puisque sa valeur par défaut est False:

1234567891011
from sklearn.feature_extraction.text import CountVectorizer corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] # Create a frequency-based Bag of Words model vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) print(bow_matrix.toarray())
copy

Conversion de la Matrice en DataFrame

Il peut être très pratique de convertir la matrice de sac de mots résultante en un pandas DataFrame. De plus, l'instance CountVectorizer offre la méthode get_feature_names_out(), qui récupère un tableau de mots uniques (noms de caractéristiques) utilisés dans le modèle. Ces noms de caractéristiques peuvent être définis comme les colonnes du DataFrame résultant, voici un exemple :

12345678910111213
from sklearn.feature_extraction.text import CountVectorizer import pandas as pd corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) # Convert a sparse matrix to a DataFrame bow_df = pd.DataFrame(bow_matrix.toarray(), columns=vectorizer.get_feature_names_out()) print(bow_df)
copy

Avec cette représentation, nous pouvons désormais accéder facilement non seulement au vecteur d'un document particulier, mais aussi au vecteur d'un mot particulier :

12345678910111213
from sklearn.feature_extraction.text import CountVectorizer import pandas as pd corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) bow_df = pd.DataFrame(bow_matrix.toarray(), columns=vectorizer.get_feature_names_out()) # Print the vector for 'global' as a NumPy array print(f"Vector for the word 'global': {bow_df['global'].values}")
copy

Puisque chaque mot unique correspond à une colonne, accéder à un vecteur de mot est aussi simple que d'accéder à une colonne dans le DataFrame en spécifiant le mot (par exemple, 'global'). Nous utilisons également l'attribut values pour obtenir un tableau au lieu d'une Series comme résultat.

question-icon

Étant donné une matrice BoW, que représentent les différents composants de cette matrice ?

Rows:
Columns:

A particular element of the matrix:

Click or drag`n`drop items and fill in the blanks

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 3
We're sorry to hear that something went wrong. What happened?
some-alt