Worteinbettung und Word2Vec-Modell mit Beispiel

Was ist Worteinbettung?

Word-Einbettung ist ein Wortdarstellungstyp, der maschinelles Lernen ermöglicht algorithms Wörter mit ähnlicher Bedeutung verstehen. Es handelt sich um eine Sprachmodellierungs- und Feature-Learning-Technik, um Wörter in reale Vektoren abzubilden numbers unter Verwendung neuronaler Netze, probabilistischer Modelle oder Dimensionsreduktion der Wortkoexistenzmatrix. Einige Worteinbettungsmodelle sind Word2vec (Google), Glove (Stanford) und schnellste (Facebook).

Worteinbettung wird auch als verteiltes semantisches Modell oder verteilt dargestellter oder semantischer Vektorraum oder Vektorraummodell bezeichnet. Wenn Sie diese Namen lesen, stoßen Sie auf das Wort Semantik, das bedeutet, ähnliche Wörter zusammenzufassen. Beispielsweise sollten Früchte wie Apfel, Mango und Banane in der Nähe platziert werden, während Bücher weit entfernt von diesen Wörtern platziert werden. Im weiteren Sinne wird durch die Worteinbettung der Vektor von Früchten erstellt, der weit entfernt von der Vektordarstellung von Büchern platziert wird.

Wo wird Worteinbettung eingesetzt?

Das Einbetten von Wörtern hilft bei der Generierung von Funktionen und Dokumenten clustering, Textklassifizierung und Verarbeitung natürlicher Sprache. Lassen Sie uns sie auflisten und über jede dieser Anwendungen diskutieren.

  • Berechnen Sie ähnliche Wörter: Die Worteinbettung wird verwendet, um ähnliche Wörter wie das Wort vorzuschlagen, das dem Vorhersagemodell unterzogen wird. Darüber hinaus werden auch unterschiedliche Wörter sowie die gebräuchlichsten Wörter vorgeschlagen.
  • Erstellen Sie eine Gruppe verwandter Wörter: Es wird für die semantische Gruppierung verwendet, die Dinge mit ähnlichen Eigenschaften zusammen und unähnliche in weiter Entfernung gruppiert.
  • Funktion zur Textklassifizierung: Text wird in Arrays von Vektoren abgebildet, die dem Modell zum Training und zur Vorhersage zugeführt werden. Textbasierte Klassifikatormodelle können nicht auf der Zeichenfolge trainiert werden, daher wird der Text dadurch in eine maschinentrainierbare Form umgewandelt. Weitere Funktionen zum Aufbau semantischer Hilfe bei der textbasierten Klassifizierung.
  • Dokument clustering: ist eine weitere Anwendung, bei der Word Embedding Word2vec weit verbreitet ist
  • Verarbeitung natürlicher Sprache: Es gibt viele Anwendungen, bei denen die Worteinbettung nützlich ist und Phasen der Merkmalsextraktion überwiegt, wie z. B. die Kennzeichnung von Wortarten, sentimentale Analysen und syntaktische Analysen. Jetzt haben wir einige Kenntnisse über die Worteinbettung. Es wird auch etwas Licht auf verschiedene Modelle zur Implementierung der Worteinbettung geworfen. Dieses gesamte Tutorial zur Word-Einbettung konzentriert sich auf eines der Modelle (Word2vec).

Was ist Word2vec?

Word2vec ist eine Technik/ein Modell zur Erzeugung von Worteinbettungen für eine bessere Wortdarstellung. Es handelt sich um eine Methode zur Verarbeitung natürlicher Sprache, die eine große Anzahl präziser syntaktischer und semantischer Wortbeziehungen erfasst. Es handelt sich um ein flaches zweischichtiges neuronales Netzwerk, das synonyme Wörter erkennen und nach dem Training zusätzliche Wörter für Teilsätze vorschlagen kann.

Bevor Sie mit diesem Word2vec-Tutorial fortfahren, sehen Sie sich bitte den Unterschied zwischen flachem und tiefem neuronalem Netzwerk an, wie im folgenden Beispieldiagramm für die Word-Einbettung dargestellt:

