Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Bag of Words | Seksjon
Practice
Projects
Quizzes & Challenges
Quizer
Challenges
/
Naturlig Språkprosessering

bookBag of Words

Sveip for å vise menyen

Bag of words (BoW)-modellen representerer dokumenter som vektorer der hver dimensjon tilsvarer et unikt ord. Hver dimensjon kan enten representere tilstedeværelse av et ord i dokumentet (1 hvis tilstede, 0 hvis fraværende) eller dets frekvens (antall forekomster). Derfor kan BoW-modeller være enten binære eller frekvensbaserte.

Her vises hvordan den samme setningen (dokumentet) representeres av hver type:

En binær modell representerer dette dokumentet som vektoren [1, 1, 1], mens en frekvensbasert modell representerer det som [2, 1, 2], hvor ordets frekvens tas med i betraktningen.

BoW-implementering

Implementering av BoW-modellen er en enkel prosess, spesielt ved bruk av sklearn (scikit-learn)-biblioteket og klassen CountVectorizer.

Her er en implementasjon av binær bag of words-modell:

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

Hver rad i matrisen tilsvarer et dokument, og hver kolonne til et token (ord). For å kunne vise dette visuelt, konverterte vi denne spredte matrisen til et tett 2D-array ved å bruke .toarray()-metoden.

Note
Les mer

En spredt matrise er en matrise der de fleste elementene er null. Den brukes til effektiv representasjon og behandling av data med høy andel nullverdier, og sparer minne og beregningsressurser ved kun å lagre de ikke-nulle elementene.

For å lage en frekvensbasert bag of words-modell, er det bare å fjerne parameteren binary=True siden standardverdien for denne er 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

Konvertering av matrisen til en DataFrame

Det kan være svært praktisk å konvertere den resulterende bag of words-matrisen til en pandas DataFrame. I tillegg tilbyr CountVectorizer-instansen metoden get_feature_names_out(), som henter ut et array med unike ord (funksjonsnavn) brukt i modellen. Disse funksjonsnavnene kan deretter brukes som kolonner i 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

Med denne representasjonen kan vi nå enkelt få tilgang til både vektoren for et bestemt dokument og vektoren for et bestemt ord:

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

Siden hvert unike ord tilsvarer en kolonne, er det like enkelt å få tilgang til en ordvektor som å få tilgang til en kolonne i DataFrame ved å spesifisere ordet (for eksempel, 'global'). Vi bruker også attributtet values for å hente en matrise i stedet for en Series som resultat.

question-icon

Gitt en BoW-matrise, hva representerer de ulike komponentene i denne matrisen?

Rows:
Columns:

A particular element of the matrix:

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

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 1. Kapittel 20

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Seksjon 1. Kapittel 20
some-alt