Bag-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 Vorkommen eines Wortes im Dokument darstellen (1 falls vorhanden, 0 falls nicht vorhanden) oder dessen Häufigkeit (Wortanzahl). 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 und dabei die Worthäufigkeit berücksichtigt.
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:
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())
from sklearn.feature_extraction.text import CountVectorizer
Diese Zeile importiert die CountVectorizer-Klasse aus sklearn.
corpus = [
'Global climate change poses significant risks to global ecosystems.',
'Global warming and climate change demand urgent action.',
'Sustainable environmental practices support environmental conservation.',
]
Diese Zeilen definieren eine Liste namens corpus, die drei String-Elemente enthält. Jeder String ist ein
Textdokument.
vectorizer = CountVectorizer(binary=True)
Diese Zeile erstellt eine Instanz der CountVectorizer-Klasse. Der Parameter binary=True
gibt an, dass das Modell binäre Zählungen verwenden soll.
bow_matrix = vectorizer.fit_transform(corpus)
Die Methode passt das Modell zunächst an die Daten an, lernt den Wortschatz des Korpus und transformiert dann die Textdokumente in eine sparse Matrix von Token-Zählungen (Bag-of-Words-Matrix).
print(bow_matrix.toarray())
Diese Zeile konvertiert die sparse Matrix bow_matrix in ein dichtes Array (numpy.ndarray)
mit der .toarray()-Methode und gibt dieses aus.
Jede Zeile der Matrix entspricht einem Dokument, und jede Spalte einem Token (Wort). Um dies visuell darzustellen, haben wir diese dünnbesetzte Matrix mit der Methode .toarray() in ein dichtes 2D-Array umgewandelt.
Eine dünnbesetzte Matrix ist eine Matrix, in der die meisten Elemente Null sind. Sie wird verwendet, um Daten mit einem hohen Anteil an Nullwerten effizient darzustellen und zu verarbeiten, indem nur die von Null verschiedenen Elemente gespeichert werden. Dadurch werden Speicher und Rechenressourcen gespart.
Um ein frequenzbasiertes Bag-of-Words-Modell zu erstellen, muss lediglich der Parameter binary=True entfernt werden, da der Standardwert hierfür False ist:
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())
Umwandlung der Matrix in ein DataFrame
Es ist oft sehr praktisch, 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:
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)
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:
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 jedes einzigartige Wort einer Spalte entspricht, ist der Zugriff auf einen Wortvektor so einfach wie das Zugreifen auf eine Spalte im DataFrame durch Angabe des Wortes (zum Beispiel 'global'). Zusätzlich wird das Attribut values verwendet, um ein Array anstelle einer Series als Ergebnis zu erhalten.
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Bag-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 Vorkommen eines Wortes im Dokument darstellen (1 falls vorhanden, 0 falls nicht vorhanden) oder dessen Häufigkeit (Wortanzahl). 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 und dabei die Worthäufigkeit berücksichtigt.
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:
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())
from sklearn.feature_extraction.text import CountVectorizer
Diese Zeile importiert die CountVectorizer-Klasse aus sklearn.
corpus = [
'Global climate change poses significant risks to global ecosystems.',
'Global warming and climate change demand urgent action.',
'Sustainable environmental practices support environmental conservation.',
]
Diese Zeilen definieren eine Liste namens corpus, die drei String-Elemente enthält. Jeder String ist ein
Textdokument.
vectorizer = CountVectorizer(binary=True)
Diese Zeile erstellt eine Instanz der CountVectorizer-Klasse. Der Parameter binary=True
gibt an, dass das Modell binäre Zählungen verwenden soll.
bow_matrix = vectorizer.fit_transform(corpus)
Die Methode passt das Modell zunächst an die Daten an, lernt den Wortschatz des Korpus und transformiert dann die Textdokumente in eine sparse Matrix von Token-Zählungen (Bag-of-Words-Matrix).
print(bow_matrix.toarray())
Diese Zeile konvertiert die sparse Matrix bow_matrix in ein dichtes Array (numpy.ndarray)
mit der .toarray()-Methode und gibt dieses aus.
Jede Zeile der Matrix entspricht einem Dokument, und jede Spalte einem Token (Wort). Um dies visuell darzustellen, haben wir diese dünnbesetzte Matrix mit der Methode .toarray() in ein dichtes 2D-Array umgewandelt.
Eine dünnbesetzte Matrix ist eine Matrix, in der die meisten Elemente Null sind. Sie wird verwendet, um Daten mit einem hohen Anteil an Nullwerten effizient darzustellen und zu verarbeiten, indem nur die von Null verschiedenen Elemente gespeichert werden. Dadurch werden Speicher und Rechenressourcen gespart.
Um ein frequenzbasiertes Bag-of-Words-Modell zu erstellen, muss lediglich der Parameter binary=True entfernt werden, da der Standardwert hierfür False ist:
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())
Umwandlung der Matrix in ein DataFrame
Es ist oft sehr praktisch, 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:
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)
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:
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 jedes einzigartige Wort einer Spalte entspricht, ist der Zugriff auf einen Wortvektor so einfach wie das Zugreifen auf eine Spalte im DataFrame durch Angabe des Wortes (zum Beispiel 'global'). Zusätzlich wird das Attribut values verwendet, um ein Array anstelle einer Series als Ergebnis zu erhalten.
Danke für Ihr Feedback!