Das flache neuronale Netzwerk besteht nur aus einer verborgenen Schicht zwischen Eingabe und Ausgabe, während das tiefe neuronale Netzwerk mehrere verborgene Schichten zwischen Eingabe und Ausgabe enthält. Die Eingabe erfolgt über Knoten, während die verborgene Schicht sowie die Ausgabeschicht Neuronen enthalten.

Flaches vs. tiefes Lernen
Flaches vs. tiefes Lernen

Word2vec ist ein zweischichtiges Netzwerk, bei dem es eine verborgene Eingabeschicht und eine Ausgabe gibt.

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

Warum 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 Wörter mit unterschiedlicher Bedeutung weit entfernt liegen. Dies wird auch als semantische Beziehung bezeichnet. Neuronale Netze verstehen keinen Text, sondern nur Text numbers. Word Embedding bietet eine Möglichkeit, Text in einen numerischen Vektor umzuwandeln.

Word2vec rekonstruiert den sprachlichen Kontext von Wörtern. Bevor wir fortfahren, lassen Sie uns verstehen: Was ist ein sprachlicher Kontext? Wenn wir in einem allgemeinen Lebensszenario sprechen oder schreiben, um zu kommunizieren, versuchen andere Menschen herauszufinden, was das Ziel des Satzes ist. Beispiel: „Wie hoch ist die Temperatur in Indien?“ Hier ist der Kontext der, dass der Benutzer „Temperatur in Indien“ wissen möchte, was den Kontext darstellt. Kurz gesagt, das Hauptziel eines Satzes ist der Kontext. Wörter oder Sätze rund um die gesprochene oder geschriebene Sprache (Offenlegung) helfen bei der Bestimmung der Bedeutung des Kontexts. Word2vec lernt die Vektordarstellung von Wörtern durch die Kontexte.

Was macht Word2vec?

Vor der Worteinbettung

Es ist wichtig zu wissen, welcher Ansatz vor der Worteinbettung verwendet wird und welche Nachteile er hat. Anschließend wenden wir uns dem Thema zu, wie Nachteile durch Worteinbettung mithilfe des Word2vec-Ansatzes überwunden werden. Abschließend werden wir uns mit der Funktionsweise von Word2vec befassen, da es wichtig ist, seine Funktionsweise zu verstehen.

Ansatz zur latenten semantischen Analyse

Dies ist der Ansatz, der vor der Worteinbettung verwendet wurde. Dabei wurde das Konzept der Bag of Words verwendet, bei dem Wörter in Form codierter Vektoren dargestellt werden. Es handelt sich um 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, andernfalls nicht. Um mehr zu erfahren, sehen Sie sich bitte das folgende Programm an.

Word2vec-Beispiel

Word2vec-Beispiel

from sklearn.feature_extraction.text import CountVectorizer
vectorizer=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())

Ausgang:

