Worteinbettung und Word2Vec-Modell mit Beispiel
Was ist Worteinbettung?
Word-Einbettung ist ein Wortdarstellungstyp, der es maschinellen Lernalgorithmen ermöglicht, Wörter mit ähnlicher Bedeutung zu verstehen. Es handelt sich um eine Sprachmodellierungs- und Merkmalslerntechnik, um Wörter mithilfe neuronaler Netzwerke, Wahrscheinlichkeitsmodelle oder Dimensionsreduktion auf der Wort-Ko-Auftretensmatrix in Vektoren reeller Zahlen abzubilden. Einige Worteinbettungsmodelle sind Word2vec (Google), Glove (Stanford) und fastest (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?
Worteinbettung hilft bei der Merkmalsgenerierung, Dokumentclusterung, Textklassifizierung und Verarbeitung natürlicher Sprache. Wir listen sie auf und diskutieren jede dieser Anwendungen.
- 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.
- Dokumenten-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.
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 stellt Wörter in einer Vektorraumdarstellung dar. 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 voneinander entfernt sind. Dies wird auch als semantische Beziehung bezeichnet. Neuronale Netzwerke verstehen keinen Text, sondern nur Zahlen. 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
from sklearn.feature_extraction.text import CountVectorizer vectorizer = CountVectorizer() data_corpus = ["guru99 is the best site for online tutorials. I love to visit guru99."] vocabulary = vectorizer.fit(data_corpus) X = vectorizer.transform(data_corpus) print(X.toarray()) print(vectorizer.get_feature_names_out())
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
- 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.
- Erstellen Sie das Objekt mit der Klasse CountVectorizer.
- Schreiben Sie die Daten in die Liste, die in den CountVectorizer eingepasst werden sollen.
- Die Daten werden in das aus der Klasse CountVectorizer erstellte Objekt eingepasst.
- 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.
- 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.
- 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
Word2vec verwendet zwei Architekturen:
- Kontinuierlicher Wortschatz (CBOW)
- Gramm überspringen
Bevor wir in diesem Word2vec-Tutorial weitermachen, wollen wir besprechen, warum diese Architekturen oder Modelle aus Sicht der Wortdarstellung wichtig sind. Das Erlernen der Wortdarstellung erfolgt im Wesentlichen unbeaufsichtigt, aber zum Trainieren des Modells werden Ziele/Beschriftungen benötigt. Skip-Gram und CBOW konvertieren die unbeaufsichtigte Darstellung in eine überwachte Form für das Modelltraining.
In CBOW wird das aktuelle Wort anhand des Fensters der umgebenden Kontextfenster vorhergesagt. Wenn beispielsweise 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-Gram zu wählen. Solche Parameter werden während des Trainings des Modells bereitgestellt. Es besteht die Möglichkeit, negatives Sampling oder eine hierarchische Softmax-Schicht zu verwenden.
Kontinuierliche Tasche von Wörtern
Lassen Sie uns ein einfaches Word2vec-Beispieldiagramm zeichnen, um die kontinuierliche Bag-of-Word-Architektur zu verstehen.
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 Eingangsvektors mit der Gewichtsmatrix. Dies lässt sich auch anhand der folgenden Gleichung nachvollziehen.
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.
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 wird zur Vorverarbeitung des Textes verwendet. Man kann verschiedene Operationen durchführen, wie z. B. Wortarten markieren, Lemmatisierung, Stemming, Stoppwörter entfernen, seltene Wörter oder am wenigsten verwendete Wörter entfernen. Es hilft beim Bereinigen des Textes und hilft beim Vorbereiten der Merkmale aus den effektiven Wörtern. Andererseits wird Word2vec für semantisches (eng verwandte Elemente) und syntaktisches (Sequenz-)Matching verwendet. Mit Word2vec kann man ähnliche Wörter, unähnliche Wörter, Dimensionsreduzierung und vieles mehr finden. Ein weiteres wichtiges Merkmal von Word2vec ist die Umwandlung der höherdimensionalen Darstellung des Textes in niederdimensionale Vektoren.
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 das Modell kann mit Word2vec erstellt werden. Es kann dann an den Echtzeitwörtern getestet werden. Lassen Sie uns die Kombination beider im folgenden Code betrachten. Bevor Sie weitermachen, sehen Sie sich bitte die von NLTK bereitgestellten Korpora an. Sie können sie mit dem Befehl herunterladen
nltk(nltk.download('all'))
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)
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
- Es wird die NLTK-Bibliothek importiert, von der aus Sie den ABC-Korpus herunterladen können, den wir im nächsten Schritt verwenden werden.
- 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.
- Importieren Sie den Korpus abc, der mit nltk.download('abc') heruntergeladen wurde.
- Übergeben Sie die Dateien an das Modell Word2vec, das mit Gensim als Sätze importiert wird.
- Der Wortschatz wird in Form der Variablen gespeichert.
- Das Modell wird anhand von Beispielwörtern „Wissenschaft“ getestet, da diese Dateien einen Bezug zur Wissenschaft haben.
- Hier wird vom Modell das ähnliche Wort „Wissenschaft“ vorhergesagt.
Aktivatoren und Word2Vec
Die Aktivierungsfunktion des Neurons definiert die Ausgabe dieses Neurons bei einer 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 Diagramms 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, ist die Ausgabe linear, aber die Funktionalität der linearen Funktion ist begrenzt. Um komplexe Funktionen wie Objekterkennung, Bildklassifizierung, Texteingabe per Sprache und viele andere nichtlineare Ausgaben zu erreichen, sind diese mit einer Aktivierungsfunktion möglich.
Wie die Aktivierungsschicht bei der Worteinbettung berechnet wird (Word2vec)
Softmax Layer (normalisierte Exponentialfunktion) ist die Ausgabeschichtfunktion, die jeden Knoten aktiviert oder auslöst. Ein anderer verwendeter Ansatz ist Hierarchical Softmax, bei dem die Komplexität mit O(log2V), wobei das Softmax O(V) ist, wobei V die Vokabulargröße ist. Der Unterschied zwischen diesen ist die Reduzierung der Komplexität in der hierarchischen Softmax-Schicht. Um die (hierarchische Softmax-)Funktionalität zu verstehen, sehen Sie sich bitte das folgende Beispiel für die Word-Einbettung an:
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 Hierarchical Softmax zur Verfügung?
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 aktivieren die Neuronen, genau wie unsere Neuronen durch externe Reize aktiviert werden. Die Softmax-Schicht ist eine der Ausgabeschichtfunktionen, die die Neuronen bei Wort-Embeddings aktiviert. In Word2vec haben wir Optionen wie hierarchisches Softmax und negatives Sampling. Mit Aktivatoren kann man die lineare Funktion in eine nichtlineare Funktion umwandeln und damit einen komplexen Algorithmus für maschinelles Lernen implementieren.
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, seine verschiedenen Architekturen, warum es eine Umstellung von einem Bag of Words auf Word2vec gibt, und die Beziehung zwischen Word2vec und NLTK mit Livecode 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 einen intelligenten Chatbot zu erstellen, 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“ sind die Antworten, die der Chatbot auf die entsprechende Frage/das entsprechende Muster gibt.
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:
- Da die Daten im JSON-Format vorliegen, wird JSON importiert
- Die Datei wird in der Variablen gespeichert
- 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. Zeichen wie Zahlen oder Punkte werden mithilfe eines regulären Ausdrucks entfernt.
5. Digits 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.
Produktgröß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 mit 1 für Skip-Gram und 0 für einen Continuous Bag of Words. Wir haben diese oben ausführlich besprochen.
Hs: Wenn dieser Wert 1 ist, verwenden wir hierarchisches Softmax für das Training, und wenn er 0 ist, wird negatives Sampling 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 „Bis später, danke für Ihren 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)]
Schlussfolgerung
- Word Embedding ist eine Art der Wortdarstellung, die es ermöglicht, Wörter mit ähnlicher Bedeutung von Algorithmen des maschinellen Lernens zu verstehen.
- Word Embedding wird verwendet, um ähnliche Wörter zu berechnen, eine Gruppe verwandter Wörter zu erstellen, Funktion zur Textklassifizierung, Dokumentclusterung, 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 zwei Architekturen: Continuous Bag of Words (CBOW) und Skip Gram
- 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