Kursinhalt
Einführung in NLP
Einführung in NLP
Anpassen des Bag of Words
Das Bag of Words-Modell, insbesondere seine Implementierung durch die CountVectorizer
-Klasse, bietet mehrere Parameter zur Anpassung. Dies ermöglicht es, das Modell an die spezifischen Bedürfnisse verschiedener Textanalyseaufgaben anzupassen und die Effektivität des Modells erheblich zu steigern.
Minimale und maximale Dokumentenfrequenz
Der min_df
-Parameter definiert die minimale Anzahl von Dokumenten, in denen ein Begriff vorkommen muss, um in den Wortschatz aufgenommen zu werden, entweder als absolute Zahl oder als Proportion. Er hilft, seltene Begriffe auszuschließen, die oft weniger informativ sind.
Ähnlich bestimmt max_df
die maximale Häufigkeit, die ein Begriff in Dokumenten haben kann, um im Wortschatz zu bleiben, ebenfalls spezifizierbar als absolute Zahl oder Proportion. Es filtert zu häufige Begriffe heraus, die nicht dazu beitragen, zwischen Dokumenten zu unterscheiden.
Schauen wir uns ein Beispiel an:
from sklearn.feature_extraction.text import CountVectorizer import pandas as pd corpus = [ "The quick brown fox jumps over the lazy dog.", "Quick brown foxes leap over lazy dogs in summer.", "The quick brown fox is often seen jumping over lazy dogs.", "In summer, the lazy dog plays while the quick brown fox rests.", "A quick brown fox is quicker than the laziest dog." ] # Exclude words which appear in more than 3 documents vectorizer = CountVectorizer(max_df=3) bow_matrix = vectorizer.fit_transform(corpus) bow_df = pd.DataFrame(bow_matrix.toarray(), columns=vectorizer.get_feature_names_out()) print(bow_df)
Das Setzen von max_df=3
schließt Wörter aus, die in mehr als 3 Dokumenten vorkommen. In unserem Korpus gehören dazu Wörter wie "quick" und "brown". Da sie in jedem oder fast jedem Dokument vorkommen, helfen sie nicht wirklich, zwischen den Dokumenten zu unterscheiden. Alternativ könnten wir max_df=0.6
setzen, da 60% von 5 Dokumenten 3 Dokumente sind.
N-Gramm-Bereich
Der Parameter ngram_range
ermöglicht es Ihnen, den Bereich der n-Gramm-Größen zu definieren, die im Vokabular enthalten sein sollen.
Standardmäßig berücksichtigt CountVectorizer
nur Unigramme (einzelne Wörter). Das Einbeziehen von Bigrammen (Wortpaare), Trigrammen (Worttripel) oder größeren n-Grammen kann jedoch das Modell bereichern, indem mehr Kontext und semantische Informationen erfasst werden, was die Leistung potenziell verbessern kann.
Dies wird erreicht, indem ein Tupel (min_n, max_n)
an den Parameter ngram_range
übergeben wird, wobei min_n
die minimale n-Gramm-Größe darstellt, die einbezogen werden soll, und max_n
die maximale Größe.
Konzentrieren wir uns nun ausschließlich auf Trigramme, die in zwei oder mehr Dokumenten innerhalb unseres Korpus erscheinen:
from sklearn.feature_extraction.text import CountVectorizer import pandas as pd corpus = [ "The quick brown fox jumps over the lazy dog.", "Quick brown foxes leap over lazy dogs in summer.", "The quick brown fox is often seen jumping over lazy dogs.", "In summer, the lazy dog plays while the quick brown fox rests.", "A quick brown fox is quicker than the laziest dog." ] # Include trigrams which appear in 2 or more documents vectorizer = CountVectorizer(min_df=2, ngram_range=(3, 3)) bow_matrix = vectorizer.fit_transform(corpus) bow_df = pd.DataFrame(bow_matrix.toarray(), columns=vectorizer.get_feature_names_out()) print(bow_df)
Dies sind die am häufigsten verwendeten Parameter. Falls Sie jedoch mehr davon erkunden möchten, können Sie die Dokumentation einsehen.
Danke für Ihr Feedback!