Tutorial zum Einbetten von Wörtern: word2vec mit Gensim (BEISPIEL)

Inhaltsverzeichnis:

Anonim

Was ist Worteinbettung?

Das Einbetten von Wörtern ist eine Art der Wortdarstellung, mit der Wörter mit ähnlicher Bedeutung von Algorithmen für maschinelles Lernen verstanden werden können. Technisch gesehen handelt es sich um eine Abbildung von Wörtern in Vektoren reeller Zahlen unter Verwendung des neuronalen Netzwerks, des Wahrscheinlichkeitsmodells oder der Dimensionsreduktion in der Matrix für das gleichzeitige Auftreten von Wörtern. Es ist Sprachmodellierung und Feature-Learning-Technik. Die Worteinbettung ist eine Möglichkeit, die Zuordnung mithilfe eines neuronalen Netzwerks durchzuführen. Es stehen verschiedene Modelle zum Einbetten von Wörtern zur Verfügung, z. B. word2vec (Google), Glove (Stanford) und Fastest (Facebook).

Das Einbetten von Wörtern wird auch als verteiltes semantisches Modell oder verteilter dargestellter oder semantischer Vektorraum oder Vektorraummodell bezeichnet. Wenn Sie diese Namen lesen, stoßen Sie auf das Wort Semantik, was bedeutet, ähnliche Wörter zusammen zu kategorisieren. Zum Beispiel sollten Früchte wie Apfel, Mango, Banane in der Nähe platziert werden, während Bücher weit von diesen Wörtern entfernt sind. Im weiteren Sinne wird durch das Einbetten von Wörtern der Vektor von Früchten erzeugt, der weit entfernt von der Vektordarstellung von Büchern platziert wird.

In diesem Tutorial lernen Sie

  • Was ist Worteinbettung?
  • Wo wird Word Embedding verwendet?
  • Was ist word2vec?
  • Was macht word2vec?
  • Warum Word2vec?
  • Word2vec-Architektur
  • Fortlaufende Tasche voller Wörter.
  • Skip-Gram-Modell
  • Die Beziehung zwischen Word2vec und NLTK
  • Aktivatoren und Word2Vec
  • Was ist Gensim?
  • Code Implementierung von word2vec mit Gensim

Wo wird Word Embedding verwendet?

Die Worteinbettung hilft bei der Erstellung von Features, beim Clustering von Dokumenten, bei der Klassifizierung von Texten und bei der Verarbeitung natürlicher Sprache. Lassen Sie uns sie auflisten und über jede dieser Anwendungen diskutieren.

  • Ähnliche Wörter berechnen: Die Worteinbettung wird verwendet, um ähnliche Wörter für das Wort vorzuschlagen, das dem Vorhersagemodell unterzogen wird. Daneben werden auch unterschiedliche Wörter sowie die häufigsten Wörter vorgeschlagen.
  • Erstellen Sie eine Gruppe verwandter Wörter: Sie wird für die semantische Gruppierung verwendet, bei der Dinge mit ähnlichen Merkmalen zusammen gruppiert werden, die sich in weiter Ferne unterscheiden.
  • Merkmal für die Textklassifizierung: Text wird in Vektorarrays abgebildet, die dem Modell zum Training und zur Vorhersage zugeführt werden. Textbasierte Klassifikatormodelle können nicht für die Zeichenfolge trainiert werden, sodass der Text in eine maschinell trainierbare Form konvertiert wird. Weitere Merkmale der Erstellung semantischer Hilfe bei der textbasierten Klassifizierung.
  • Dokumentclustering ist eine weitere Anwendung, bei der das Einbetten von Wörtern weit verbreitet ist
  • Verarbeitung natürlicher Sprache: Es gibt viele Anwendungen, bei denen das Einbetten von Wörtern nützlich ist und die Phasen der Merkmalsextraktion wie Teile der Sprachkennzeichnung, der Sentimentalanalyse und der syntaktischen Analyse überzeugt.

    Jetzt haben wir einige Kenntnisse über das Einbetten von Wörtern. Es wird auch etwas Licht auf verschiedene Modelle geworfen, um die Worteinbettung zu implementieren. Dieses gesamte Tutorial konzentriert sich auf eines der Modelle (word2vec).

Was ist word2vec?

Word2vec ist die Technik / das Modell zur Erzeugung der Worteinbettung für eine bessere Wortdarstellung. Es erfasst eine große Anzahl präziser syntaktischer und semantischer Wortbeziehungen. Es ist ein flaches zweischichtiges neuronales Netzwerk. Bevor Sie fortfahren, sehen Sie sich bitte den Unterschied zwischen flachem und tiefem neuronalen Netzwerk an:

