Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Implementierung von Word2Vec | Wort-Einbettungen
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
Implementierung von Word2Vec

Nachdem wir verstanden haben, wie Word2Vec funktioniert, lassen Sie uns fortfahren und es mit Python implementieren. Die Gensim-Bibliothek, ein robustes Open-Source-Tool für die Verarbeitung natürlicher Sprache, bietet eine unkomplizierte Implementierung durch ihre Word2Vec-Klasse in gensim.models.

Vorbereitung der Daten

Word2Vec erfordert, dass die Textdaten tokenisiert werden, d.h. in eine Liste von Listen zerlegt werden, wobei jede innere Liste Wörter aus einem bestimmten Satz enthält. Für dieses Beispiel verwenden wir den Roman Emma der englischen Autorin Jane Austen als unser Korpus. Wir laden eine CSV-Datei, die vorverarbeitete Sätze enthält, und teilen dann jeden Satz in Wörter auf:

12345678
import pandas as pd emma_df = pd.read_csv( 'https://content-media-cdn.codefinity.com/courses/c68c1f2e-2c90-4d5d-8db9-1e97ca89d15e/section_4/chapter_3/emma.csv') # Split each sentence into words sentences = emma_df['Sentence'].str.split() # Print the fourth sentence (list of words) print(sentences[3])
copy

Diese Zeile emma_df['Sentence'].str.split() wendet die .split()-Methode auf jeden Satz in der 'Sentence'-Spalte an, was zu einer Liste von Wörtern für jeden Satz führt. Da die Sätze bereits vorverarbeitet wurden, mit Wörtern, die durch Leerzeichen getrennt sind, ist die .split()-Methode ausreichend für diese Tokenisierung.

Training des Word2Vec-Modells

Konzentrieren wir uns nun auf das Training des Word2Vec-Modells mit den tokenisierten Daten. Tatsächlich bietet die Word2Vec-Klasse eine Vielzahl von Parametern zur Anpassung; jedoch werden Sie am häufigsten mit den folgenden Parametern arbeiten:

  • vector_size (standardmäßig 100): die Dimensionalität oder Größe der Wort-Embeddings;
  • window (standardmäßig 5): die Kontextfenstergröße;
  • min_count (standardmäßig 5): Wörter, die seltener als diese Anzahl vorkommen, werden ignoriert;
  • sg (standardmäßig 0): die zu verwendende Modellarchitektur (1 für Skip-Gram, 0 für CBOW).

Was die Modellarchitekturen betrifft, ist CBoW für größere Datensätze und Szenarien geeignet, in denen die rechnerische Effizienz entscheidend ist. Skip-gram hingegen ist vorzuziehen für Aufgaben, die ein detailliertes Verständnis von Wortkontexten erfordern, besonders effektiv in kleineren Datensätzen oder beim Umgang mit seltenen Wörtern.

Schauen wir uns nun ein Beispiel an:

12345678
from gensim.models import Word2Vec import pandas as pd emma_df = pd.read_csv( 'https://content-media-cdn.codefinity.com/courses/c68c1f2e-2c90-4d5d-8db9-1e97ca89d15e/section_4/chapter_3/emma.csv') sentences = emma_df['Sentence'].str.split() # Initialize the model model = Word2Vec(sentences, vector_size=200, window=5, min_count=1, sg=0)
copy

Hier setzen wir die Embeddings-Größe auf 200, die Kontextfenstergröße auf 5 und schließen alle Wörter ein, indem wir min_count=1 setzen. Durch das Setzen von sg=0 haben wir uns entschieden, das CBoW-Modell zu verwenden.

Ähnliche Wörter finden

Da jedes Wort als Vektor dargestellt wird, können wir nun die Ähnlichkeit von zwei Wörtern als Ähnlichkeit von zwei Vektoren berechnen. Wie können wir das messen? Nun, wir könnten den Abstand zwischen diesen Vektoren berechnen, jedoch gibt es einige Nachteile.

Wenn zwei Wortvektoren in die gleiche Richtung zeigen, selbst wenn einer länger ist (was vielleicht mehr Vorkommen in den Trainingsdaten anzeigt), können sie dennoch Wörter mit ähnlichen Bedeutungen repräsentieren, daher betrachten wir den Winkel zwischen den Vektoren. Dies ist entscheidend, da in vielen NLP-Aufgaben, insbesondere bei Wort-Embeddings, die Richtung der Vektoren—die die Orientierung der Wörter im Vektorraum anzeigt—mehr semantische Bedeutung trägt als die Größe.

In der Praxis ist es jedoch nicht so praktisch, einen Winkel direkt als Ähnlichkeitsmaß zu verwenden, daher wird der Kosinus des Winkels verwendet, der von -1 bis 1 reicht. Dies ist als Kosinus-Ähnlichkeit bekannt. Hier ist eine Illustration:

Angles

Je höher die Kosinus-Ähnlichkeit, desto ähnlicher sind die beiden Vektoren und umgekehrt. Zum Beispiel, wenn zwei Wortvektoren eine Kosinus-Ähnlichkeit nahe 1 (der Winkel nahe 0 Grad) haben, deutet dies darauf hin, dass sie im Vektorraum eng verwandt oder ähnlich im Kontext sind.

Lassen Sie uns nun die Top-5 der ähnlichsten Wörter zum Wort "man" mit Hilfe der Kosinus-Ähnlichkeit finden:

12345678910
from gensim.models import Word2Vec import pandas as pd emma_df = pd.read_csv( 'https://content-media-cdn.codefinity.com/courses/c68c1f2e-2c90-4d5d-8db9-1e97ca89d15e/section_4/chapter_3/emma.csv') sentences = emma_df['Sentence'].str.split() model = Word2Vec(sentences, vector_size=200, window=5, min_count=1, sg=0) # Retrieve the top-5 most similar words to 'man' similar_words = model.wv.most_similar('man', topn=5) print(similar_words)
copy

model.wv greift auf die Wortvektoren des trainierten Modells zu, während die Methode .most_similar() die Wörter findet, deren Einbettungen der Einbettung des angegebenen Wortes am nächsten sind, basierend auf der Kosinusähnlichkeit. Der topn-Parameter bestimmt die Anzahl der Top-N ähnlichen Wörter, die zurückgegeben werden sollen.

Welches Modell ist besser für den Umgang mit seltenen Wörtern innerhalb eines Korpus?

Welches Modell ist besser für den Umgang mit seltenen Wörtern innerhalb eines Korpus?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 3
We're sorry to hear that something went wrong. What happened?
some-alt