Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Pose af Ord | Grundlæggende Tekstmodeller
Introduktion til NLP

bookPose 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:

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 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.

Note
Læs Mere

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:

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 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:

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 repræsentation kan vi nu nemt tilgå 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

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.

question-icon

Givet en BoW-matrix, hvad repræsenterer de forskellige komponenter i denne matrix?

Rows:
Columns:

A particular element of the matrix:

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

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 3

Spørg AI

expand

Spørg AI

ChatGPT

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

bookPose 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:

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 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.

Note
Læs Mere

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:

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 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:

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 repræsentation kan vi nu nemt tilgå 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

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.

question-icon

Givet en BoW-matrix, hvad repræsenterer de forskellige komponenter i denne matrix?

Rows:
Columns:

A particular element of the matrix:

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

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 3
some-alt