Das flache neuronale Netzwerk besteht aus der einzigen verborgenen Schicht zwischen Eingabe und Ausgabe, während das tiefe neuronale Netzwerk mehrere verborgene Schichten zwischen Eingabe und Ausgabe enthält. Die Eingabe wird Knoten unterzogen, während die verborgene Schicht sowie die Ausgabeschicht Neuronen enthalten.

Abbildung: Flaches vs. tiefes Lernen

word2vec ist ein zweischichtiges Netzwerk, in dem eine verborgene Schicht eingegeben und ausgegeben wird.

Word2vec wurde von einer Gruppe von Forschern unter der Leitung von Tomas Mikolov bei Google entwickelt. Word2vec ist besser und effizienter als das latente semantische Analysemodell.

Was macht word2vec?

Word2vec repräsentiert Wörter in der Vektorraumdarstellung. Wörter werden in Form von Vektoren dargestellt, und die Platzierung erfolgt so, dass Wörter mit ähnlicher Bedeutung zusammen erscheinen und unterschiedliche Wörter weit entfernt sind. Dies wird auch als semantische Beziehung bezeichnet. Neuronale Netze verstehen keinen Text, sondern nur Zahlen. Das Einbetten von Wörtern bietet eine Möglichkeit, Text in einen numerischen Vektor zu konvertieren.

Word2vec rekonstruiert den sprachlichen Kontext von Wörtern. Bevor wir weiter gehen, lassen Sie uns verstehen, was ist sprachlicher Kontext? Im allgemeinen Lebensszenario versuchen andere Menschen herauszufinden, was das Ziel des Satzes ist, wenn wir sprechen oder schreiben, um zu kommunizieren. Beispiel: "Was ist die Temperatur in Indien?" Hier ist der Kontext, in dem der Benutzer die "Temperatur in Indien" wissen möchte, bei der es sich um den Kontext handelt. Kurz gesagt, das Hauptziel eines Satzes ist der Kontext. Wörter oder Sätze, die die gesprochene oder geschriebene Sprache umgeben (Offenlegung), helfen bei der Bestimmung der Bedeutung des Kontexts. Word2vec lernt die Vektordarstellung von Wörtern durch die Kontexte.

Warum Word2vec?

Vor dem Einbetten von Wörtern

Es ist wichtig zu wissen, welcher Ansatz vor dem Einbetten von Wörtern verwendet wird und welche Nachteile er hat. Anschließend werden wir uns dem Thema widmen, wie Fehler durch das Einbetten von Wörtern mithilfe des word2vec-Ansatzes überwunden werden. Schließlich werden wir die Funktionsweise von word2vec verschieben, da es wichtig ist, zu verstehen, dass es funktioniert.

Ansatz zur latenten semantischen Analyse

Dies ist der Ansatz, der vor dem Einbetten von Wörtern verwendet wurde. Es wurde das Konzept des Wortbeutels verwendet, bei dem Wörter in Form von codierten Vektoren dargestellt werden. Es ist eine spärliche Vektordarstellung, bei der die Dimension der Größe des Vokabulars entspricht. Wenn das Wort im Wörterbuch vorkommt, wird es gezählt, sonst nicht. Weitere Informationen finden Sie im folgenden Programm.

from sklearn.feature_extraction.text import CountVectorizervectorizer=CountVectorizer()data_corpus=["guru99 is the best sitefor online tutorials. I love to visit guru99."]vocabulary=vectorizer.fit(data_corpus)X= vectorizer.transform(data_corpus)print(X.toarray())print(vocabulary.get_feature_names())

Ausgabe:

[[1 2 1 1 1 1 1 1 1 1]] [u'best', u'guru99', u'is', u'love', u'online', u'sitefor', u'the', u'to', u'tutorials', u'visit']

Code Erklärung

  1. CountVectorizer ist das Modul, in dem das Vokabular basierend auf der Anpassung der darin enthaltenen Wörter gespeichert wird. Dies wird aus dem sklearn importiert
  2. Erstellen Sie das Objekt mit der Klasse CountVectorizer.
  3. Schreiben Sie die Daten in die Liste, die in den CountVectorizer eingepasst werden soll.
  4. Daten werden in das aus der Klasse CountVectorizer erstellte Objekt eingepasst.
  5. Wenden Sie einen Bag-of-Word-Ansatz an, um Wörter in den Daten mithilfe des Wortschatzes zu zählen. Wenn im Wortschatz kein Wort oder Token verfügbar ist, wird diese Indexposition auf Null gesetzt.
  6. Die Variable in Zeile 5, die x ist, wird in ein Array konvertiert (Methode für x verfügbar). Dadurch wird die Anzahl der Token in dem in Zeile 3 angegebenen Satz oder der Liste angegeben.
  7. Dies zeigt die Merkmale, die Teil des Vokabulars sind, wenn es unter Verwendung der Daten in Zeile 4 angepasst wird.

