Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Bag-of-Words-Modell | Grundlegende Textmodelle
Einführung in NLP

bookBag-of-Words-Modell

Verständnis des BoW-Modells

Das Bag-of-Words (BoW) Modell stellt Dokumente als Vektoren dar, wobei jede Dimension einem einzigartigen Wort entspricht. Jede Dimension kann entweder das Vorhandensein eines Wortes im Dokument (1 falls vorhanden, 0 falls nicht vorhanden) oder dessen Häufigkeit (Wortanzahl) repräsentieren. Daher können BoW-Modelle entweder binär oder häufigkeitsbasiert sein.

Im Folgenden wird gezeigt, wie derselbe Satz (das Dokument) von jedem Typ dargestellt wird:

Ein binäres Modell stellt dieses Dokument als den Vektor [1, 1, 1] dar, während das häufigkeitsbasierte Modell es als [2, 1, 2] darstellt, wobei die Worthäufigkeit berücksichtigt wird.

BoW-Implementierung

Die Implementierung des BoW-Modells ist ein unkomplizierter Prozess, insbesondere mit Hilfe der sklearn (scikit-learn) Bibliothek und ihrer CountVectorizer-Klasse.

Hier ist eine Implementierung des binären Bag-of-Words-Modells:

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

Jede Zeile in der Matrix entspricht einem Dokument, und jede Spalte einem Token (Wort). Um dies visuell darzustellen, wurde diese Sparse-Matrix mit der Methode .toarray() in ein dichtes 2D-Array umgewandelt.

Note
Mehr erfahren

Eine Sparse-Matrix ist eine Matrix, in der die meisten Elemente den Wert Null haben. Sie dient der effizienten Darstellung und Verarbeitung von Daten mit einem hohen Anteil an Nullwerten, indem nur die Nicht-Null-Elemente gespeichert werden. Dadurch werden Speicher und Rechenressourcen eingespart.

Um ein frequenzbasiertes Bag-of-Words-Modell zu erstellen, muss lediglich der Parameter binary=True entfernt werden, da der Standardwert hierfür False ist:

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

Umwandlung der Matrix in ein DataFrame

Es ist oft hilfreich, die resultierende Bag-of-Words-Matrix in ein pandas-DataFrame umzuwandeln. Darüber hinaus bietet die CountVectorizer-Instanz die Methode get_feature_names_out(), mit der ein Array von einzigartigen Wörtern (Feature-Namen), die im Modell verwendet werden, abgerufen werden kann. Diese Feature-Namen können dann als Spalten des DataFrame verwendet werden:

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

Mit dieser Darstellung kann nun nicht nur der Vektor für ein bestimmtes Dokument, sondern auch der Vektor für ein bestimmtes Wort einfach abgerufen werden:

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 jedes einzigartige Wort einer Spalte entspricht, ist der Zugriff auf einen Wortvektor so einfach wie der Zugriff auf eine Spalte im DataFrame, indem das Wort angegeben wird (zum Beispiel 'global'). Zusätzlich verwenden wir das Attribut values, um ein Array anstelle einer Series als Ergebnis zu erhalten.

question-icon

Was stellen die verschiedenen Komponenten einer BoW-Matrix dar?

Rows:
Columns:

A particular element of the matrix:

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

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 3

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Suggested prompts:

Can you explain the difference between binary and frequency-based BoW models in more detail?

How does the CountVectorizer handle punctuation and capitalization?

Can you show how to access the vector for a different word in the DataFrame?

Awesome!

Completion rate improved to 3.45

bookBag-of-Words-Modell

Swipe um das Menü anzuzeigen

Verständnis des BoW-Modells

Das Bag-of-Words (BoW) Modell stellt Dokumente als Vektoren dar, wobei jede Dimension einem einzigartigen Wort entspricht. Jede Dimension kann entweder das Vorhandensein eines Wortes im Dokument (1 falls vorhanden, 0 falls nicht vorhanden) oder dessen Häufigkeit (Wortanzahl) repräsentieren. Daher können BoW-Modelle entweder binär oder häufigkeitsbasiert sein.

Im Folgenden wird gezeigt, wie derselbe Satz (das Dokument) von jedem Typ dargestellt wird:

Ein binäres Modell stellt dieses Dokument als den Vektor [1, 1, 1] dar, während das häufigkeitsbasierte Modell es als [2, 1, 2] darstellt, wobei die Worthäufigkeit berücksichtigt wird.

BoW-Implementierung

Die Implementierung des BoW-Modells ist ein unkomplizierter Prozess, insbesondere mit Hilfe der sklearn (scikit-learn) Bibliothek und ihrer CountVectorizer-Klasse.

Hier ist eine Implementierung des binären Bag-of-Words-Modells:

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

Jede Zeile in der Matrix entspricht einem Dokument, und jede Spalte einem Token (Wort). Um dies visuell darzustellen, wurde diese Sparse-Matrix mit der Methode .toarray() in ein dichtes 2D-Array umgewandelt.

Note
Mehr erfahren

Eine Sparse-Matrix ist eine Matrix, in der die meisten Elemente den Wert Null haben. Sie dient der effizienten Darstellung und Verarbeitung von Daten mit einem hohen Anteil an Nullwerten, indem nur die Nicht-Null-Elemente gespeichert werden. Dadurch werden Speicher und Rechenressourcen eingespart.

Um ein frequenzbasiertes Bag-of-Words-Modell zu erstellen, muss lediglich der Parameter binary=True entfernt werden, da der Standardwert hierfür False ist:

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

Umwandlung der Matrix in ein DataFrame

Es ist oft hilfreich, die resultierende Bag-of-Words-Matrix in ein pandas-DataFrame umzuwandeln. Darüber hinaus bietet die CountVectorizer-Instanz die Methode get_feature_names_out(), mit der ein Array von einzigartigen Wörtern (Feature-Namen), die im Modell verwendet werden, abgerufen werden kann. Diese Feature-Namen können dann als Spalten des DataFrame verwendet werden:

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

Mit dieser Darstellung kann nun nicht nur der Vektor für ein bestimmtes Dokument, sondern auch der Vektor für ein bestimmtes Wort einfach abgerufen werden:

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 jedes einzigartige Wort einer Spalte entspricht, ist der Zugriff auf einen Wortvektor so einfach wie der Zugriff auf eine Spalte im DataFrame, indem das Wort angegeben wird (zum Beispiel 'global'). Zusätzlich verwenden wir das Attribut values, um ein Array anstelle einer Series als Ergebnis zu erhalten.

question-icon

Was stellen die verschiedenen Komponenten einer BoW-Matrix dar?

Rows:
Columns:

A particular element of the matrix:

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

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 3
some-alt