Sac 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 :
12345678910111213from 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())
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().
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 :
1234567891011from 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())
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 :
12345678910111213from 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)
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 :
12345678910111213from 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}")
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.
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
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
Sac 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 :
12345678910111213from 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())
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().
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 :
1234567891011from 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())
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 :
12345678910111213from 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)
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 :
12345678910111213from 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}")
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.
Merci pour vos commentaires !