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 TALN

bookSac de Mots

Compréhension du modèle BoW

Le modèle sac de mots (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 d’occurrences du mot). Ainsi, les modèles BoW peuvent être soit binaires, soit basés sur la fréquence.

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

Un modèle binaire représente ce document par le vecteur [1, 1, 1], tandis qu’un modèle basé sur la fréquence le représente par [2, 1, 2], en tenant compte de la fréquence des mots.

Implémentation du BoW

L’implémentation du modèle BoW est un processus simple, notamment grâce à la bibliothèque sklearn (scikit-learn) et à sa classe CountVectorizer.

Voici une implémentation du modèle 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 jeton (mot). Afin de la représenter visuellement, nous avons converti cette matrice creuse en un tableau 2D dense à l'aide de la méthode .toarray().

Note
Approfondir

Une matrice creuse est une matrice dans laquelle la plupart des éléments sont nuls. Elle est utilisée pour représenter et traiter efficacement des données comportant un grand nombre de valeurs nulles, en économisant de la mémoire et des ressources de calcul en ne stockant que les éléments non nuls.

Pour créer un modèle 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 sac de mots obtenue en un DataFrame pandas. De plus, l'instance CountVectorizer propose la méthode get_feature_names_out(), qui permet de récupérer un tableau des mots uniques (noms des caractéristiques) utilisés dans le modèle. Ces noms de caractéristiques peuvent ensuite être utilisés comme colonnes du DataFrame :

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, il est désormais possible d’accéder facilement non seulement au vecteur d’un document particulier, mais aussi au vecteur d’un mot spécifique :

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 mots revient simplement à accéder à une colonne dans le DataFrame en spécifiant le mot (par exemple, 'global'). On utilise également l'attribut values pour obtenir un tableau au lieu d'une Series en 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

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Suggested prompts:

Can you explain the difference between binary and frequency-based BoW models in more detail?

How does the CountVectorizer handle punctuation and capitalization?

Can you show how to access the vector for a different word in the DataFrame?

Awesome!

Completion rate improved to 3.45

bookSac de Mots

Glissez pour afficher le menu

Compréhension du modèle BoW

Le modèle sac de mots (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 d’occurrences du mot). Ainsi, les modèles BoW peuvent être soit binaires, soit basés sur la fréquence.

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

Un modèle binaire représente ce document par le vecteur [1, 1, 1], tandis qu’un modèle basé sur la fréquence le représente par [2, 1, 2], en tenant compte de la fréquence des mots.

Implémentation du BoW

L’implémentation du modèle BoW est un processus simple, notamment grâce à la bibliothèque sklearn (scikit-learn) et à sa classe CountVectorizer.

Voici une implémentation du modèle 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 jeton (mot). Afin de la représenter visuellement, nous avons converti cette matrice creuse en un tableau 2D dense à l'aide de la méthode .toarray().

Note
Approfondir

Une matrice creuse est une matrice dans laquelle la plupart des éléments sont nuls. Elle est utilisée pour représenter et traiter efficacement des données comportant un grand nombre de valeurs nulles, en économisant de la mémoire et des ressources de calcul en ne stockant que les éléments non nuls.

Pour créer un modèle 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 sac de mots obtenue en un DataFrame pandas. De plus, l'instance CountVectorizer propose la méthode get_feature_names_out(), qui permet de récupérer un tableau des mots uniques (noms des caractéristiques) utilisés dans le modèle. Ces noms de caractéristiques peuvent ensuite être utilisés comme colonnes du DataFrame :

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, il est désormais possible d’accéder facilement non seulement au vecteur d’un document particulier, mais aussi au vecteur d’un mot spécifique :

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 mots revient simplement à accéder à une colonne dans le DataFrame en spécifiant le mot (par exemple, 'global'). On utilise également l'attribut values pour obtenir un tableau au lieu d'une Series en 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
some-alt