Beim latenten semantischen Ansatz repräsentiert die Zeile eindeutige Wörter, während die Spalte die Häufigkeit darstellt, mit der dieses Wort im Dokument erscheint. Es ist eine Darstellung von Wörtern in Form der Dokumentmatrix. Die inverse Dokumentfrequenz (TFIDF) wird verwendet, um die Häufigkeit von Wörtern im Dokument zu zählen, dh die Häufigkeit des Begriffs im Dokument / die Häufigkeit des Begriffs im gesamten Korpus.

Mangel an Bag of Words-Methode

  • Es ignoriert die Reihenfolge des Wortes, zum Beispiel ist dies schlecht = schlecht ist dies.
  • Es ignoriert den Kontext von Wörtern. Angenommen, ich schreibe den Satz "Er liebte Bücher. Bildung findet man am besten in Büchern". Es würde zwei Vektoren erstellen, einen für "Er liebte Bücher" und einen für "Bildung ist am besten in Büchern zu finden". Es würde beide orthogonal behandeln, was sie unabhängig macht, aber in Wirklichkeit sind sie miteinander verwandt

Um diese Einschränkung zu überwinden, wurde die Worteinbettung entwickelt und word2vec ist ein Ansatz, um solche zu implementieren.

Wie funktioniert Word2vec?

Word2vec lernt das Wort, indem es den umgebenden Kontext vorhersagt. Nehmen wir zum Beispiel das Wort "Er liebt Fußball".

Wir wollen das Wort 2vec für das Wort berechnen: liebt.

Annehmen

loves = Vin. P(Vout / Vin) is calculatedwhere,Vin is the input word.P is the probability of likelihood.Vout is the output word.

Wort liebt bewegt sich über jedes Wort in dem Korpus. Sowohl die syntaktische als auch die semantische Beziehung zwischen Wörtern wird codiert. Dies hilft beim Finden ähnlicher und analoger Wörter.

Alle zufälligen Merkmale des Wortes Liebe werden berechnet. Diese Funktionen werden mithilfe einer Back-Propagation-Methode in Bezug auf Nachbar- oder Kontextwörter geändert oder aktualisiert.

Eine andere Art des Lernens besteht darin, dass, wenn der Kontext von zwei Wörtern ähnlich ist oder zwei Wörter ähnliche Merkmale aufweisen, solche Wörter verwandt sind.

Word2vec-Architektur

Es gibt zwei Architekturen, die von word2vec verwendet werden

  1. Fortlaufender Wortbeutel (CBOW)
  2. Gramm überspringen

Bevor wir fortfahren, wollen wir diskutieren, warum diese Architekturen oder Modelle aus Sicht der Wortrepräsentation wichtig sind. Das Erlernen der Wortrepräsentation ist im Wesentlichen unbeaufsichtigt, es werden jedoch Ziele / Bezeichnungen benötigt, um das Modell zu trainieren. Skip-Gramm und CBOW wandeln unbeaufsichtigte Repräsentation in eine überwachte Form für das Modelltraining um.

In CBOW wird das aktuelle Wort unter Verwendung des Fensters der umgebenden Kontextfenster vorhergesagt. Wenn beispielsweise w i-1 , w i-2 , w i + 1 , w i + 2 Wörter oder Kontext erhalten, liefert dieses Modell w i

Skip-Gram verhält sich entgegengesetzt zu CBOW, was impliziert, dass es die gegebene Sequenz oder den gegebenen Kontext aus dem Wort vorhersagt. Sie können das Beispiel umkehren, um es zu verstehen. Wenn w i gegeben ist, wird dies den Kontext vorhersagen oder w i-1 , w i-2 , w i + 1 , w i + 2.

Word2vec bietet die Möglichkeit, zwischen CBOW (Continuous Bag of Words) und Skim-Gramm zu wählen. Solche Parameter werden während des Trainings des Modells bereitgestellt. Man kann die Option haben, eine negative Abtastung oder eine hierarchische Softmax-Schicht zu verwenden.

Fortlaufende Tasche voller Wörter.

Zeichnen wir ein einfaches Diagramm, um die fortlaufende Tasche der Wortarchitektur zu verstehen.

Abbildung Kontinuierliche Tasche der Wortarchitektur

Berechnen wir die Gleichungen mathematisch. Angenommen, V ist die Vokabulargröße und N ist die Größe der verborgenen Ebene. Die Eingabe ist definiert als {x i-1 , x i-2, x i + 1, x i + 2 }. Wir erhalten die Gewichtsmatrix durch Multiplizieren von V * N. Eine andere Matrix wird durch Multiplizieren des Eingabevektors mit der Gewichtsmatrix erhalten. Dies kann auch durch die folgende Gleichung verstanden werden.

h = xi t W.

wobei xi t ∧ W der Eingabevektor bzw. die Gewichtsmatrix sind,

