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

Kursinhalt

Einführung in NLP

Einführung in NLP

1. Grundlagen der Textvorverarbeitung
2. Stemming und Lemmatisierung
3. Grundlegende Textmodelle
4. Wort-Einbettungen

book
Bag of Words

Verständnis des BoW-Modells

Wie wir bereits im vorherigen Kapitel erwähnt haben, stellt das Bag-of-Words (BoW) Modell Dokumente als Vektoren dar, wobei jede Dimension einem einzigartigen Wort entspricht. Jede Dimension kann entweder das Vorhandensein eines Wortes im Dokument darstellen (1 wenn vorhanden, 0 wenn nicht vorhanden) oder seine Häufigkeit (Wortanzahl). Daher können BoW-Modelle entweder binär oder frequenzbasiert sein.

Schauen wir uns an, wie derselbe Satz (Dokument) von jedem Typ dargestellt wird:

Wie Sie sehen können, stellt ein binäres Modell dieses Dokument als den Vektor [1, 1, 1] dar, während frequenzbasierte Modelle es als [2, 1, 2] darstellen, wobei die Wortfrequenz berücksichtigt wird.

BoW-Implementierung

Lassen Sie uns nun in die Implementierung des BoW-Modells in Python eintauchen. Die Implementierung des BoW-Modells kann ein unkomplizierter Prozess sein, insbesondere mit Hilfe der sklearn (Scikit-learn) Bibliothek und ihrer CountVectorizer Klasse.

Ohne weitere Umschweife, lassen Sie uns mit einem Beispiel eines binären Bag of Words fortfahren:

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 es visuell darzustellen, haben wir diese spärliche Matrix in ein dichtes 2D-Array umgewandelt, indem wir die Methode .toarray() verwendet haben.

Um ein frequenzbasiertes Bag-of-Words-Modell zu erstellen, müssen wir lediglich den Parameter binary=True entfernen, da der Standardwert dafü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 kann sehr praktisch sein, die resultierende Bag-of-Words-Matrix in ein pandas DataFrame umzuwandeln. Darüber hinaus bietet die CountVectorizer-Instanz die Methode get_feature_names_out(), die ein Array von einzigartigen Wörtern (Feature-Namen) abruft, die im Modell verwendet werden. Diese Feature-Namen können als Spalten des resultierenden DataFrame festgelegt werden, hier ist ein Beispiel:

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 können wir nun nicht nur leicht auf den Vektor für ein bestimmtes Dokument zugreifen, sondern auch auf den Vektor eines bestimmten Wortes:

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'). Wir verwenden auch das values-Attribut, um ein Array anstelle einer Series als Ergebnis zu erhalten.

question-icon

Gegeben eine BoW-Matrix, was repräsentieren die verschiedenen Komponenten dieser Matrix?

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
We're sorry to hear that something went wrong. What happened?
some-alt