Kursinhalt
Einführung in NLP
Einführung in NLP
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:
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])
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:
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)
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:

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:
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)
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.
Danke für Ihr Feedback!