Um die Übereinstimmung zwischen dem Kontext und dem nächsten Wort zu berechnen, beziehen Sie sich bitte auf die folgende Gleichung

u = vorhergesagte Darstellung * h

wobei die vorhergesagte Darstellung Modell ∧h in der obigen Gleichung erhalten wird.

Skip-Gram-Modell

Der Skip-Gram-Ansatz wird verwendet, um einen Satz mit einem eingegebenen Wort vorherzusagen. Um es besser zu verstehen, zeichnen wir das Diagramm.

Abbildung Skip-Gram-Modell

Man kann es als die Umkehrung des fortlaufenden Wortmodells behandeln, bei dem die Eingabe das Wort ist und das Modell den Kontext oder die Sequenz bereitstellt. Wir können auch schließen, dass das Ziel der Eingabe- und Ausgabeschicht zugeführt wird und mehrmals repliziert wird, um die ausgewählte Anzahl von Kontextwörtern aufzunehmen. Der Fehlervektor aus der gesamten Ausgabeschicht wird summiert, um die Gewichte über eine Backpropagation-Methode anzupassen.

Welches Modell soll ich wählen?

CBOW ist um ein Vielfaches schneller als das Überspringen von Gramm und bietet eine bessere Häufigkeit für häufige Wörter, während das Überspringen von Gramm eine kleine Menge an Trainingsdaten benötigt und sogar seltene Wörter oder Phrasen darstellt.

Die Beziehung zwischen Word2vec und NLTK

NLTK ist ein Toolkit für natürliche Sprachen. Es wird zur Vorverarbeitung des Textes verwendet. Man kann verschiedene Operationen ausführen, wie z. B. Teile der Sprachkennzeichnung, Lemmatisierung, Stemming, Entfernung von Wörtern stoppen, seltene Wörter oder am wenigsten verwendete Wörter entfernen. Es hilft beim Reinigen des Textes sowie beim Vorbereiten der Funktionen aus den effektiven Wörtern. Auf die andere Weise wird word2vec für semantische (eng miteinander verbundene Elemente) und syntaktische (Sequenz-) Übereinstimmungen verwendet. Mit word2vec kann man ähnliche Wörter, unterschiedliche Wörter, Dimensionsreduktion und viele andere finden. Ein weiteres wichtiges Merkmal von word2vec ist die Umwandlung der höherdimensionalen Darstellung des Textes in eine niedrigdimensionale Darstellung von Vektoren.

Wo kann man NLTK und Word2vec verwenden?

Wenn Sie einige der oben genannten allgemeinen Aufgaben wie Tokenisierung, POS-Tagging und -Parsing ausführen müssen, müssen Sie NLTK verwenden, während Sie Word2vec verwenden müssen, um Wörter anhand eines bestimmten Kontexts, einer bestimmten Themenmodellierung oder einer ähnlichen Ähnlichkeit von Dokumenten vorherzusagen.

Beziehung von NLTK und Word2vec mit Hilfe von Code

NLTK und Word2vec können zusammen verwendet werden, um ähnliche Wortrepräsentationen oder syntaktische Übereinstimmungen zu finden. Mit dem NLTK-Toolkit können viele Pakete geladen werden, die mit NLTK geliefert werden, und das Modell kann mit word2vec erstellt werden. Es kann dann an den Echtzeitwörtern getestet werden. Lassen Sie uns die Kombination von beiden im folgenden Code sehen. Bevor Sie weiterarbeiten, werfen Sie bitte einen Blick auf die Korpora, die NLTK bereitstellt. Sie können mit dem Befehl herunterladen

nltk(nltk.download('all'))

Abbildung Korpora mit NLTK heruntergeladen

Den Code finden Sie im Screenshot.

import nltkimport gensimfrom nltk.corpus import abcmodel= gensim.models.Word2Vec(abc.sents())X= list(model.wv.vocab)data=model.most_similar('science')print(data)

Ausgabe:

[('law', 0.9415997266769409), ('practice', 0.9276568293571472), ('discussion', 0.9259148836135864), ('agriculture', 0.9257254004478455), ('media', 0.9232194423675537), ('policy', 0.922248125076294), ('general', 0.9166069030761719), ('undertaking', 0.916458249092102), ('tight', 0.9129181504249573), ('board', 0.9107444286346436)]

Erklärung des Codes

  1. Es wird eine nltk-Bibliothek importiert, von der Sie den abc-Korpus herunterladen können, den wir im nächsten Schritt verwenden werden.
  2. Gensim wird importiert. Wenn Gensim nicht installiert ist, installieren Sie es bitte mit dem Befehl "pip3 install gensim". Bitte sehen Sie den folgenden Screenshot.