[[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, das zum Speichern des Vokabulars basierend auf der Einpassung der darin enthaltenen Wörter verwendet 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 sollen.
  4. Die 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 Vokabulars zu zählen. Wenn das Wort oder Token im Vokabular nicht verfügbar ist, wird die Indexposition auf Null gesetzt.
  6. Die Variable in Zeile 5, die x ist, wird in ein Array konvertiert (für x verfügbare Methode). Dadurch wird die Anzahl jedes Tokens im Satz oder in der Liste in Zeile 3 angezeigt.
  7. Dadurch werden die Merkmale angezeigt, die Teil des Vokabulars sind, wenn es mithilfe der Daten in Zeile 4 angepasst wird.

Beim Ansatz der latenten Semantik stellt die Zeile eindeutige Wörter dar, während die Spalte angibt, wie oft dieses Wort im Dokument vorkommt. Es handelt sich um eine Darstellung von Wörtern in Form der Dokumentmatrix. Die Term-Frequency Inverse Document Frequency (TFIDF) wird verwendet, um die Häufigkeit von Wörtern im Dokument zu zählen, was der Häufigkeit des Begriffs im Dokument bzw. der Häufigkeit des Begriffs im gesamten Korpus entspricht.

Mangel der Bag of Words-Methode

  • Es ignoriert die Reihenfolge des Wortes, zum Beispiel „this is bad“ = „bad is this“.
  • 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ürden zwei Vektoren erstellt, einer für „Er liebte Bücher“ und ein anderer für „Bildung findet man am besten in Büchern“. Es würde beide orthogonal behandeln, was sie unabhängig macht, aber in Wirklichkeit sind sie miteinander verwandt

Um diese Einschränkungen zu überwinden, wurde die Worteinbettung entwickelt und Word2vec ist ein Ansatz zur Implementierung dieser Einschränkung.

Wie funktioniert Word2vec?

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

Wir wollen den Word2vec für das Wort: loves berechnen.

Angenommen

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

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

Alle zufälligen Merkmale des Wortes liebt ist berechnet. Diese Funktionen werden mit Hilfe von a in Bezug auf Nachbar- oder Kontextwörter geändert oder aktualisiert Rückwärtsausbreitung Methode.

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

Word2vec Architektur

Es gibt zwei archiVon Word2vec verwendete Texturen:

  1. Kontinuierlicher Wortschatz (CBOW)
  2. Gramm überspringen

Bevor wir mit diesem Word2vec-Tutorial fortfahren, wollen wir besprechen, warum dies so ist archiStrukturen oder Modelle sind aus Sicht der Wortdarstellung wichtig. Das Erlernen der Wortdarstellung erfolgt im Wesentlichen unbeaufsichtigt, zum Trainieren des Modells sind jedoch Ziele/Bezeichnungen erforderlich. Skip-Gram und CBOW wandeln die unbeaufsichtigte Darstellung für das Modelltraining in eine überwachte Form um.

In CBOW wird das aktuelle Wort anhand des Fensters des umgebenden Kontexts vorhergesagt windows. Wenn zum Beispiel wi-1,wi-2,wi + 1,wi + 2Werden Wörter oder Kontext angegeben, liefert dieses Modell wi

Skip-Gram führt das Gegenteil von CBOW aus, was bedeutet, dass es die gegebene Sequenz oder den gegebenen Kontext aus dem Wort vorhersagt. Sie können das Beispiel umkehren, um es zu verstehen. Wenn wi gegeben ist, wird dies den Kontext oder w vorhersageni-1,wi-2,wi + 1,wi+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. Es besteht die Möglichkeit, negative Stichproben oder hier zu verwendenarchiCal Softmax-Schicht.

Kontinuierliche Tasche von Wörtern

Lassen Sie uns ein einfaches Word2vec-Beispieldiagramm zeichnen, um die fortlaufende Wortmenge zu verstehen archiStruktur.

Kontinuierlicher Wortbeutel Architektur

Kontinuierlicher Wortbeutel Architektur

Lassen Sie uns die Gleichungen mathematisch berechnen. Angenommen, V ist die Vokabulargröße und N die Größe der verborgenen Ebene. Die Eingabe ist definiert als { xi-1, Xi-2, xi+1, xi + 2}. Wir erhalten die Gewichtsmatrix durch Multiplikation von V * N. Eine weitere Matrix erhalten wir durch Multiplikation des Eingabevektors mit der Gewichtsmatrix. Dies kann auch durch Folgendes verstanden werdenwing Gleichung.

h=xitW

wo xit? W sind der Eingabevektor bzw. die Gewichtsmatrix.

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

u=vorhergesagte Darstellung*h

wo die vorhergesagte Darstellung in der obigen Gleichung erhalten wird.

Skip-Gram-Modell

Der Skip-Gram-Ansatz wird verwendet, um einen Satz anhand eines Eingabeworts vorherzusagen. Um es besser zu verstehen, zeichnen wir das Diagramm wie im folgenden Word2vec-Beispiel gezeigt.

Skip-Gram-Modell

Skip-Gram-Modell

Man kann es als die Umkehrung des Continuous-Bag-of-Word-Modells betrachten, bei dem die Eingabe das Wort ist und das Modell den Kontext oder die Sequenz bereitstellt. Wir können auch daraus schließen, dass das Ziel der Eingabe- und Ausgabeebene zugeführt und mehrmals repliziert wird, um die gewä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 man wählen?

CBOW ist um ein Vielfaches schneller als Skip Gram und bietet eine bessere Häufigkeit für häufige Wörter, während Skip Gram 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 Sprache. Es dient der Vorverarbeitung des Textes. Man kann es anders machen operaFunktionen wie Wortteilkennzeichnung, Lemmatisierung, Wortstammbildung, Entfernung von Stoppwörtern, Entfernung seltener oder am wenigsten verwendeter Wörter. Es hilft bei der Reinigung des Textes und hilft bei der Vorbereitung der Funktionen aus den effektiven Wörtern. Andererseits wird Word2vec für den semantischen (eng verwandte Elemente) und syntaktischen (Sequenz-)Abgleich verwendet. Mit Word2vec kann man ähnliche Wörter, unterschiedliche Wörter, Dimensionsreduzierung und viele andere finden. Eine weitere wichtige Funktion von Word2vec besteht darin, die höherdimensionale Darstellung des Textes in niederdimensionale Vektoren umzuwandeln.

Wo werden NLTK und Word2vec verwendet?

Wenn man einige oben erwähnte allgemeine Aufgaben wie Tokenisierung, POS-Tagging und Parsing erledigen muss, muss man sich für die Verwendung von NLTK entscheiden, während man für die Vorhersage von Wörtern entsprechend einem Kontext, Themenmodellierung oder Dokumentähnlichkeit Word2vec verwenden muss.

Beziehung von NLTK und Word2vec mit Hilfe von Code

NLTK und Word2vec können zusammen verwendet werden, um ähnliche Wortdarstellungen oder syntaktische Übereinstimmungen zu finden. Mit dem NLTK-Toolkit können viele Pakete geladen werden, die mit NLTK geliefert werden, und Modelle können mit Word2vec erstellt werden. Es kann dann an den Echtzeitwörtern getestet werden. Sehen wir uns im Folgenden die Kombination aus beidem anwing Code. Bitte werfen Sie vor der weiteren Bearbeitung einen Blick auf die Korpora, die NLTK bereitstellt. Sie können mit dem Befehl herunterladen

nltk(nltk.download('all'))

Beziehung von NLTK und Word2vec

Mit NLTK heruntergeladene Korpora

Den Code finden Sie im Screenshot.

import nltk
import gensim
from nltk.corpus import abc

model= gensim.models.Word2Vec(abc.sents())
X= list(model.wv.vocab)
data=model.most_similar('science')
print(data)

Beziehung von NLTK und Word2vec mit Hilfe von Code

Ausgang:

[('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 die NLTK-Bibliothek importiert, von der aus Sie den ABC-Korpus herunterladen können, den wir im nächsten Schritt verwenden werden.
  2. Gensim wird importiert. Wenn Gensim Word2vec nicht installiert ist, installieren Sie es bitte mit dem Befehl „pip3 install gensim“. Bitte sehen Sie sich den folgenden Screenshot an.
Gensim mit PIP installieren

Gensim mit PIP installieren
  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 „Wissenschaft“ getestet, da diese Dateien einen Bezug zur Wissenschaft haben.
  5. Hier wird vom Modell das ähnliche Wort „Wissenschaft“ vorhergesagt.

Aktivatoren und Word2Vec

Die Aktivierungsfunktion des Neurons definiert die Ausgabe dieses Neurons bei einer gegebenen Reihe von Eingaben. Biologisch inspiriert durch eine Aktivität in unserem Gehirn, bei der verschiedene Neuronen durch unterschiedliche Reize aktiviert werden. Lassen Sie uns die Aktivierungsfunktion anhand des Folgenden verstehenwing Diagramm.

Aktivierungsfunktion in Word2vec

Aktivierungsfunktion verstehen

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 dienen.

Warum Aktivierungsfunktion?

Wenn keine Aktivierungsfunktion verwendet wird, wäre die Ausgabe linear, aber die Funktionalität der linearen Funktion ist begrenzt. Um com zu erreichenplex Es sind Funktionen wie Objekterkennung, Bildklassifizierung, Texteingabe per Sprache und viele andere nichtlineare Ausgaben erforderlich, die mithilfe der Aktivierungsfunktion erreicht werden.

Wie die Aktivierungsschicht bei der Worteinbettung berechnet wird (Word2vec)

Softmax Layer (normalisierte Exponentialfunktion) ist die Ausgabeschichtfunktion, die jeden Knoten aktiviert oder auslöst. Ein weiterer verwendeter Ansatz ist HierarchiCal Softmax, wo die complexität wird berechnet durch O(log2V) wobei der Softmax O(V) ist, wobei V die Vokabulargröße ist. Der Unterschied zwischen diesen ist die Reduzierung des complexität in hierarchiCal Softmax-Schicht. Um es zu verstehen (Hierarchi(cal softmax)-Funktionalität finden Sie im folgenden Word-Einbettungsbeispiel:

Hierarchical Softmax Baumähnliche Struktur

HierarchiCal Softmax baumartige Struktur

Angenommen, wir möchten die Wahrscheinlichkeit der Beobachtung des Wortes berechnen ich liebe einen bestimmten Kontext gegeben. Der Fluss von der Wurzel zum Blattknoten ist die erste Bewegung zu Knoten 2 und dann zu Knoten 5. Wenn wir also die Vokabulargröße von 8 hatten, sind nur drei Berechnungen erforderlich. Es ermöglicht also die Zerlegung und Berechnung der Wahrscheinlichkeit eines Wortes (ich liebe).

Welche anderen Optionen stehen außer Hier zur Verfügung?archical Softmax?

Im Allgemeinen sind für die Wörterinbettung folgende Optionen verfügbar: Differentiated Softmax, CNN-Softmax, Importance Sampling, Adaptive Importance Sampling, Noise Contrastive Estimations, Negative Sampling, Self-Normalization und Infrequent Normalization.

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

Negatives Sampling ist eine Möglichkeit, die Trainingsdaten abzutasten. Es ähnelt ein wenig dem stochastischen Gradientenabstieg, jedoch mit einigen Unterschieden. Bei der Negativstichprobe wird nur nach negativen Trainingsbeispielen gesucht. Es basiert auf der Kontrastschätzung des Rauschens und tastet Wörter nach dem Zufallsprinzip ab, nicht im Kontext. Es handelt sich um eine schnelle Trainingsmethode, bei der der Kontext zufällig ausgewählt wird. Wenn das vorhergesagte Wort in dem zufällig ausgewählten Kontext erscheint, liegen beide Vektoren nahe beieinander.

Welche Schlussfolgerung lässt sich ziehen?

Aktivatoren feuern die Neuronen ab, genau wie unsere Neuronen durch äußere Reize abgefeuert werden. Die Softmax-Schicht ist eine der Ausgabeschichtfunktionen, die bei Worteinbettungen die Neuronen auslöst. In Word2vec haben wir Optionen wie hierarchiCal Softmax und negative Probenahme. Mit Aktivatoren kann man die lineare Funktion in die nichtlineare Funktion umwandeln und eine complex Algorithmen für maschinelles Lernen können mit solchen implementiert werden.

Was ist Gensim?

Gensim ist ein Open-Source-Toolkit zur Themenmodellierung und Verarbeitung natürlicher Sprache, das in implementiert ist Python und Cython. Mit dem Gensim-Toolkit können Benutzer Word2vec zur Themenmodellierung importieren, um versteckte Strukturen im Textkörper zu entdecken. Gensim bietet nicht nur eine Implementierung von Word2vec, sondern auch für Doc2vec und FastText.

In diesem Tutorial dreht sich alles um Word2vec, daher bleiben wir beim aktuellen Thema.

So implementieren Sie Word2vec mit Gensim

Bisher haben wir besprochen, was Word2vec ist, es ist anders architekturen, warum gibt es eine shift Von einer Worttüte bis zu Word2vec, der Beziehung zwischen Word2vec und NLTK mit Live-Code und Aktivierungsfunktionen.

Nachfolgend finden Sie die Schritt-für-Schritt-Methode zur Implementierung von Word2vec mit Gensim:

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 eine intelligente aufzubauen chatbot wie im folgenden Gensim Word2vec-Beispiel gezeigt.

[{"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 Diskussionsthema).
  • Die Daten liegen im JSON-Format vor.
  • Ein Muster ist eine Frage, die Benutzer dem Bot stellen
  • Antworten ist die Antwort darauf chatbot wird auf die entsprechende Frage/das entsprechende Muster antworten.

Schritt 2) Datenvorverarbeitung

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

Dieser Schritt umfasst das Entfernen von Stoppwörtern, Wortstämmen, unnötigen Wörtern usw. Bevor Sie fortfahren, ist es wichtig, Daten zu laden und in einen Datenrahmen zu konvertieren. Bitte sehen Sie sich dazu den folgenden Code an

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

Erläuterung des Codes:

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

Jetzt werden die Daten importiert und es ist Zeit, die Daten in einen Datenrahmen umzuwandeln. Bitte sehen Sie sich den folgenden Code an, um den nächsten Schritt zu sehen

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

Erläuterung des Codes:

1. Die Daten werden mithilfe von Pandas, die oben importiert wurden, in einen Datenrahmen konvertiert.

2. Die Liste wird in Spaltenmustern in Zeichenfolgen umgewandelt.

from nltk.corpus import stopwords
from textblob import Word
stop = 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 mithilfe der for-Bedingung und der Lambda-Funktion in Kleinbuchstaben umgewandelt. Lambda-Funktion ist eine anonyme Funktion.

3. Alle Textzeilen im Datenrahmen werden auf Zeichenketten-Interpunktionen überprüft und diese werden gefiltert.

4. Charaktere wie numbers oder Punkt werden mithilfe eines regulären Ausdrucks entfernt.

5. Ziffern werden aus dem Text entfernt.

6. Stoppwörter werden zu diesem Zeitpunkt entfernt.

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

Ausgang:

, patterns, responses, tag
0,hi one talk hello hi available,"['Hello, thanks for contacting us', 'Good to see you here', ' Hi there, how may I assist you?']",welcome
1,bye see later goodbye come back soon,"['See you later, thanks for visiting', 'have a great day ahead', 'Wish you Come back again soon.']",goodbye
2,thanks helping thank guidance thats helpful kind,"['Happy to help!', 'Any time!', 'My pleasure', 'It is my duty to help you']",thankful
3,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']",hoursopening
4,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 an der Zeit, ein Modell mit dem Gensim Word2vec-Modul zu erstellen. Wir müssen Word2vec von Gensim importieren. Lassen Sie uns dies tun, und dann werden wir das Modell erstellen und in der letzten Phase anhand von Echtzeitdaten überprüfen.

from gensim.models import Word2Vec

In diesem Gensim Word2vec-Tutorial können wir nun das Modell erfolgreich mit Word2Vec erstellen. In der nächsten Codezeile erfahren Sie, wie Sie das Modell mit Word2Vec erstellen. Text wird dem Modell in Form einer Liste bereitgestellt, 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äuterung des Codes:

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. Eine 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. An die innere Liste wird die äußere Liste angehängt.

5. Diese Liste wird dem Word2Vec-Modell bereitgestellt. Lassen Sie uns einige der hier bereitgestellten Parameter verstehen

Min_count: Alle Wörter mit einer niedrigeren Gesamthäufigkeit werden ignoriert.

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

Arbeitskräfte: Dies sind die Threads zum Trainieren des Modells

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

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

Sg: Es handelt sich um einen Trainingsalgorithmus und 1 für Skip-Gramm und 0 für eine kontinuierliche Wortmenge. Wir haben diese in de besprochentails oben ein.

Hs: Wenn dies 1 ist, verwenden wir hierarchical softmax für das Training und wenn 0, wird negative Stichprobe verwendet.

Alpha: Anfängliche Lernrate

Lassen Sie uns den endgültigen Code unten anzeigen:

#list of libraries used by the code
import string
from gensim.models import Word2Vec
import logging
from nltk.corpus import stopwords
from textblob import Word
import json
import pandas as pd
#data in json format
json_file = 'intents.json'
with open('intents.json','r') as f:
    data = json.load(f)
#displaying the list of stopwords
stop = stopwords.words('english')
#dataframe
df = pd.DataFrame(data)

df['patterns'] = df['patterns'].apply(', '.join)
# print(df['patterns'])
#print(df['patterns'])
#cleaning the data using the NLP approach
print(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 list
bigger_list=[]
for i in df['patterns']:
    li = list(i.split(" "))
    bigger_list.append(li)
#structure of data to be taken by the model.word2vec
print("Data format for the overall list:",bigger_list)
#custom data is fed to machine for further processing
model = Word2Vec(bigger_list, min_count=1,size=300,workers=4)
#print(model)

Schritt 4) Modellspeicherung

Das Modell kann in Form eines Behälters 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. Das Modell wird in Form einer .bin-Datei gespeichert

Wir werden dieses Modell verwenden, um Echtzeittests durchzuführen, z. B. ähnliche Wörter, unterschiedliche Wörter und die häufigsten Wörter.

Schritt 5) Modell laden und Echtzeittests durchführen

Das Modell wird mit dem folgenden Code geladen:

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

Wenn Sie das Vokabular daraus ausdrucken möchten, können Sie den folgenden Befehl verwenden:

vocab = list(model.wv.vocab)

Bitte sehen Sie sich das Ergebnis an:

['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 ähnlichsten Wörter

Lassen Sie uns die Dinge praktisch umsetzen:

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

Bitte sehen Sie sich das Ergebnis an:

[('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) Entspricht keinem der angegebenen Wörter

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

Wir haben die Worte geliefert 'Wir sehen uns later, Danke für den Besuch'. Dies wird Drucken Sie die unterschiedlichsten Wörter aus diesen Wörtern aus. 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 gibt Aufschluss über die Wahrscheinlichkeit einer Ähnlichkeit zwischen zwei Wörtern. Bitte sehen Sie sich den folgenden Code an, um zu erfahren, 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 auch 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)] 

Zusammenfassung

  • Worteinbettung ist eine Art der Wortdarstellung, die es ermöglicht, Wörter mit ähnlicher Bedeutung durch maschinelles Lernen zu verstehen algorithms
  • Worteinbettung wird verwendet, um ähnliche Wörter zu berechnen, eine Gruppe verwandter Wörter zu erstellen, Funktion für die Textklassifizierung, Dokument clustering, Verarbeitung natürlicher Sprache
  • Word2vec erklärt: 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 Wörter mit unterschiedlicher Bedeutung weit entfernt liegen
  • Der Word2vec-Algorithmus verwendet 2 architectures Continuous Bag of Words (CBOW) und Skip-Gramm
  • CBOW ist um ein Vielfaches schneller als Skip Gram und bietet eine bessere Häufigkeit für häufige Wörter, während Skip Gram 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 gegebenen Reihe von Eingaben. In Word2vec. Softmax Layer (normalisierte Exponentialfunktion) ist die Ausgabeschichtfunktion, die jeden Knoten aktiviert oder auslöst. Word2vec verfügt auch über negative Stichproben
  • Gensim ist ein Toolkit zur Themenmodellierung, das in Python implementiert ist