Pose af Ord
Forståelse af BoW-modellen
Bag of words (BoW) modellen repræsenterer dokumenter som vektorer, hvor hver dimension svarer til et unikt ord. Hver dimension kan enten repræsentere tilstedeværelsen af et ord i dokumentet (1 hvis til stede, 0 hvis fraværende) eller dets frekvens (ordtælling). Derfor kan BoW-modeller være enten binære eller frekvensbaserede.
Her ses, hvordan den samme sætning (dokument) repræsenteres af hver type:
En binær model repræsenterer dette dokument som vektoren [1, 1, 1], mens en frekvensbaseret model repræsenterer det som [2, 1, 2], hvor ordfrekvensen tages i betragtning.
BoW-implementering
Implementering af BoW-modellen er en ligetil proces, især med hjælp fra sklearn (scikit-learn) biblioteket og dets CountVectorizer-klasse.
Her er en implementering af den binære 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())
Hver række i matricen svarer til et dokument, og hver kolonne til et token (ord). For at kunne repræsentere det visuelt, konverterede vi denne sparse matrix til et tæt 2D-array ved hjælp af .toarray()-metoden.
En sparse matrix er en matrix, hvor de fleste elementer er nul. Den bruges til effektivt at repræsentere og behandle data med et højt antal nulværdier, hvilket sparer hukommelse og beregningsressourcer ved kun at gemme de ikke-nul elementer.
For at oprette en frekvensbaseret bag of words-model, skal vi blot fjerne parameteren binary=True, da standardværdien for den er 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())
Konvertering af matricen til en DataFrame
Det kan være praktisk at konvertere den resulterende bag of words-matrix til en pandas DataFrame. Desuden tilbyder CountVectorizer-instansen metoden get_feature_names_out(), som henter et array af unikke ord (feature names), der anvendes i modellen. Disse feature names kan derefter bruges som kolonner i 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)
Med denne repræsentation kan vi nu nemt tilgå både vektoren for et bestemt dokument og vektoren for et bestemt ord:
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}")
Da hvert unikt ord svarer til en kolonne, er adgang til et ordvektor så simpelt som at tilgå en kolonne i DataFrame ved at angive ordet (for eksempel, 'global'). Vi bruger også attributten values for at opnå et array i stedet for en Series som resultat.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Awesome!
Completion rate improved to 3.45
Pose af Ord
Stryg for at vise menuen
Forståelse af BoW-modellen
Bag of words (BoW) modellen repræsenterer dokumenter som vektorer, hvor hver dimension svarer til et unikt ord. Hver dimension kan enten repræsentere tilstedeværelsen af et ord i dokumentet (1 hvis til stede, 0 hvis fraværende) eller dets frekvens (ordtælling). Derfor kan BoW-modeller være enten binære eller frekvensbaserede.
Her ses, hvordan den samme sætning (dokument) repræsenteres af hver type:
En binær model repræsenterer dette dokument som vektoren [1, 1, 1], mens en frekvensbaseret model repræsenterer det som [2, 1, 2], hvor ordfrekvensen tages i betragtning.
BoW-implementering
Implementering af BoW-modellen er en ligetil proces, især med hjælp fra sklearn (scikit-learn) biblioteket og dets CountVectorizer-klasse.
Her er en implementering af den binære 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())
Hver række i matricen svarer til et dokument, og hver kolonne til et token (ord). For at kunne repræsentere det visuelt, konverterede vi denne sparse matrix til et tæt 2D-array ved hjælp af .toarray()-metoden.
En sparse matrix er en matrix, hvor de fleste elementer er nul. Den bruges til effektivt at repræsentere og behandle data med et højt antal nulværdier, hvilket sparer hukommelse og beregningsressourcer ved kun at gemme de ikke-nul elementer.
For at oprette en frekvensbaseret bag of words-model, skal vi blot fjerne parameteren binary=True, da standardværdien for den er 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())
Konvertering af matricen til en DataFrame
Det kan være praktisk at konvertere den resulterende bag of words-matrix til en pandas DataFrame. Desuden tilbyder CountVectorizer-instansen metoden get_feature_names_out(), som henter et array af unikke ord (feature names), der anvendes i modellen. Disse feature names kan derefter bruges som kolonner i 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)
Med denne repræsentation kan vi nu nemt tilgå både vektoren for et bestemt dokument og vektoren for et bestemt ord:
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}")
Da hvert unikt ord svarer til en kolonne, er adgang til et ordvektor så simpelt som at tilgå en kolonne i DataFrame ved at angive ordet (for eksempel, 'global'). Vi bruger også attributten values for at opnå et array i stedet for en Series som resultat.
Tak for dine kommentarer!