Abbildung Installieren von Gensim mit PIP

  1. Importieren Sie den Korpus abc, der mit nltk.download ('abc') heruntergeladen wurde.
  2. Übergeben Sie die Dateien an das Modell word2vec, das mit Gensim als Sätze importiert wird.
  3. Der Wortschatz wird in Form der Variablen gespeichert.
  4. Das Modell wird anhand von Beispielwörtern getestet, da diese Dateien mit der Wissenschaft zusammenhängen.
  5. Hier wird das ähnliche Wort "Wissenschaft" vom Modell vorhergesagt.

Aktivatoren und Word2Vec

Die Aktivierungsfunktion des Neurons definiert die Ausgabe dieses Neurons bei einer Reihe von Eingaben. Biologisch inspiriert von einer Aktivität in unserem Gehirn, bei der verschiedene Neuronen mit unterschiedlichen Reizen aktiviert werden. Lassen Sie uns die Aktivierungsfunktion anhand des folgenden Diagramms verstehen.

Abbildung Grundlegendes zur Aktivierungsfunktion

Hier ist x1, x2,… x4 der Knoten des neuronalen Netzwerks.

w1, w2, w3 ist das Gewicht des Knotens,

∑ ist die Summe aller Gewichte und Knotenwerte, die als Aktivierungsfunktion fungieren.

Warum Aktivierungsfunktion?

Wenn keine Aktivierungsfunktion verwendet wird, ist die Ausgabe linear, aber die Funktionalität der linearen Funktion ist begrenzt. Um komplexe Funktionen wie Objekterkennung, Bildklassifizierung, Texteingabe mit Sprache und viele andere nichtlineare Ausgaben zu erreichen, ist dies erforderlich, was mithilfe der Aktivierungsfunktion erreicht wird.

Wie die Aktivierungsschicht in der Worteinbettung berechnet wird (word2vec)

Softmax Layer (normalisierte Exponentialfunktion) ist die Ausgabeebenenfunktion, die jeden Knoten aktiviert oder auslöst. Ein anderer Ansatz ist der hierarchische Softmax, bei dem die Komplexität durch O (log 2 V) berechnet wird, wobei der Softmax O (V) ist, wobei V die Vokabulargröße ist. Der Unterschied zwischen diesen besteht in der Verringerung der Komplexität in der hierarchischen Softmax-Schicht. Schauen Sie sich das folgende Beispiel an, um die Funktionalität (Hierarchical Softmax) zu verstehen:

Abbildung Hierarchische softmaxbaumartige Struktur

Angenommen, wir möchten die Wahrscheinlichkeit berechnen, das Wort Liebe in einem bestimmten Kontext zu beobachten. Der Fluss von der Wurzel zum Blattknoten ist der erste Schritt zu Knoten 2 und dann zu Knoten 5. Wenn wir also die Vokabulargröße 8 hatten, sind nur drei Berechnungen erforderlich. So kann die Wahrscheinlichkeit eines Wortes ( Liebe ) zerlegt und berechnet werden .

Welche anderen Optionen als Hierarchical Softmax sind verfügbar?

Wenn allgemein für Worteinbettungsoptionen gesprochen wird, stehen differenzierter Softmax, CNN-Softmax, Wichtigkeitsabtastung, adaptive Wichtigkeitsabtastung, rauschkontrastive Schätzungen, negative Abtastung, Selbstnormalisierung und seltene Normalisierung zur Verfügung.

Wenn wir speziell über Word2vec sprechen, stehen negative Stichproben zur Verfügung.

Negative Sampling ist eine Möglichkeit, die Trainingsdaten abzutasten. Es ist ein bisschen wie ein stochastischer Gradientenabstieg, aber mit einem gewissen Unterschied. Negative Stichproben suchen nur nach negativen Trainingsbeispielen. Es basiert auf einer rauschkontrastiven Schätzung und wählt zufällig Wörter aus, nicht im Kontext. Es ist eine schnelle Trainingsmethode und wählt den Kontext zufällig aus. Wenn das vorhergesagte Wort im zufällig ausgewählten Kontext erscheint, sind beide Vektoren nahe beieinander.

Welche Schlussfolgerung kann gezogen werden?

Aktivatoren feuern die Neuronen genauso wie unsere Neuronen mit den externen Reizen. Die Softmax-Schicht ist eine der Ausgangsschichtfunktionen, die bei der Worteinbettung die Neuronen auslöst. In word2vec haben wir Optionen wie hierarchisches Softmax und negatives Sampling. Unter Verwendung von Aktivatoren kann man die lineare Funktion in die nichtlineare Funktion umwandeln, und ein komplexer Algorithmus für maschinelles Lernen kann unter Verwendung solcher implementiert werden.

Was ist Gensim?

Gensim ist ein Toolkit zur Themenmodellierung, das in Python implementiert ist. Bei der Themenmodellierung werden verborgene Strukturen im Textkörper entdeckt. Word2vec wird aus dem Gensim-Toolkit importiert. Bitte beachten Sie, dass Gensim nicht nur eine Implementierung von word2vec bietet, sondern auch Doc2vec und FastText. In diesem Tutorial dreht sich alles um word2vec, sodass wir uns an das aktuelle Thema halten.

