Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Bag-of-Words | Basis Tekstmodellen
Introductie tot NLP

bookBag-of-Words

Inzicht in het BoW-model

Het bag of words (BoW) model stelt documenten voor als vectoren waarbij elke dimensie overeenkomt met een uniek woord. Elke dimensie kan ofwel de aanwezigheid van een woord binnen het document weergeven (1 indien aanwezig, 0 indien afwezig) of de frequentie (aantal keren dat het woord voorkomt). BoW-modellen kunnen dus zowel binair als frequentie-gebaseerd zijn.

Hier volgt een voorbeeld van hoe dezelfde zin (document) door elk type wordt weergegeven:

Een binair model stelt dit document voor als de vector [1, 1, 1], terwijl het frequentie-gebaseerde model het weergeeft als [2, 1, 2], waarbij rekening wordt gehouden met de woordfrequentie.

BoW-implementatie

Het implementeren van het BoW-model is een eenvoudig proces, vooral met behulp van de sklearn (scikit-learn) bibliotheek en de CountVectorizer klasse.

Hier volgt een implementatie van het binaire bag of words-model:

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

Elke rij in de matrix komt overeen met een document en elke kolom met een token (woord). Om dit visueel weer te geven, hebben we deze sparse matrix omgezet in een dense 2D-array met behulp van de .toarray()-methode.

Note
Meer leren

Een sparse matrix is een matrix waarin de meeste elementen nul zijn. Deze wordt gebruikt om efficiënt gegevens met veel nulwaarden weer te geven en te verwerken, waarbij geheugen en rekenkracht worden bespaard door alleen de niet-nul elementen op te slaan.

Om een frequentiegebaseerd bag-of-words-model te creëren, hoeft enkel de parameter binary=True verwijderd te worden, aangezien de standaardwaarde hiervoor False is:

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

De matrix omzetten naar een DataFrame

Het kan erg handig zijn om de resulterende bag-of-words-matrix om te zetten naar een pandas DataFrame. Daarnaast biedt de CountVectorizer-instantie de methode get_feature_names_out(), waarmee een array van unieke woorden (feature names) die in het model zijn gebruikt, wordt opgehaald. Deze feature names kunnen vervolgens als kolommen van de DataFrame worden gebruikt:

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

Met deze representatie is het nu eenvoudig mogelijk om niet alleen de vector voor een specifiek document te benaderen, maar ook de vector van een specifiek woord:

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

Aangezien elk uniek woord overeenkomt met een kolom, is het opvragen van een woordvector eenvoudigweg het opvragen van een kolom in de DataFrame door het woord te specificeren (bijvoorbeeld 'global'). We gebruiken ook het values attribuut om een array te verkrijgen in plaats van een Series als resultaat.

question-icon

Gegeven een BoW-matrix, wat stellen de verschillende componenten van deze matrix voor?

Rows:
Columns:

A particular element of the matrix:

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

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 3

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

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

bookBag-of-Words

Veeg om het menu te tonen

Inzicht in het BoW-model

Het bag of words (BoW) model stelt documenten voor als vectoren waarbij elke dimensie overeenkomt met een uniek woord. Elke dimensie kan ofwel de aanwezigheid van een woord binnen het document weergeven (1 indien aanwezig, 0 indien afwezig) of de frequentie (aantal keren dat het woord voorkomt). BoW-modellen kunnen dus zowel binair als frequentie-gebaseerd zijn.

Hier volgt een voorbeeld van hoe dezelfde zin (document) door elk type wordt weergegeven:

Een binair model stelt dit document voor als de vector [1, 1, 1], terwijl het frequentie-gebaseerde model het weergeeft als [2, 1, 2], waarbij rekening wordt gehouden met de woordfrequentie.

BoW-implementatie

Het implementeren van het BoW-model is een eenvoudig proces, vooral met behulp van de sklearn (scikit-learn) bibliotheek en de CountVectorizer klasse.

Hier volgt een implementatie van het binaire bag of words-model:

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

Elke rij in de matrix komt overeen met een document en elke kolom met een token (woord). Om dit visueel weer te geven, hebben we deze sparse matrix omgezet in een dense 2D-array met behulp van de .toarray()-methode.

Note
Meer leren

Een sparse matrix is een matrix waarin de meeste elementen nul zijn. Deze wordt gebruikt om efficiënt gegevens met veel nulwaarden weer te geven en te verwerken, waarbij geheugen en rekenkracht worden bespaard door alleen de niet-nul elementen op te slaan.

Om een frequentiegebaseerd bag-of-words-model te creëren, hoeft enkel de parameter binary=True verwijderd te worden, aangezien de standaardwaarde hiervoor False is:

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

De matrix omzetten naar een DataFrame

Het kan erg handig zijn om de resulterende bag-of-words-matrix om te zetten naar een pandas DataFrame. Daarnaast biedt de CountVectorizer-instantie de methode get_feature_names_out(), waarmee een array van unieke woorden (feature names) die in het model zijn gebruikt, wordt opgehaald. Deze feature names kunnen vervolgens als kolommen van de DataFrame worden gebruikt:

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

Met deze representatie is het nu eenvoudig mogelijk om niet alleen de vector voor een specifiek document te benaderen, maar ook de vector van een specifiek woord:

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

Aangezien elk uniek woord overeenkomt met een kolom, is het opvragen van een woordvector eenvoudigweg het opvragen van een kolom in de DataFrame door het woord te specificeren (bijvoorbeeld 'global'). We gebruiken ook het values attribuut om een array te verkrijgen in plaats van een Series als resultaat.

question-icon

Gegeven een BoW-matrix, wat stellen de verschillende componenten van deze matrix voor?

Rows:
Columns:

A particular element of the matrix:

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

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 3
some-alt