Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Påse med Ord | Grundläggande Textmodeller
Introduktion till NLP

bookPåse med Ord

Förståelse av BoW-modellen

Bag of words (BoW)-modellen representerar dokument som vektorer där varje dimension motsvarar ett unikt ord. Varje dimension kan antingen representera förekomsten av ett ord i dokumentet (1 om det finns, 0 om det saknas) eller dess frekvens (antal förekomster). Därför kan BoW-modeller vara antingen binära eller frekvensbaserade.

Låt oss titta på hur samma mening (dokument) representeras av varje typ:

En binär modell representerar detta dokument som vektorn [1, 1, 1], medan en frekvensbaserad modell representerar det som [2, 1, 2], där ordens frekvens tas med i beräkningen.

BoW-implementering

Att implementera BoW-modellen är en enkel process, särskilt med hjälp av biblioteket sklearn (scikit-learn) och dess klass CountVectorizer.

Här är en implementering av den binära bag of words-modellen:

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

Varje rad i matrisen motsvarar ett dokument, och varje kolumn motsvarar ett token (ord). För att kunna visualisera detta omvandlade vi denna glesa matris till en tät tvådimensionell array med hjälp av metoden .toarray().

Note
Läs mer

En gles matris är en matris där de flesta elementen är noll. Den används för att effektivt representera och bearbeta data med en hög andel nollvärden, vilket sparar minne och beräkningsresurser genom att endast lagra de icke-noll elementen.

För att skapa en frekvensbaserad bag-of-words-modell behöver vi bara ta bort parametern binary=True eftersom standardvärdet är 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

Omvandla matrisen till en DataFrame

Det kan vara mycket praktiskt att omvandla den resulterande bag-of-words-matrisen till en pandas DataFrame. Dessutom erbjuder CountVectorizer-instansen metoden get_feature_names_out(), som hämtar en array av unika ord (funktionsnamn) som används i modellen. Dessa funktionsnamn kan sedan användas som kolumner 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 denna representation kan vi nu enkelt komma åt både vektorn för ett specifikt dokument och vektorn för ett specifikt 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

Eftersom varje unikt ord motsvarar en kolumn, är åtkomst till ett ordvektor lika enkelt som att komma åt en kolumn i DataFrame genom att ange ordet (till exempel 'global'). Vi använder även attributet values för att erhålla en array istället för en Series som resultat.

question-icon

Givet en BoW-matris, vad representerar de olika komponenterna i denna matris?

Rows:
Columns:

A particular element of the matrix:

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

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 3

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Awesome!

Completion rate improved to 3.45

bookPåse med Ord

Svep för att visa menyn

Förståelse av BoW-modellen

Bag of words (BoW)-modellen representerar dokument som vektorer där varje dimension motsvarar ett unikt ord. Varje dimension kan antingen representera förekomsten av ett ord i dokumentet (1 om det finns, 0 om det saknas) eller dess frekvens (antal förekomster). Därför kan BoW-modeller vara antingen binära eller frekvensbaserade.

Låt oss titta på hur samma mening (dokument) representeras av varje typ:

En binär modell representerar detta dokument som vektorn [1, 1, 1], medan en frekvensbaserad modell representerar det som [2, 1, 2], där ordens frekvens tas med i beräkningen.

BoW-implementering

Att implementera BoW-modellen är en enkel process, särskilt med hjälp av biblioteket sklearn (scikit-learn) och dess klass CountVectorizer.

Här är en implementering av den binära bag of words-modellen:

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

Varje rad i matrisen motsvarar ett dokument, och varje kolumn motsvarar ett token (ord). För att kunna visualisera detta omvandlade vi denna glesa matris till en tät tvådimensionell array med hjälp av metoden .toarray().

Note
Läs mer

En gles matris är en matris där de flesta elementen är noll. Den används för att effektivt representera och bearbeta data med en hög andel nollvärden, vilket sparar minne och beräkningsresurser genom att endast lagra de icke-noll elementen.

För att skapa en frekvensbaserad bag-of-words-modell behöver vi bara ta bort parametern binary=True eftersom standardvärdet är 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

Omvandla matrisen till en DataFrame

Det kan vara mycket praktiskt att omvandla den resulterande bag-of-words-matrisen till en pandas DataFrame. Dessutom erbjuder CountVectorizer-instansen metoden get_feature_names_out(), som hämtar en array av unika ord (funktionsnamn) som används i modellen. Dessa funktionsnamn kan sedan användas som kolumner 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 denna representation kan vi nu enkelt komma åt både vektorn för ett specifikt dokument och vektorn för ett specifikt 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

Eftersom varje unikt ord motsvarar en kolumn, är åtkomst till ett ordvektor lika enkelt som att komma åt en kolumn i DataFrame genom att ange ordet (till exempel 'global'). Vi använder även attributet values för att erhålla en array istället för en Series som resultat.

question-icon

Givet en BoW-matris, vad representerar de olika komponenterna i denna matris?

Rows:
Columns:

A particular element of the matrix:

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

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 3
some-alt