Heim >Technologie-Peripheriegeräte >KI >Verständnis der kontinuierlichen Wörterbeutel (CBOW)
Semantik ist wichtig, da es in NLP die Beziehungen zwischen den untersuchten Wörtern sind. Eines der einfachsten und dennoch hochwirksamen Verfahren ist eine kontinuierliche Wörterbeutel (CBOW), die Wörter auf hochs bedeutsame Vektoren, die als Wortvektoren bezeichnet werden, abgebildet werden. CBOW wird im Word2VEC -Framework verwendet und prognostiziert ein Wort, das auf den Wörtern basiert, die sich an die semantische und syntaktische Bedeutung der Sprache erfassen. In diesem Artikel erfahren der Leser den Betrieb des CBOW -Modells sowie die Methoden seiner Verwendung.
Die kontinuierliche Wörterbeutel (CBOW) ist auch ein Modell, das bei der Bestimmung der Worteinbettung mit einem neuronalen Netzwerk verwendet wird und Teil von Word2VEC -Modellen von Tomas Mikolov ist. CBOW versucht, ein Zielwort abhängig von den Kontextwörtern vorherzusagen, die es in einem bestimmten Satz beobachten. Auf diese Weise ist es in der Lage, die semantischen Beziehungen zu erfassen, daher werden enge Wörter in einem hohen dimensionalen Raum eng dargestellt.
In dem Satz "Die Katze saß beispielsweise auf der Matte" , wenn die Kontextfenstergröße 2 ist, sind die Kontextwörter für "SAT" ["The", "Cat", "On", "The"] , und die Aufgabe des Modells besteht darin, das Wort "SAT" vorherzusagen.
CBOW arbeitet, indem sie die Kontextwörter aggregieren (z. B. im Durchschnitt ihrer Einbettungen) und diese aggregierte Darstellung, um das Zielwort vorherzusagen. Die Architektur des Modells beinhaltet eine Eingangsschicht für die Kontextwörter, eine versteckte Schicht für die Einbettung der Erzeugung und eine Ausgangsschicht, um das Zielwort mithilfe einer Wahrscheinlichkeitsverteilung vorherzusagen.
Es ist ein schnelles und effizientes Modell, das zum Umgang mit häufigen Wörtern geeignet ist. Es ist ideal für Aufgaben, die ein semantisches Verständnis erfordern, z. B. Textklassifizierung, Empfehlungssysteme und Stimmungsanalyse.
CBOW ist eine der einfachsten und aber effizienten Techniken im Kontext für die Einbettung von Wort, bei dem das gesamte Wortvokabular von Wörtern auf Vektoren abgebildet wird. In diesem Abschnitt wird auch der Betrieb des CBOW -Systems als Mittel beschrieben, um die Methode auf seiner grundlegendsten Ebene zu verstehen, die Hauptideen zu erörtern, die die CBOW -Methode untermauern, sowie eine umfassende Anleitung zum architektonischen Layout des CBOW -Trefferberechnungssystems.
CBOW basiert auf zwei Schlüsselkonzepten: Kontextwörter und das Zielwort.
Durch die Analyse der Beziehung zwischen Kontext- und Zielwörtern in großen Korpora generiert CBOW Einbettungen, die semantische Beziehungen zwischen Wörtern erfassen.
Hier ist eine Aufschlüsselung der Funktionsweise von CBOW, Schritt für Schritt:
Konvertieren Sie die Kontextwörter und zielen Sie anhand der Vokabulargröße in One-Hot-Vektoren. Für einen Wortschatz von Größe 5 könnte die One-Hot-Darstellung des Wortes „Liebe“ wie [0, 1, 0, 0, 0, 0] aussehen.
Geben Sie die einhörnlichen codierten Kontextwörter durch eine Einbettungsschicht. Diese Schicht ordnet jedes Wort auf eine dichte Vektordarstellung zu, typischerweise in einer niedrigeren Dimension als in der Vokabulargröße.
Aggregieren Sie die Einbettungen aller Kontextwörter (z. B. durch Mittelung oder Summieren), um einen einzelnen Kontextvektor zu bilden.
Wiederholen Sie den Vorgang für alle Kontextzielpaare im Korpus, bis das Modell konvergiert.
Die Architektur des Continuous -Tack of Words (CBOW) -Modells soll ein Zielwort vorhersagen, das auf seinen umgebenden Kontextwörtern basiert. Es ist ein flaches neuronales Netzwerk mit einer einfachen, aber wirksamen Struktur. Die CBOW -Architektur besteht aus den folgenden Komponenten:
Eingabe :
Satz: "Ich liebe maschinelles Lernen" , Zielwort: "Maschine" , Kontextwörter: ["Ich", "Liebe", "Lernen"] .
One-Hot-Codierung :
Wortschatz: ["Ich", "Liebe", "Maschine", "Lernen", "Ai"]
Schicht einbetten :
Einbettungen:
Aggregation :
Ausgangsschicht :
Eingabeschicht: ["I", "Liebe", "Lernen"] -> One-Hot-Codierung -> Schicht einbetten -> dichte Einbettungen -> aggregierter Kontextvektor -> Voll verbundene Schicht Softmax Ausgabe: vorhergesagtes Wort "Maschine"
Wir werden jetzt durch die Implementierung des CBOW -Modells in Python von Grund auf neu sein.
Der erste Spike besteht darin, den Text in Token zu verwandeln, Wörter, die in Kontextzielpaare mit dem Kontext als Wörter mit dem Zielwort erzeugt werden.
Corpus = "Der schnelle braune Fuchs springt über den faulen Hund" corpus = corpus.lower (). split () # Tokenisierung und Kleinbuchstabenkonvertierung # Kontextfenstergröße definieren C = 2 context_target_pairs = [] # Generieren Sie Kontextzielpaare für i in Reichweite (c, len (corpus) - c): context = corpus [i - c: i] corpus [i 1: i c 1] target = corpus [i] context_target_pairs.append ((Kontext, Ziel)) print ("Kontext-Zielpaare:", context_target_pairs)
Ausgabe:
Context-Target Pairs: [(['the', 'quick', 'fox', 'jumps'], 'brown'), (['quick', 'brown', 'jumps', 'over'], 'fox'), (['brown', 'fox', 'over', 'the'], 'jumps'), (['fox', 'jumps', 'the', 'lazy'], 'over'), (['Springt', 'Over', 'Lazy', 'Dog'], 'The')]
Wir erstellen einen Wortschatz (eine eindeutige Reihe von Wörtern), dann jedes Wort einem eindeutigen Index zugeordnet und umgekehrt für effiziente Lookups während des Trainings.
# Erstellen Sie Wortschatz und kartieren Sie jedes Wort einem Index vocab = set (corpus) word_to_index = {word: idx für idx, wort in enumerate (vocab)}} index_to_word = {idx: word for Word, idx in word_to_index.items ()} print ("Word to Index Dictionary:", Word_to_index)
Ausgabe:
Word to Index Dictionary: {'Brown': 0, 'Hund': 1, 'Quick': 2, 'Jumps': 3, 'Fox': 4, 'Over': 5, 'The': 6, 'Lazy': 7}
Eine HOT-Codierung funktioniert, indem jedes Wort im Wortformationssystem in einen Vektor umgewandelt wird, wobei der Indikator des Wortes '1' lautet, während der Rest der Orte aus Gründen, die bald klar sein werden, "0" nimmt.
Def One_hot_encode (Word, Word_to_index): One_hot = np.zeros (len (Word_to_index)) ONE_HOT [WORD_TO_INDEX [WORD]] = 1 Return One_hot # Beispiel Verwendung für ein Wort "schnell" context_one_hot = [One_hot_encode (Word, Word_to_index) für Word in ['the', 'Quick']] print ("One-HOT-Codierung für" Quick ":", context_one_hot [1])
Ausgabe:
One-Hot-Codierung für "Quick": [0. 0. 1. 0. 0. 0. 0. 0.]
In diesem Schritt erstellen wir ein grundlegendes neuronales Netzwerk mit zwei Ebenen: eine für Worteinbettungen und eine andere, um die Ausgabe basierend auf Kontextwörtern zu berechnen, den Kontext zu gemittelt und über das Netzwerk weiterzugeben.
Klasse CBOW: def __init __ (self, vocab_size, Einbettung_dim): # Initialisieren Sie die Gewichte für die Einbettungs- und Ausgangsschichten zufällig self.w1 = np.random.randn (vocab_size, Einbettung_dim) self.w2 = np.random.randn (betting_dim, vocab_size) Def Forward (self, context_words): # Berechnen Sie die versteckte Schicht (Durchschnitt der Kontextwörter) H = np.mean (context_words, axis = 0) # Berechnen Sie die Ausgangsschicht (Softmax -Wahrscheinlichkeiten) output = np.dot (h, self.w2) Rückgabeausgabe Def rückwärts (Self, context_words, target_word, lern_rate = 0.01): # Vorwärtspass H = np.mean (context_words, axis = 0) output = np.dot (h, self.w2) # Fehler und Gradienten berechnen Fehler = target_word - Ausgabe self.w2 = lern_rate * np.outer (h, fehler) self.w1 = lern_rate * np.outer (context_words, fehler) # Beispiel für das Erstellen eines CBOW -Objekts vocab_size = len (Word_to_index) Einbettung_dim = 5 # Nehmen wir 5-dimensionale Einbettungen an CBOW_MODEL = CBOW (VOCAB_SIZE, Einbetting_dim) # Mit zufälligen Kontextwörtern und Ziel (als Beispiel) verwenden context_words = [One_hot_encode (Word, Word_to_index) für Word in [',', 'Quick', 'Fox', 'Jumps']] context_words = np.Array (context_words) context_words = np.mean (context_words, axis = 0) # Durchschnittliche Kontextwörter target_word = One_hot_encode ('Brown', Word_to_index) # Vorwärts gehen durch das CBOW -Modell output = cbow_model.forward (context_words) print ("Ausgabe von CBOW vorwärts Pass:", Ausgabe)
Ausgabe:
Ausgang des CBOW -Vorwärtspasses: [-0.20435729 -0.23851241 -0.08105261 -0.14251447 0,20442154 0,14336586 -0.06523201 0.0255063] [-0.0192184 -0.12958821 0.1019369 0.11101922 -0.17773069 -0.02340574 -0.22222151 -0.23863179] [0,21221977 -0.15263454 -0.015248 0,27618767 0,02959409 0,21777961 0,16619577 -0.20560026] [0.05354038 0.06903295 0.0592706 -0.13509918 -0.00439649 0,18007843 0,1611929 0,2449023] [0.01092826 0.19643582 -0.07430934 -0.16443165 -0.01094085 -0.27452367 -0.13747784 0.31185284]]]]
TensorFlow vereinfacht den Prozess, indem ein neuronales Netzwerk definiert wird, das eine Einbettungsschicht zum Lernen von Wortdarstellungen und einer dichten Ebene für die Ausgabe verwendet, wobei Kontextwörter verwendet werden, um ein Zielwort vorherzusagen.
Tensorflow als TF importieren # Definieren Sie ein einfaches CBOW -Modell mit TensorFlow Klasse CBOWModel (tf.keras.model): def __init __ (self, vocab_size, Einbettung_dim): Super (CBOWModel, Selbst) .__ init __ () self.embeddings = tf.keras.layers.embedding (input_dim = vocab_size, output_dim = betting_dim) self.output_layer = tf.keras.layers.dense (vocab_size, actionation = 'Softmax')) Def Call (self, context_words): einbedded_context = self.embeddings (context_words) CONTEXT_AVG = TF.REDUCE_MEAN (ENNEDDED_CONTEXT, AXIS = 1) output = self.output_layer (context_avg) Rückgabeausgabe # Beispielnutzung Modell = CBOWModel (vocab_size = 8, betting_dim = 5) context_input = np.random.randint (0, 8, size = (1, 4)) # zufälliger Kontexteingabe context_input = tf.convert_to_tensor (context_input, dtype = tf.int32) # Vorwärtspass output = modell (context_input) print ("Ausgabe des TensorFlow -CBOW -Modells:", output.numpy ())
Ausgabe:
Ausgang des Tensorflow -CBOW -Modells: [[0,12362909 0,12616573 0,12758036 0,12601459 0,12477358 0,1237749 0,12319998 0,12486169]]]
Gensim bietet eine fertige Implementierung von CBOW in der Word2VEC () -Funktion, bei der man beim Training nicht arbeiten muss, wenn Gensim Word-Einbettungen aus einem Textkorpus trainiert.
Gensim importieren von Gensim.models importieren word2Vec # Daten vorbereiten (Liste der Wörterlisten) Corpus = ["The", "Quick", "Brown", "Fox"], ["Sprung", "Over", "The", "faul", "Hund"] # Trainieren Sie das Word2VEC -Modell mit CBOW model = word2Vec (corpus, vector_size = 5, window = 2, min_count = 1, sg = 0) # Holen Sie sich die Vektordarstellung eines Wortes vector = model.wv ['fox'] print ("Vektordarstellung von 'Fox':", Vektor)
Ausgabe:
Vektorpräsentation von 'Fox': [-0.06810732 -0.01892803 0.11537147 -0.15043275 -0.07872207]
Wir werden nun die Vorteile einer kontinuierlichen Sack mit Wörtern untersuchen:
Lassen Sie uns nun die Grenzen von CBOW erörtern:
Das CHBOW -Modell (Continuous Tail of Words) hat sich als effizienter und intuitiver Ansatz zur Erzeugung von Wortbettendings erwiesen, indem es den umgebenden Kontext nutzt. Durch seine einfache, aber effektive Architektur schließt CBOW die Lücke zwischen Rohtext und aussagekräftigen Vektordarstellungen und ermöglicht eine breite Palette von NLP -Anwendungen. Durch das Verständnis des Arbeitsmechanismus von CBOW, seine Stärken und Einschränkungen erhalten wir tiefere Einblicke in die Entwicklung von NLP -Techniken. Mit seiner grundlegenden Rolle bei der Einbettung der Erzeugung ist CBOW weiterhin ein Sprungbrett für die Erforschung fortschrittlicher Sprachmodelle.
A: CBOW prognostiziert ein Zielwort unter Verwendung von Kontextwörtern, während Skip-Gram Kontextwörter mithilfe des Zielworts voraussagt.
F2: Warum ist CBOW rechnerisch schneller als Skip-Gram?A: CBOW verarbeitet gleichzeitig mehrere Kontextwörter, während Skip-Gram jedes Kontextwort unabhängig bewertet.
F3: Kann CBOW seltene Wörter effektiv umgehen?A: Nein, Skip-Gram ist im Allgemeinen besser darin, Darstellungen für seltene Wörter zu lernen.
F4: Welche Rolle spielt die Einbettungsschicht in CBOW?A: Die Einbettungsschicht verwandelt spärliche One-Hot-Vektoren in dichte Darstellungen und erfasst die Wortsemantik.
F5: Ist CBOW heute noch relevant?A: Ja, während neuere Modelle wie Bert existieren, bleibt CBOW ein grundlegendes Konzept in Word -Einbettungen.
Das obige ist der detaillierte Inhalt vonVerständnis der kontinuierlichen Wörterbeutel (CBOW). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!