Implementierung von word2vec mit Gensim

Bis jetzt haben wir diskutiert, was word2vec ist, seine unterschiedlichen Architekturen, warum es eine Verschiebung von einer Worttüte zu word2vec gibt, die Beziehung zwischen word2vec und NLTK mit Live-Code und Aktivierungsfunktionen. In diesem Abschnitt wird word2vec mit Gensim implementiert

Schritt 1) ​​Datenerfassung

Der erste Schritt zur Implementierung eines maschinellen Lernmodells oder zur Implementierung der Verarbeitung natürlicher Sprache ist die Datenerfassung

Bitte beachten Sie die Daten, um einen intelligenten Chatbot zu erstellen.

[{"tag": "welcome","patterns": ["Hi", "How are you", "Is any one to talk?", "Hello", "hi are you available"],"responses": ["Hello, thanks for contacting us", "Good to see you here"," Hi there, how may I assist you?"]},{"tag": "goodbye","patterns": ["Bye", "See you later", "Goodbye", "I will come back soon"],"responses": ["See you later, thanks for visiting", "have a great day ahead", "Wish you Come back again soon."]},{"tag": "thankful","patterns": ["Thanks for helping me", "Thank your guidance", "That's helpful and kind from you"],"responses": ["Happy to help!", "Any time!", "My pleasure", "It is my duty to help you"]},{"tag": "hoursopening","patterns": ["What hours are you open?", "Tell your opening time?", "When are you open?", "Just your timing please"],"responses": ["We're open every day 8am-7pm", "Our office hours are 8am-7pm every day", "We open office at 8 am and close at 7 pm"]},{"tag": "payments","patterns": ["Can I pay using credit card?", " Can I pay using Mastercard?", " Can I pay using cash only?" ],"responses": ["We accept VISA, Mastercard and credit card", "We accept credit card, debit cards and cash. Please don’t worry"]}]

Folgendes verstehen wir aus den Daten

  • Diese Daten enthalten drei Dinge: Tag, Muster und Antworten. Das Tag ist die Absicht (was ist das Thema der Diskussion).
  • Die Daten sind im JSON-Format.
  • Ein Muster ist eine Frage, die Benutzer dem Bot stellen
  • Antworten ist die Antwort, die der Chatbot auf die entsprechende Frage / das entsprechende Muster gibt.

Schritt 2) Datenvorverarbeitung.

Es ist sehr wichtig, die Rohdaten zu verarbeiten. Wenn bereinigte Daten der Maschine zugeführt werden, reagiert das Modell genauer und lernt die Daten effizienter.

In diesem Schritt werden Stoppwörter, Stemming, unnötige Wörter usw. entfernt. Bevor Sie fortfahren, müssen Sie Daten laden und in einen Datenrahmen konvertieren. Bitte beachten Sie den folgenden Code für solche

import jsonjson_file =’intents.json'with open('intents.json','r') as f:data = json.load(f)

Erklärung des CODE.

  1. Da die Daten in Form eines JSON-Formats vorliegen, wird JSON importiert
  2. Die Datei wird in der Variablen gespeichert
  3. Die Datei ist geöffnet und wird in die Datenvariable geladen

Jetzt werden Daten importiert und es ist Zeit, Daten in Datenrahmen zu konvertieren. Bitte beachten Sie den folgenden Code, um den nächsten Schritt zu sehen

import pandas as pddf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)

Erklärung des CODE

1. Daten werden mit Pandas, die oben importiert wurden, in einen Datenrahmen konvertiert.

2. Die Liste wird in Spaltenmustern in Zeichenfolgen konvertiert.

from nltk.corpus import stopwordsfrom textblob import Wordstop = stopwords.words('english')df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split()))df['patterns't']= df['patterns''].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation)df['patterns']= df['patterns'].str.replace('[^\w\s]','')df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit()))df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop))df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))

Code Erklärung

1. Englische Stoppwörter werden mit dem Stoppwortmodul aus dem nltk-Toolkit importiert

2. Alle Wörter des Textes werden unter Verwendung der Bedingungs- und Lambda-Funktion in Kleinbuchstaben umgewandelt. Die Lambda-Funktion ist eine anonyme Funktion.

3. Alle Textzeilen im Datenrahmen werden auf Zeichensetzung überprüft und gefiltert.

4. Zeichen wie Zahlen oder Punkte werden mit einem regulären Ausdruck entfernt.

5. Ziffern werden aus dem Text entfernt.

6. Stoppwörter werden zu diesem Zeitpunkt entfernt.

7. Wörter werden jetzt gefiltert und verschiedene Formen desselben Wortes werden durch Lemmatisierung entfernt. Damit haben wir die Datenvorverarbeitung abgeschlossen.

