Bag-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 binair of 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 een frequentie-gebaseerd 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:
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())
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 spaarzame matrix omgezet in een dichte 2D-array met behulp van de .toarray()-methode.
Een spaarzame 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 hiervan False is:
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())
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:
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)
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:
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}")
Aangezien elk uniek woord overeenkomt met een kolom, is het benaderen van een woordvector eenvoudigweg het benaderen 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.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Awesome!
Completion rate improved to 3.45
Bag-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 binair of 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 een frequentie-gebaseerd 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:
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())
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 spaarzame matrix omgezet in een dichte 2D-array met behulp van de .toarray()-methode.
Een spaarzame 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 hiervan False is:
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())
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:
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)
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:
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}")
Aangezien elk uniek woord overeenkomt met een kolom, is het benaderen van een woordvector eenvoudigweg het benaderen 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.
Bedankt voor je feedback!