logo

Kontinuierlicher Wortschatz (CBOW) im NLP

Damit der Computer einen geschriebenen Text versteht, können wir die Wörter als numerische Vektoren darstellen. Eine Möglichkeit hierfür ist die Verwendung von Worteinbettungen. Dabei handelt es sich um eine Möglichkeit, Wörter als numerische Vektoren darzustellen. Diese Vektoren erfassen die Bedeutung der Wörter und ihre Beziehungen zu anderen Wörtern in der Sprache. Worteinbettungen können mit unüberwachten Lernalgorithmen wie z. B. generiert werden Word2vec, Handschuh , oder FastText .

Word2vec ist eine auf neuronalen Netzwerken basierende Methode zur Generierung von Worteinbettungen, bei denen es sich um dichte Vektordarstellungen von Wörtern handelt, die deren semantische Bedeutung und Beziehungen erfassen. Es gibt zwei Hauptansätze zur Implementierung von Word2vec:



    Kontinuierlicher Wortschatz (CBOW)
  • Gramm überspringen

Was ist ein Continuous Bag of Words (CBOW)?

Continuous Bag of Words (CBOW) ist eine beliebte Technik zur Verarbeitung natürlicher Sprache, die zum Generieren von Worteinbettungen verwendet wird. Worteinbettungen sind für viele NLP-Aufgaben wichtig, da sie semantische und syntaktische Beziehungen zwischen Wörtern in einer Sprache erfassen. CBOW ist ein auf einem neuronalen Netzwerk basierender Algorithmus, der ein Zielwort anhand der umgebenden Kontextwörter vorhersagt. Es ist eine Art von unbeaufsichtigt Lernen, was bedeutet, dass es aus unbeschrifteten Daten lernen kann, und es wird häufig verwendet, um Worteinbettungen vorab zu trainieren, die für verschiedene NLP-Aufgaben wie Stimmungsanalyse und maschinelle Übersetzung verwendet werden können.

Beispiel eines CBOW-Modells

Beispiel eines CBOW-Modells

Gibt es einen Unterschied zwischen dem Bag-of-Words-Modell (BoW) und dem Continuous Bag-of-Words-Modell (CBOW)?

  • Das Bag-of-Words-Modell und das Continuous-Bag-of-Words-Modell sind beide Techniken, die bei der Verarbeitung natürlicher Sprache verwendet werden, um Text in einem computerlesbaren Format darzustellen. Sie unterscheiden sich jedoch in der Art und Weise, wie sie den Kontext erfassen.
  • Das BoW-Modell stellt Text als eine Sammlung von Wörtern und deren Häufigkeit in einem bestimmten Dokument oder Korpus dar. Dabei wird die Reihenfolge oder der Kontext, in dem die Wörter vorkommen, nicht berücksichtigt und daher möglicherweise nicht die vollständige Bedeutung des Textes erfasst. Das BoW-Modell ist einfach und leicht zu implementieren, weist jedoch Einschränkungen bei der Erfassung der Bedeutung von Sprache auf.
  • Im Gegensatz dazu ist das CBOW-Modell ein auf neuronalen Netzwerken basierender Ansatz, der den Kontext von Wörtern erfasst. Es lernt, das Zielwort anhand der Wörter vorherzusagen, die in einem bestimmten Kontextfenster davor und danach erscheinen. Durch die Berücksichtigung der umgebenden Wörter kann das CBOW-Modell die Bedeutung eines Wortes in einem bestimmten Kontext besser erfassen.

Architektur des CBOW-Modells

Das CBOW-Modell verwendet das Zielwort um das Kontextwort herum, um es vorherzusagen. Betrachten Sie das obige Beispiel Sie ist eine großartige Tänzerin. Das CBOW-Modell wandelt diese Phrase in Paare aus Kontextwörtern und Zielwörtern um. Die Wortpaarungen würden so aussehen ([sie, a], ist), ([ist, großartig], a) ([a, Tänzerin], großartig) mit Fenstergröße=2.



CBOW-Architektur

CBOW-Architektur

Das Modell berücksichtigt die Kontextwörter und versucht, den Zielbegriff vorherzusagen. Die vier 1∗W-Eingabevektoren werden an die Eingabeebene übergeben, wenn vier Wörter als Kontextwörter verwendet werden, um ein Zielwort vorherzusagen. Die verborgene Schicht empfängt die Eingabevektoren und multipliziert sie dann mit einer W∗N-Matrix. Die 1∗N-Ausgabe der verborgenen Schicht gelangt schließlich in die Summenschicht, wo die Vektoren elementweise summiert werden, bevor eine endgültige Aktivierung durchgeführt wird und die Ausgabe von der Ausgabeschicht erhalten wird.