Ausgabe:

, patterns, responses, tag0,hi one talk hello hi available,"['Hello, thanks for contacting us', 'Good to see you here', ' Hi there, how may I assist you?']",welcome1,bye see later goodbye come back soon,"['See you later, thanks for visiting', 'have a great day ahead', 'Wish you Come back again soon.']",goodbye2,thanks helping thank guidance thats helpful kind,"['Happy to help!', 'Any time!', 'My pleasure', 'It is my duty to help you']",thankful3,hour open tell opening time open timing please,"[""We're open every day 8am-7pm"", 'Our office hours are 8am-7pm every day', 'We open office at 8 am and close at 7 pm']",hoursopening4,pay using credit card pay using mastercard pay using cash,"['We accept VISA, Mastercard and credit card', 'We accept credit card, debit cards and cash. Please don’t worry']",payments

Schritt 3) Aufbau eines neuronalen Netzwerks mit word2vec

Jetzt ist es Zeit, ein Modell mit dem Gensim-Modul word2vec zu erstellen. Wir müssen word2vec aus Gensim importieren. Lassen Sie uns dies tun, und dann werden wir bauen und in der letzten Phase das Modell anhand von Echtzeitdaten überprüfen.

from gensim.models import Word2Vec

Jetzt können wir das Modell erfolgreich mit Word2Vec erstellen. In der nächsten Codezeile erfahren Sie, wie Sie das Modell mit Word2Vec erstellen. Der Text wird dem Modell in Form einer Liste zur Verfügung gestellt, sodass wir den Text mithilfe des folgenden Codes vom Datenrahmen in eine Liste konvertieren

Bigger_list=[]for i in df['patterns']li = list(i.split(""))Bigger_list.append(li)Model= Word2Vec(Bigger_list,min_count=1,size=300,workers=4)

Erläuterungen zum Code

1. Erstellt die größere Liste, an die die innere Liste angehängt wird. Dies ist das Format, das dem Modell Word2Vec zugeführt wird.

2. Die Schleife wird implementiert und jeder Eintrag in der Musterspalte des Datenrahmens wird iteriert.

3. Jedes Element der Spaltenmuster wird aufgeteilt und in der inneren Liste li gespeichert

4. Die innere Liste wird an die äußere Liste angehängt.

5. Diese Liste wird dem Word2Vec-Modell zur Verfügung gestellt. Lassen Sie uns einige der hier angegebenen Parameter verstehen

Min_count: Alle Wörter mit einer niedrigeren Gesamtfrequenz werden ignoriert.

Größe: Zeigt die Dimensionalität der Wortvektoren an.

Arbeiter: Dies sind die Fäden, um das Modell zu trainieren

Es stehen auch andere Optionen zur Verfügung, und einige wichtige werden im Folgenden erläutert

Fenster: Maximaler Abstand zwischen dem aktuellen und dem vorhergesagten Wort innerhalb eines Satzes.

Sg: Es ist ein Trainingsalgorithmus und 1 für das Überspringen von Gramm und 0 für eine fortlaufende Worttüte. Wir haben diese oben ausführlich besprochen.

Hs: Wenn dies 1 ist, verwenden wir hierarchisches Softmax für das Training und wenn 0, wird eine negative Abtastung verwendet.

Alpha: Anfangslernrate

Lassen Sie uns den endgültigen Code unten anzeigen

#list of libraries used by the codeimport stringfrom gensim.models import Word2Vecimport loggingfrom nltk.corpus import stopwordsfrom textblob import Wordimport jsonimport pandas as pd#data in json formatjson_file = 'intents.json'with open('intents.json','r') as f:data = json.load(f)#displaying the list of stopwordsstop = stopwords.words('english')#dataframedf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)# print(df['patterns'])#print(df['patterns'])#cleaning the data using the NLP approachprint(df)df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split()))df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation))df['patterns']= df['patterns'].str.replace('[^\w\s]','')df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit()))df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop))df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))#taking the outer listbigger_list=[]for i in df['patterns']:li = list(i.split(" "))bigger_list.append(li)#structure of data to be taken by the model.word2vecprint("Data format for the overall list:",bigger_list)#custom data is fed to machine for further processingmodel = Word2Vec(bigger_list, min_count=1,size=300,workers=4)#print(model)

Schritt 4) Modell speichern

Das Modell kann in Form eines Fachs und eines Modellformulars gespeichert werden. Bin ist das Binärformat. Bitte beachten Sie die folgenden Zeilen, um das Modell zu speichern

model.save("word2vec.model")model.save("model.bin")

Erläuterung des obigen Codes

1. Das Modell wird in Form einer .model-Datei gespeichert.

2. Modell wird in Form einer .bin-Datei gespeichert