Code-Implementierung von CBOW

Lassen Sie uns mithilfe des CBOW-Modells eine Worteinbettung implementieren, um die Ähnlichkeit von Wörtern anzuzeigen. In diesem Artikel habe ich meinen eigenen Wortkorpus definiert, Sie können jeden beliebigen Datensatz verwenden. Zuerst importieren wir alle notwendigen Bibliotheken und laden den Datensatz. Als nächstes werden wir jedes Wort tokenisieren und es in einen Vektor aus ganzen Zahlen umwandeln.



Python3




import> tensorflow as tf> from> tensorflow.keras.models>import> Sequential> from> tensorflow.keras.layers>import> Dense,> >Embedding, Lambda> from> tensorflow.keras.preprocessing.text>import> Tokenizer> import> numpy as np> import> matplotlib.pyplot as plt> from> sklearn.decomposition>import> PCA> # Define the corpus> corpus>=> [>'The cat sat on the mat'>,> >'The dog ran in the park'>,> >'The bird sang in the tree'>]> # Convert the corpus to a sequence of integers> tokenizer>=> Tokenizer()> tokenizer.fit_on_texts(corpus)> sequences>=> tokenizer.texts_to_sequences(corpus)> print>('After converting our words>in> the corpus> into vector of integers:')> print>(sequences)>

>

>

Java-Schlaf

Ausgabe:

After converting our words in the corpus into vector of integers: [[1, 3, 4, 5, 1, 6], [1, 7, 8, 2, 1, 9], [1, 10, 11, 2, 1, 12]]>

Jetzt erstellen wir das CBOW-Modell mit der Fenstergröße = 2.

Python3




# Define the parameters> vocab_size>=> len>(tokenizer.word_index)>+> 1> embedding_size>=> 10> window_size>=> 2> # Generate the context-target pairs> contexts>=> []> targets>=> []> for> sequence>in> sequences:> >for> i>in> range>(window_size,>len>(sequence)>-> window_size):> >context>=> sequence[i>-> window_size:i]>+>> >sequence[i>+> 1>:i>+> window_size>+> 1>]> >target>=> sequence[i]> >contexts.append(context)> >targets.append(target)> # Convert the contexts and targets to numpy arrays> X>=> np.array(contexts)> # Define the CBOW model> model>=> Sequential()> model.add(Embedding(input_dim>=>vocab_size,> >output_dim>=>embedding_size,> >input_length>=>2>*>window_size))> model.add(Lambda(>lambda> x: tf.reduce_mean(x, axis>=>1>)))> model.add(Dense(units>=>vocab_size, activation>=>'softmax'>))> model.save_weights(>'cbow_weights.h5'>)> # Load the pre-trained weights> model.load_weights(>'cbow_weights.h5'>)>

>

>

Als nächstes verwenden wir das Modell, um die Einbettungen zu visualisieren.

Python3




# Get the word embeddings> embeddings>=> model.get_weights()[>0>]> # Perform PCA to reduce the dimensionality> # of the embeddings> pca>=> PCA(n_components>=>2>)> reduced_embeddings>=> pca.fit_transform(embeddings)> # Visualize the embeddings> plt.figure(figsize>=>(>5>,>5>))> for> i, word>in> enumerate>(tokenizer.word_index.keys()):> >x, y>=> reduced_embeddings[i]> >plt.scatter(x, y)> >plt.annotate(word, xy>=>(x, y), xytext>=>(>5>,>2>),> >textcoords>=>'offset points'>,> >ha>=>'right'>, va>=>'bottom'>)> plt.show()>

>

>

Ausgabe:

Vektorisierte Darstellung der Wörter mithilfe des CBOW-Modells

Vektorisierte Darstellung der Wörter mithilfe des CBOW-Modells

Diese Visualisierung ermöglicht es uns, die Ähnlichkeit der Wörter anhand ihrer Einbettungen zu beobachten. Von Wörtern mit ähnlicher Bedeutung oder ähnlichem Kontext wird erwartet, dass sie in der Handlung nahe beieinander stehen.