Wir werden dieses Modell verwenden, um Echtzeit-Tests wie ähnliche Wörter, unterschiedliche Wörter und die häufigsten Wörter durchzuführen.

Schritt 5) Laden des Modells und Durchführen von Echtzeit-Tests

Das Modell wird mit dem folgenden Code geladen

model = Word2Vec.load('model.bin')

Wenn Sie das Vokabular daraus drucken möchten, verwenden Sie den folgenden Befehl

Vokabeln = Liste (model.wv.vocab)

Bitte sehen Sie das Ergebnis

['see', 'thank', 'back', 'thanks', 'soon', 'open', 'mastercard', 'card', 'time', 'pay', 'talk', 'cash', 'one', 'please', 'goodbye', 'thats', 'helpful', 'hour', 'credit', 'hi', 'later', 'guidance', 'opening', 'timing', 'hello', 'helping', 'bye', 'tell', 'come', 'using', 'kind', 'available'] 

Schritt 6) Überprüfung der meisten ähnlichen Wörter

Lassen Sie uns die Dinge praktisch umsetzen

similar_words = model.most_similar('thanks')print(similar_words)

Bitte sehen Sie das Ergebnis

[('kind', 0.16104359924793243), ('using', 0.1352398842573166), ('come', 0.11500970274209976), ('later', 0.09989878535270691), ('helping', 0.04855936020612717), ('credit', 0.04659383371472359), ('pay', 0.0329081267118454), ('thank', 0.02484947443008423), ('hour', 0.0202352125197649), ('opening', 0.018177658319473267)] 

Schritt 7) Stimmt nicht mit den angegebenen Wörtern überein

dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split())print(dissimlar_words)

Wir haben die Worte "Bis später, danke für Ihren Besuch" geliefert . Dadurch werden die unterschiedlichsten Wörter aus diesen Wörtern gedruckt. Lassen Sie uns diesen Code ausführen und das Ergebnis finden

Das Ergebnis nach Ausführung des obigen Codes.

Thanks

Schritt 8) Finden der Ähnlichkeit zwischen zwei Wörtern

Dies führt zu einer Ähnlichkeitswahrscheinlichkeit zwischen zwei Wörtern. Bitte beachten Sie den folgenden Code, wie dieser Abschnitt ausgeführt wird.

similarity_two_words = model.similarity('please','see')print("Please provide the similarity between these two words:")print(similarity_two_words)

Das Ergebnis des obigen Codes ist wie folgt

0,13706

Sie können ähnliche Wörter weiter finden, indem Sie den folgenden Code ausführen

similar = model.similar_by_word('kind')print(similar)

Ausgabe des obigen Codes

[('credit', 0.11764447391033173), ('cash', 0.11440904438495636), ('one', 0.11151769757270813), ('hour', 0.0944807156920433), ('using', 0.0705675333738327), ('thats', 0.05206916481256485), ('later', 0.04502468928694725), ('bye', 0.03960943967103958), ('back', 0.03837274760007858), ('thank', 0.0380823090672493)]

Fazit

  • Das Einbetten von Wörtern ist eine Art der Wortdarstellung, mit der Wörter mit ähnlicher Bedeutung von Algorithmen für maschinelles Lernen verstanden werden können
  • Die Worteinbettung wird verwendet, um ähnliche Wörter zu berechnen. Erstellen Sie eine Gruppe verwandter Wörter. Funktion zur Textklassifizierung. Dokumentclustering. Verarbeitung natürlicher Sprache
  • Word2vec ist ein flaches zweischichtiges neuronales Netzwerkmodell zur Erzeugung von Worteinbettungen für eine bessere Wortdarstellung
  • Word2vec repräsentiert Wörter in der Vektorraumdarstellung. Wörter werden in Form von Vektoren dargestellt, und die Platzierung erfolgt so, dass Wörter mit ähnlicher Bedeutung zusammen erscheinen und unterschiedliche Wörter weit entfernt sind
  • Word2vec verwendete 2 Architekturen Continuous Bag of Words (CBOW) und übersprang Gramm
  • CBOW ist um ein Vielfaches schneller als das Überspringen von Gramm und bietet eine bessere Häufigkeit für häufige Wörter, während das Überspringen von Gramm eine kleine Menge an Trainingsdaten benötigt und sogar seltene Wörter oder Phrasen darstellt.
  • NLTK und word2vec können zusammen verwendet werden, um leistungsstarke Anwendungen zu erstellen
  • Die Aktivierungsfunktion des Neurons definiert die Ausgabe dieses Neurons bei einer Reihe von Eingaben. In word2vec. Softmax Layer (normalisierte Exponentialfunktion) ist die Ausgabeebenenfunktion, die jeden Knoten aktiviert oder auslöst. In Word2vec stehen auch negative Stichproben zur Verfügung
  • Gensim ist ein Toolkit zur Themenmodellierung, das in Python implementiert ist